~vdupras/duskos

c3db936714a0f3d7df5bbff7a5a5715e81049f14 — Virgil Dupras 3 months ago d30ff26
rpi: add W+n, A+n, and W<>A,

This brings us up to !+ in bootlo. It can be checked with something like
"$12345678 HERE ! HERE c@+ drop c@+ drop c@+ drop c@+" with QEMU monitor checks
in between steps.
2 files changed, 27 insertions(+), 4 deletions(-)

M fs/xcomp/arm/rpi/kernel.fs
M fs/xcomp/rpiboot.fs
M fs/xcomp/arm/rpi/kernel.fs => fs/xcomp/arm/rpi/kernel.fs +16 -0
@@ 452,6 452,14 @@ pc add) rPSP rdn) 0 i) ,)
xcode ps+, ( n -- )
  ( pc ) r0 pc@>reg, lblimmwr abs>rel b) ,)

pc add) rTOP rdn) 0 i) ,)
xcode W+n, ( n -- )
  ( pc ) r0 pc@>reg, lblimmwr abs>rel b) ,)

pc add) rA rdn) 0 i) ,)
xcode A+n, ( n -- )
  ( pc ) r0 pc@>reg, lblimmwr abs>rel b) ,)

pc mov) rTOP rd) 0 i) ,)
xcode LIT>W, ( n -- )
  ( pc ) r0 pc@>reg, L1 abs>rel b) ,)


@@ 460,6 468,14 @@ pc mov) rA rd) rTOP rm) ,)
xcode W>A, ( -- )
  ( pc ) r0 pc@>reg, lbldwrite abs>rel b) ,)

pc eor) rTOP rdn) rA rm) ,)
   eor) rA rdn) rTOP rm) ,)
   eor) rTOP rdn) rA rm) ,)
xcode W<>A, ( -- )
  ( pc ) r0 pc>reg,
  mov) r1 rd) 12 i) ,)
  lblwriterange abs>rel b) ,)

\ operand is 16b
pc to L2 ( operand -- ) \ r0=base instr r1=off
  orr) r0 rdn) $b0 i) ,) \ make into a ldrh/strh op

M fs/xcomp/rpiboot.fs => fs/xcomp/rpiboot.fs +11 -4
@@ 33,10 33,17 @@ code 1-! -1 W) [+n], drop, exit,
code16b -1 W) 16b) [+n], drop, exit,
code8b -1 W) 8b) [+n], drop, exit,
code @! W>A, drop, A) @!, exit,
code16b HERE @ W>A, drop, A) 16b) @!, exit,
code8b HERE @ W>A, drop, A) 8b) @!, exit,
code c@! branch, drop
code w@! branch, drop
code16b W>A, drop, A) 16b) @!, exit,
code8b W>A, drop, A) 8b) @!, exit,
code @+ W>A, A) @, W<>A, 4 W+n, dup, W<>A, exit,
code16b W>A, A) 16b) @, W<>A, 2 W+n, dup, W<>A, exit,
code8b HERE @ W>A, A) 8b) @, W<>A, 1 W+n, dup, W<>A, exit,
code c@+ branch, drop

code !+ W>A, drop, A) !, W<>A, 4 W+n, exit,
code16b W>A, drop, A) 16b) !, W<>A, 2 W+n, exit,
code8b HERE @ W>A, drop, A) 8b) !, W<>A, 1 W+n, exit,
code c!+ branch, drop

uartinit prompt interactive!