draw nan correctly, tighten up parsing
This commit is contained in:
parent
3ce87ef53e
commit
0cc79b30be
29
fix32.tal
29
fix32.tal
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue