@@ 3,6 3,9 @@
?f<< /lib/endian.fs
?f<< /asm/label.fs
+\ RSP=rSP (r13)
+\ PSP=r10
+
: ,) ( op -- ) le, ;
0 const r0 1 const r1 2 const r2 3 const r3
@@ 72,5 75,7 @@ $e5000000 const str) $e5100000 const ldr)
: lret, ( -- ) mov) rPC rd) rLR rm) ,) ;
: push, ( r -- ) str) swap rd) rSP rn) 4 -i) pre) !) ,) ;
: pop, ( r -- ) ldr) swap rd) rSP rn) 4 +i) post) ,) ;
+: ppush, ( r -- ) str) swap rd) r10 rn) 4 -i) pre) !) ,) ;
+: ppop, ( r -- ) ldr) swap rd) r10 rn) 4 +i) post) ,) ;
: call, ( rel -- ) rLR push, 4 - bl) ,) rLR pop, ;
: abscall, ( tgt -- ) abs>rel call, ;
@@ 29,31 29,39 @@ $8000 to binstart
0 align4 here to org
forward b) ,)
pc to lblmsg 12 c, ," Hello World!" 0 align4
-pc to lblemit \ r0=char
+pc to lblemit ( c -- )
ldr) r3 rd) r7 rn) UART0_FR +i) ,)
tst) r3 rn) $20 i) ,)
lblemit abs>rel b) ne) ,)
+ r0 ppop,
str) r0 rd) r7 rn) UART0_DR +i) ,)
lret,
-pc to lblkey \ r0=char
+pc to lblkey ( -- c )
ldr) r3 rd) r7 rn) UART0_FR +i) ,)
tst) r3 rn) $10 i) ,)
lblkey abs>rel b) ne) ,)
ldr) r0 rd) r7 rn) UART0_DR +i) 8b) ,)
+ r0 ppush,
lret,
-pc to lblrtype \ r1=addr r2=len
- ldr) r0 rd) r1 rn) 8b) 1 +i) post) ,)
- lblemit abscall,
- sub) r2 rd) r2 rn) 1 i) f) ,)
- lblrtype abs>rel b) ne) ,)
+pc to lblrtype ( a u -- )
+ r2 ppop, r1 ppop,
+ pc
+ ldr) r0 rd) r1 rn) 8b) 1 +i) post) ,)
+ r0 ppush,
+ lblemit abscall,
+ sub) r2 rd) r2 rn) 1 i) f) ,)
+ ( pc ) abs>rel b) ne) ,)
lret,
-pc to lblstype \ r1=str
+pc to lblstype ( str -- )
+ r1 ppop,
ldr) r2 rd) r1 rn) 8b) 1 +i) post) ,)
+ r1 ppush, r2 ppush,
lblrtype abs>rel b) ,)
pc to lblword \ str in CURWORD
pc
lblkey abscall,
+ r0 ppop,
cmp) r0 rn) SPC i) ,)
( pc ) abs>rel b) ls) ,) \ r0=first non-ws
mov) r2 rd) 0 i) ,)
@@ 62,6 70,7 @@ pc to lblword \ str in CURWORD
add) r2 rd) r2 rn) 1 i) ,)
str) r0 rd) r1 rn) 8b) 1 +i) pre) !) ,)
lblkey abscall,
+ r0 ppop,
cmp) r0 rn) SPC i) ,)
( pc ) abs>rel b) hi) ,)
mov) r1 rd) CURWORD i) ,)
@@ 69,7 78,8 @@ pc to lblword \ str in CURWORD
lret,
forward!
-mov) rSP rd) binstart i) ,)
+mov) rSP rd) binstart i) ,) \ RSP
+sub) r10 rd) rSP rn) $1000 i) ,) \ PSP
mov) r9 rd) MMIO_BASE i) ,) \ r9 = MMIO_BASE
add) r8 rd) r9 rn) GPIO_BASE i) ,) \ r8 = GPIO_BASE
add) r7 rd) r8 rn) UART0_BASE i) ,) \ r7 = UART0_BASE
@@ 107,10 117,12 @@ str) r1 rd) r7 rn) UART0_CR +i) ,)
mov) r1 rd) binstart i) ,)
add) r1 rd) r1 rn) lblmsg binstart - i) ,)
+r1 ppush,
lblstype abs>rel bl) ,)
pc
lblword abs>rel bl) ,)
mov) r1 rd) CURWORD i) ,)
+ r1 ppush,
lblstype abs>rel bl) ,)
abs>rel b) ,)