Fix comment spacing and added Return stack operations

This commit is contained in:
Jeremiah Orians 2016-10-29 14:26:00 -04:00
parent 968f5852bf
commit eea718599e
No known key found for this signature in database
GPG Key ID: 7457821534D2ACCD
1 changed files with 336 additions and 291 deletions

View File

@ -195,10 +195,10 @@
&Add_Entry ; Pointer to + &Add_Entry ; Pointer to +
&Sub_Text ; Pointer to Name &Sub_Text ; Pointer to Name
NOP ; Flags NOP ; Flags
POPR R0 R14 POPR R0 R14 ; Get top of stack
POPR R1 R14 POPR R1 R14 ; Get second item on Stack
SUB R0 R0 R1 SUB R0 R0 R1 ; Perform the subtraction
PUSHR R0 R14 PUSHR R0 R14 ; Store the result
JSR_COROUTINE R11 ; NEXT JSR_COROUTINE R11 ; NEXT
;; MUL ;; MUL
@ -208,10 +208,10 @@
&Sub_Entry ; Pointer to - &Sub_Entry ; Pointer to -
&MUL_Text ; Pointer to Name &MUL_Text ; Pointer to Name
NOP ; Flags NOP ; Flags
POPR R0 R14 POPR R0 R14 ; Get top of stack
POPR R1 R14 POPR R1 R14 ; Get second item on Stack
MUL R0 R0 R1 MUL R0 R0 R1 ; Perform the multiplication and keep bottom half
PUSHR R0 R14 PUSHR R0 R14 ; Store the result
JSR_COROUTINE R11 ; NEXT JSR_COROUTINE R11 ; NEXT
;; MULH ;; MULH
@ -221,10 +221,10 @@
&MUL_Entry ; Pointer to * &MUL_Entry ; Pointer to *
&MULH_Text ; Pointer to Name &MULH_Text ; Pointer to Name
NOP ; Flags NOP ; Flags
POPR R0 R14 POPR R0 R14 ; Get top of stack
POPR R1 R14 POPR R1 R14 ; Get second item on Stack
MULH R0 R0 R1 MULH R0 R0 R1 ; Perform multiplcation and keep top half
PUSHR R0 R14 PUSHR R0 R14 ; Store the result
JSR_COROUTINE R11 ; NEXT JSR_COROUTINE R11 ; NEXT
;; / ;; /
@ -234,10 +234,10 @@
&MULH_Entry ; Pointer to MULH &MULH_Entry ; Pointer to MULH
&DIV_Text ; Pointer to Name &DIV_Text ; Pointer to Name
NOP ; Flags NOP ; Flags
POPR R0 R14 POPR R0 R14 ; Get top of stack
POPR R1 R14 POPR R1 R14 ; Get second item on Stack
DIV R0 R0 R1 DIV R0 R0 R1 ; Perform division and keep top half
PUSHR R0 R14 PUSHR R0 R14 ; Store the result
JSR_COROUTINE R11 ; NEXT JSR_COROUTINE R11 ; NEXT
;; % ;; %
@ -247,10 +247,10 @@
&DIV_Entry ; Pointer to / &DIV_Entry ; Pointer to /
&MOD_Text ; Pointer to Name &MOD_Text ; Pointer to Name
NOP ; Flags NOP ; Flags
POPR R0 R14 POPR R0 R14 ; Get top of stack
POPR R1 R14 POPR R1 R14 ; Get second item on Stack
MOD R0 R0 R1 MOD R0 R0 R1 ; Perform division and keep remainder
PUSHR R0 R14 PUSHR R0 R14 ; Store the result
JSR_COROUTINE R11 ; NEXT JSR_COROUTINE R11 ; NEXT
;; = ;; =
@ -260,12 +260,12 @@
&MOD_Entry ; Pointer to % &MOD_Entry ; Pointer to %
&Equal_Text ; Pointer to Name &Equal_Text ; Pointer to Name
NOP ; Flags NOP ; Flags
POPR R1 R14 POPR R1 R14 ; Get top of stack
POPR R2 R14 POPR R2 R14 ; Get second item on Stack
FALSE R0 ; Assume comparision is True FALSE R0 ; Assume comparision is True
CMPSKIP.E R1 R2 ; Check if they are equal and skip if they are CMPSKIP.E R1 R2 ; Check if they are equal and skip if they are
TRUE R0 ; Looks like our assumption was wrong TRUE R0 ; Looks like our assumption was wrong
PUSHR R0 R14 PUSHR R0 R14 ; Store the result
JSR_COROUTINE R11 ; NEXT JSR_COROUTINE R11 ; NEXT
;; != ;; !=
@ -275,12 +275,12 @@
&Equal_Entry ; Pointer to = &Equal_Entry ; Pointer to =
&NEqual_Text ; Pointer to Name &NEqual_Text ; Pointer to Name
NOP ; Flags NOP ; Flags
POPR R1 R14 POPR R1 R14 ; Get top of stack
POPR R2 R14 POPR R2 R14 ; Get second item on Stack
FALSE R0 ; Assume comparision is True FALSE R0 ; Assume comparision is True
CMPSKIP.NE R1 R2 ; Check if they are not equal and skip if they are CMPSKIP.NE R1 R2 ; Check if they are not equal and skip if they are
TRUE R0 ; Looks like our assumption was wrong TRUE R0 ; Looks like our assumption was wrong
PUSHR R0 R14 PUSHR R0 R14 ; Store the result
JSR_COROUTINE R11 ; NEXT JSR_COROUTINE R11 ; NEXT
;; < ;; <
@ -290,12 +290,12 @@
&NEqual_Entry ; Pointer to != &NEqual_Entry ; Pointer to !=
&Less_Text ; Pointer to Name &Less_Text ; Pointer to Name
NOP ; Flags NOP ; Flags
POPR R1 R14 POPR R1 R14 ; Get top of stack
POPR R2 R14 POPR R2 R14 ; Get second item on Stack
FALSE R0 ; Assume comparision is True FALSE R0 ; Assume comparision is True
CMPSKIP.L R1 R2 ; Check if less than and skip if they are CMPSKIP.L R1 R2 ; Check if less than and skip if they are
TRUE R0 ; Looks like our assumption was wrong TRUE R0 ; Looks like our assumption was wrong
PUSHR R0 R14 PUSHR R0 R14 ; Store the result
JSR_COROUTINE R11 ; NEXT JSR_COROUTINE R11 ; NEXT
;; <= ;; <=
@ -305,12 +305,12 @@
&Less_Entry ; Pointer to < &Less_Entry ; Pointer to <
&LEqual_Text ; Pointer to Name &LEqual_Text ; Pointer to Name
NOP ; Flags NOP ; Flags
POPR R1 R14 POPR R1 R14 ; Get top of stack
POPR R2 R14 POPR R2 R14 ; Get second item on Stack
FALSE R0 ; Assume comparision is True FALSE R0 ; Assume comparision is True
CMPSKIP.LE R1 R2 ; Check if they are less than or equal and skip if they are CMPSKIP.LE R1 R2 ; Check if they are less than or equal and skip if they are
TRUE R0 ; Looks like our assumption was wrong TRUE R0 ; Looks like our assumption was wrong
PUSHR R0 R14 PUSHR R0 R14 ; Store the result
JSR_COROUTINE R11 ; NEXT JSR_COROUTINE R11 ; NEXT
;; > ;; >
@ -320,12 +320,12 @@
&LEqual_Entry ; Pointer to <= &LEqual_Entry ; Pointer to <=
&Greater_Text ; Pointer to Name &Greater_Text ; Pointer to Name
NOP ; Flags NOP ; Flags
POPR R1 R14 POPR R1 R14 ; Get top of stack
POPR R2 R14 POPR R2 R14 ; Get second item on Stack
FALSE R0 ; Assume comparision is True FALSE R0 ; Assume comparision is True
CMPSKIP.G R1 R2 ; Check if greater and skip if they are CMPSKIP.G R1 R2 ; Check if greater and skip if they are
TRUE R0 ; Looks like our assumption was wrong TRUE R0 ; Looks like our assumption was wrong
PUSHR R0 R14 PUSHR R0 R14 ; Store the result
JSR_COROUTINE R11 ; NEXT JSR_COROUTINE R11 ; NEXT
;; >= ;; >=
@ -335,12 +335,12 @@
&Greater_Entry ; Pointer to > &Greater_Entry ; Pointer to >
&GEqual_Text ; Pointer to Name &GEqual_Text ; Pointer to Name
NOP ; Flags NOP ; Flags
POPR R1 R14 POPR R1 R14 ; Get top of stack
POPR R2 R14 POPR R2 R14 ; Get second item on Stack
FALSE R0 ; Assume comparision is True FALSE R0 ; Assume comparision is True
CMPSKIP.GE R1 R2 ; Check if they are equal and skip if they are CMPSKIP.GE R1 R2 ; Check if they are equal and skip if they are
TRUE R0 ; Looks like our assumption was wrong TRUE R0 ; Looks like our assumption was wrong
PUSHR R0 R14 PUSHR R0 R14 ; Store the result
JSR_COROUTINE R11 ; NEXT JSR_COROUTINE R11 ; NEXT
;; AND ;; AND
@ -350,10 +350,10 @@
&GEqual_Entry ; Pointer to >= &GEqual_Entry ; Pointer to >=
&AND_Text ; Pointer to Name &AND_Text ; Pointer to Name
NOP ; Flags NOP ; Flags
POPR R0 R14 POPR R0 R14 ; Get top of stack
POPR R1 R14 POPR R1 R14 ; Get second item on Stack
AND R0 R0 R1 AND R0 R0 R1 ; Perform AND
PUSHR R0 R14 PUSHR R0 R14 ; Store the result
JSR_COROUTINE R11 ; NEXT JSR_COROUTINE R11 ; NEXT
;; OR ;; OR
@ -363,10 +363,10 @@
&AND_Entry ; Pointer to AND &AND_Entry ; Pointer to AND
&OR_Text ; Pointer to Name &OR_Text ; Pointer to Name
NOP ; Flags NOP ; Flags
POPR R0 R14 POPR R0 R14 ; Get top of stack
POPR R1 R14 POPR R1 R14 ; Get second item on Stack
OR R0 R0 R1 OR R0 R0 R1 ; Perform OR
PUSHR R0 R14 PUSHR R0 R14 ; Store the result
JSR_COROUTINE R11 ; NEXT JSR_COROUTINE R11 ; NEXT
;; XOR ;; XOR
@ -376,10 +376,10 @@
&OR_Entry ; Pointer to OR &OR_Entry ; Pointer to OR
&XOR_Text ; Pointer to Name &XOR_Text ; Pointer to Name
NOP ; Flags NOP ; Flags
POPR R0 R14 POPR R0 R14 ; Get top of stack
POPR R1 R14 POPR R1 R14 ; Get second item on Stack
XOR R0 R0 R1 XOR R0 R0 R1 ; Perform XOR
PUSHR R0 R14 PUSHR R0 R14 ; Store the result
JSR_COROUTINE R11 ; NEXT JSR_COROUTINE R11 ; NEXT
;; NOT ;; NOT
@ -389,9 +389,9 @@
&XOR_Entry ; Pointer to XOR &XOR_Entry ; Pointer to XOR
&NOT_Text ; Pointer to Name &NOT_Text ; Pointer to Name
NOP ; Flags NOP ; Flags
POPR R0 R14 POPR R0 R14 ; Get top of stack
NOT R0 R0 NOT R0 R0 ; Bit flip it
PUSHR R0 R14 PUSHR R0 R14 ; Store it back onto stack
JSR_COROUTINE R11 ; NEXT JSR_COROUTINE R11 ; NEXT
;; LIT ;; LIT
@ -495,6 +495,7 @@
POPR R1 R14 ; Where to put the result POPR R1 R14 ; Where to put the result
POPR R2 R14 ; Where it is coming from POPR R2 R14 ; Where it is coming from
FALSE R4 ; Prepare for Zeroing FALSE R4 ; Prepare for Zeroing
:Cmove_Main :Cmove_Main
CMPSKIPI.GE R0 4 ; Loop if we have 4 or more bytes to move CMPSKIPI.GE R0 4 ; Loop if we have 4 or more bytes to move
JUMP @Cmove_Slow ; Otherwise slowly move bytes JUMP @Cmove_Slow ; Otherwise slowly move bytes
@ -546,11 +547,55 @@
:Here_Text :Here_Text
"HERE" "HERE"
:Here_Entry :Here_Entry
&Latest_Entry ; Pointer to &Latest_Entry ; Pointer to LATEST
&Here_Text ; Pointer to Name &Here_Text ; Pointer to Name
NOP ; Flags NOP ; Flags
PUSHR R8 R14 ; Put HERE onto stack PUSHR R8 R14 ; Put HERE onto stack
JSR_COROUTINE R11 ; NEXT JSR_COROUTINE R11 ; NEXT
;; Return Stack functions
;; >R
:TOR_Text
">R"
:TOR_Entry
&Here_Entry ; Pointer to HERE
&TOR_Text ; Pointer to Name
NOP ; Flags
POPR R0 R14 ; Get top of Parameter stack
PUSHR R0 R15 ; Shove it onto return stack
JSR_COROUTINE R11 ; NEXT
;; R>
:FROMR_Text
"R>"
:FROMR_Entry
&TOR_Entry ; Pointer to >R
&FROMR_Text ; Pointer to Name
NOP ; Flags
POPR R0 R15 ; Get top of Return stack
PUSHR R0 R14 ; Shove it onto parameter stack
JSR_COROUTINE R11 ; NEXT
;; RSP@
:RSPFetch_Text
"RSP@"
:RSPFetch_Entry
&FROMR_Entry ; Pointer to R>
&RSPFetch_Text ; Pointer to Name
NOP ; Flags
PUSHR R14 R15 ; Push Return stack pointer onto Parameter stack
JSR_COROUTINE R11 ; NEXT
;; RSP!
:RSPStore_Text
"RSP!"
:RSPStore_Entry
&RSPFetch_Entry ; Pointer to RSP@
&ore_Text ; Pointer to Name
NOP ; Flags
POPR R15 R14 ; Replace Return stack pointer from parameter stack
JSR_COROUTINE R11 ; NEXT
:cold_start :cold_start
;; ;;