Skip to content

Commit c2d8355

Browse files
committed
Update Homemade CPU: PUSH, POPP, EXCH
1 parent bb413ec commit c2d8355

2 files changed

Lines changed: 29 additions & 62 deletions

File tree

src/HomemadeCPU_execute.cpp

Lines changed: 17 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ using std::setw;
2525
void HomemadeCPU::execute() {
2626
uint16_t result;
2727
uint8_t temp_bit;
28+
uint8_t temp_reg;
2829

2930
switch (IR) {
3031
case 0x00: // BCAA 0
@@ -198,56 +199,22 @@ void HomemadeCPU::execute() {
198199
memory[SP--] = AA;
199200
break;
200201

201-
case 0x31: // PUSH AB
202-
memory[SP--] = AB;
203-
break;
204-
205202
case 0x32: // PUSH FL
206-
memory[SP--] = FL;
207-
break;
208-
209-
case 0x34: // PUSH ML
210-
memory[SP--] = ML;
211-
break;
212-
213-
case 0x35: // PUSH MH
214-
memory[SP--] = MH;
215-
break;
216-
217-
case 0x36: // PUSH JL
218-
memory[SP--] = JL;
219-
break;
220-
221-
case 0x37: // PUSH JH
222-
memory[SP--] = JH;
203+
memory[SP--] = FL & 0xF0;
223204
break;
224205

225206
case 0x38: // POP AA
226207
AA = memory[++SP];
227208
break;
228209

229-
case 0x39: // POP AB
230-
AB = memory[++SP];
231-
break;
232-
233210
case 0x3A: // POP FL
234-
FL = memory[++SP];
211+
FL = memory[++SP] & 0xF0;
235212
break;
236213

237-
case 0x3C: // POP ML
238-
ML = memory[++SP];
239-
break;
240-
241-
case 0x3D: // POP MH
242-
MH = memory[++SP];
243-
break;
244-
245-
case 0x3E: // POP JL
246-
JL = memory[++SP];
247-
break;
248-
249-
case 0x3F: // POP JH
250-
JH = memory[++SP];
214+
case 0x40: // EXCH
215+
temp_reg = AB;
216+
AB = AA;
217+
AA = temp_reg;
251218
break;
252219

253220
case 0x41: // MOVE AB->AA
@@ -441,7 +408,7 @@ void HomemadeCPU::execute() {
441408
clearFlag(V_BIT);
442409
break;
443410

444-
case 0x59: // NEGG
411+
case 0x59: // NEGA
445412
AA = 0 - AA;
446413
update_Z(AA);
447414
clearFlag(C_BIT);
@@ -458,7 +425,7 @@ void HomemadeCPU::execute() {
458425
clearFlag(V_BIT);
459426
break;
460427

461-
case 0x5B: // SHLL
428+
case 0x5B: // SHLL
462429
if (AA & 0x80) setFlag(C_BIT);
463430
else clearFlag(C_BIT);
464431
AA = AA << 1;
@@ -467,7 +434,7 @@ void HomemadeCPU::execute() {
467434
clearFlag(V_BIT);
468435
break;
469436

470-
case 0x5C: // SHRA
437+
case 0x5C: // SHRA
471438
if (AA & 0x80) temp_bit = 0x80;
472439
else temp_bit = 0x00;
473440
if (AA & 0x01) setFlag(C_BIT);
@@ -479,7 +446,7 @@ void HomemadeCPU::execute() {
479446
clearFlag(V_BIT);
480447
break;
481448

482-
case 0x5D: // SRLC
449+
case 0x5D: // SRLC
483450
if (testFlag(C_BIT)) temp_bit = 0x80;
484451
else temp_bit = 0x00;
485452
if (AA & 0x01) setFlag(C_BIT);
@@ -491,7 +458,7 @@ void HomemadeCPU::execute() {
491458
clearFlag(V_BIT);
492459
break;
493460

494-
case 0x5E: // SLLC
461+
case 0x5E: // SLLC
495462
if (testFlag(C_BIT)) temp_bit = 0x01;
496463
else temp_bit = 0x00;
497464
if (AA & 0x80) setFlag(C_BIT);
@@ -503,23 +470,23 @@ void HomemadeCPU::execute() {
503470
clearFlag(V_BIT);
504471
break;
505472

506-
case 0x60: // INCA
473+
case 0x60: // INCA
507474
AA++;
508475
break;
509476

510-
case 0x61: // DECA
477+
case 0x61: // DECA
511478
AA--;
512479
break;
513480

514-
case 0x62: // INCB
481+
case 0x62: // INCB
515482
AB++;
516483
break;
517484

518-
case 0x63: // DECB
485+
case 0x63: // DECB
519486
AB--;
520487
break;
521488

522-
case 0x64: // INCM
489+
case 0x64: // INCM
523490
result = getMR() + 1;
524491
MH = (result & 0xff00) >> 8;
525492
ML = result & 0x00ff;

src/HomemadeCPU_opcodes.h

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -81,22 +81,22 @@ const Homemade_CPU_opcodes opcodes[] = {
8181
{OO, "JPSC"}, // 0x2E
8282
{OO, "JPSS"}, // 0x2F
8383
{OO, "PUSH AA"}, // 0x30
84-
{OO, "PUSH AB"}, // 0x31
84+
{NN, "DEFB $%02x ;Invalid opcode"}, // 0x31
8585
{OO, "PUSH FL"}, // 0x32
8686
{NN, "DEFB $%02x ;Invalid opcode"}, // 0x33
87-
{OO, "PUSH ML"}, // 0x34
88-
{OO, "PUSH MH"}, // 0x35
89-
{OO, "PUSH JL"}, // 0x36
90-
{OO, "PUSH JH"}, // 0x37
87+
{NN, "DEFB $%02x ;Invalid opcode"}, // 0x34
88+
{NN, "DEFB $%02x ;Invalid opcode"}, // 0x35
89+
{NN, "DEFB $%02x ;Invalid opcode"}, // 0x36
90+
{NN, "DEFB $%02x ;Invalid opcode"}, // 0x37
9191
{OO, "POPP AA"}, // 0x38
92-
{OO, "POPP AB"}, // 0x39
92+
{NN, "DEFB $%02x ;Invalid opcode"}, // 0x39
9393
{OO, "POPP FL"}, // 0x3A
9494
{NN, "DEFB $%02x ;Invalid opcode"}, // 0x3B
95-
{OO, "POPP ML"}, // 0x3C
96-
{OO, "POPP MH"}, // 0x3D
97-
{OO, "POPP JL"}, // 0x3E
98-
{OO, "POPP JH"}, // 0x3F
99-
{NN, "DEFB $%02x ;Invalid opcode"}, // 0x40
95+
{NN, "DEFB $%02x ;Invalid opcode"}, // 0x3C
96+
{NN, "DEFB $%02x ;Invalid opcode"}, // 0x3D
97+
{NN, "DEFB $%02x ;Invalid opcode"}, // 0x3E
98+
{NN, "DEFB $%02x ;Invalid opcode"}, // 0x3F
99+
{OO, "EXCH"}, // 0x40
100100
{OO, "MOVE AB->AA"}, // 0x41
101101
{OO, "MOVE SL->AA"}, // 0x42
102102
{OO, "MOVE SH->AA"}, // 0x43
@@ -121,7 +121,7 @@ const Homemade_CPU_opcodes opcodes[] = {
121121
{OO, "NAND"}, // 0x56
122122
{OO, "NORR"}, // 0x57
123123
{OO, "NOTT"}, // 0x58
124-
{OO, "NEGG"}, // 0x59
124+
{OO, "NEGA"}, // 0x59
125125
{OO, "SHRL"}, // 0x5A
126126
{OO, "SHLL"}, // 0x5B
127127
{OO, "SHRA"}, // 0x5C

0 commit comments

Comments
 (0)