draw nan correctly, tighten up parsing

This commit is contained in:
Erik Osheim 2025-02-21 11:43:00 -05:00
parent 3ce87ef53e
commit 0cc79b30be
2 changed files with 32 additions and 7 deletions

View File

@ -197,13 +197,28 @@
#01 u32-rshift u32-add ( z** v=w+y-1/2** [ylo* yhi*] )
STH4r u32-div !u32-add ( z+v/y** )
@x32-is-nan ( x/** -> x/** bool^ )
DUP2 #0000 EQU2 STH
OVR2 #8000 EQU2 STHr AND JMP2r
@x32-not-nan ( x/** -> x/** bool^ )
DUP2 #0000 NEQ2 STH
OVR2 #8000 NEQ2 STHr ORA JMP2r
( print an x32 number to stdout )
@x32-emit ( x/** -> )
;x32-emit/draw-ch !x32-draw
&draw-ch ( c^ -> ) #18 DEO JMP2r
@x32-draw-nan ( x/** draw-char* -> )
STH2 POP2 POP2
LIT "n STH2kr JSR2
LIT "a STH2kr JSR2
LIT "n STH2r JMP2
@x32-draw ( x/** draw-char* -> )
STH2 OVR2 #8000 LTH2 ?{
STH2 x32-not-nan ?{ STH2r !x32-draw-nan }
OVR2 #8000 LTH2 ?{
LIT "- STH2kr JSR2
u32-negate
}
@ -235,9 +250,10 @@
( returns nan [8000 0000] on error )
@x32-parse ( pos* -> x/** )
( negate leading - ; ignore leading + )
LDAk LIT "- NEQ ?{ INC2 x32-parse !x32-negate } ( pos* )
LDAk LIT "+ NEQ ?{ INC2 !x32-parse } ( pos* )
LDAk LIT "- NEQ ?{ INC2 x32-parse/run !x32-negate } ( pos* )
LDAk LIT "+ NEQ ?{ INC2 !x32-parse/run } ( pos* )
LDAk #00 EQU ?&error0 ( pos* )
&run ( pos* )
( accumulate on rst ; reverse shorts )
LIT2r 0000 LIT2r 0000 ( pos* [lo* hi*] )
@ -274,10 +290,9 @@
STH2r STH2r x32-from-u32 ( s/** w/** )
!x32-add ( res/** )
&error2 ( limit* pos* [wlo* whi* s*] )
#010e DEO
POP2r POP2 ( limit* [wlo* whi*] )
&error1 ( pos* [wlo* whi*] )
POP2r POP2r POP2 #8000 #0000 ( 8000 0000 )
JMP2r ( 8000 0000 )
POP2r POP2r ( pos* )
&error0 POP2 #8000 #0000 JMP2r ( 8000 0000 )
~math32.tal

View File

@ -78,6 +78,11 @@
;data/str5 x32-parse x32-emit #0a18 DEO
;data/str6 x32-parse x32-emit #0a18 DEO
;data/str7 x32-parse x32-emit #0a18 DEO
;data/str8 x32-parse x32-emit #0a18 DEO
;data/str9 x32-parse x32-emit #0a18 DEO
;data/str10 x32-parse x32-emit #0a18 DEO
;data/str11 x32-parse x32-emit #0a18 DEO
;data/str12 x32-parse x32-emit #0a18 DEO
#800f DEO BRK
@ -117,3 +122,8 @@
&str5 "-123 00
&str6 "123.456 00
&str7 "-123.456 00
&str8 00
&str9 "abc 00
&str10 "123.abc 00
&str11 "123.456abc 00
&str12 "0.9999999999 00