From 165ef2a8aa18637345ec4d90001adbc3b1537ca6 Mon Sep 17 00:00:00 2001 From: neauoire Date: Tue, 14 Dec 2021 11:58:05 -0800 Subject: [PATCH] Fixed issue with long filepaths --- .clang-format | 21 ---- .gitignore | 1 - README.md | 1 - ako10x10.chr | Bin 0 -> 4096 bytes build.sh | 2 +- src/main.tal | 286 ++++++++++++++++++++++++++------------------------ src/utils.tal | 53 ++++++++++ 7 files changed, 202 insertions(+), 162 deletions(-) delete mode 100644 .clang-format create mode 100644 ako10x10.chr create mode 100644 src/utils.tal diff --git a/.clang-format b/.clang-format deleted file mode 100644 index d923eb7..0000000 --- a/.clang-format +++ /dev/null @@ -1,21 +0,0 @@ -AlignAfterOpenBracket: DontAlign -AlignEscapedNewlines: DontAlign -AlignOperands: DontAlign -AllowShortBlocksOnASingleLine: Always -AllowShortCaseLabelsOnASingleLine: true -AllowShortEnumsOnASingleLine: true -AllowShortIfStatementsOnASingleLine: true -AllowShortLoopsOnASingleLine: true -AlwaysBreakAfterDefinitionReturnType: TopLevel -BinPackArguments: false -BinPackParameters: false -BreakBeforeBraces: WebKit -IndentCaseLabels: false -TabWidth: 4 -IndentWidth: 4 -ContinuationIndentWidth: 4 -UseTab: ForContinuationAndIndentation -ColumnLimit: 0 -ReflowComments: false -SortIncludes: false -SpaceBeforeParens: false \ No newline at end of file diff --git a/.gitignore b/.gitignore index f31ac0d..d5b5e5d 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,6 @@ *png *bmp /bin -*.chr *snarf *theme *nametable \ No newline at end of file diff --git a/README.md b/README.md index 0ca4d0f..e6ae965 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,6 @@ uxnasm src/main.tal bin/nasu.rom && uxnemu bin/nasu.rom - `right-click`, remove pixel - `1 2 3`, select color - `q w e`, select tool -- `ctrl+p`, export [theme file](https://wiki.xxiivv.com/theme) - `ctrl+n`, clear - `ctrl+r`, rename - `ctrl+o`, load diff --git a/ako10x10.chr b/ako10x10.chr new file mode 100644 index 0000000000000000000000000000000000000000..571b2d0e5ff7b96f074078bdf0f5546a5c99f3f8 GIT binary patch literal 4096 zcmcgvZ*1Gf6+c;)Xe&;rcG2eakLk8S60pE*Y{=%It*Ied`=y3S($m zc-~`R;f3?%n;~y?c}`%NF8DzLYDeW!>1hbEo%9p87gx*j%ekVq*if zsZ9h#&_-c6#LrF!LJ2V;&J6qdK_#$_kE8zQIM!va*Xb-Qkr-W?kTC73NE{Q}9~W!C z<@rT8-j%@p7iK;hBg8|3;im#dp(ccewZs>|iGry z4+ZSiHd=4g+0Smre%!%bbbov(5u*P3L;dJ)R2)S-x_fjtjK{?b-@EXN7(Wo-8`~=< z#PLJ#KK+~T0{eJpyfem&4?e}elzSF}@Ze-k-Kf2v@dMN!*ialwoJJh#5ApVRV$2>7 z^#e7_Gzv2|TaO>091s%{;@!L`17_atOjHnu<6_Ot3PwX>eKZ;b_5;t2&nwhlz*hr@ zf{*B^1WyNAn5$^W2j%fYzwP+YG<4WKjW<6=x_0e<`-xEh-d&%(bKutxhguFx+_mi1 z{?2AXl9}T2?BwWJi{$b90=__y{Nb734`j1v&xT`R8TWMQAIBT^9930cU2At3Fxzo$ z$*8Eg)*y}&^6*z$4l9yrZhfw^8D}KM_%TS6Cqq0&qbv632**j1Wi?Q1;@oS?a^P*a ztba`Bg*0P%Wi{Qi+(w>QEG zLRjwh9%DJ-#roQ!ZW!ek>S~LcrWGyYktsg*yVep0S zz@IIaRhWrH2ai@Uo0;OO{J{R5Ki+fkHxl}sZQtS8o zSrCjpiXho7wUk--_fqz{I+vNA{^&3B9Y+R_;&?~j;8CzpOtWGbTBU3bRt!zk^~XN= z(_@M-G}PF5X4|$$+8@0lUwTb|aD`u;Jcny;I;7xqQX3D`Ef^IO*cxqkmr*K}a#{V^ z3-{QFkla*M!JW7mC!?&zmE|fn^psE?Pbp|!#c!TG^~M{YP0te&3z{mtVr-&RT_>6>O`(pdva!2tfA>BCE?Lcp)sp$^(sah6AA;@XfbD9E3RJMLo0wTfQOPJ~ES!G>U)q&Nz=ki~#C8*&X5NQ|gZ$dsoG)-Nhmhv}l z%24zR@DS7>4CD1;=s-dKct}2-jw&FjR5Z$QQ4S`XP!l03AOj3TR|I>LJQVkS_@zRf z!>h`d_Q3hl=ld0yjRGYE-pGAuu<7!Z%jXaN=qLAGdGc|z29K*kXW#NFl}an6>`Hb( zEf%vN>-nz7$Okh4(t;+$Ev~RB0e32$@7a3&e9S`-j^hLlwGOqgl*wc?y*QW6B$Kv3 zjIki-ox_Z;^G1nzU2Jk;&c*Z{eCyX;1*~I9K2gvpzhkN3z-6NLRmkb zCJ)0fcqdR`Ng0Kz^~QjYL2*HO-Dm4FXO3U)`{viTovNRn?|bO3V8uy*0`iAo6pJe> z*`=lDi-p0|ugV{{DF{{mmW8!ADdYP1>w_w~)}6fIAUX7l8l(v*BNYN~(6@U6 z-dt0A`w-*bvZbl1{n6VkzPRVUEq<1P(ACv4KEJO9fA3NO>L8NU_k3S(UvKZTkMHZ< zv15C4Gw`S5wEEHFi1*DftR>UDW*8rQ@oF27wr_9kMys!GZ>AdCYsKSbAw>B3fJ5g7 z@tmMGfTk53syxS?o^3FfslsH_4jh{-D@EA_4nUHepogy{%UhQ k=~0WX?`WteGJycX_X+jp#MLHY2oKu4_Z$2t_@Byu0SkqrUH||9 literal 0 HcmV?d00001 diff --git a/build.sh b/build.sh index a0ad7fb..d7246e8 100755 --- a/build.sh +++ b/build.sh @@ -21,4 +21,4 @@ then fi echo "Running.." -uxnemu bin/nasu.rom +uxnemu bin/nasu.rom ako10x10.chr diff --git a/src/main.tal b/src/main.tal index f651f76..386883f 100644 --- a/src/main.tal +++ b/src/main.tal @@ -1,4 +1,4 @@ -( +( app/nasu : spritesheet editor arrows - move selection @@ -17,77 +17,30 @@ ctrl+v - paste ) -%+ { ADD } %- { SUB } %* { MUL } %/ { DIV } -%< { LTH } %> { GTH } %= { EQU } %! { NEQ } -%++ { ADD2 } %-- { SUB2 } %** { MUL2 } %// { DIV2 } -%<< { LTH2 } %>> { GTH2 } %== { EQU2 } %!! { NEQ2 } - -%2* { #10 SFT } %2/ { #01 SFT } %2** { #10 SFT2 } %2// { #01 SFT2 } -%4* { #20 SFT } %4/ { #02 SFT } %4** { #20 SFT2 } %4// { #02 SFT2 } -%8* { #30 SFT } %8/ { #03 SFT } %8** { #30 SFT2 } %8// { #03 SFT2 } -%10* { #40 SFT } %10/ { #04 SFT } %10** { #40 SFT2 } %10// { #04 SFT2 } -%20* { #50 SFT } %20/ { #05 SFT } %20** { #50 SFT2 } %20// { #05 SFT2 } - -%40* { #60 SFT } -%80* { #70 SFT } - -%80** { #70 SFT2 } -%100** { #80 SFT2 } -%200** { #90 SFT2 } - -%2MOD { #01 AND } %2MOD2 { #0001 AND2 } -%4MOD { #03 AND } %4MOD2 { #0003 AND2 } -%8MOD { #07 AND } %8MOD2 { #0007 AND2 } -%10MOD { #0f AND } %10MOD2 { #000f AND2 } - -%20MOD { #1f AND } -%100MOD2 { #00ff AND2 } -%TOS { #00 SWP } - -%STEP8 { #33 SFT2 } - -%!~ { NEQk NIP } - -%DEBUG { ;print-hex/byte JSR2 #0a #18 DEO } -%DEBUG2 { ;print-hex JSR2 #0a #18 DEO } - -%RTN { JMP2r } -%SFL { #40 SFT SFT } -%GTS2 { #8000 ++ SWP2 #8000 ++ << } -%TOGGLE { LDZk #00 = SWP STZ } -%GET-ITER { OVR2 NIP OVR SWP } -%BRK? { #01 JCN BRK } -%SWP? { #01 JCN SWP } - -%ROL { DUP #07 SFT SWP #10 SFT + } -%ROR { DUP #70 SFT SWP #01 SFT + } - -%AUTO-X { #01 .Screen/auto DEO } -%AUTO-NONE { #00 .Screen/auto DEO } +~src/utils.tal ( defines ) %HOR { #10 } %VER { #10 } %LENGTH { #1000 } -( - 8000-9000 : spritesheet - 9000-9100 : tile - 9100-9200 : color ) - +%DATA-CLIP { #6000 } %BANK-SPRITESHEET { #8000 } %BANK-NAMETABLE { #9000 } %BANK-COLOR { #9100 } -( todo ) +%STEP8 { #33 SFT2 } +%80** { #70 SFT2 } +%100** { #80 SFT2 } +%200** { #90 SFT2 } -%DATA-CLIP { #6000 } +%100MOD2 { #00ff AND2 } +%GET-ITER { OVR2 NIP OVR SWP } %GET-HEX-ADDR { TOS 8** ;font-hex ++ .Screen/addr DEO2 } %GET-COLOR { .settings/color LDZ STHk 2/ + DEI #01 STHr #01 AND - 4* SFT #0f AND } %GET-POSITION { .settings/focus LDZ2 BANK-SPRITESHEET -- DUP2 2// 100MOD2 SWP2 #0080 2** DIV2 8** } %ADD-POSITIONS { ROT2 ++ ROT2 ROT2 ++ SWP2 } -%RELEASE-MOUSE { #00 .Mouse/state DEO } %RESET-SELECTION { .selection/x1 LDZ2 .selection/x2 STZ2 } %GET-ADDR { TOS 10** ROT TOS ++ 10** BANK-SPRITESHEET ++ } ( x y -- addr* ) @@ -132,7 +85,7 @@ &x2 $1 &y2 $1 &a $1 @path - &length $1 &name $20 + &name $20 ( ext ) $4 @frame &x1 $2 &y1 $2 &x2 $2 &y2 $2 @@ -211,31 +164,32 @@ .zoomview/x2 LDZ2 INC2 .zoomview-frame/x2 STZ2 .zoomview/y2 LDZ2 #0007 -- .zoomview-frame/y2 STZ2 - ;untitled-txt ;new-file JSR2 + ;new-file JSR2 ;load-theme JSR2 BRK -@on-console ( -- ) +@on-console ( -> ) - #00 ;draw-filepath JSR2 - .Console/read DEI DUP - #0a = ,&counter LDR #20 = #0000 == ,&no-end JCN - ( set length ) ,&counter LDR .path/length STZ - ( null char ) #00 .path ,&counter LDR INC + STZ - ( reset counter ) #00 ,&counter STR - ( load ) ;load-file JSR2 - POP BRK - &no-end - ,&counter LDR - ( length ) DUP .path/length STZ - INC - ( inc counter ) DUP ,&counter STR - ( write ) .path + STZ + ( starting ) + ;&trap LDA ,&started JCN + #00 ;draw-filepath JSR2 + ;path/name #0020 ;mclr JSR2 + #01 ,&trap STR + &started + ( append ) + .Console/read DEI #20 < ,&validate JCN + ;path/name ;slen JSR2 #0020 == ,&validate JCN + ;path/name .Console/read DEI ;sput JSR2 + BRK + &validate + ( validate ) + ;load-file JSR2 #01 ;draw-filepath JSR2 + #00 ,&trap STR BRK - &counter $1 + &trap $1 @on-frame ( -> ) ( inactive ) @@ -261,7 +215,7 @@ BRK @on-button ( -> ) - .Controller/key DEI .Controller/button DEI ADD BRK? + .Controller/button DEI2 #0000 !! [ JMP BRK ] .Controller/button DEI #01 AND ;on-control JCN2 @@ -344,17 +298,14 @@ BRK &no-name DUP [ LIT 'R ] ! ,&no-rename JCN #00 ;draw-filepath JSR2 - #00 .Controller/key DEO - #00 .path/length STZ - #0000 .path/name STZ2 + ;path/name #0020 ;mclr JSR2 ;on-frame-trap .Screen/vector DEO2 ;on-button-trap .Controller/vector DEO2 POP BRK &no-rename DUP [ LIT 'n ] ! ,&no-new JCN - #25 ;draw-filepath JSR2 - ;untitled-txt ;new-file JSR2 - ;redraw JSR2 POP BRK &no-new + ;new-file JSR2 + POP BRK &no-new DUP [ LIT 'o ] ! ,&no-open JCN ;load-file JSR2 POP BRK &no-open @@ -372,23 +323,22 @@ BRK DUP ,&continue JCN POP BRK &continue - DUP ( backspace ) #08 ! ,&no-edit-backspace JCN - ( clamp ) .path/length LDZ #00 = ,&edit-end JCN + ( backspace ) #08 !~ ,&no-edit-backspace JCN + ( clamp ) ;path/name ;slen JSR2 NIP #00 = ,&edit-end JCN #00 ;draw-filepath JSR2 - .path/length LDZ #01 - STHk .path/length STZ - #00 .path/name STHr + STZ - #01 ;draw-filepath JSR2 POP BRK + ;path/name ;spop JSR2 + #01 ;draw-filepath JSR2 + POP BRK &no-edit-backspace - DUP ( special ) #20 > ,&no-edit-enter JCN + ( special ) #20 >~ ,&no-edit-enter JCN ;on-frame .Screen/vector DEO2 ;on-button .Controller/vector DEO2 #00 .state/blink STZ - #01 ;draw-filepath JSR2 POP BRK + #01 ;draw-filepath JSR2 + POP BRK &no-edit-enter - ( clamp ) .path/length LDZ #1f = ,&edit-end JCN - DUP .path/name .path/length LDZ STHk + STZ - STHr INC STHk .path/length STZ - #00 .path/name STHr + STZ + ( append ) ;path/name ;slen JSR2 NIP #1f = ,&edit-end JCN + DUP ;path/name ROT ;sput JSR2 #01 ;draw-filepath JSR2 &edit-end POP @@ -423,7 +373,7 @@ BRK .settings/zoom LDZ #01 = ;&zoomed JCN2 .settings/tool LDZ #01 = ;&select JCN2 - ( skip ) .Mouse/state DEI #00 ! BRK? + ( skip ) .Mouse/state DEI #00 ! [ JMP BRK ] .Mouse/x DEI2 .tileview/x1 LDZ2 -- .Mouse/y DEI2 .tileview/y1 LDZ2 -- @@ -484,7 +434,7 @@ BRK &zoomed ( -> ) - ( skip ) .Mouse/state DEI #00 ! BRK? + ( skip ) .Mouse/state DEI #00 ! [ JMP BRK ] .Mouse/x DEI2 .tileview/x1 LDZ2 -- .Mouse/y DEI2 .tileview/y1 LDZ2 -- @@ -501,7 +451,7 @@ BRK @on-touch-nametable ( -> ) - ( skip ) .Mouse/state DEI #00 ! BRK? + ( skip ) .Mouse/state DEI #00 ! [ JMP BRK ] ( get touch tile ) .Mouse/y DEI2 .nametable/y LDZ2 -- 8// 10** @@ -532,7 +482,7 @@ BRK @on-touch-toolview ( -> ) - ( skip ) .Mouse/state DEI #00 ! BRK? + ( skip ) .Mouse/state DEI #00 ! [ JMP BRK ] .Mouse/x DEI2 .toolview/x1 LDZ2 -- 8// NIP DUP #1f ! ,&no-save JCN @@ -545,9 +495,7 @@ BRK POP RELEASE-MOUSE BRK &no-load DUP #1c ! ,&no-name JCN - #00 ;draw-filepath JSR2 - ;untitled-txt ;new-file JSR2 - ;redraw JSR2 + ;new-file JSR2 POP RELEASE-MOUSE BRK &no-name DUP #04 ! ,&no-brush JCN @@ -590,7 +538,7 @@ BRK @on-touch-zoomview ( -> ) - ( skip ) .Mouse/state DEI #00 ! BRK? + ( skip ) .Mouse/state DEI #00 ! [ JMP BRK ] .Mouse/y DEI2 .zoomview/y1 LDZ2 -- 8// NIP #04 ! ;&no-mod JCN2 .Mouse/x DEI2 .zoomview/x1 LDZ2 -- 8// NIP @@ -633,7 +581,7 @@ BRK @on-touch-blendview ( -> ) - ( skip ) .Mouse/state DEI #00 ! BRK? + ( skip ) .Mouse/state DEI #00 ! [ JMP BRK ] .Mouse/x DEI2 .blendview/x1 LDZ2 -- 8// NIP .Mouse/y DEI2 .blendview/y1 LDZ2 -- 8// NIP 4* + @@ -655,7 +603,7 @@ BRK @on-touch-colorview ( -> ) - ( skip ) .Mouse/state DEI #00 ! BRK? + ( skip ) .Mouse/state DEI #00 ! [ JMP BRK ] .Mouse/y DEI2 .colorview/y1 LDZ2 -- 8// NIP @@ -691,7 +639,7 @@ BRK @on-touch-preview ( -> ) - ( skip ) .Mouse/state DEI #00 ! BRK? + ( skip ) .Mouse/state DEI #00 ! [ JMP BRK ] ( y ) .Mouse/y DEI2 .preview/y1 LDZ2 -- 8// NIP ( x ) .Mouse/x DEI2 .preview/x1 LDZ2 -- 8// NIP @@ -875,16 +823,6 @@ RTN RTN -@clear ( addr* length* -- ) - - OVR2 ++ SWP2 - &loop - DUP2 #00 ROT ROT STA - INC2 NEQ2k ,&loop JCN - POP2 POP2 - -RTN - @redraw ( -- ) ;draw-toolview JSR2 @@ -1026,11 +964,11 @@ RTN STH SWP2 NIP STHr SWP STH2r SFT #01 AND ,&do-set JCN - ( mask ) #01 #07 ROT 8MOD - SFL #ff EOR AND + ( mask ) #01 #07 ROT 8MOD - #40 SFT SFT #ff EOR AND ( save ) ROT ROT STA RTN &do-set - ( mask ) #01 #07 ROT 8MOD - SFL ORA + ( mask ) #01 #07 ROT 8MOD - #40 SFT SFT ORA ( save ) ROT ROT STA RTN @@ -1282,14 +1220,21 @@ RTN STH .toolview/x1 LDZ2 #0040 ++ .Screen/x DEO2 .toolview/y1 LDZ2 .Screen/y DEO2 - ;path/name + AUTO-X + ;path/name + + + DUP2 ;slen JSR2 #0013 >> TOS + ;path/name ;slen JSR2 #0013 -- ** ++ + + + &loop - LDAk DUP #00 ! 20* - TOS 8** ;font ++ .Screen/addr DEO2 + LDAk #20 - TOS 8** ;font ++ .Screen/addr DEO2 STHkr .Screen/sprite DEO - .Screen/x DEI2 #0008 ++ .Screen/x DEO2 - INC2 - LDAk #00 ! ,&loop JCN + INC2 LDAk ,&loop JCN POP2 + AUTO-NONE POPr ( clear last ) #00 .Screen/sprite DEO @@ -1301,7 +1246,7 @@ RTN .toolview/x2 LDZ2 #0008 -- .Screen/x DEO2 .toolview/y1 LDZ2 .Screen/y DEO2 ;save-icn .Screen/addr DEO2 - #0f05 .state/changed LDZ SWP? POP .Screen/sprite DEO + #0f05 .state/changed LDZ #01 JCN SWP POP .Screen/sprite DEO RTN @@ -1327,28 +1272,26 @@ RTN ( file ) -@new-file ( default* -- ) +@new-file ( -- ) + + #00 ;draw-filepath JSR2 - BANK-SPRITESHEET LENGTH ;clear JSR2 - BANK-NAMETABLE #0200 ;clear JSR2 + BANK-SPRITESHEET LENGTH ;mclr JSR2 + BANK-NAMETABLE #0200 ;mclr JSR2 + + ( rename to untitled.txt ) + ;path/name #0020 ;mclr JSR2 + ;untitled-txt ;path/name #000c ;mcpy JSR2 - STH2 - #0c #00 - &loop - DUPk TOS STH2kr ++ LDA - SWP .path/name + STZ - INC GTHk ,&loop JCN - ( end ) #00 SWP .path/name + STZ - .path/length STZ - POP2r RESET-STATE + ;redraw JSR2 RTN @load-file ( -- ) - BANK-SPRITESHEET LENGTH ;clear JSR2 - BANK-NAMETABLE #0200 ;clear JSR2 + BANK-SPRITESHEET LENGTH ;mclr JSR2 + BANK-NAMETABLE #0200 ;mclr JSR2 ( spritesheet ) ;path/name .File/name DEO2 @@ -1356,9 +1299,11 @@ RTN BANK-SPRITESHEET .File/load DEO2 ( nametable ) - ;nametable-txt .File/name DEO2 + ( append ) ;nametable-ext ;path/name ;scap JSR2 #0004 ;mcpy JSR2 + ;path/name .File/name DEO2 #0200 .File/length DEO2 BANK-NAMETABLE .File/load DEO2 + ( remove ) ;path/name ;scap JSR2 #0004 -- #0004 ;mclr JSR2 RESET-STATE ;redraw JSR2 @@ -1373,9 +1318,11 @@ RTN BANK-SPRITESHEET .File/save DEO2 ( nametable ) - ;nametable-txt .File/name DEO2 + ( append ) ;nametable-ext ;path/name ;scap JSR2 #0004 ;mcpy JSR2 + ;path/name .File/name DEO2 #0200 .File/length DEO2 BANK-NAMETABLE .File/save DEO2 + ( remove ) ;path/name ;scap JSR2 #0004 -- #0004 ;mclr JSR2 RESET-STATE @@ -1532,6 +1479,69 @@ RTN RTN +( memory generics ) + +@mclr ( addr* len* -- ) + + OVR2 ++ SWP2 + &loop + STH2k #00 STH2r STA + INC2 GTH2k ,&loop JCN + POP2 POP2 + +RTN + +@mcpy ( src* dst* len* -- ) + + SWP2 STH2 SWP2 STH2 + #0000 + &loop + ( src ) STH2kr LDA + ( dst ) OVR2r STH2r STA + ( inc ) INC2r SWP2r INC2r SWP2r + INC2 GTH2k ,&loop JCN + POP2 POP2 + POP2r POP2r + +RTN + +( string generics ) + +@slen ( str* -- len* ) + + DUP2 ,scap JSR SWP2 -- + +RTN + +@scap ( str* -- str-end* ) + + ( clamp ) LDAk #00 ! JMP RTN + &while INC2 LDAk ,&while JCN + +RTN + +@sput ( str* char -- ) + + ROT ROT ,scap JSR STA + +RTN + +@spop ( str* -- ) + + ( clamp ) LDAk #00 ! JMP RTN + #00 ROT ROT ,scap JSR #0001 -- STA + +RTN + +@print-str ( string* -- ) + + #0001 SUB2 + &while + INC2 LDAk DUP #18 DEO ,&while JCN + POP2 + +RTN + @print-hex ( value* -- ) SWP ,&byte JSR @@ -1544,8 +1554,8 @@ RTN RTN -@nametable-txt "nametable $1 @untitled-txt "untitled.chr $1 +@nametable-ext ".tbl $1 @tool-brush e0d0 8844 2212 0c00 @tool-selector 80c0 e0f0 f8e0 1000 diff --git a/src/utils.tal b/src/utils.tal new file mode 100644 index 0000000..12184d9 --- /dev/null +++ b/src/utils.tal @@ -0,0 +1,53 @@ + +( generics ) + +%+ { ADD } %- { SUB } %* { MUL } %/ { DIV } +%< { LTH } %> { GTH } %= { EQU } %! { NEQ } +%++ { ADD2 } %-- { SUB2 } %** { MUL2 } %// { DIV2 } +%<< { LTH2 } %>> { GTH2 } %== { EQU2 } %!! { NEQ2 } + +%=~ { EQUk NIP } %!~ { NEQk NIP } +%<~ { LTHk NIP } %>~ { GTHk NIP } + +%2* { #10 SFT } %2/ { #01 SFT } %2** { #10 SFT2 } %2// { #01 SFT2 } +%4* { #20 SFT } %4/ { #02 SFT } %4** { #20 SFT2 } %4// { #02 SFT2 } +%8* { #30 SFT } %8/ { #03 SFT } %8** { #30 SFT2 } %8// { #03 SFT2 } +%10* { #40 SFT } %10/ { #04 SFT } %10** { #40 SFT2 } %10// { #04 SFT2 } +%20* { #50 SFT } %20/ { #05 SFT } %20** { #50 SFT2 } %20// { #05 SFT2 } +%40* { #60 SFT } %40/ { #06 SFT } %40** { #60 SFT2 } %60// { #05 SFT2 } + +%2MOD { #01 AND } %2MOD2 { #0001 AND2 } +%4MOD { #03 AND } %4MOD2 { #0003 AND2 } +%8MOD { #07 AND } %8MOD2 { #0007 AND2 } +%10MOD { #0f AND } %10MOD2 { #000f AND2 } + +%EMIT { #18 DEO } +%PRINT { ;print-str JSR2 #0a EMIT } +%DEBUG { ;print-hex/byte JSR2 #0a EMIT } +%DEBUG2 { ;print-hex JSR2 #0a EMIT } + +%IS-VALID { DUP #1f > SWP #7f < AND } +%IS-UC { DUP #40 > SWP #5b < AND } +%IS-LC { DUP #60 > SWP #7b < AND } +%IS-NUM { DUP #2f > SWP #3a < AND } +%IS-PUNC { DUP #2b > SWP #30 < AND } +%IS-SPACER { #21 < } ( char -- flag ) +%IS-LABEL { STHk #40 = STHr #26 = ORA } ( char -- flag ) +%NOT-LINEBREAK { STHk #0d ! STHr #0a ! AND } ( char -- flag ) + +%TOGGLE { LDZk #00 = SWP STZ } +%TOS { #00 SWP } +%RTN { JMP2r } + +%MIN2 { GTH2k JMP SWP2 POP2 } +%MAX2 { LTH2k JMP SWP2 POP2 } +%ROL { DUP #07 SFT SWP #10 SFT + } +%ROR { DUP #70 SFT SWP #01 SFT + } + +%RELEASE-MOUSE { #0096 DEO } + +%AUTO-NONE { #00 .Screen/auto DEO } +%AUTO-X { #01 .Screen/auto DEO } +%AUTO-Y { #02 .Screen/auto DEO } +%AUTO-ADDR { #04 .Screen/auto DEO } +%AUTO-Y-ADDR { #06 .Screen/auto DEO }