| ... | ... |
@@ -20,5 +20,5 @@ cc -std=c89 -DDEBUG -Wall -Wno-unknown-pragmas -Wpedantic -Wshadow -Wextra -Werr |
| 20 | 20 |
# cc uxn.c emulator.c -std=c89 -Os -DNDEBUG -g0 -s -Wall -Wno-unknown-pragmas -L/usr/local/lib -lSDL2 -o bin/emulator |
| 21 | 21 |
|
| 22 | 22 |
# run |
| 23 |
-./bin/assembler projects/examples/dev.mouse.usm bin/boot.rom |
|
| 23 |
+./bin/assembler projects/examples/win.editor.usm bin/boot.rom |
|
| 24 | 24 |
./bin/emulator bin/boot.rom |
| ... | ... |
@@ -73,17 +73,17 @@ RTS |
| 73 | 73 |
@line-rect ( x1 y1 x2 y2 color ) |
| 74 | 74 |
|
| 75 | 75 |
( load ) =color =rect.y2 =rect.x2 DUP2 =Screen.y =rect.y1 DUP2 =Screen.x =rect.x1 |
| 76 |
- @line-rect-hor |
|
| 76 |
+ $hor |
|
| 77 | 77 |
( incr ) ~Screen.x #0001 ADD2 =Screen.x |
| 78 | 78 |
( draw ) ~rect.y1 =Screen.y ~color =Screen.color |
| 79 | 79 |
( draw ) ~rect.y2 =Screen.y ~color =Screen.color |
| 80 |
- ,line-rect-hor ~Screen.x ~rect.x2 LTH2 JMP2? POP2 |
|
| 80 |
+ ,$hor ~Screen.x ~rect.x2 LTH2 JMP2? POP2 |
|
| 81 | 81 |
~rect.y1 =Screen.y |
| 82 |
- @line-rect-ver |
|
| 82 |
+ $ver |
|
| 83 | 83 |
( draw ) ~rect.x1 =Screen.x ~color =Screen.color |
| 84 | 84 |
( draw ) ~rect.x2 =Screen.x ~color =Screen.color |
| 85 | 85 |
( incr ) ~Screen.y #0001 ADD2 =Screen.y |
| 86 |
- ,line-rect-ver ~Screen.y ~rect.y2 #0001 ADD2 LTH2 JMP2? POP2 |
|
| 86 |
+ ,$ver ~Screen.y ~rect.y2 #0001 ADD2 LTH2 JMP2? POP2 |
|
| 87 | 87 |
|
| 88 | 88 |
RTS |
| 89 | 89 |
|
| ... | ... |
@@ -30,11 +30,11 @@ BRK |
| 30 | 30 |
|
| 31 | 31 |
( load ) =label.addr =label.color =Sprite.y =Sprite.x |
| 32 | 32 |
~label.addr |
| 33 |
- @draw-label-left-loop |
|
| 33 |
+ $loop |
|
| 34 | 34 |
( draw ) DUP2 LDR #00 SWP #0008 MUL2 ,font ADD2 =Sprite.addr ~label.color =Sprite.color |
| 35 | 35 |
( incr ) #0001 ADD2 |
| 36 | 36 |
( incr ) ~Sprite.x #0008 ADD2 =Sprite.x |
| 37 |
- DUP2 LDR #00 NEQ ,draw-label-left-loop ROT JMP2? POP2 |
|
| 37 |
+ DUP2 LDR #00 NEQ ,$loop ROT JMP2? POP2 |
|
| 38 | 38 |
POP2 |
| 39 | 39 |
|
| 40 | 40 |
RTS |
| ... | ... |
@@ -44,11 +44,11 @@ RTS |
| 44 | 44 |
( load ) =label.addr =label.color =Sprite.y |
| 45 | 45 |
( align ) ~label.addr ,get-text-length JSR2 #0008 MUL2 #0002 DIV2 SUB2 =Sprite.x |
| 46 | 46 |
~label.addr |
| 47 |
- @draw-label-middle-loop |
|
| 47 |
+ $loop |
|
| 48 | 48 |
( draw ) DUP2 LDR #00 SWP #0008 MUL2 ,font ADD2 =Sprite.addr ~label.color =Sprite.color |
| 49 | 49 |
( incr ) #0001 ADD2 |
| 50 | 50 |
( incr ) ~Sprite.x #0008 ADD2 =Sprite.x |
| 51 |
- DUP2 LDR #00 NEQ ,draw-label-middle-loop ROT JMP2? POP2 |
|
| 51 |
+ DUP2 LDR #00 NEQ ,$loop ROT JMP2? POP2 |
|
| 52 | 52 |
POP2 |
| 53 | 53 |
|
| 54 | 54 |
RTS |
| ... | ... |
@@ -58,11 +58,11 @@ RTS |
| 58 | 58 |
( load ) =label.addr =label.color =Sprite.y |
| 59 | 59 |
( align ) ~label.addr ,get-text-length JSR2 #0008 MUL2 SUB2 #0008 SUB2 =Sprite.x |
| 60 | 60 |
~label.addr |
| 61 |
- @draw-label-right-loop |
|
| 61 |
+ $loop |
|
| 62 | 62 |
( draw ) DUP2 LDR #00 SWP #0008 MUL2 ,font ADD2 =Sprite.addr ~label.color =Sprite.color |
| 63 | 63 |
( incr ) #0001 ADD2 |
| 64 | 64 |
( incr ) ~Sprite.x #0008 ADD2 =Sprite.x |
| 65 |
- DUP2 LDR #00 NEQ ,draw-label-right-loop ROT JMP2? POP2 |
|
| 65 |
+ DUP2 LDR #00 NEQ ,$loop ROT JMP2? POP2 |
|
| 66 | 66 |
POP2 |
| 67 | 67 |
|
| 68 | 68 |
RTS |
| ... | ... |
@@ -70,10 +70,10 @@ RTS |
| 70 | 70 |
@get-text-length ( label ) |
| 71 | 71 |
|
| 72 | 72 |
#0000 ( counter ) |
| 73 |
- @get-text-length-loop |
|
| 73 |
+ $loop |
|
| 74 | 74 |
( incr ) #0001 ADD2 OVR2 OVR2 ADD2 |
| 75 |
- LDR #00 NEQ ,get-text-length-loop ROT JMP2? POP2 |
|
| 76 |
- SWP2 POP2 #0001 SUB2 |
|
| 75 |
+ LDR #00 NEQ ,$loop ROT JMP2? POP2 |
|
| 76 |
+ SWP2 POP2 |
|
| 77 | 77 |
|
| 78 | 78 |
RTS |
| 79 | 79 |
|
| ... | ... |
@@ -11,7 +11,7 @@ |
| 11 | 11 |
|
| 12 | 12 |
|0100 @RESET |
| 13 | 13 |
|
| 14 |
- #0030 =window.x1 #0030 =window.y1 #00a8 =window.x2 #0090 =window.y2 |
|
| 14 |
+ #0030 =window.x1 #0030 =window.y1 #0090 =window.x2 #0090 =window.y2 |
|
| 15 | 15 |
|
| 16 | 16 |
~window.x1 #0010 ADD2 =editor.x1 |
| 17 | 17 |
~window.y1 #0010 ADD2 =editor.y1 |
| ... | ... |
@@ -79,106 +79,83 @@ RTS |
| 79 | 79 |
~editor.addr =Sprite.addr |
| 80 | 80 |
|
| 81 | 81 |
#00 =pixel.y |
| 82 |
- @redraw-ver |
|
| 82 |
+ $ver |
|
| 83 | 83 |
#00 =pixel.x |
| 84 | 84 |
~editor.x1 =Sprite.x |
| 85 |
- @redraw-hor |
|
| 86 |
- |
|
| 85 |
+ $hor |
|
| 87 | 86 |
( get bit ) |
| 88 | 87 |
,cell0_icn #00 |
| 89 | 88 |
~editor.addr #00 ~pixel.y ADD2 LDR #07 ~pixel.x SUB ROR #01 AND ( get bit ) |
| 90 | 89 |
#0008 MUL2 ADD2 =Sprite.addr ( add *8 ) |
| 91 |
- |
|
| 92 | 90 |
( draw ) #08 =Sprite.color |
| 93 | 91 |
( incr ) ~Sprite.x #0008 ADD2 =Sprite.x |
| 94 | 92 |
( incr ) ~pixel.x #01 ADD =pixel.x |
| 95 |
- ,redraw-hor ~Sprite.x ~editor.x1 #0040 ADD2 LTH2 JMP2? POP2 |
|
| 93 |
+ ,$hor ~Sprite.x ~editor.x1 #0040 ADD2 LTH2 JMP2? POP2 |
|
| 96 | 94 |
( incr ) ~Sprite.y #0008 ADD2 =Sprite.y |
| 97 | 95 |
( incr ) ~pixel.y #01 ADD =pixel.y |
| 98 |
- ,redraw-ver ~Sprite.y ~editor.y1 #0040 ADD2 LTH2 JMP2? POP2 |
|
| 99 |
- |
|
| 96 |
+ ,$ver ~Sprite.y ~editor.y1 #0040 ADD2 LTH2 JMP2? POP2 |
|
| 100 | 97 |
~editor.addr =Sprite.addr |
| 101 | 98 |
~window.y1 =Sprite.y |
| 102 | 99 |
~window.x2 #0008 SUB2 =Sprite.x |
| 103 | 100 |
( draw ) #01 =Sprite.color |
| 104 | 101 |
|
| 105 |
- ( TODO: Make a loop.. ) |
|
| 106 |
- ~window.x1 #0058 ADD2 ~window.y1 #0010 ADD2 #08 ~editor.addr ,draw-byte JSR2 |
|
| 107 |
- ~window.x1 #0058 ADD2 ~window.y1 #0018 ADD2 #08 ~editor.addr #0001 ADD2 ,draw-byte JSR2 |
|
| 108 |
- ~window.x1 #0058 ADD2 ~window.y1 #0020 ADD2 #08 ~editor.addr #0002 ADD2 ,draw-byte JSR2 |
|
| 109 |
- ~window.x1 #0058 ADD2 ~window.y1 #0028 ADD2 #08 ~editor.addr #0003 ADD2 ,draw-byte JSR2 |
|
| 110 |
- ~window.x1 #0058 ADD2 ~window.y1 #0030 ADD2 #08 ~editor.addr #0004 ADD2 ,draw-byte JSR2 |
|
| 111 |
- ~window.x1 #0058 ADD2 ~window.y1 #0038 ADD2 #08 ~editor.addr #0005 ADD2 ,draw-byte JSR2 |
|
| 112 |
- ~window.x1 #0058 ADD2 ~window.y1 #0040 ADD2 #08 ~editor.addr #0006 ADD2 ,draw-byte JSR2 |
|
| 113 |
- ~window.x1 #0058 ADD2 ~window.y1 #0048 ADD2 #08 ~editor.addr #0007 ADD2 ,draw-byte JSR2 |
|
| 114 |
- |
|
| 115 | 102 |
RTS |
| 116 | 103 |
|
| 117 | 104 |
@draw-label-left ( x y color addr ) |
| 118 | 105 |
|
| 119 | 106 |
( load ) =label.addr =label.color =Sprite.y =Sprite.x |
| 120 | 107 |
~label.addr |
| 121 |
- @draw-label-left-loop |
|
| 108 |
+ $loop NOP |
|
| 122 | 109 |
( draw ) DUP2 LDR #00 SWP #0008 MUL2 ,font ADD2 =Sprite.addr ~label.color =Sprite.color |
| 123 | 110 |
( incr ) #0001 ADD2 |
| 124 |
- ( incr ) ~Sprite.x #0008 ADD2 =Sprite.x |
|
| 125 |
- DUP2 #0001 ADD2 LDR #00 NEQ ,draw-label-left-loop ROT JMP2? POP2 |
|
| 111 |
+ ( incr ) ~Sprite.x #0007 ADD2 =Sprite.x |
|
| 112 |
+ DUP2 LDR #00 NEQ ^$loop MUL JMPS |
|
| 126 | 113 |
POP2 |
| 127 | 114 |
|
| 128 | 115 |
RTS |
| 129 | 116 |
|
| 130 |
-@draw-byte ( x y color addr ) |
|
| 131 |
- |
|
| 132 |
- ( load ) =addr =color =Sprite.y =Sprite.x |
|
| 133 |
- ,font_hex #00 ~addr LDR #f0 AND #04 ROR #08 MUL ADD2 =Sprite.addr ~color =Sprite.color |
|
| 134 |
- ~Sprite.x #0008 ADD2 =Sprite.x |
|
| 135 |
- ,font_hex #00 ~addr LDR #0f AND #08 MUL ADD2 =Sprite.addr ~color =Sprite.color |
|
| 136 |
- |
|
| 137 |
-RTS |
|
| 138 |
- |
|
| 139 | 117 |
@fill-rect ( x1 y1 x2 y2 color ) |
| 140 | 118 |
|
| 141 | 119 |
( load ) =color =rect.y2 =rect.x2 DUP2 =Screen.y =rect.y1 DUP2 =Screen.x =rect.x1 |
| 142 |
- @fill-rect-ver |
|
| 120 |
+ $ver NOP |
|
| 143 | 121 |
~rect.x1 =Screen.x |
| 144 |
- @fill-rect-hor |
|
| 122 |
+ $hor NOP |
|
| 145 | 123 |
( draw ) ~color =Screen.color |
| 146 | 124 |
( incr ) ~Screen.x #0001 ADD2 =Screen.x |
| 147 |
- ,fill-rect-hor ~Screen.x ~rect.x2 LTH2 JMP2? POP2 |
|
| 125 |
+ ~Screen.x ~rect.x2 LTH2 ^$hor MUL JMPS |
|
| 148 | 126 |
( incr ) ~Screen.y #0001 ADD2 =Screen.y |
| 149 |
- ,fill-rect-ver ~Screen.y ~rect.y2 LTH2 JMP2? POP2 |
|
| 127 |
+ ~Screen.y ~rect.y2 LTH2 ^$ver MUL JMPS |
|
| 150 | 128 |
|
| 151 | 129 |
RTS |
| 152 | 130 |
|
| 153 | 131 |
@line-rect ( x1 y1 x2 y2 color ) |
| 154 | 132 |
|
| 155 | 133 |
( load ) =color =rect.y2 =rect.x2 DUP2 =Screen.y =rect.y1 DUP2 =Screen.x =rect.x1 |
| 156 |
- @line-rect-hor |
|
| 134 |
+ $hor NOP |
|
| 157 | 135 |
( incr ) ~Screen.x #0001 ADD2 =Screen.x |
| 158 | 136 |
( draw ) ~rect.y1 =Screen.y ~color =Screen.color |
| 159 | 137 |
( draw ) ~rect.y2 =Screen.y ~color =Screen.color |
| 160 |
- ,line-rect-hor ~Screen.x ~rect.x2 LTH2 JMP2? POP2 |
|
| 138 |
+ ~Screen.x ~rect.x2 LTH2 ^$hor MUL JMPS |
|
| 161 | 139 |
~rect.y1 =Screen.y |
| 162 |
- @line-rect-ver |
|
| 140 |
+ $ver NOP |
|
| 163 | 141 |
( draw ) ~rect.x1 =Screen.x ~color =Screen.color |
| 164 | 142 |
( draw ) ~rect.x2 =Screen.x ~color =Screen.color |
| 165 | 143 |
( incr ) ~Screen.y #0001 ADD2 =Screen.y |
| 166 |
- ,line-rect-ver ~Screen.y ~rect.y2 #0001 ADD2 LTH2 JMP2? POP2 |
|
| 144 |
+ ~Screen.y ~rect.y2 #0001 ADD2 LTH2 ^$ver MUL JMPS |
|
| 167 | 145 |
|
| 168 | 146 |
RTS |
| 169 | 147 |
|
| 170 | 148 |
@tile-rect ( x1 y1 x2 y2 color addr ) |
| 171 | 149 |
|
| 172 | 150 |
=Sprite.addr =color =rect.y2 =rect.x2 DUP2 =Sprite.y =rect.y1 DUP2 =Sprite.x =rect.x1 |
| 173 |
- |
|
| 174 |
- @tile-rect-ver |
|
| 151 |
+ $ver NOP |
|
| 175 | 152 |
~rect.x1 =Sprite.x |
| 176 |
- @tile-rect-hor |
|
| 153 |
+ $hor NOP |
|
| 177 | 154 |
( draw ) ~color =Sprite.color |
| 178 | 155 |
( incr ) ~Sprite.x #0008 ADD2 =Sprite.x |
| 179 |
- ,tile-rect-hor ~Sprite.x ~rect.x2 LTH2 JMP2? POP2 |
|
| 156 |
+ ~Sprite.x ~rect.x2 LTH2 ^$hor MUL JMPS |
|
| 180 | 157 |
( incr ) ~Sprite.y #0008 ADD2 =Sprite.y |
| 181 |
- ,tile-rect-ver ~Sprite.y ~rect.y2 LTH2 JMP2? POP2 |
|
| 158 |
+ ~Sprite.y ~rect.y2 LTH2 ^$ver MUL JMPS |
|
| 182 | 159 |
|
| 183 | 160 |
RTS |
| 184 | 161 |
|
| ... | ... |
@@ -207,19 +184,7 @@ RTS |
| 207 | 184 |
@cell0_icn [ 7c82 8282 8282 7c00 ] |
| 208 | 185 |
@cell1_icn [ 7cfe fefe fefe 7c00 ] |
| 209 | 186 |
|
| 210 |
-@window_name [ pixel-editor 00 ] |
|
| 211 |
- |
|
| 212 |
-@font_hex ( 0-F ) |
|
| 213 |
-[ |
|
| 214 |
- 7c82 8282 8282 7c00 3010 1010 1010 1000 |
|
| 215 |
- 7c82 027c 8080 fe00 7c82 027c 0282 7c00 |
|
| 216 |
- 4282 82fe 0202 0200 fc82 807c 0282 7c00 |
|
| 217 |
- 7c82 80fc 8282 7c00 7c82 021e 0202 0200 |
|
| 218 |
- 7c82 827c 8282 7c00 7c82 827e 0202 0400 |
|
| 219 |
- 7c82 027e 8282 7e00 fc82 82fc 8282 fc00 |
|
| 220 |
- 7c82 8080 8082 7c00 fc82 8282 8282 fc00 |
|
| 221 |
- 7c82 80f0 8082 7c00 7c82 80f0 8080 8000 |
|
| 222 |
-] |
|
| 187 |
+@window_name [ Editor 00 ] |
|
| 223 | 188 |
|
| 224 | 189 |
@font ( spectrum-zx font ) |
| 225 | 190 |
[ |
| ... | ... |
@@ -262,7 +227,7 @@ RTS |
| 262 | 227 |
|FF10 ;Screen { width 2 height 2 pad 4 x 2 y 2 color 1 }
|
| 263 | 228 |
|FF20 ;Sprite { pad 8 x 2 y 2 addr 2 color 1 }
|
| 264 | 229 |
|FF30 ;Controller { buttons 1 }
|
| 265 |
-|FF50 ;Mouse { x 2 y 2 state 1 chord 1 }
|
|
| 230 |
+|FF50 ;Mouse { x 2 y 2 state 1 chord 1 }
|
|
| 266 | 231 |
|
| 267 | 232 |
|FFF0 .RESET .FRAME .ERROR ( vectors ) |
| 268 | 233 |
|FFF8 [ 0fcf 0fc4 0fc4 ] ( palette ) |
| 269 | 234 |
\ No newline at end of file |