Added Tape write and HALT instructions to forth interpreter
This commit is contained in:
parent
35cc5d3dc6
commit
5ed87d81af
|
@ -36,6 +36,8 @@
|
||||||
FALSE R10 ; Current state is Interpreting
|
FALSE R10 ; Current state is Interpreting
|
||||||
LOADUI R9 $Interpret_Entry ; Get Address of last defined function
|
LOADUI R9 $Interpret_Entry ; Get Address of last defined function
|
||||||
LOADUI R8 $HEAP ; Get Address of HEAP
|
LOADUI R8 $HEAP ; Get Address of HEAP
|
||||||
|
LOADUI R0 0x1101 ; Need number to engage tape_02
|
||||||
|
FOPEN_WRITE ; Load Tape_01 for Writing
|
||||||
LOADUI R0 0x1100 ; Need number to engage tape_01
|
LOADUI R0 0x1100 ; Need number to engage tape_01
|
||||||
FOPEN_READ ; Load Tape_01 for Reading
|
FOPEN_READ ; Load Tape_01 for Reading
|
||||||
MOVE R7 R0 ; Make Tape_01 Default IO
|
MOVE R7 R0 ; Make Tape_01 Default IO
|
||||||
|
@ -55,16 +57,26 @@
|
||||||
:PARAMETER_BASE
|
:PARAMETER_BASE
|
||||||
'00060000'
|
'00060000'
|
||||||
|
|
||||||
|
;; The last function you'll ever need to run
|
||||||
|
;; HALT
|
||||||
|
:HALT_Text
|
||||||
|
"HALT"
|
||||||
|
:HALT_Entry
|
||||||
|
NOP ; No previous link elements
|
||||||
|
&HALT_Text ; Pointer to name
|
||||||
|
NOP ; Flags
|
||||||
|
&final_Cleanup ; Where the assembly is
|
||||||
|
|
||||||
;; EXIT function
|
;; EXIT function
|
||||||
;; Pops Return stack
|
;; Pops Return stack
|
||||||
;; And jumps to NEXT
|
;; And jumps to NEXT
|
||||||
:EXIT_Text
|
:EXIT_Text
|
||||||
"EXIT"
|
"EXIT"
|
||||||
:EXIT_Entry
|
:EXIT_Entry
|
||||||
NOP ; No previous link elements
|
&HALT_Entry ; Pointer to HALT
|
||||||
&EXIT_Text ; Pointer to name
|
&EXIT_Text ; Pointer to name
|
||||||
NOP ; Flags
|
NOP ; Flags
|
||||||
&EXIT_Code
|
&EXIT_Code ; Where the assembly is
|
||||||
:EXIT_Code
|
:EXIT_Code
|
||||||
POPR R13 R15
|
POPR R13 R15
|
||||||
|
|
||||||
|
@ -790,7 +802,23 @@
|
||||||
:Emit_Code
|
:Emit_Code
|
||||||
POPR R0 R14 ; Get value off the parameter stack
|
POPR R0 R14 ; Get value off the parameter stack
|
||||||
ANDI R0 R0 0xFF ; Ensure only bottom Byte
|
ANDI R0 R0 0xFF ; Ensure only bottom Byte
|
||||||
COPY R1 R7 ; Using designated IO
|
FALSE R1 ; Write out only to TTY
|
||||||
|
FPUTC ; Write out the byte
|
||||||
|
JSR_COROUTINE R11 ; NEXT
|
||||||
|
|
||||||
|
|
||||||
|
;; WRITE8
|
||||||
|
:WRITE8_Text
|
||||||
|
"WRITE8"
|
||||||
|
:WRITE8_Entry
|
||||||
|
&Emit_Entry ; Pointer to EMIT
|
||||||
|
&WRITE8_Text ; Pointer to Name
|
||||||
|
NOP ; Flags
|
||||||
|
&WRITE8_Code ; Where assembly is Stored
|
||||||
|
:WRITE8_Code
|
||||||
|
POPR R0 R14 ; Get value off the parameter stack
|
||||||
|
ANDI R0 R0 0xFF ; Ensure only bottom Byte
|
||||||
|
LOADUI R1 0x1101 ; Write out only to TAPE_02
|
||||||
FPUTC ; Write out the byte
|
FPUTC ; Write out the byte
|
||||||
JSR_COROUTINE R11 ; NEXT
|
JSR_COROUTINE R11 ; NEXT
|
||||||
|
|
||||||
|
@ -798,7 +826,7 @@
|
||||||
:Word_Text
|
:Word_Text
|
||||||
"WORD"
|
"WORD"
|
||||||
:Word_Entry
|
:Word_Entry
|
||||||
&Emit_Entry ; Pointer to Emit
|
&WRITE8_Entry ; Pointer to WRITE8
|
||||||
&Word_Text ; Pointer to Name
|
&Word_Text ; Pointer to Name
|
||||||
NOP ; Flags
|
NOP ; Flags
|
||||||
&Word_Code ; Where assembly is Stored
|
&Word_Code ; Where assembly is Stored
|
||||||
|
@ -1233,12 +1261,23 @@
|
||||||
:cold_done
|
:cold_done
|
||||||
;; IF TTY Recieves EOF call it quits
|
;; IF TTY Recieves EOF call it quits
|
||||||
CMPSKIPI.NE R7 0 ; Check if TTY
|
CMPSKIPI.NE R7 0 ; Check if TTY
|
||||||
HALT ; User is done
|
JUMP @final_Cleanup ; Clean up and call it a day
|
||||||
|
|
||||||
;; Prep TTY
|
;; Prep TTY
|
||||||
FALSE R7 ; Set TTY ID
|
FALSE R7 ; Set TTY ID
|
||||||
LOADUI R13 $Cold_Start ; Prepare to return to QUIT LOOP
|
LOADUI R13 $Cold_Start ; Prepare to return to QUIT LOOP
|
||||||
JSR_COROUTINE R11 ; NEXT
|
JSR_COROUTINE R11 ; NEXT
|
||||||
|
|
||||||
|
;; Clean up
|
||||||
|
;; Cleans up everything before HALTING
|
||||||
|
;; Don't try to make it a forth primative
|
||||||
|
;; It only has 1 use
|
||||||
|
:final_Cleanup
|
||||||
|
LOADUI R0 0x1101 ; Need number to disengage tape_02
|
||||||
|
FCLOSE ; unload Tape_01
|
||||||
|
LOADUI R0 0x1100 ; Need number to disengage tape_01
|
||||||
|
FCLOSE ; unload Tape_01
|
||||||
|
HALT ; User is done
|
||||||
|
|
||||||
;; Where our HEAP Starts
|
;; Where our HEAP Starts
|
||||||
:HEAP
|
:HEAP
|
||||||
|
|
Loading…
Reference in New Issue