... | ... |
@@ -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 |