Browse code

Progress on status flags

neauoire authored on 01/02/2021 22:40:27
Showing 5 changed files
... ...
@@ -36,8 +36,8 @@ $01 < pointer8 >
36 36
 
37 37
 ## Mission
38 38
 
39
+- Carry flag?
39 40
 - Loop
40
-- Conditional example
41 41
 - Pointers/Literals
42 42
 - Print word to stdout
43 43
 - Draw pixel to screen
... ...
@@ -51,7 +51,6 @@ $01 < pointer8 >
51 51
 - Implement 16 bits operations
52 52
 - Jumps should be relative
53 53
 - Catch overflow/underflow
54
-- Implement literals like `[2]`, and `[ 2 3 ]`.
55 54
 - Audo-detect literals length.
56 55
 - SDL Layer Emulator
57 56
 - Build PPU
... ...
@@ -14,5 +14,5 @@ cc -std=c89 -DDEBUG -Wall -Wno-unknown-pragmas -Wpedantic -Wshadow -Wextra -Werr
14 14
 cc -std=c89 -DDEBUG -Wall -Wno-unknown-pragmas -Wpedantic -Wshadow -Wextra -Werror=implicit-int -Werror=incompatible-pointer-types -Werror=int-conversion -Wvla -g -Og -fsanitize=address -fsanitize=undefined uxn.c -o uxn
15 15
 
16 16
 # run
17
-./uxnasm examples/cond.usm boot.rom
17
+./uxnasm examples/core.usm boot.rom
18 18
 ./uxn boot.rom
... ...
@@ -1,3 +1,4 @@
1 1
 < core >
2 2
 
3
-+12 -34
4 3
\ No newline at end of file
4
++12 +34 ADD
5
+
5 6
new file mode 100644
... ...
@@ -0,0 +1,25 @@
1
+< subroutines >
2
+
3
+:begin
4
+  .addall JSR ADD ADD
5
+  +06 EQU .isequal JSR
6
+  BRK
7
+
8
+:add1
9
+  +01 RTS
10
+
11
+:add2
12
+  +02 RTS
13
+
14
+:add3
15
+  +03 RTS
16
+
17
+:addall
18
+  .add1 JSR
19
+  .add2 JSR
20
+  .add3 JSR
21
+  RTS
22
+
23
+:isequal
24
+  .addall JSR +ff
25
+  RTS
... ...
@@ -92,7 +92,7 @@ rspop(void)
92 92
 
93 93
 void op_brk() { setflag(FLAG_HALT, 1); }
94 94
 void op_rts() {	cpu.mptr = rspop(); }
95
-void op_lit() { cpu.literal += 1;}
95
+void op_lit() { cpu.literal += 1; }
96 96
 void op_drp() { spop(); }
97 97
 void op_dup() { spush(cpu.stack[cpu.sptr - 1]); }
98 98
 void op_swp() { Uint8 b = spop(), a = spop(); spush(b); spush(a); }
... ...
@@ -100,8 +100,8 @@ void op_ovr() { spush(cpu.stack[cpu.sptr - 2]); }
100 100
 void op_rot() { Uint8 c = spop(),b = spop(),a = spop(); spush(b); spush(c); spush(a); }
101 101
 void op_jmp() { cpu.mptr = spop(); }
102 102
 void op_jsr() { rspush(cpu.mptr); cpu.mptr = spop(); }
103
-void op_jmq() { if(getflag(FLAG_ZERO)) op_jmp(); }
104
-void op_jsq() { if(getflag(FLAG_ZERO)) op_jsr(); }
103
+void op_jmq() { if(getflag(FLAG_ZERO)){ op_jmp(); } setflag(FLAG_ZERO,0); }
104
+void op_jsq() { if(getflag(FLAG_ZERO)){ op_jsr(); } setflag(FLAG_ZERO,0); }
105 105
 void op_equ() { setflag(FLAG_ZERO, spop() == spop()); }
106 106
 void op_neq() { setflag(FLAG_ZERO, spop() != spop()); }
107 107
 void op_lth() {	setflag(FLAG_ZERO, spop() < spop()); }
... ...
@@ -159,6 +159,8 @@ eval()
159 159
 	}
160 160
 	if(instr < 24)
161 161
 		(*ops[instr])();
162
+	if(instr > 0x10)
163
+		setflag(FLAG_ZERO, 0);
162 164
 }
163 165
 
164 166
 void
... ...
@@ -169,6 +171,12 @@ run(void)
169 171
 		eval(cpu);
170 172
 	/* debug */
171 173
 	printf("ended @ %d  |  ", cpu.counter);
174
+	printf("hf: %x zf: %x cf: %x tf: %x\n",
175
+		getflag(FLAG_HALT),
176
+		getflag(FLAG_ZERO),
177
+		getflag(FLAG_CARRY),
178
+		getflag(FLAG_TRAPS));
179
+	printf("\n\n");
172 180
 	for(i = 0; i < 4; i++)
173 181
 		printf("%d-", (cpu.status & (1 << i)) != 0);
174 182
 	printf("\n\n");