duskos

dusk os fork
git clone git://git.alexwennerberg.com/duskos
Log | Files | Refs | README | LICENSE

commit de37aeb059d84a3d1c7133e9c9cd87f4b9500ed4
parent 9ed028ebcb746633f76fc1d4d835523ec2c8d390
Author: Virgil Dupras <hsoft@hardcoded.net>
Date:   Sun, 28 May 2023 09:13:42 -0400

rpi: add parse

Diffstat:
Mfs/xcomp/arm/rpi/kernel.fs | 90++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------
1 file changed, 82 insertions(+), 8 deletions(-)

diff --git a/fs/xcomp/arm/rpi/kernel.fs b/fs/xcomp/arm/rpi/kernel.fs @@ -86,6 +86,83 @@ xcode abort xcode bye 0 b) ,) +pc to L1 \ fail + mov) rTOP rd) 0 i) ,) + lret, + +\ parse char +pc to L2 \ rTOP=a-with-'-skipped r0=u + cmp) r0 rn) 3 i) ,) + L1 abs>rel b) ne) ,) + ldr) r0 rd) rTOP rn) ,) + and) r1 rd) r0 rn) $ff00 i) ,) + cmp) r1 rn) $2700 i) ,) \ ' char + L1 abs>rel b) ne) ,) + and) r0 rdn) $ff i) ,) + r0 ppush, + mov) rTOP rd) 1 i) ,) + lret, + +\ parse hexadecimal +pc to L3 \ rTOP=a-with-$-skipped r0=u + cmp) r0 rn) 2 i) ,) + L1 abs>rel b) lo) ,) + sub) r0 rdn) 1 i) ,) \ skip $ + mov) r2 rd) 0 i) ,) \ accumulated result +pc \ loop + ldr) r1 rd) rTOP rn) 8b) 1 +i) post) ,) + orr) r1 rdn) $20 i) ,) + sub) r1 rdn) '0' i) f) ,) + L1 abs>rel b) lo) ,) + cmp) r1 rn) 10 i) ,) + forward b) lo) ,) to L4 \ parse ok, under 10 + sub) r1 rdn) 'a' '0' - i) f) ,) + L1 abs>rel b) lo) ,) + add) r1 rdn) 10 i) ,) + cmp) r1 rn) 16 i) ,) + L1 abs>rel b) hs) ,) +L4 forward! \ parse ok + add) r2 rd) r1 rn) r2 rm) 4 lsl) ,) \ r2 = r2*16 + r1 + sub) r0 rdn) 1 i) f) ,) + ( loop ) abs>rel b) nz) ,) + r2 ppush, + mov) rTOP rd) 1 i) ,) + lret, + +\ parse unsigned decimal +pc to L4 \ rTOP=a+1 r1=first-char r0=u + mov) r4 rd) r1 rm) ,) \ for '-' check + cmp) r1 rn) '-' i) ,) + ldr) z) r1 rd) rTOP rn) 8b) 1 +i) post) ,) + sub) z) r0 rdn) 1 i) f) ,) + L1 abs>rel b) z) ,) \ '-' only? can't parse + mov) r2 rd) 0 i) ,) \ accumulated result + mov) r3 rd) 10 i) ,) \ const for mul) +pc \ loop + sub) r1 rdn) '0' i) f) ,) + L1 abs>rel b) lo) ,) + cmp) r1 rn) 10 i) ,) + L1 abs>rel b) hs) ,) + mul) r2 rd) r3 rm) r2 rs) r1 acc) ,) + ldr) r1 rd) rTOP rn) 8b) 1 +i) post) ,) + sub) r0 rdn) 1 i) f) ,) + ( loop ) abs>rel b) nz) ,) + cmp) r4 rn) '-' i) ,) + rsb) z) r2 rdn) 0 i) ,) \ negate + r2 ppush, + mov) rTOP rd) 1 i) ,) + lret, + +xcode parse ( str -- n? f ) + ldr) r0 rd) rTOP rn) 8b) 1 +i) post) ,) \ rTOP=a r0=u + ldr) r1 rd) rTOP rn) 8b) 1 +i) post) ,) + cmp) r1 rn) ''' i) ,) + L2 abs>rel b) eq) ,) + cmp) r1 rn) '$' i) ,) + L3 abs>rel b) eq) ,) + mov) r2 rd) r1 rm) ,) + L4 abs>rel b) ,) + xcode emit ( c -- ) pc ldr) r3 rd) r7 rn) UART0_FR +i) ,) @@ -198,14 +275,6 @@ xcode bar ( pc ) rTOP pc>reg, wjmp, stype -xcode 42 - xdup, mov) rTOP rd) 42 i) ,) - lret, - -xcode -12 - xdup, mov) rTOP rd) 0 i) ,) sub) rTOP rdn) 12 i) ,) - lret, - 8 allot0 pc to lblsysdict 0 le, lblsysdict xaddr sysdict @@ -397,6 +466,7 @@ xcode ; ximm wjmp, [ pc to L2 ( str -- w ) \ find in sys dict + wcall, curword wcall, sysdict wcall, find teq) rTOP rn) 0 i) ,) @@ -416,6 +486,10 @@ xcode runword ( str -- ) cmp) rTOP rn) 0 i) ,) xdrop, xwordlbl compword abs>rel b) ne) ,) + wcall, parse + cmp) rTOP rn) 0 i) ,) + xdrop, + mov) ne) rPC rd) rLR rm) ,) \ literal: nothing to do L2 abscall, wjmp, execute