Now registers differ on each other

This commit is contained in:
g1n 2021-10-27 14:38:26 +03:00
parent 32c1727980
commit d13f3f0e0b
1 changed files with 29 additions and 15 deletions

View File

@ -62,11 +62,13 @@ void ocpu_execute() {
switch(reg) {
case REG_AL:
byte value = ocpu_fetch_byte();
ocpu.AL = value;
ocpu.A = (ocpu.A & 0xFF00) | (value & 0xFF);
ocpu.AL = ocpu.A & 0xFF;
break;
case REG_AH:
value = ocpu_fetch_byte();
ocpu.AH = value;
ocpu.A = ((value & 0xFF) << 8) | (ocpu.A & 0xFF);
ocpu.AH = ocpu.A >> 8;
break;
case REG_A:
word word_value = ocpu_fetch_word();
@ -75,11 +77,13 @@ void ocpu_execute() {
case REG_BL:
value = ocpu_fetch_byte();
ocpu.BL = value;
ocpu.B = (ocpu.B & 0xFF00) | (value & 0xFF);
ocpu.BL = ocpu.B & 0xFF;
break;
case REG_BH:
value = ocpu_fetch_byte();
ocpu.BH = value;
ocpu.B = ((value & 0xFF) << 8) | (ocpu.B & 0xFF);
ocpu.BH = ocpu.B >> 8;
break;
case REG_B:
word_value = ocpu_fetch_word();
@ -88,11 +92,13 @@ void ocpu_execute() {
case REG_CL:
value = ocpu_fetch_byte();
ocpu.CL = value;
ocpu.C = (ocpu.C & 0xFF00) | (value & 0xFF);
ocpu.CL = ocpu.C & 0xFF;
break;
case REG_CH:
value = ocpu_fetch_byte();
ocpu.CH = value;
ocpu.C = ((value & 0xFF) << 8) | (ocpu.C & 0xFF);
ocpu.CH = ocpu.C >> 8;
break;
case REG_C:
word_value = ocpu_fetch_word();
@ -101,11 +107,13 @@ void ocpu_execute() {
case REG_DL:
value = ocpu_fetch_byte();
ocpu.DL = value;
ocpu.D = (ocpu.D & 0xFF00) | (value & 0xFF);
ocpu.DL = ocpu.D & 0xFF;
break;
case REG_DH:
value = ocpu_fetch_byte();
ocpu.DH = value;
ocpu.D = ((value & 0xFF) << 8) | (ocpu.D & 0xFF);
ocpu.DH = ocpu.D >> 8;
break;
case REG_D:
word_value = ocpu_fetch_word();
@ -114,11 +122,13 @@ void ocpu_execute() {
case REG_EL:
value = ocpu_fetch_byte();
ocpu.EL = value;
ocpu.E = (ocpu.E & 0xFF00) | (value & 0xFF);
ocpu.EL = ocpu.E & 0xFF;
break;
case REG_EH:
value = ocpu_fetch_byte();
ocpu.EH = value;
ocpu.E = ((value & 0xFF) << 8) | (ocpu.E & 0xFF);
ocpu.EH = ocpu.E >> 8;
break;
case REG_E:
word_value = ocpu_fetch_word();
@ -127,11 +137,13 @@ void ocpu_execute() {
case REG_FL:
value = ocpu_fetch_byte();
ocpu.FL = value;
ocpu.F = (ocpu.F & 0xFF00) | (value & 0xFF);
ocpu.FL = ocpu.F & 0xFF;
break;
case REG_FH:
value = ocpu_fetch_byte();
ocpu.FH = value;
ocpu.F = ((value & 0xFF) << 8) | (ocpu.F & 0xFF);
ocpu.FH = ocpu.F >> 8;
break;
case REG_F:
word_value = ocpu_fetch_word();
@ -142,11 +154,14 @@ void ocpu_execute() {
printf("Wrong register: %02X\n", reg);
return;
}
case EOF:
case 0x00:
return;
default:
printf("Unrecognized instruction: %04X", instruction);
return;
}
}
} // FIXME
}
void initOCPU(FILE *infile) {
ocpu_reset();
@ -159,7 +174,6 @@ void initOCPU(FILE *infile) {
ocpu_mem.memory[pos] = ch;
pos++;
}
ocpu_mem.memory[pos] = EOF;
ocpu_execute();
ocpu_dump_ocpu(ocpu);