... | ... |
@@ -26,22 +26,20 @@ cc uxn.c -std=c89 -Os -DNDEBUG -g0 -s -Wall -Wno-unknown-pragmas -o uxn |
26 | 26 |
- `( comment )` |
27 | 27 |
|
28 | 28 |
``` |
29 |
-( comment ) |
|
29 |
+;value ( alloc zero-page variable ) |
|
30 | 30 |
|
31 |
-;variable1 |
|
32 |
-;variable2 |
|
33 |
-;variable3 |
|
31 |
+@0010 ( start at page 1 ) |
|
34 | 32 |
|
35 |
-.there ( 0a 05 GTH ) JMC |
|
33 |
+,there [ ,0a ,05 GTH ] JMC |
|
36 | 34 |
|
37 | 35 |
:here |
38 |
- < when not equal > |
|
39 |
- ee |
|
36 |
+ ( when not equal ) |
|
37 |
+ ,ee |
|
40 | 38 |
BRK |
41 | 39 |
|
42 | 40 |
:there |
43 |
- < when is equal > |
|
44 |
- ff |
|
41 |
+ ( when is equal ) |
|
42 |
+ ,ff |
|
45 | 43 |
BRK |
46 | 44 |
``` |
47 | 45 |
|
... | ... |
@@ -49,7 +47,6 @@ cc uxn.c -std=c89 -Os -DNDEBUG -g0 -s -Wall -Wno-unknown-pragmas -o uxn |
49 | 47 |
|
50 | 48 |
### Assembler |
51 | 49 |
|
52 |
-- Crash on missing label |
|
53 | 50 |
- Catch overflow/underflow |
54 | 51 |
- Constants |
55 | 52 |
- Jumps should be relative |
... | ... |
@@ -58,20 +55,12 @@ cc uxn.c -std=c89 -Os -DNDEBUG -g0 -s -Wall -Wno-unknown-pragmas -o uxn |
58 | 55 |
|
59 | 56 |
- Pointers/Literals |
60 | 57 |
- A Three-Way Decision Routine(http://www.6502.org/tutorials/compare_instructions.html) |
61 |
-- Carry flag? |
|
62 | 58 |
- Print word to stdout |
63 | 59 |
- Draw pixel to screen |
64 | 60 |
- Detect mouse click |
65 | 61 |
- SDL Layer Emulator |
66 | 62 |
- Build PPU |
67 |
-- Interrupts, vectors |
|
68 |
- |
|
69 |
-### 16 Bit Missions |
|
70 |
- |
|
71 |
-- 16 bits addressing |
|
72 |
-- jumping to subroutine should be relative |
|
73 |
-- Implement addressing |
|
74 |
-- Implement 16 bits operations |
|
63 |
+- Add flags.. |
|
75 | 64 |
|
76 | 65 |
## Refs |
77 | 66 |
|
... | ... |
@@ -165,7 +165,7 @@ error(char *name) |
165 | 165 |
} |
166 | 166 |
|
167 | 167 |
int |
168 |
-eval() |
|
168 |
+eval(void) |
|
169 | 169 |
{ |
170 | 170 |
Uint8 instr = cpu.rom.dat[cpu.rom.ptr++]; |
171 | 171 |
if(cpu.literal > 0) { |
... | ... |
@@ -197,7 +197,13 @@ start(FILE *f) |
197 | 197 |
cpu.vreset = mempoke16(0xfffa); |
198 | 198 |
cpu.vframe = mempoke16(0xfffc); |
199 | 199 |
cpu.verror = mempoke16(0xfffe); |
200 |
- while(!(cpu.status & FLAG_HALT) && eval(cpu)) |
|
200 |
+ /* eval reset */ |
|
201 |
+ cpu.rom.ptr = cpu.vreset; |
|
202 |
+ while(!(cpu.status & FLAG_HALT) && eval()) |
|
203 |
+ ; |
|
204 |
+ /*eval frame */ |
|
205 |
+ cpu.rom.ptr = cpu.vframe; |
|
206 |
+ while(!(cpu.status & FLAG_HALT) && eval()) |
|
201 | 207 |
; |
202 | 208 |
/* debug */ |
203 | 209 |
printf("ended @ %d steps | ", cpu.counter); |