From aa21593539f20aaed2392bbfe4797899931a29f3 Mon Sep 17 00:00:00 2001 From: neauoire Date: Mon, 16 Aug 2021 20:39:16 -0700 Subject: [PATCH] Progress on removing MUL/DIV opcodes --- src/main.tal | 90 ++++++++++++++++++++++++++++------------------------ 1 file changed, 49 insertions(+), 41 deletions(-) diff --git a/src/main.tal b/src/main.tal index 144fd2b..67d29ca 100644 --- a/src/main.tal +++ b/src/main.tal @@ -17,16 +17,25 @@ ctrl+v - paste ) -%+ { ADD } %- { SUB } %* { MUL } %/ { DIV } +%+ { ADD } %- { SUB } %* { MUL } %< { LTH } %> { GTH } %= { EQU } %! { NEQ } -%++ { ADD2 } %-- { SUB2 } %** { MUL2 } %// { DIV2 } +%++ { ADD2 } %-- { SUB2 } %** { MUL2 } %<< { LTH2 } %>> { GTH2 } %== { EQU2 } %!! { NEQ2 } %DEBUG { ;print-hex JSR2 #0a .Console/write DEO } %DEBUG2 { SWP ;print-hex JSR2 ;print-hex JSR2 #0a .Console/write DEO } -%2** { #10 SFT2 } %2// { #01 SFT2 } -%8** { #30 SFT2 } %8// { #03 SFT2 } +%2* { #10 SFT } %2/ { #01 SFT } +%4* { #20 SFT } %4/ { #02 SFT } +%8* { #30 SFT } %8/ { #03 SFT } +%20* { #50 SFT } + +%2** { #10 SFT2 } %2// { #01 SFT2 } +%4// { #02 SFT2 } +%8** { #30 SFT2 } %8// { #03 SFT2 } +%10** { #40 SFT2 } +%200// { #09 SFT2 } + %TOS { #00 SWP } %MOD { DIVk MUL SUB } %MOD2 { DIV2k MUL2 SUB2 } @@ -35,26 +44,25 @@ %ROL { DUP #07 SFT SWP #10 SFT + } %ROR { DUP #70 SFT SWP #01 SFT + } %SFL { #40 SFT SFT } -%LTS2 { #8000 ++ SWP2 #8000 ++ >> } %GTS2 { #8000 ++ SWP2 #8000 ++ << } %STEP8 { #33 SFT2 } %TOGGLE { LDZk #00 = SWP STZ } %GET-ITER { OVR2 NIP OVR SWP } %BRK? { #01 JCN BRK } -%HOR { #20 } %VER { #10 } -%WIDTH { HOR TOS 8** } -%LENGTH { HOR TOS VER TOS ** #0010 ** } +%HOR { #20 } %VER { #10 } +%WIDTH { #0100 } +%LENGTH { #2000 } %DATA-CLIP { #f000 } ( copy/paste ) %BANK { #2000 } %BANK-TEMP { #4000 } -%GET-COLOR { .settings/color LDZ STHk #02 / + DEI #01 STHr #01 AND - #04 * SFT #0f AND } -%GET-POSITION { .settings/focus LDZ2 BANK -- DUP2 2// WIDTH MOD2 SWP2 WIDTH 2** // 8** } +%GET-COLOR { .settings/color LDZ STHk 2/ + DEI #01 STHr #01 AND - 4* SFT #0f AND } +%GET-POSITION { .settings/focus LDZ2 BANK -- DUP2 2// WIDTH MOD2 SWP2 200// 8** } %ADD-POSITIONS { ROT2 ++ ROT2 ROT2 ++ SWP2 } %RELEASE-MOUSE { #00 .Mouse/state DEO } %RESET-SELECTION { .selection/x1 LDZ2 .selection/x2 STZ2 } -%GET-ADDR { TOS HOR TOS ** ROT TOS ++ #0010 ** BANK ++ } +%GET-ADDR { TOS HOR TOS ** ROT TOS ++ 10** BANK ++ } %SET-STATE { #01 .state/changed STZ ;draw-state JSR2 } %RESET-STATE { #00 .state/changed STZ ;draw-state JSR2 } @@ -180,7 +188,7 @@ BRK #08 ! ,&no-toggle JCN .state/blink TOGGLE - #01 .state/blink LDZ #08 * + ;draw-filepath JSR2 + #01 .state/blink LDZ 8* + ;draw-filepath JSR2 #00 .state/timer STZ &no-toggle @@ -223,10 +231,10 @@ BRK .Controller/button DEI #f0 AND DUP #04 SFT #01 AND #01 ! ,&no-up JCN - ( clamp ) .settings/focus LDZ2 BANK HOR TOS #0010 ** ++ << ,&no-up JCN + ( clamp ) .settings/focus LDZ2 BANK HOR TOS 10** ++ << ,&no-up JCN ( up ) .settings/focus LDZ2 #0010 HOR TOS ** -- .settings/focus STZ2 &no-up DUP #05 SFT #01 AND #01 ! ,&no-down JCN - ( clamp ) .settings/focus LDZ2 BANK LENGTH HOR TOS #0010 ** -- ++ >> ,&no-down JCN + ( clamp ) .settings/focus LDZ2 BANK LENGTH HOR TOS 10** -- ++ >> ,&no-down JCN ( down ) .settings/focus LDZ2 #0010 HOR TOS ** ++ .settings/focus STZ2 &no-down DUP #06 SFT #01 AND #01 ! ,&no-left JCN ( clamp ) .settings/focus LDZ2 BANK #0001 ++ << ,&no-left JCN @@ -509,8 +517,8 @@ BRK &no-mod ( paint ) - .Mouse/x DEI2 .zoomview/x1 LDZ2 -- #0004 // - .Mouse/y DEI2 .zoomview/y1 LDZ2 -- #0004 // + .Mouse/x DEI2 .zoomview/x1 LDZ2 -- 4// + .Mouse/y DEI2 .zoomview/y1 LDZ2 -- 4// .settings/focus LDZ2 ++ ( detect erase ) #00 .Mouse/state DEI #10 = ,&do-erase JCN @@ -533,7 +541,7 @@ BRK ( skip ) .Mouse/state DEI #00 ! BRK? .Mouse/x DEI2 .blendview/x1 LDZ2 -- 8// NIP - .Mouse/y DEI2 .blendview/y1 LDZ2 -- 8// NIP #04 * + + .Mouse/y DEI2 .blendview/y1 LDZ2 -- 8// NIP 4* + .settings/blending STZ ;redraw JSR2 @@ -550,15 +558,15 @@ BRK DUP #00 ! ,&no-r JCN .System/r STHk ,&set-color JSR - STHr [ .settings/color LDZ #02 / + ] DEO + STHr [ .settings/color LDZ 2/ + ] DEO &no-r DUP #01 ! ,&no-g JCN .System/g STHk ,&set-color JSR - STHr [ .settings/color LDZ #02 / + ] DEO + STHr [ .settings/color LDZ 2/ + ] DEO &no-g DUP #02 ! ,&no-b JCN .System/b STHk ,&set-color JSR - STHr [ .settings/color LDZ #02 / + ] DEO + STHr [ .settings/color LDZ 2/ + ] DEO &no-b POP @@ -567,12 +575,12 @@ BRK BRK &set-color - .settings/color LDZ STHk #02 / + DEI + .settings/color LDZ STHk 2/ + DEI STHr #02 MOD STHk #0f SWP [ #40 * SFT ] AND STHr #00 = .Mouse/x DEI2 .colorview/x1 LDZ2 -- 2// NIP - ( clamp to #0f ) DUP #10 = #01 * - + ( clamp to #0f ) DUP #10 = - SWP [ #40 * SFT ] + RTN @@ -785,10 +793,10 @@ RTN ;pixel-icn .Screen/addr DEO2 VER #00 &ver - DUP #08 * TOS .tileview/y1 LDZ2 ++ .Screen/y DEO2 + DUP 8* TOS .tileview/y1 LDZ2 ++ .Screen/y DEO2 HOR #00 &hor - DUP #08 * TOS .tileview/x1 LDZ2 ++ .Screen/x DEO2 + DUP 8* TOS .tileview/x1 LDZ2 ++ .Screen/x DEO2 ( get pixel offset ) GET-ITER SWP TOS ROT TOS ( add focus ) STH2kr SWP2r STH2kr SWP2r ADD-POSITIONS ;get-pixel JSR2 #00 + .Screen/sprite DEO @@ -799,7 +807,7 @@ RTN POP2r POP2r ( guides ) - VER #08 / #01 - #00 + VER 8/ #01 - #00 &guides-hor DUP STH .tileview/x1 LDZ2 @@ -810,7 +818,7 @@ RTN #01 + GTHk ,&guides-hor JCN POP2 - HOR #08 / #01 - #00 + HOR 8/ #01 - #00 &guides-ver DUP STH .tileview/x1 LDZ2 STHr #01 + #40 * #01 - TOS ++ @@ -832,7 +840,7 @@ RTN ( channel 2 ) [ STHr ] [ STH2r ] #0008 ++ LDA SWP #07 SWP - SFT #01 AND - #02 * + 2* + RTN @@ -879,7 +887,7 @@ RTN @get-tile-addr ( x* y* -- addr* ) - STEP8 WIDTH ** #0004 // SWP2 + STEP8 WIDTH ** 4// SWP2 STEP8 2** ++ BANK ++ @@ -949,7 +957,7 @@ RTN #10 #00 &loop DUP #04 MOD #00 SWP 8** .blendview/x1 LDZ2 ++ .Screen/x DEO2 - DUP #04 / #00 SWP 8** .blendview/y1 LDZ2 ++ .Screen/y DEO2 + DUP 4/ #00 SWP 8** .blendview/y1 LDZ2 ++ .Screen/y DEO2 #00 .Screen/sprite DEO DUP #00 + .settings/depth LDZ #80 * + .Screen/sprite DEO #01 + GTHk ,&loop JCN @@ -968,10 +976,10 @@ RTN .settings/focus LDZ2 STH2k .Screen/addr DEO2 #04 #00 &ver - DUP #08 * TOS .preview/y1 LDZ2 ++ .Screen/y DEO2 + DUP 8* TOS .preview/y1 LDZ2 ++ .Screen/y DEO2 #04 #00 &hor - DUP #08 * TOS .preview/x1 LDZ2 ++ .Screen/x DEO2 + DUP 8* TOS .preview/x1 LDZ2 ++ .Screen/x DEO2 ( get x,y ) GET-ITER ( check if within ratio ) @@ -982,7 +990,7 @@ RTN ( get blending ) .settings/blending LDZ ( get depth ) .settings/depth LDZ #80 * ( draw ) + .Screen/sprite DEO - ( incr ) STH2r #0008 [ .settings/depth LDZ #08 * TOS ++ ] ++ STH2 + ( incr ) STH2r #0008 [ .settings/depth LDZ 8* TOS ++ ] ++ STH2 ,&resume JMP &outside ;halftone-icn .Screen/addr DEO2 @@ -1024,7 +1032,7 @@ RTN .Screen/x DEO2 #10 #00 &loop - DUP STHkr > #08 * TOS ;slider-icns ++ .Screen/addr DEO2 + DUP STHkr > 8* TOS ;slider-icns ++ .Screen/addr DEO2 #02 .Screen/sprite DEO .Screen/x DEI2 #0002 ++ .Screen/x DEO2 #01 + GTHk ,&loop JCN @@ -1044,10 +1052,10 @@ RTN #04 #00 &loop .dataview/x1 LDZ2 .Screen/x DEO2 - DUP #08 * TOS .dataview/y1 LDZ2 ++ .Screen/y DEO2 - DUP #02 * TOS .settings/focus LDZ2 ++ LDA2 #03 ;draw-short JSR2 + DUP 8* TOS .dataview/y1 LDZ2 ++ .Screen/y DEO2 + DUP 2* TOS .settings/focus LDZ2 ++ LDA2 #03 ;draw-short JSR2 .dataview/x1 LDZ2 #0020 ++ .Screen/x DEO2 - DUP #02 * TOS .settings/focus LDZ2 ++ #0008 ++ LDA2 #03 ;draw-short JSR2 + DUP 2* TOS .settings/focus LDZ2 ++ #0008 ++ LDA2 #03 ;draw-short JSR2 #01 + GTHk ,&loop JCN POP2 @@ -1058,10 +1066,10 @@ RTN ;bigpixel-icn .Screen/addr DEO2 #08 #00 &ver - DUP #04 * TOS .zoomview/y1 LDZ2 ++ .Screen/y DEO2 + DUP 4* TOS .zoomview/y1 LDZ2 ++ .Screen/y DEO2 #08 #00 &hor - DUP #04 * TOS .zoomview/x1 LDZ2 ++ .Screen/x DEO2 + DUP 4* TOS .zoomview/x1 LDZ2 ++ .Screen/x DEO2 ( get pixel ) GET-ITER ( ch 1 ) @@ -1070,7 +1078,7 @@ RTN ( ch2 ) [ STHr ] [ STH2r ] #0008 ++ LDA SWP #07 SWP - SFT #01 AND - #02 * + + 2* + .Screen/sprite DEO #01 + GTHk ,&hor JCN POP2 @@ -1107,7 +1115,7 @@ RTN .Mouse/y DEI2 DUP2 .cursor/y STZ2 .Screen/y DEO2 ( draw new cursor ) - ;tool-brush #00 .settings/tool LDZ #08 * ++ .Screen/addr DEO2 + ;tool-brush #00 .settings/tool LDZ 8* ++ .Screen/addr DEO2 #42 .Mouse/state DEI #00 ! + .Screen/sprite DEO RTN @@ -1119,7 +1127,7 @@ RTN .toolview/y1 LDZ2 .Screen/y DEO2 ;path/name &loop - LDAk DUP #00 ! #20 * - TOS 8** ;font ++ .Screen/addr DEO2 + LDAk DUP #00 ! 20* - TOS 8** ;font ++ .Screen/addr DEO2 STHkr .Screen/sprite DEO .Screen/x DEI2 #0008 ++ .Screen/x DEO2 #0001 ++