uxn

Varvara Ordinator, written in ANSI C(SDL2)
git clone https://git.eamoncaddigan.net/uxn.git
Log | Files | Refs | README | LICENSE

commit a4c8066043c3e3576c86f562b3ee507f7eee8b27
parent 76a38e3db94ccd3a44e298fda688a1289c64b710
Author: neauoire <aliceffekt@gmail.com>
Date:   Wed, 12 May 2021 18:28:45 -0700

Cleaned example files

Diffstat:
Mbuild.sh | 2+-
Mprojects/demos/bifurcan.usm | 3+--
Mprojects/demos/drum-rack.usm | 74+++++++++++++++++++++++++++++++++++++-------------------------------------
Mprojects/demos/life.usm | 69++++++++++++++++++++++++++++++++++-----------------------------------
Mprojects/demos/piano.usm | 53++++++++++++++++++++++++++---------------------------
Mprojects/demos/polycat.usm | 25++++++++++++-------------
Mprojects/demos/theme.usm | 25+++++++++++++------------
Mprojects/examples/devices/console.usm | 2+-
Mprojects/examples/devices/datetime.usm | 20++++++++------------
Mprojects/examples/devices/mouse.usm | 2+-
Mprojects/examples/devices/screen.usm | 16++++++----------
Mprojects/examples/gui/picture.usm | 4++--
Msrc/debugger.c | 3+--
Msrc/devices/apu.c | 6+++---
Msrc/devices/mpu.c | 4++--
Msrc/devices/ppu.c | 4++--
Msrc/emulator.c | 9++++-----
Msrc/uxn.c | 3+--
Msrc/uxn.h | 10+++++-----
19 files changed, 160 insertions(+), 174 deletions(-)

diff --git a/build.sh b/build.sh @@ -42,7 +42,7 @@ then fi echo "Assembling.." -./bin/uxnasm projects/demos/bifurcan.usm bin/boot.rom +./bin/uxnasm projects/demos/polycat.usm bin/boot.rom echo "Running.." if [ "${2}" = '--cli' ]; diff --git a/projects/demos/bifurcan.usm b/projects/demos/bifurcan.usm @@ -53,7 +53,6 @@ BRK .DateTime/second DEI .last LDZ NEQ #01 JCN [ BRK ] .DateTime/second DEI .last STZ - ;redraw JSR2 BRK @@ -107,7 +106,7 @@ RTN &loop ( save-x ) OVR #03 MOD TOS #0008 MUL2 .anchor/x LDZ2 ADD2 .Screen/x DEO2 ( save-y ) OVR #03 DIV TOS #0008 MUL2 .anchor/y LDZ2 ADD2 .Screen/y DEO2 - ( get digit* ) OVR DUPr STHr #02 MUL TOS ;digits ADD2 LDA2 + ( get digit* ) OVR STHkr #02 MUL TOS ;digits ADD2 LDA2 ( get bit ) ROT #0e SWP SUB TOS SFT2 #0001 AND2 ( set tile ) #0008 MUL2 ;tiles ADD2 ( set style ) .style LDZ #10 MUL TOS ADD2 diff --git a/projects/demos/drum-rack.usm b/projects/demos/drum-rack.usm @@ -156,7 +156,7 @@ BRK &loop OVR STH ( x ) .mix-view/x1 LDZ2 #0074 ++ - ( y ) .mix-view/y1 LDZ2 PAD-HEIGHT DUPr STHr TOS ** ++ #0002 ++ + ( y ) .mix-view/y1 LDZ2 PAD-HEIGHT STHkr TOS ** ++ #0002 ++ ( output ) .Audio0/output STHr #10 * + DEI ;draw-monitor JSR2 ( incr ) SWP #01 + SWP @@ -246,40 +246,40 @@ BRK ( knob ) .Mouse/x DEI2 .mix-view/x1 LDZ2 -- #0010 // TOB ( adsr ) DUP #00 ! ,&no-a JCN - .Audio0/adsr [ DUPr STHr #10 * + ] DEI + .Audio0/adsr [ STHkr #10 * + ] DEI #10 .Mouse/state DEI #10 = #e0 * + + - .Audio0/adsr [ DUPr STHr #10 * + ] DEO &no-a + .Audio0/adsr [ STHkr #10 * + ] DEO &no-a DUP #01 ! ,&no-d JCN - .Audio0/adsr [ DUPr STHr #10 * + ] DEI + .Audio0/adsr [ STHkr #10 * + ] DEI DUP #f0 AND STH #01 .Mouse/state DEI #10 = #0e * + + #0f AND STHr + - .Audio0/adsr [ DUPr STHr #10 * + ] DEO &no-d + .Audio0/adsr [ STHkr #10 * + ] DEO &no-d DUP #02 ! ,&no-s JCN - .Audio0/adsr [ DUPr STHr #10 * + ] #01 + DEI + .Audio0/adsr [ STHkr #10 * + ] #01 + DEI #10 .Mouse/state DEI #10 = #e0 * + + - .Audio0/adsr [ DUPr STHr #10 * + ] #01 + DEO &no-s + .Audio0/adsr [ STHkr #10 * + ] #01 + DEO &no-s DUP #03 ! ,&no-r JCN - .Audio0/adsr [ DUPr STHr #10 * + ] #01 + DEI + .Audio0/adsr [ STHkr #10 * + ] #01 + DEI DUP #f0 AND STH #01 .Mouse/state DEI #10 = #0e * + + #0f AND STHr + - .Audio0/adsr [ DUPr STHr #10 * + ] #01 + DEO &no-r + .Audio0/adsr [ STHkr #10 * + ] #01 + DEO &no-r ( modes ) DUP #04 ! ,&no-repeat JCN - .modes [ DUPr STHr + ] LDZ + .modes [ STHkr + ] LDZ #00 = - .modes [ DUPr STHr + ] STZ &no-repeat + .modes [ STHkr + ] STZ &no-repeat ( volume ) DUP #05 ! ,&no-left JCN - .Audio0/volume [ DUPr STHr #10 * + ] DEI + .Audio0/volume [ STHkr #10 * + ] DEI #10 .Mouse/state DEI #10 = #e0 * + + - .Audio0/volume [ DUPr STHr #10 * + ] DEO &no-left + .Audio0/volume [ STHkr #10 * + ] DEO &no-left DUP #06 ! ,&no-right JCN - .Audio0/volume [ DUPr STHr #10 * + ] DEI + .Audio0/volume [ STHkr #10 * + ] DEI DUP #f0 AND STH #01 .Mouse/state DEI #10 = #0e * + + #0f AND STHr + - .Audio0/volume [ DUPr STHr #10 * + ] DEO &no-right + .Audio0/volume [ STHkr #10 * + ] DEO &no-right POP ( release ) #00 .Mouse/state DEO - DUPr STHr ;draw-mixer JSR2 + STHkr ;draw-mixer JSR2 POPr @@ -371,21 +371,21 @@ RTN ( adsr ) DUP2 .mix-view/x1 LDZ2 SWP2 - .Audio0/adsr [ DUPr STHr #10 * + ] DEI #04 SFT ;draw-knob JSR2 + .Audio0/adsr [ STHkr #10 * + ] DEI #04 SFT ;draw-knob JSR2 DUP2 .mix-view/x1 LDZ2 #0010 ++ SWP2 - .Audio0/adsr [ DUPr STHr #10 * + ] DEI #0f AND ;draw-knob JSR2 + .Audio0/adsr [ STHkr #10 * + ] DEI #0f AND ;draw-knob JSR2 DUP2 .mix-view/x1 LDZ2 #0020 ++ SWP2 - .Audio0/adsr [ DUPr STHr #10 * + ] #01 + DEI #04 SFT ;draw-knob JSR2 + .Audio0/adsr [ STHkr #10 * + ] #01 + DEI #04 SFT ;draw-knob JSR2 DUP2 .mix-view/x1 LDZ2 #0030 ++ SWP2 - .Audio0/adsr [ DUPr STHr #10 * + ] #01 + DEI #0f AND ;draw-knob JSR2 + .Audio0/adsr [ STHkr #10 * + ] #01 + DEI #0f AND ;draw-knob JSR2 ( once/repeat ) DUP2 .mix-view/x1 LDZ2 #0040 ++ SWP2 - .modes [ DUPr STHr + ] LDZ ;draw-switch JSR2 + .modes [ STHkr + ] LDZ ;draw-switch JSR2 ( volume ) DUP2 .mix-view/x1 LDZ2 #0050 ++ SWP2 - .Audio0/volume [ DUPr STHr #10 * + ] DEI #04 SFT ;draw-knob JSR2 + .Audio0/volume [ STHkr #10 * + ] DEI #04 SFT ;draw-knob JSR2 DUP2 .mix-view/x1 LDZ2 #0060 ++ SWP2 - .Audio0/volume [ DUPr STHr #10 * + ] DEI #0f AND ;draw-knob JSR2 + .Audio0/volume [ STHkr #10 * + ] DEI #0f AND ;draw-knob JSR2 POP2 POPr @@ -395,7 +395,7 @@ RTN STH STH - DUPr STHr + STHkr DUP #04 / SWP #04 MOD TOS PAD-WIDTH ** ( center ) .pad-view/x1 LDZ2 ++ ROT TOS PAD-HEIGHT ** ( center ) .pad-view/y1 LDZ2 ++ @@ -409,21 +409,21 @@ RTN ( draw name ) OVR2 #0002 ++ OVR2 #0002 ++ - ;pad-name DUPr STHr TOS #0005 ** ++ + ;pad-name STHkr TOS #0005 ** ++ #20 OVRr STHr + ;draw-label JSR2 ( draw note ) OVR2 #0003 ++ .Screen/x DEO2 DUP2 #0014 ++ .Screen/y DEO2 - ( get pitch ) DUPr STHr TOS ;pad-pitch ++ LDA + ( get pitch ) STHkr TOS ;pad-pitch ++ LDA #0c / TOS #0008 ** ;font-hex ++ .Screen/addr DEO2 #21 .Screen/color DEO ( draw octave ) OVR2 #000b ++ .Screen/x DEO2 DUP2 #0014 ++ .Screen/y DEO2 - ( get pitch ) DUPr STHr TOS ;pad-pitch ++ LDA + ( get pitch ) STHkr TOS ;pad-pitch ++ LDA #0c MOD TOS #0008 ** ;font-notes ++ .Screen/addr DEO2 #21 .Screen/color DEO @@ -470,9 +470,9 @@ RTN #00 #0f &loop - OVR #10 SWP - DUPr STHr #0f AND < #01 + .Screen/color DEO + OVR #10 SWP - STHkr #0f AND < #01 + .Screen/color DEO .Screen/x DEI2 #0002 ++ .Screen/x DEO2 - OVR #10 SWP - DUPr STHr #04 SFT < #01 + .Screen/color DEO + OVR #10 SWP - STHkr #04 SFT < #01 + .Screen/color DEO .Screen/x DEI2 #0002 -- .Screen/x DEO2 .Screen/y DEI2 #0002 ++ .Screen/y DEO2 ( incr ) SWP #01 + SWP @@ -491,7 +491,7 @@ RTN DUP2 #0018 ++ &loop ( move ) OVR2 .Screen/y DEO2 - ( draw ) DUPr STHr .Screen/color DEO + ( draw ) STHkr .Screen/color DEO ( incr ) .Screen/addr DEI2 #0008 ++ .Screen/addr DEO2 ( incr ) SWP2 #0008 ++ SWP2 LTH2k ,&loop JCN @@ -534,9 +534,9 @@ RTN ( draw ) #21 .Screen/color DEO .Screen/x DEI2 #0004 ++ .Screen/x DEO2 .Screen/y DEI2 #0008 ++ .Screen/y DEO2 - ;font-hex #00 DUPr STHr #08 * ++ .Screen/addr DEO2 + ;font-hex #00 STHkr #08 * ++ .Screen/addr DEO2 ( draw ) #21 .Screen/color DEO - .Screen/x DEI2 #0004 -- #00 #00 DUPr STHr ;knob-offsetx ++ LDA ++ .Screen/x DEO2 + .Screen/x DEI2 #0004 -- #00 #00 STHkr ;knob-offsetx ++ LDA ++ .Screen/x DEO2 .Screen/y DEI2 #0010 -- #00 #00 STHr ;knob-offsety ++ LDA ++ .Screen/y DEO2 ;knob-icns #0020 ++ .Screen/addr DEO2 ( draw ) #25 .Screen/color DEO @@ -546,16 +546,16 @@ RTN @draw-switch ( x* y* value -- ) STH .Screen/y DEO2 .Screen/x DEO2 - DUPr STHr #20 * #00 SWP ;switch-icns ++ + STHkr #20 * #00 SWP ;switch-icns ++ DUP2 .Screen/addr DEO2 - ( draw ) #21 DUPr STHr + .Screen/color DEO + ( draw ) #21 STHkr + .Screen/color DEO .Screen/x DEI2 #0008 ++ .Screen/x DEO2 DUP2 #0008 ++ .Screen/addr DEO2 - ( draw ) #21 DUPr STHr + .Screen/color DEO + ( draw ) #21 STHkr + .Screen/color DEO .Screen/y DEI2 #0008 ++ .Screen/y DEO2 .Screen/x DEI2 #0008 -- .Screen/x DEO2 DUP2 #0010 ++ .Screen/addr DEO2 - ( draw ) #21 DUPr STHr + .Screen/color DEO + ( draw ) #21 STHkr + .Screen/color DEO .Screen/x DEI2 #0008 ++ .Screen/x DEO2 #0018 ++ .Screen/addr DEO2 ( draw ) #21 STHr + .Screen/color DEO @@ -590,7 +590,7 @@ RTN STH2r &loop DUP2 LDA #00 SWP #0030 -- #0008 ** ;font-num-uc ++ .Screen/addr DEO2 - ( draw ) DUPr STHr .Screen/color DEO + ( draw ) STHkr .Screen/color DEO ( incr ) #0001 ++ ( incr ) .Screen/x DEI2 #0008 ++ .Screen/x DEO2 DUP2 LDA #00 ! ,&loop JCN diff --git a/projects/demos/life.usm b/projects/demos/life.usm @@ -9,7 +9,8 @@ %++ { ADD2 } %-- { SUB2 } %** { MUL2 } %// { DIV2 } %<< { LTH2 } %>> { GTH2 } %== { EQU2 } %!! { NEQ2 } -%INCR { #01 + } %DECR { #01 - } +%INCR { SWP #01 + SWP } +%DECR { SWP #01 - SWP } %TOS { #00 SWP } %TOB { SWP POP } %RTN { JMP2r } %MOD { DUP2 / * - } %SFL { #40 SFT SFT } @@ -18,6 +19,7 @@ %BANK1 { #8000 } %BANK2 { #a000 } %GET-SIZE { WIDTH TOS #0008 // HEIGHT TOS ** } +%GET-ITERATORS { SWP2k POP SWP POP } ( devices ) @@ -67,10 +69,10 @@ BRK .Mouse/state DEI #00 = #01 JCN [ BRK ] .world/paused LDZ #00 ! #01 JCN [ BRK ] - ( incr frame ) .world/frame LDZ INCR [ DUP ] .world/frame STZ + ( incr frame ) .world/frame LDZ #01 + [ DUP ] .world/frame STZ ( reset count ) #0000 .world/count STZ2 - #10 MOD #00 ! #01 JCN [ BRK ] + #02 MOD #00 = #01 JCN [ BRK ] ( clear buffer ) BANK2 DUP2 GET-SIZE ++ @@ -148,15 +150,14 @@ BRK #00 HEIGHT &ver OVR TOS #0002 ** .anchor/y LDZ2 ++ .Screen/y DEO2 - OVR STH #00 WIDTH &hor OVR TOS #0002 ** .anchor/x LDZ2 ++ .Screen/x DEO2 - OVR DUPr STHr ,get-cell JSR INCR .Screen/color DEO - SWP INCR SWP + GET-ITERATORS ,get-cell JSR #01 + .Screen/color DEO + INCR NEQk ,&hor JCN - POP2 POPr - SWP INCR SWP + POP2 + INCR NEQk ,&ver JCN POP2 @@ -173,7 +174,7 @@ RTN DUP2 ,get-index JSR STH2 POP #08 MOD #01 SWP SFL - DUP2r LDAr STHr SWP ORA + LDAkr STHr SWP ORA STH2r STA RTN @@ -189,14 +190,14 @@ RTN @get-neighbours ( x y -- neighbours ) - ( -1,-1 ) DUP2 DECR SWP DECR SWP ,get-cell JSR STH - ( 0,-1 ) DUP2 DECR ,get-cell JSR STH ADDr - ( +1,-1 ) DUP2 DECR SWP INCR SWP ,get-cell JSR STH ADDr - ( -1, 0 ) DUP2 SWP DECR SWP ,get-cell JSR STH ADDr - ( +1, 0 ) DUP2 SWP INCR SWP ,get-cell JSR STH ADDr - ( -1,+1 ) DUP2 INCR SWP DECR SWP ,get-cell JSR STH ADDr - ( 0,+1 ) DUP2 INCR ,get-cell JSR STH ADDr - ( +1,+1 ) INCR SWP INCR SWP ,get-cell JSR STH ADDr + ( -1,-1 ) DUP2 #01 - DECR ,get-cell JSR STH + ( 0,-1 ) DUP2 #01 - ,get-cell JSR STH ADDr + ( +1,-1 ) DUP2 #01 - INCR ,get-cell JSR STH ADDr + ( -1, 0 ) DUP2 DECR ,get-cell JSR STH ADDr + ( +1, 0 ) DUP2 INCR ,get-cell JSR STH ADDr + ( -1,+1 ) DUP2 #01 + DECR ,get-cell JSR STH ADDr + ( 0,+1 ) DUP2 #01 + ,get-cell JSR STH ADDr + ( +1,+1 ) #01 + INCR ,get-cell JSR STH ADDr STHr RTN @@ -205,18 +206,17 @@ RTN #00 HEIGHT &ver - OVR STH #00 WIDTH &hor - OVR DUPr STHr STH2 - ( x y ) DUP2r STH2r - ( neighbours ) DUP2r STH2r ,get-neighbours JSR - ( state ) STH2r ;get-cell JSR2 + GET-ITERATORS + ( x y ) DUP2 + ( neighbours ) DUP2 ,get-neighbours JSR + ( state ) ROT ROT ;get-cell JSR2 ,run-cell JSR - SWP INCR SWP + INCR NEQk ,&hor JCN - POP2 POPr - SWP INCR SWP + POP2 + INCR NEQk ,&ver JCN POP2 @@ -246,7 +246,7 @@ RTN ( save in buffer ) STH2 DUP2 POP #08 MOD #01 SWP SFL - DUP2r LDAr STHr SWP ORA + LDAkr STHr SWP ORA STH2r STA RTN @@ -255,21 +255,23 @@ RTN STH SWP DUP #04 SFT TOS #0008 ** ;font-hex ++ .Screen/addr DEO2 - ( draw ) DUPr STHr .Screen/color DEO + ( draw ) STHkr .Screen/color DEO #0f AND TOS #0008 ** ;font-hex ++ .Screen/addr DEO2 .Screen/x DEI2 #0008 ++ .Screen/x DEO2 - ( draw ) DUPr STHr .Screen/color DEO + ( draw ) STHkr .Screen/color DEO DUP #04 SFT TOS #0008 ** ;font-hex ++ .Screen/addr DEO2 .Screen/x DEI2 #0008 ++ .Screen/x DEO2 - ( draw ) DUPr STHr .Screen/color DEO + ( draw ) STHkr .Screen/color DEO #0f AND TOS #0008 ** ;font-hex ++ .Screen/addr DEO2 .Screen/x DEI2 #0008 ++ .Screen/x DEO2 ( draw ) STHr .Screen/color DEO RTN -@font-hex ( 0-F ) -[ +@cursor + 80c0 e0f0 f8e0 1000 + +@font-hex 007c 8282 8282 827c 0030 1010 1010 1010 007c 8202 7c80 80fe 007c 8202 1c02 827c 000c 1424 4484 fe04 00fe 8080 7c02 827c @@ -277,7 +279,4 @@ RTN 007c 8282 7c82 827c 007c 8282 7e02 827c 007c 8202 7e82 827e 00fc 8282 fc82 82fc 007c 8280 8080 827c 00fc 8282 8282 82fc - 007c 8280 f080 827c 007c 8280 f080 8080 ] - -@cursor [ - 80c0 e0f0 f8e0 1000 ] + 007c 8280 f080 827c 007c 8280 f080 8080 diff --git a/projects/demos/piano.usm b/projects/demos/piano.usm @@ -310,7 +310,7 @@ RTN DUP2 #0018 ++ &loop ( move ) OVR2 .Screen/y DEO2 - ( draw ) STHrk .Screen/color DEO + ( draw ) STHkr .Screen/color DEO ( incr ) .Screen/addr DEI2 #0008 ++ .Screen/addr DEO2 ( incr ) SWP2 #0008 ++ SWP2 LTH2k ,&loop JCN @@ -390,7 +390,7 @@ RTN .wave-view/y1 LDZ2 DUP2 #0020 ++ &loop OVR2 .Screen/y DEO2 - ( draw ) STHrk .Screen/color DEO + ( draw ) STHkr .Screen/color DEO ( incr ) SWP2 #0001 ++ SWP2 LTH2k ,&loop JCN POP2 POP2 @@ -414,9 +414,9 @@ RTN ( draw ) #21 .Screen/color DEO .Screen/x DEI2 #0004 ++ .Screen/x DEO2 .Screen/y DEI2 #0008 ++ .Screen/y DEO2 - ;font-hex #00 STHrk #08 * ++ .Screen/addr DEO2 + ;font-hex #00 STHkr #08 * ++ .Screen/addr DEO2 ( draw ) #21 .Screen/color DEO - .Screen/x DEI2 #0004 -- #00 #00 STHrk ;knob-offsetx ++ LDA ++ .Screen/x DEO2 + .Screen/x DEI2 #0004 -- #00 #00 STHkr ;knob-offsetx ++ LDA ++ .Screen/x DEO2 .Screen/y DEI2 #0010 -- #00 #00 STHr ;knob-offsety ++ LDA ++ .Screen/y DEO2 ;knob-icns #0020 ++ .Screen/addr DEO2 ( draw ) #25 .Screen/color DEO @@ -427,13 +427,13 @@ RTN STH SWP DUP #04 SFT TOS #0008 ** ;font-hex ++ .Screen/addr DEO2 - ( draw ) STHrk .Screen/color DEO + ( draw ) STHkr .Screen/color DEO #0f AND TOS #0008 ** ;font-hex ++ .Screen/addr DEO2 .Screen/x DEI2 #0008 ++ .Screen/x DEO2 - ( draw ) STHrk .Screen/color DEO + ( draw ) STHkr .Screen/color DEO DUP #04 SFT TOS #0008 ** ;font-hex ++ .Screen/addr DEO2 .Screen/x DEI2 #0008 ++ .Screen/x DEO2 - ( draw ) STHrk .Screen/color DEO + ( draw ) STHkr .Screen/color DEO #0f AND TOS #0008 ** ;font-hex ++ .Screen/addr DEO2 .Screen/x DEI2 #0008 ++ .Screen/x DEO2 ( draw ) STHr .Screen/color DEO @@ -459,49 +459,48 @@ RTN RTN -@cursor [ - 80c0 e0f0 f8e0 1000 ] +@cursor + 80c0 e0f0 f8e0 1000 -@arrow-icns [ +@arrow-icns 0010 387c fe10 1000 - 0010 1010 fe7c 3810 ] + 0010 1010 fe7c 3810 -@notes [ +@notes 3c 3e 40 41 43 45 47 - 48 4a 4c 4d 4f 51 53 ] + 48 4a 4c 4d 4f 51 53 -@keys-left-icns [ +@keys-left-icns 7c7c 7c7c 7c7c 7c7c 7c7c 7c7c 7c7c 7e7f - 7f7f 7f7f 7f7f 3e00 ] + 7f7f 7f7f 7f7f 3e00 -@keys-middle-icns [ +@keys-middle-icns 1c1c 1c1c 1c1c 1c1c 1c1c 1c1c 1c1c 3e7f - 7f7f 7f7f 7f7f 3e00 ] + 7f7f 7f7f 7f7f 3e00 -@keys-right-icns [ +@keys-right-icns 1f1f 1f1f 1f1f 1f1f 1f1f 1f1f 1f1f 3f7f - 7f7f 7f7f 7f7f 3e00 ] + 7f7f 7f7f 7f7f 3e00 -@knob-icns [ +@knob-icns 0003 0c10 2020 4040 00c0 3008 0404 0202 4040 2020 100c 0300 0202 0404 0830 c000 - 0000 183c 3c18 0000 ] + 0000 183c 3c18 0000 -@knob-offsetx [ +@knob-offsetx 01 00 00 00 00 01 02 03 - 05 06 07 08 08 08 08 07 ] + 05 06 07 08 08 08 08 07 -@knob-offsety [ +@knob-offsety 07 06 05 03 02 01 00 00 - 00 00 01 02 03 05 06 07 ] + 00 00 01 02 03 05 06 07 @font-hex ( 0-F ) -[ 007c 8282 8282 827c 0030 1010 1010 1010 007c 8202 7c80 80fe 007c 8202 1c02 827c 000c 1424 4484 fe04 00fe 8080 7c02 827c @@ -509,7 +508,7 @@ RTN 007c 8282 7c82 827c 007c 8282 7e02 827c 007c 8202 7e82 827e 00fc 8282 fc82 82fc 007c 8280 8080 827c 00fc 8282 8282 82fc - 007c 8280 f080 827c 007c 8280 f080 8080 ] + 007c 8280 f080 827c 007c 8280 f080 8080 @piano-path "projects/sounds/piano.pcm $1 @violin-path "projects/sounds/violin.pcm $1 diff --git a/projects/demos/polycat.usm b/projects/demos/polycat.usm @@ -64,7 +64,7 @@ BRK ( ears ) .cat/y LDZ2 .Screen/y DEO2 - .cat/x LDZ2 DUP2 STH2 #0008 SUB2 .Screen/x DEO2 + .cat/x LDZ2 STH2k #0008 SUB2 .Screen/x DEO2 ;ears .Screen/addr DEO2 #41 .Screen/color DEO STH2r .Screen/x DEO2 @@ -79,7 +79,7 @@ RTN @draw-eye ( quad* -- ) .cat/y LDZ2 #0008 ADD2 .Screen/y DEO2 - .cat/x LDZ2 DUP2 STH2 #0008 SUB2 .Screen/x DEO2 + .cat/x LDZ2 STH2k #0008 SUB2 .Screen/x DEO2 DUP2 ;eye ADD2 .Screen/addr DEO2 ( draw ) #41 .Screen/color DEO STH2r .Screen/x DEO2 @@ -91,7 +91,7 @@ RTN @draw-tail ( frame* -- ) .cat/y LDZ2 #0010 ADD2 .Screen/y DEO2 - .cat/x LDZ2 DUP2 STH2 #0008 SUB2 .Screen/x DEO2 + .cat/x LDZ2 STH2k #0008 SUB2 .Screen/x DEO2 ;body .Screen/addr DEO2 ( draw ) #41 .Screen/color DEO STH2r .Screen/x DEO2 @@ -138,14 +138,14 @@ RTN RTN -@cursor [ - 80c0 e0f0 f8e0 1000 ] +@cursor + 80c0 e0f0 f8e0 1000 -@ears [ +@ears 081c 3e3e 7f7f ffff 081c 3e3e 7f7f fffc - 081c 3c3e 7e7e ffff 081c 3c3e 7e7e ff1f ] + 081c 3c3e 7e7e ffff 081c 3c3e 7e7e ff1f -@eye [ +@eye ffff ffff ff7f 3f0f f7ef cfe7 f07c 3f0f ffff ffff fffe fcf0 87c3 c183 071e fcf0 ffff ffff ff7f 3f0f f0e1 c1e0 f07c 3f0f @@ -154,17 +154,16 @@ RTN ffff ffff fffe fcf0 0783 c1c3 871e fcf0 ffff ffff ff7f 3f0f f0e0 c1e1 f07c 3f0f ffff ffff fffe fcf0 07f3 f9fb f71e fcf0 -] -@body [ +@body 0707 0707 0302 0200 0107 0707 0300 0000 e0f0 f0e0 e080 8000 c0f2 f9f9 fef8 b000 e0f0 f0e0 e080 8000 c0f2 f9f9 fef8 b000 e0f0 f0e0 e080 8000 c0f2 faf9 fef8 b000 e0f0 f0e0 e080 8000 c0f1 faf9 fef8 b000 0707 0707 0f08 1000 0307 0707 0f00 0000 - e0e0 e0e0 e080 8000 f2f9 f9fe b884 8400 ] + e0e0 e0e0 e080 8000 f2f9 f9fe b884 8400 -@ground [ +@ground bf00 5c02 0202 020c ef10 6f90 8080 8074 - ff00 fe01 0100 0116 fd00 3c40 4040 4028 ] + ff00 fe01 0100 0116 fd00 3c40 4040 4028 diff --git a/projects/demos/theme.usm b/projects/demos/theme.usm @@ -327,7 +327,7 @@ RTN &loop DUP2 LDA #00 SWP #0008 MUL2 ;font ADD2 .Screen/addr DEO2 - ( draw ) DUPr STHr .Screen/color DEO + ( draw ) STHkr .Screen/color DEO ( incr ) ++ ( incr ) .Screen/x DEI2 8+ .Screen/x DEO2 DUP2 LDA #00 NEQ ,&loop JCN @@ -339,13 +339,13 @@ RTN STH SWP DUP #04 SFT #00 SWP #0008 MUL2 ;font-hex ADD2 .Screen/addr DEO2 - ( draw ) DUPr STHr .Screen/color DEO + ( draw ) STHkr .Screen/color DEO #0f AND #00 SWP #0008 MUL2 ;font-hex ADD2 .Screen/addr DEO2 .Screen/x DEI2 8+ .Screen/x DEO2 - ( draw ) DUPr STHr .Screen/color DEO + ( draw ) STHkr .Screen/color DEO DUP #04 SFT #00 SWP #0008 MUL2 ;font-hex ADD2 .Screen/addr DEO2 .Screen/x DEI2 8+ .Screen/x DEO2 - ( draw ) DUPr STHr .Screen/color DEO + ( draw ) STHkr .Screen/color DEO #0f AND #00 SWP #0008 MUL2 ;font-hex ADD2 .Screen/addr DEO2 .Screen/x DEI2 8+ .Screen/x DEO2 ( draw ) STHr .Screen/color DEO @@ -363,13 +363,14 @@ RTN @sliderc_icn [ fcfe ffff ffff fefc ] @sliderd_icn [ 003c 7e7e 7e7e 3c00 ] -@preview_icn [ +@preview_icn 183c 66db db66 3c18 - 0000 183c 3c18 0000 ] + 0000 183c 3c18 0000 @radio_icns - [ 3c42 8181 8181 423c ] - [ 3c42 99bd bd99 423c ] -@font-hex [ + 3c42 8181 8181 423c + 3c42 99bd bd99 423c + +@font-hex 003c 464a 5262 3c00 0018 0808 0808 1c00 003c 4202 3c40 7e00 003c 421c 0242 3c00 000c 1424 447e 0400 007e 407c 0242 3c00 @@ -377,9 +378,9 @@ RTN 003c 423c 4242 3c00 003c 4242 3e02 3c00 003c 4242 7e42 4200 007c 427c 4242 7c00 003c 4240 4042 3c00 007c 4242 4242 7c00 - 007e 4078 4040 7e00 007e 4078 4040 4000 ] + 007e 4078 4040 7e00 007e 4078 4040 4000 -@font ( spectrum-zx font ) [ +@font ( spectrum-zx font ) 0000 0000 0000 0000 0000 2400 7e3c 0000 0000 2400 3c42 0000 0000 6c7c 7c38 1000 0010 387c 7c38 1000 0038 387c 6c10 3800 0010 387c 7c10 3800 0000 0018 1800 0000 007e 4242 4242 7e00 0000 1824 2418 0000 0018 2442 4224 1800 001e 063a 4a48 3000 @@ -411,4 +412,4 @@ RTN 0000 7844 4478 4040 0000 3c44 443c 0406 0000 2c30 2020 2000 0000 3840 3804 7800 0010 103c 1010 0c00 0000 4444 4444 3800 0000 4444 2828 1000 0000 4454 5454 2800 0000 4428 1028 4400 0000 4444 443c 0438 0000 7c08 1020 7c00 000c 0810 1008 0c00 - 0008 0808 0808 0800 0030 1008 0810 3000 0000 0032 4c00 0000 3c42 99a1 a199 423c ] + 0008 0808 0808 0800 0030 1008 0810 3000 0000 0032 4c00 0000 3c42 99a1 a199 423c diff --git a/projects/examples/devices/console.usm b/projects/examples/devices/console.usm @@ -10,7 +10,7 @@ |0100 ( -> ) - ;hello-word ,print JSR + ,hello-word ,print JSR BRK diff --git a/projects/examples/devices/datetime.usm b/projects/examples/devices/datetime.usm @@ -74,7 +74,7 @@ BRK #00 SWP SCALEX .Screen/x DEO2 OVR #0f MOD #00 EQU #01 ADD .Screen/color DEO ( incr ) SWP #01 ADD SWP - DUP2 LTH ,&loop JCN + LTHk ,&loop JCN POP2 ;draw-display JSR2 @@ -86,22 +86,22 @@ BRK .Screen/height DEI2 #0002 DIV2 #0048 ADD2 .Screen/y DEO2 .Screen/width DEI2 #0002 DIV2 DUP2 #0020 SUB2 .Screen/x DEO2 - ;font_hex #00 .DateTime/hour DEI #0a DIV #08 MUL ADD2 .Screen/addr DEO2 + ;font-hex #00 .DateTime/hour DEI #0a DIV #08 MUL ADD2 .Screen/addr DEO2 #22 .Screen/color DEO DUP2 #0018 SUB2 .Screen/x DEO2 - ;font_hex #00 .DateTime/hour DEI #0a MOD #08 MUL ADD2 .Screen/addr DEO2 + ;font-hex #00 .DateTime/hour DEI #0a MOD #08 MUL ADD2 .Screen/addr DEO2 #22 .Screen/color DEO DUP2 #0008 SUB2 .Screen/x DEO2 - ;font_hex #00 .DateTime/minute DEI #0a DIV #08 MUL ADD2 .Screen/addr DEO2 + ;font-hex #00 .DateTime/minute DEI #0a DIV #08 MUL ADD2 .Screen/addr DEO2 #22 .Screen/color DEO DUP2 .Screen/x DEO2 - ;font_hex #00 .DateTime/minute DEI #0a MOD #08 MUL ADD2 .Screen/addr DEO2 + ;font-hex #00 .DateTime/minute DEI #0a MOD #08 MUL ADD2 .Screen/addr DEO2 #22 .Screen/color DEO DUP2 #0010 ADD2 .Screen/x DEO2 - ;font_hex #00 .DateTime/second DEI #0a DIV #08 MUL ADD2 .Screen/addr DEO2 + ;font-hex #00 .DateTime/second DEI #0a DIV #08 MUL ADD2 .Screen/addr DEO2 #22 .Screen/color DEO DUP2 #0018 ADD2 .Screen/x DEO2 - ;font_hex #00 .DateTime/second DEI #0a MOD #08 MUL ADD2 .Screen/addr DEO2 + ;font-hex #00 .DateTime/second DEI #0a MOD #08 MUL ADD2 .Screen/addr DEO2 #22 .Screen/color DEO POP2 @@ -136,7 +136,6 @@ RTN RTN @table ( 60 positions on a circle in bytes ) -[ 8000 8d00 9a02 a706 b40b c011 cb18 d520 df2a e734 ee40 f44b f958 fd65 ff72 ff80 ff8d fd9a f9a7 f4b4 eec0 e7cb dfd5 d5df @@ -145,10 +144,8 @@ RTN 11c0 0bb4 06a7 029a 008d 0080 0072 0265 0658 0b4b 113f 1834 202a 2a20 3418 3f11 4b0b 5806 6502 7200 -] -@font_hex ( 0-F ) -[ +@font-hex ( 0-F ) 007c 8282 8282 827c 0030 1010 1010 1010 007c 8202 7c80 80fe 007c 8202 1c02 827c 000c 1424 4484 fe04 00fe 8080 7c02 827c @@ -157,4 +154,3 @@ RTN 007c 8202 7e82 827e 00fc 8282 fc82 82fc 007c 8280 8080 827c 00fc 8282 8282 82fc 007c 8280 f080 827c 007c 8280 f080 8080 -] diff --git a/projects/examples/devices/mouse.usm b/projects/examples/devices/mouse.usm @@ -72,6 +72,7 @@ BRK @draw-cursor ( -- ) + ;pointer_icn .Screen/addr DEO2 ( clear last cursor ) .pointer/x LDZ2 .Screen/x DEO2 .pointer/y LDZ2 .Screen/y DEO2 @@ -82,7 +83,6 @@ BRK .Mouse/y DEI2 .pointer/y STZ2 ( draw new cursor ) - ;pointer_icn .Screen/addr DEO2 .pointer/x LDZ2 .Screen/x DEO2 .pointer/y LDZ2 .Screen/y DEO2 #33 .Mouse/state DEI #00 NEQ #02 MUL SUB .Screen/color DEO diff --git a/projects/examples/devices/screen.usm b/projects/examples/devices/screen.usm @@ -54,20 +54,17 @@ RTN #00 #10 &loop - OVR #08 MUL #00 SWP ;font_hex ADD2 .Screen/addr DEO2 - + OVR #08 MUL #00 SWP ;font-hex ADD2 .Screen/addr DEO2 ( x-axis ) OVR #08 MUL #00 SWP .center/x LDZ2 #0040 SUB2 ADD2 .Screen/x DEO2 .center/y LDZ2 #0050 SUB2 .Screen/y DEO2 ( draw ) #21 .Screen/color DEO - ( y-axis ) OVR #08 MUL #00 SWP .center/y LDZ2 #0040 SUB2 ADD2 .Screen/y DEO2 .center/x LDZ2 #0050 SUB2 .Screen/x DEO2 ( draw ) #21 .Screen/color DEO - ( incr ) SWP #01 ADD SWP LTHk ,&loop JCN POP2 @@ -77,7 +74,6 @@ RTN @draw-circle ( -- ) ;preview_icn .Screen/addr DEO2 - .center/x LDZ2 #0048 ADD2 .Screen/x DEO2 .center/y LDZ2 #0030 ADD2 .Screen/y DEO2 #21 .Screen/color DEO @@ -91,10 +87,10 @@ RTN RTN -@preview_icn [ - 0f38 675f dfbf bfbf 0007 1820 2344 4848 ] +@preview_icn [ + 0f38 675f dfbf bfbf 0007 1820 2344 4848 -@font_hex [ +@font-hex 007c 8282 8282 827c 0030 1010 1010 1010 007c 8202 7c80 80fe 007c 8202 1c02 827c 000c 1424 4484 fe04 00fe 8080 7c02 827c @@ -102,4 +98,4 @@ RTN 007c 8282 7c82 827c 007c 8282 7e02 827c 007c 8202 7e82 827e 00fc 8282 fc82 82fc 007c 8280 8080 827c 00fc 8282 8282 82fc - 007c 8280 f080 827c 007c 8280 f080 8080 ] -\ No newline at end of file + 007c 8280 f080 827c 007c 8280 f080 8080 +\ No newline at end of file diff --git a/projects/examples/gui/picture.usm b/projects/examples/gui/picture.usm @@ -14,9 +14,9 @@ |0000 -@color [ &byte $1 ] +@color [ &byte $1 ] @position [ &x $2 &y $2 ] -@size [ &width $2 &height $2 ] +@size [ &width $2 &height $2 ] ( program ) diff --git a/src/debugger.c b/src/debugger.c @@ -1,4 +1,5 @@ #include <stdio.h> +#include "uxn.h" /* Copyright (c) 2021 Devine Lu Linvega @@ -11,8 +12,6 @@ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE. */ -#include "uxn.h" - #pragma mark - Core int diff --git a/src/devices/apu.c b/src/devices/apu.c @@ -1,3 +1,6 @@ +#include "../uxn.h" +#include "apu.h" + /* Copyright (c) 2021 Devine Lu Linvega Copyright (c) 2021 Andrew Alderwick @@ -10,9 +13,6 @@ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE. */ -#include "../uxn.h" -#include "apu.h" - #define NOTE_PERIOD 0x10000 #define ADSR_STEP (SAMPLE_FREQUENCY / 0xf) diff --git a/src/devices/mpu.c b/src/devices/mpu.c @@ -1,3 +1,5 @@ +#include "mpu.h" + /* Copyright (c) 2021 Devine Lu Linvega Copyright (c) 2021 Andrew Alderwick @@ -10,8 +12,6 @@ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE. */ -#include "mpu.h" - int initmpu(Mpu *m, Uint8 device) { diff --git a/src/devices/ppu.c b/src/devices/ppu.c @@ -1,3 +1,5 @@ +#include "ppu.h" + /* Copyright (c) 2021 Devine Lu Linvega Copyright (c) 2021 Andrew Alderwick @@ -10,8 +12,6 @@ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE. */ -#include "ppu.h" - static Uint8 font[][8] = { {0x00, 0x7c, 0x82, 0x82, 0x82, 0x82, 0x82, 0x7c}, {0x00, 0x30, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10}, diff --git a/src/emulator.c b/src/emulator.c @@ -1,6 +1,10 @@ #include <SDL2/SDL.h> #include <stdio.h> #include <time.h> +#include "uxn.h" +#include "devices/ppu.h" +#include "devices/apu.h" +#include "devices/mpu.h" /* Copyright (c) 2021 Devine Lu Linvega @@ -13,11 +17,6 @@ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE. */ -#include "uxn.h" -#include "devices/ppu.h" -#include "devices/apu.h" -#include "devices/mpu.h" - static SDL_AudioDeviceID audio_id; static SDL_Window *gWindow; static SDL_Renderer *gRenderer; diff --git a/src/uxn.c b/src/uxn.c @@ -1,4 +1,5 @@ #include <stdio.h> +#include "uxn.h" /* Copyright (u) 2021 Devine Lu Linvega @@ -11,8 +12,6 @@ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE. */ -#include "uxn.h" - #pragma mark - Operations /* clang-format off */ diff --git a/src/uxn.h b/src/uxn.h @@ -28,8 +28,6 @@ typedef struct { Uint8 dat[65536]; } Memory; -struct Uxn; - typedef struct Device { struct Uxn *u; Uint8 addr, dat[16], *mem; @@ -42,10 +40,12 @@ typedef struct Uxn { Device dev[16]; } Uxn; -int loaduxn(Uxn *c, char *filepath); -int bootuxn(Uxn *c); -int evaluxn(Uxn *u, Uint16 vec); +struct Uxn; + void mempoke16(Uint8 *m, Uint16 a, Uint16 b); Uint16 mempeek16(Uint8 *m, Uint16 a); +int loaduxn(Uxn *c, char *filepath); +int bootuxn(Uxn *c); +int evaluxn(Uxn *u, Uint16 vec); Device *portuxn(Uxn *u, Uint8 id, char *name, void (*talkfn)(Device *, Uint8, Uint8));