From 42aab23dc17679b1eebd29eacd11bdb3e3215e7b Mon Sep 17 00:00:00 2001 From: Andrew Alderwick Date: Sun, 20 Nov 2022 22:50:19 +0000 Subject: [PATCH] Remove many macros. --- projects/examples/demos/snake.tal | 70 +++++++++----------- projects/examples/devices/audio.channels.tal | 4 +- projects/examples/old/dungeon.tal | 38 ++++------- projects/library/asma.tal | 35 ++++------ projects/library/math32.tal | 14 ++-- projects/software/neralie.tal | 37 ++++------- 6 files changed, 77 insertions(+), 121 deletions(-) diff --git a/projects/examples/demos/snake.tal b/projects/examples/demos/snake.tal index 2a7316a..a5781a9 100644 --- a/projects/examples/demos/snake.tal +++ b/projects/examples/demos/snake.tal @@ -1,16 +1,5 @@ ( uxnasm projects/examples/demos/snake.tal bin/snake.rom && uxnemu bin/snake.rom ) -%2/ { #01 SFT } %2* { #10 SFT } -%8// { #03 SFT2 } %8** { #30 SFT2 } -%MOD { DIVk MUL SUB } -%MAX { LTHk JMP SWP POP } -%RTN { JMP2r } -%TOS { #00 SWP } -%BRK? { #01 JCN BRK } - - -%DIFFICULTY { #06 } - ( devices ) |00 @System [ &vector $2 &wst $1 &rst $1 &pad $4 &r $2 &g $2 &b $2 &debug $1 &halt $1 ] @@ -51,8 +40,8 @@ #0100 .Screen/height DEO2 ( set arena ) - .Screen/width DEI2 8// NIP .arena/w STZ - .Screen/height DEI2 8// NIP .arena/h STZ + .Screen/width DEI2 #03 SFT2 NIP .arena/w STZ + .Screen/height DEI2 #03 SFT2 NIP .arena/h STZ ;reset JSR2 @@ -61,7 +50,8 @@ BRK @on-frame ( -> ) .arena/timer LDZ INC DUP .arena/timer STZ - DIFFICULTY EQU BRK? + #06 ( difficulty - lower value produces faster gameplay ) + EQU JMP BRK ( clear ) #00 ;draw-snake JSR2 ( update ) ;move JSR2 @@ -90,8 +80,8 @@ BRK #00 ;draw-snake JSR2 #00 ;draw-apple JSR2 - .arena/w LDZ 2/ #01 SUB .snake/x STZ - .arena/h LDZ 2/ #01 SUB .snake/y STZ + .arena/w LDZ #01 SFT #01 SUB .snake/x STZ + .arena/h LDZ #01 SFT #01 SUB .snake/y STZ #00 .snake/dead STZ #00 .snake/length STZ #00 .snake/direction STZ @@ -99,7 +89,7 @@ BRK #03 ;draw-snake JSR2 ;add-apple JSR2 -RTN +JMP2r @move ( -- ) @@ -107,33 +97,33 @@ RTN .snake/x LDZ2 STH2 .snake/length LDZ #00 &loop - ( pop ) DUP 2* .snake/tail ADD LDZ2 STH2 SWP2r - ( push ) DUP 2* .snake/tail ADD STH2r ROT STZ2 + ( pop ) DUPk ADD .snake/tail ADD LDZ2 STH2 SWP2r + ( push ) DUPk ADD .snake/tail ADD STH2r ROT STZ2 INC GTHk ,&loop JCN POP2 POP2r - .snake/dead LDZ #00 EQU JMP RTN + .snake/dead LDZ #00 EQU JMP JMP2r .snake/direction LDZ DUP #01 NEQ ,&no-up JCN .snake/y LDZ #01 SUB - .arena/h LDZ MAX + .arena/h LDZ LTHk JMP SWP POP .snake/y STZ &no-up DUP #02 NEQ ,&no-down JCN .snake/y LDZ INC - .arena/h LDZ MOD + .arena/h LDZ DIVk MUL SUB .snake/y STZ &no-down DUP #04 NEQ ,&no-left JCN .snake/x LDZ #01 SUB - .arena/w LDZ MAX + .arena/w LDZ LTHk JMP SWP POP .snake/x STZ &no-left DUP #08 NEQ ,&no-right JCN .snake/x LDZ INC - .arena/w LDZ MOD + .arena/w LDZ DIVk MUL SUB .snake/x STZ &no-right POP @@ -148,7 +138,7 @@ RTN .snake/length LDZ #01 &loop-body - ( pop ) DUP 2* .snake/tail ADD LDZ2 + ( pop ) DUPk ADD .snake/tail ADD LDZ2 .snake/x LDZ2 NEQ2 ,&no-collision-body JCN #01 .snake/dead STZ #03 ;draw-snake JSR2 @@ -156,16 +146,16 @@ RTN INC GTHk ,&loop-body JCN POP2 -RTN +JMP2r @add-apple ( -- ) .DateTime/hour DEI2 .DateTime/minute DEI2 MUL2 #1234 MUL2 ADD - .arena/w LDZ MOD .apple/x STZ + .arena/w LDZ DIVk MUL SUB .apple/x STZ .DateTime/hour DEI2 .DateTime/minute DEI2 MUL2 #abcd MUL2 ADD - .arena/h LDZ MOD .apple/y STZ + .arena/h LDZ DIVk MUL SUB .apple/y STZ -RTN +JMP2r @draw-snake ( color -- ) @@ -174,41 +164,41 @@ RTN ;snake-icns .Screen/addr DEO2 .snake/length LDZ #00 &loop - DUP 2* .snake/tail ADD LDZ TOS 8** .Screen/x DEO2 - DUP 2* .snake/tail ADD INC LDZ TOS 8** .Screen/y DEO2 + DUPk ADD .snake/tail ADD LDZ #0005 SFT2 .Screen/x DEO2 + DUPk ADD .snake/tail ADD INC LDZ #0005 SFT2 .Screen/y DEO2 STHkr .Screen/sprite DEO INC GTHk ,&loop JCN POP2 ( draw head ) - .snake/x LDZ TOS 8** .Screen/x DEO2 - .snake/y LDZ TOS 8** .Screen/y DEO2 + .snake/x LDZ #0005 SFT2 .Screen/x DEO2 + .snake/y LDZ #0005 SFT2 .Screen/y DEO2 ;snake-icns/face .Screen/addr DEO2 STHr .Screen/sprite DEO -RTN +JMP2r @draw-apple ( color -- ) - .apple/x LDZ TOS 8** .Screen/x DEO2 - .apple/y LDZ TOS 8** .Screen/y DEO2 + .apple/x LDZ #0005 SFT2 .Screen/x DEO2 + .apple/y LDZ #0005 SFT2 .Screen/y DEO2 ;apple-chr .Screen/addr DEO2 .Screen/sprite DEO -RTN +JMP2r @draw-score ( score color -- ) STH #0010 .Screen/x DEO2 #0010 .Screen/y DEO2 - DUP #04 SFT TOS 8** ;font-hex ADD2 .Screen/addr DEO2 + DUP #04 SFT #0005 SFT2 ;font-hex ADD2 .Screen/addr DEO2 .Screen/x DEI2 #0008 ADD2 .Screen/x DEO2 ( draw ) STHkr .Screen/sprite DEO - #0f AND TOS 8** ;font-hex ADD2 .Screen/addr DEO2 + #0f AND #0005 SFT2 ;font-hex ADD2 .Screen/addr DEO2 .Screen/x DEI2 #0008 ADD2 .Screen/x DEO2 ( draw ) STHr .Screen/sprite DEO -RTN +JMP2r ( assets ) diff --git a/projects/examples/devices/audio.channels.tal b/projects/examples/devices/audio.channels.tal index f5b23cd..6b0d46c 100644 --- a/projects/examples/devices/audio.channels.tal +++ b/projects/examples/devices/audio.channels.tal @@ -1,7 +1,5 @@ ( dev/audio ) -%MOD { DIVk MUL SUB } - ( devices ) |00 @System [ &vector $2 &pad $6 &r $2 &g $2 &b $2 ] @@ -57,7 +55,7 @@ BRK ( skip ) .timer LDZ #10 EQU #01 JCN [ BRK ] ( get note ) - .counter LDZ #18 MOD #30 ADD + .counter LDZ #18 DIVk MUL SUB #30 ADD .Audio0/pitch .counter LDZ #03 AND #40 SFT ADD DEO .counter LDZ INC .counter STZ diff --git a/projects/examples/old/dungeon.tal b/projects/examples/old/dungeon.tal index eec0875..c7a7f41 100644 --- a/projects/examples/old/dungeon.tal +++ b/projects/examples/old/dungeon.tal @@ -1,15 +1,5 @@ ( art by @ritualdust ) -%8** { #30 SFT2 } -%10** { #40 SFT2 } - -%DEBUG { ;print-hex JSR2 #0a .Console/write DEO } -%DEBUG2 { SWP ;print-hex JSR2 ;print-hex JSR2 #0a .Console/write DEO } - -%RTN { JMP2r } -%TOS { #00 SWP } -%DEC { #01 SUB } - %MOUSE { #82 } ( devices ) @@ -65,7 +55,7 @@ BRK DUP #10 NEQ ,&no-up JCN #00 .player/d STZ #00 ;draw-mouse JSR2 - .player/y LDZk DEC SWP STZ + .player/y LDZk #01 SUB SWP STZ MOUSE ;draw-mouse JSR2 &no-up DUP #20 NEQ ,&no-down JCN @@ -77,7 +67,7 @@ BRK DUP #40 NEQ ,&no-left JCN #02 .player/d STZ #00 ;draw-mouse JSR2 - .player/x LDZk DEC SWP STZ + .player/x LDZk #01 SUB SWP STZ MOUSE ;draw-mouse JSR2 &no-left DUP #80 NEQ ,&no-right JCN @@ -98,24 +88,24 @@ BRK @draw-mouse ( color -- ) - ;spritesheet #29 .player/d LDZ ADD TOS DUP2 DEBUG2 10** ADD2 .Screen/addr DEO2 - .player/x LDZ TOS 8** .room/x LDZ2 ADD2 .Screen/x DEO2 - .player/y LDZ TOS 8** .room/y LDZ2 ADD2 .Screen/y DEO2 + ;spritesheet #29 .player/d LDZ ADD #0004 SFT2 ADD2 .Screen/addr DEO2 + .player/x LDZ #0005 SFT2 .room/x LDZ2 ADD2 .Screen/x DEO2 + .player/y LDZ #0005 SFT2 .room/y LDZ2 ADD2 .Screen/y DEO2 #40 ADD .Screen/sprite DEO -RTN +JMP2r @draw-dungeon ( stage* -- ) STH2 #1000 &ver - DUP TOS 8** .room/y LDZ2 ADD2 .Screen/y DEO2 + DUP #0005 SFT2 .room/y LDZ2 ADD2 .Screen/y DEO2 #1000 &hor - DUP TOS 8** .room/x LDZ2 ADD2 .Screen/x DEO2 - ( get id ) STH2 DUP STH2r ROT OVR SWP #40 SFT ADD TOS - ( tile ) DUP2 STH2kr ADD2 LDA TOS 10** ;spritesheet ADD2 .Screen/addr DEO2 + DUP #0005 SFT2 .room/x LDZ2 ADD2 .Screen/x DEO2 + ( get id ) STH2 DUP STH2r ROT OVR SWP #40 SFT ADD #00 SWP + ( tile ) DUP2 STH2kr ADD2 LDA #0004 SFT2 ;spritesheet ADD2 .Screen/addr DEO2 ( color ) STH2kr #0100 ADD2 ADD2 LDA .Screen/sprite DEO INC GTHk ,&hor JCN POP2 @@ -123,17 +113,17 @@ RTN POP2 POP2r -RTN +JMP2r @print-hex ( value -- ) STHk #04 SFT ,&parse JSR .Console/write DEO STHr #0f AND ,&parse JSR .Console/write DEO - RTN + JMP2r &parse ( value -- char ) - DUP #09 GTH ,&above JCN #30 ADD RTN &above #09 SUB #60 ADD RTN + DUP #09 GTH ,&above JCN #30 ADD JMP2r &above #09 SUB #60 ADD JMP2r -RTN +JMP2r @mouse-icn ffff ffff ffff ffff 0000 0000 0000 0000 diff --git a/projects/library/asma.tal b/projects/library/asma.tal index e418810..b1bae87 100644 --- a/projects/library/asma.tal +++ b/projects/library/asma.tal @@ -11,12 +11,6 @@ examples of asma's usage and can be discarded. ) -( - Common macros for use later on. -) - -%asma-IF-ERROR { ;asma/error LDA2 ORA } - ( Asma's public interface. These routines are what are expected to be called from programs that bundle @@ -32,7 +26,7 @@ ;asma-init-first-pass JSR2 ;asma-flush-ignore ;asma/flush-fn STA2 ;asma/src-filename LDA2 ;asma-assemble-file-pass JSR2 - asma-IF-ERROR ,&error JCN + ;asma/error LDA2 ORA ,&error JCN ;asma-init-next-pass JSR2 ;asma-flush-to-file ;asma/flush-fn STA2 @@ -40,7 +34,7 @@ ;asma-flush-to-console ;asma/flush-fn STA2 &filename-present ;asma/src-filename LDA2 ;asma-assemble-file-pass JSR2 - asma-IF-ERROR ,&error JCN + ;asma/error LDA2 ORA ,&error JCN ( flush output buffer ) ;asma-output/ptr LDA2 ;asma-write-buffer SUB2 ;asma/flush-fn LDA2 JSR2 @@ -226,7 +220,7 @@ ROT2 ( func* line^ buf* size^ filename* ) ,file-read-chunks JSR - asma-IF-ERROR ,&error JCN + ;asma/error LDA2 ORA ,&error JCN &error POP2 POP2 POP2 POP2 POP2 @@ -318,7 +312,7 @@ LDAk #0a NEQ ( end-chunk* ws-char* not-newline / line^ start-of-token* ) #00 OVR2 STA STH2r ,asma-assemble-token JSR ( end-chunk* ws-char* not-newline / line^ ) - asma-IF-ERROR ,&error JCN + ;asma/error LDA2 ORA ,&error JCN ,¬-newline JCN ,asma/lines LDR2 INC2 ,asma/lines STR2 ¬-newline ( end-chunk* ws-char* / line^ ) @@ -362,9 +356,9 @@ asma/state contains several meaningful bits: 0x02 we are in a comment, 0x04 we are in a macro body, - 0x10 we are in a macro body that we are ignoring + 0x08 we are in a macro body that we are ignoring (because the macro was already defined in a previous pass). - Since 0x10 never appears without 0x04, the lowest bit set in asma/state is + Since 0x08 never appears without 0x04, the lowest bit set in asma/state is always 0x00, 0x02, or 0x04, which is very handy for use with jump tables. The lowest bit set can be found easily by #00 (n) SUBk AND. ) @@ -596,14 +590,11 @@ -body routines) tokens that fail to match any first letter in their tree. ) -%asma-STATE-SET { ;asma/state LDA ORA ;asma/state STA } -%asma-STATE-CLEAR { #ff EOR ;asma/state LDA AND ;asma/state STA } - @asma-comment-more ;asma/token LDA2 ;strlen JSR2 ORA ,asma-ignore JCN @asma-comment-start ;asma/comment-level LDAk INC ROT ROT STA - #02 asma-STATE-SET + ;asma/state LDA #02 ORA ;asma/state STA @asma-ignore JMP2r @@ -611,7 +602,7 @@ ;asma/token LDA2 ;strlen JSR2 ORA ,asma-ignore JCN ;asma/comment-level LDAk #01 SUB DUP SWP2 STA ,asma-ignore JCN @asma-comment-end - #02 asma-STATE-CLEAR + ;asma/state LDA #0c AND ;asma/state STA JMP2r @asma-macro-define @@ -628,22 +619,22 @@ #0000 ;append-heap-short JSR2 ( less-than pointer ) #0000 ;append-heap-short JSR2 ( greater-than pointer ) ;asma/token LDA2 ;append-heap-string JSR2 ( key ) - #04 asma-STATE-SET + ;asma/state LDA #04 ORA ;asma/state STA JMP2r &ignore-macro - #14 asma-STATE-SET + ;asma/state LDA #0c ORA ;asma/state STA JMP2r @asma-macro-body - ;asma/state LDA #10 AND ,&skip JCN + ;asma/state LDA #08 AND ,&skip JCN ;asma/token LDA2 ;append-heap-string JSR2 &skip JMP2r @asma-macro-end #00 ;append-heap-byte JSR2 - #14 asma-STATE-CLEAR + ;asma/state LDA #02 AND ;asma/state STA JMP2r @asma-label-define @@ -852,7 +843,7 @@ &keep-going DUP2k ;strlen JSR2 INC2 ADD2 - SWP2 ;asma-assemble-token JSR2 asma-IF-ERROR ,¯o-error JCN + SWP2 ;asma-assemble-token JSR2 ;asma/error LDA2 ORA ,¯o-error JCN ,¯o-loop JMP ¯o-error diff --git a/projects/library/math32.tal b/projects/library/math32.tal index 1c27c1d..4107697 100644 --- a/projects/library/math32.tal +++ b/projects/library/math32.tal @@ -54,10 +54,6 @@ ( - mul32 memory, 12 bytes ) ( - _divmod32 memory, 16 bytes ) -%COMPLEMENT32 { SWP2 #ffff EOR2 SWP2 #ffff EOR2 } -%DUP4 { OVR2 OVR2 } -%POP4 { POP2 POP2 } - ( bitcount: number of bits needed to represent number ) ( equivalent to floor[log2[x]] + 1 ) @@ -164,7 +160,7 @@ ( ~x ) @complement32 ( x** -> ~x** ) - COMPLEMENT32 JMP2r + SWP2 #ffff EOR2 SWP2 #ffff EOR2 JMP2r ( temporary registers ) ( shared by most operations, except mul32 and div32 ) @@ -289,7 +285,7 @@ ( -x ) @negate32 ( x** -> -x** ) - COMPLEMENT32 + ;complement32 JSR2 INC2 ( ~xhi -xlo ) DUP2 #0000 NEQ2 ( ~xhi -xlo non-zero? ) ,&done JCN ( xlo non-zero => don't inc hi ) @@ -414,10 +410,10 @@ ( greatest common divisor - euclidean algorithm ) @gcd32 ( x** y** -> z** ) &loop ( x y ) - DUP4 ( x y y ) + OVR2 OVR2 ( x y y ) ;is-zero32 JSR2 ( x y y=0? ) ,&done JCN ( x y ) - DUP4 ( x y y ) + OVR2 OVR2 ( x y y ) STH2 STH2 ( x y [y] ) ;mod32 JSR2 ( r=x%y [y] ) STH2r ( rhi rlo yhi [ylo] ) @@ -428,5 +424,5 @@ ROT2 ( yhi ylo rhi rlo ) ,&loop JMP &done - POP4 ( x ) + POP2 POP2 ( x ) JMP2r diff --git a/projects/software/neralie.tal b/projects/software/neralie.tal index 7890477..6e00409 100644 --- a/projects/software/neralie.tal +++ b/projects/software/neralie.tal @@ -1,14 +1,5 @@ ( app/neralie : clock with arvelie date ) -%PAD { #0018 } - -%MOD { DIVk MUL SUB } -%MOD2 { DIV2k MUL2 SUB2 } - -%h { .DateTime/hour DEI } -%m { .DateTime/minute DEI } -%s { .DateTime/second DEI } - ( devices ) |00 @System [ &vector $2 &pad $6 &r $2 &g $2 &b $2 ] @@ -47,7 +38,7 @@ #01 .fps/current STZ ( set size ) - PAD + #0018 ( padding ) DUP2 .frame/x1 STZ2 DUP2 .frame/y1 STZ2 DUP2 .Screen/width DEI2 SWP2 SUB2 #0001 SUB2 .frame/x2 STZ2 @@ -79,22 +70,22 @@ BRK @neralie-calc ( -- ) ( add up fractions of a pulse, store tenths in n6 ) - #0120 #00 h MUL2 - #00c0 #00 m MUL2 ADD2 - #00f8 #00 s MUL2 ADD2 + #0120 #00 .DateTime/hour DEI MUL2 + #00c0 #00 .DateTime/minute DEI MUL2 ADD2 + #00f8 #00 .DateTime/second DEI MUL2 ADD2 #0271 #00 .fps/next LDZ MUL2 #00 .fps/current LDZ DIV2 #30 SFT2 ADD2 #01b0 ;modf JSR2 SWP2 #0017 MUL2 #03e8 DIV2 .neralie/n6 STZ POP ( add up units and tens of pulses, store in n5 and n4 ) - #0042 #00 h MUL2 ADD2 - #005e #00 m MUL2 ADD2 - #000b #00 s MUL2 ADD2 + #0042 #00 .DateTime/hour DEI MUL2 ADD2 + #005e #00 .DateTime/minute DEI MUL2 ADD2 + #000b #00 .DateTime/second DEI MUL2 ADD2 #000a ;modf JSR2 SWP2 .neralie/n5 STZ POP #000a ;modf JSR2 SWP2 .neralie/n4 STZ POP ( add up hundreds of pulses + 10 x beats, store in n0123 ) - #01a0 #00 h MUL2 ADD2 - #0006 #00 m MUL2 ADD2 .neralie/n0123 STZ2 + #01a0 #00 .DateTime/hour DEI MUL2 ADD2 + #0006 #00 .DateTime/minute DEI MUL2 ADD2 .neralie/n0123 STZ2 JMP2r @@ -109,14 +100,14 @@ JMP2r .DateTime/year DEI2 #07d6 SUB2 NIP DUP #0a DIV #00 SWP #30 SFT2 ;font-numbers ADD2 .Screen/addr DEO2 #01 .Screen/sprite DEO - #0a MOD #00 SWP #30 SFT2 ;font-numbers ADD2 .Screen/addr DEO2 + #0a DIVk MUL SUB #00 SWP #30 SFT2 ;font-numbers ADD2 .Screen/addr DEO2 #01 .Screen/sprite DEO .DateTime/doty DEI2 DUP2 #000e DIV2 #30 SFT2 ;font-letters ADD2 .Screen/addr DEO2 #01 .Screen/sprite DEO - #000e MOD2 + #000e DIV2k MUL2 SUB2 DUP2 #000a DIV2 ,digit JSR - #000a MOD2 ,digit JSR + #000a DIV2k MUL2 SUB2 ,digit JSR .Screen/x DEI2 #0008 ADD2 .Screen/x DEO2 @@ -223,8 +214,8 @@ JMP2r @update-fps ( -- ) .fps/next LDZ INC .fps/next STZ - s .fps/second LDZ NEQ JMP JMP2r - s .fps/second STZ + .DateTime/second DEI .fps/second LDZ NEQ JMP JMP2r + .DateTime/second DEI .fps/second STZ .fps/next LDZ .fps/current STZ #00 .fps/next STZ