~vdupras/duskos

bfeb3b8b15e87ab02198d1cb464a4469c8e3257c — Virgil Dupras 6 days ago 66d0b20
rpi: assign r10 to PSP and "forthify" all routines
2 files changed, 26 insertions(+), 9 deletions(-)

M fs/asm/arm.fs
M fs/xcomp/arm/rpi/kernel.fs
M fs/asm/arm.fs => fs/asm/arm.fs +5 -0
@@ 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, ;

M fs/xcomp/arm/rpi/kernel.fs => fs/xcomp/arm/rpi/kernel.fs +21 -9
@@ 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) ,)