~vdupras/duskos

2fc31b6c3c82f0f631dfd0056f9fc996c5757355 — Virgil Dupras 6 days ago 327897c
rpi: add "rtype" routine
2 files changed, 26 insertions(+), 16 deletions(-)

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

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