@@ 66,3 66,11 @@ $e5000000 const str) $e5100000 const ldr)
: forward! ( jmpaddr -- )
here over - _rel>off over le@ $ff000000 and or swap le! ;
+
+\ Macros
+
+: 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) ,) ;
+: call, ( rel -- ) rLR push, 4 - bl) ,) rLR pop, ;
+: abscall, ( tgt -- ) abs>rel call, ;
@@ 20,24 20,30 @@ $44 const UART0_ICR
pc sub) r0 rd) r0 rn) 1 i) f) ,) ( pc ) abs>rel b) ne) ,) ;
: values ( n -- ) for 0 value next ;
-3 values lblemit lblkey lblmsg
+4 values lblemit lblkey lblrtype lblmsg
$8000 to binstart
0 align4 here to org
forward b) ,)
-pc to lblmsg ," Hello World!\0" 0 align4
+pc to lblmsg ," Hello World!" 0 align4
pc to lblemit \ r0=char
- ldr) r1 rd) r7 rn) UART0_FR +i) ,)
- tst) r1 rn) $20 i) f) ,)
+ ldr) r3 rd) r7 rn) UART0_FR +i) ,)
+ tst) r3 rn) $20 i) f) ,)
lblemit abs>rel b) ne) ,)
str) r0 rd) r7 rn) UART0_DR +i) ,)
- mov) rPC rd) rLR rm) ,)
+ lret,
pc to lblkey \ r0=char
- ldr) r1 rd) r7 rn) UART0_FR +i) ,)
- tst) r1 rn) $10 i) f) ,)
+ ldr) r3 rd) r7 rn) UART0_FR +i) ,)
+ tst) r3 rn) $10 i) f) ,)
lblkey abs>rel b) ne) ,)
ldr) r0 rd) r7 rn) UART0_DR +i) 8b) ,)
- mov) rPC rd) rLR rm) ,)
+ 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) ,)
+ lret,
forward!
mov) rSP rd) binstart i) ,)
mov) r9 rd) MMIO_BASE i) ,) \ r9 = MMIO_BASE
@@ 75,14 81,10 @@ str) r1 rd) r7 rn) UART0_IMSC +i) ,)
mov) r1 rd) $300 i) ,) add) r1 rd) r1 rn) $01 i) ,)
str) r1 rd) r7 rn) UART0_CR +i) ,)
-mov) r6 rd) binstart i) ,)
-add) r6 rd) r6 rn) lblmsg binstart - i) ,)
-ldr) r0 rd) r6 rn) 8b) 1 +i) post) ,)
-pc
- lblemit abs>rel bl) ,)
- ldr) r0 rd) r6 rn) 8b) 1 +i) post) ,)
- teq) r0 rn) 0 i) f) ,)
- abs>rel b) ne) ,)
+mov) r1 rd) binstart i) ,)
+add) r1 rd) r1 rn) lblmsg binstart - i) ,)
+mov) r2 rd) 12 i) ,)
+lblrtype abs>rel bl) ,)
pc
lblkey abs>rel bl) ,)