- Mes informació quan arriba un opcode no vàlid

- Més informació respecte a la càrrega de cassette
This commit is contained in:
2024-12-04 22:19:46 +01:00
parent b1d04f21f7
commit cce38449a5
3 changed files with 79 additions and 76 deletions

View File

@@ -189,7 +189,7 @@ int main(int argc, char *argv[])
}
if (berserk) { printf("%i\n", SDL_GetTicks()-time); t_states=0; }
// En cada bucle fem 10 pasos de la CPU, sino s'ofega
for (int i=0;i<10;++i) {
for (int i=0;i<5;++i) {
uint8_t dt = z80::step();
t_states += dt;
zx_tape::update(dt);

141
z80.cpp
View File

@@ -7,6 +7,7 @@ namespace z80
{
static uint8_t *memory = nullptr;
static uint32_t t = 0;
static uint16_t current_opcode_address = 0;
int (*in_ports[256])(int);
void (*out_ports[256])(int, int);
@@ -1022,10 +1023,11 @@ namespace z80
}
}
void INVALID()
void INVALID(uint8_t opcode)
{
// [TODO]
printf("INVALID\n");
printf("INVALID OPCODE AT: %04x\n", current_opcode_address);
z80debug::stop();
}
void reset(uint8_t* mem)
@@ -1056,6 +1058,7 @@ namespace z80
uint32_t step()
{
current_opcode_address = rPC;
t = 0;
const uint8_t opcode = READ_M1();
uint16_t tmp;
@@ -1626,73 +1629,73 @@ namespace z80
switch (opcode)
{
case 0x00: INVALID(); break;
case 0x01: INVALID(); break;
case 0x02: INVALID(); break;
case 0x03: INVALID(); break;
case 0x00: INVALID(opcode); break;
case 0x01: INVALID(opcode); break;
case 0x02: INVALID(opcode); break;
case 0x03: INVALID(opcode); break;
case 0x04: INC8(_rB); break;
case 0x05: DEC8(_rB); break;
case 0x06: rB = READ_MEM_8(); break;
case 0x07: INVALID(); break;
case 0x08: INVALID(); break;
case 0x07: INVALID(opcode); break;
case 0x08: INVALID(opcode); break;
case 0x09: ADD16(_rIX, rBC); break;
case 0x0A: INVALID(); break;
case 0x0B: INVALID(); break;
case 0x0A: INVALID(opcode); break;
case 0x0B: INVALID(opcode); break;
case 0x0C: INC8(_rC); break;
case 0x0D: DEC8(_rC); break;
case 0x0E: rC = READ_MEM_8(); break;
case 0x0F: INVALID(); break;
case 0x0F: INVALID(opcode); break;
case 0x10: INVALID(); break;
case 0x11: INVALID(); break;
case 0x12: INVALID(); break;
case 0x13: INVALID(); break;
case 0x10: INVALID(opcode); break;
case 0x11: INVALID(opcode); break;
case 0x12: INVALID(opcode); break;
case 0x13: INVALID(opcode); break;
case 0x14: INC8(_rD); break;
case 0x15: DEC8(_rD); break;
case 0x16: rD = READ_MEM_8(); break;
case 0x17: INVALID(); break;
case 0x18: INVALID(); break;
case 0x17: INVALID(opcode); break;
case 0x18: INVALID(opcode); break;
case 0x19: ADD16(_rIX, rDE); break;
case 0x1A: INVALID(); break;
case 0x1B: INVALID(); break;
case 0x1A: INVALID(opcode); break;
case 0x1B: INVALID(opcode); break;
case 0x1C: INC8(_rE); break;
case 0x1D: DEC8(_rE); break;
case 0x1E: rE = READ_MEM_8(); break;
case 0x1F: INVALID(); break;
case 0x1F: INVALID(opcode); break;
case 0x20: INVALID(); break;
case 0x20: INVALID(opcode); break;
case 0x21: rIX = READ_MEM_16(); break;
case 0x22: WRITE_MEM_16(READ_MEM_16(),rIX); break;
case 0x23: INC16(_rIX); break;
case 0x24: INC8(_rIXH); break;
case 0x25: DEC8(_rIXH); break;
case 0x26: rIXH = READ_MEM_8(); break;
case 0x27: INVALID(); break;
case 0x28: INVALID(); break;
case 0x27: INVALID(opcode); break;
case 0x28: INVALID(opcode); break;
case 0x29: ADD16(_rIX, rIX); break;
case 0x2A: rIX = READ_MEM_16(READ_MEM_16());break;
case 0x2B: DEC16(_rIX); break;
case 0x2C: INC8(_rIXL); break;
case 0x2D: DEC8(_rIXL); break;
case 0x2E: rIXL = READ_MEM_8(); break;
case 0x2F: INVALID(); break;
case 0x2F: INVALID(opcode); break;
case 0x30: INVALID(); break;
case 0x31: INVALID(); break;
case 0x32: INVALID(); break;
case 0x33: INVALID(); break;
case 0x30: INVALID(opcode); break;
case 0x31: INVALID(opcode); break;
case 0x32: INVALID(opcode); break;
case 0x33: INVALID(opcode); break;
case 0x34: INCMEM8(rIX+READ_MEM_8());t+=2; break;
case 0x35: DECMEM8(rIX+READ_MEM_8());t+=2; break;
case 0x36: d=READ_MEM_8(); WRITE_MEM_8(rIX+d, READ_MEM_8()); t+=2; break;
case 0x37: INVALID(); break;
case 0x38: INVALID(); break;
case 0x37: INVALID(opcode); break;
case 0x38: INVALID(opcode); break;
case 0x39: ADD16(_rIX, rSP); break;
case 0x3A: INVALID(); break;
case 0x3B: INVALID(); break;
case 0x3A: INVALID(opcode); break;
case 0x3B: INVALID(opcode); break;
case 0x3C: INC8(_rA); break;
case 0x3D: DEC8(_rA); break;
case 0x3E: rA = READ_MEM_8(); break;
case 0x3F: INVALID(); break;
case 0x3F: INVALID(opcode); break;
case 0x40: rB = rB; break;
case 0x41: rB = rC; break;
@@ -1751,7 +1754,7 @@ namespace z80
case 0x73: d=READ_MEM_8(); WRITE_MEM_8(rIX+d, rE);t+=5;break;
case 0x74: d=READ_MEM_8(); WRITE_MEM_8(rIX+d, rH);t+=5;break;
case 0x75: d=READ_MEM_8(); WRITE_MEM_8(rIX+d, rL);t+=5;break;
case 0x76: INVALID(); break;
case 0x76: INVALID(opcode); break;
case 0x77: d=READ_MEM_8(); WRITE_MEM_8(rIX+d, rA);t+=5;break;
case 0x78: rA = rB; break;
case 0x79: rA = rC; break;
@@ -1836,7 +1839,7 @@ namespace z80
case 0xE5: PUSH(rIX); break;
case 0xE9: JP(cNO, rIX); break;
case 0xF9: rSP = rIX; t+=2; break;
default: INVALID(); break;
default: INVALID(opcode); break;
}
}
@@ -2195,7 +2198,7 @@ namespace z80
case 0xBA: INDR(); break;
case 0xBB: OUTDR(); break;
default: INVALID(); break;
default: INVALID(opcode); break;
}
}
@@ -2207,73 +2210,73 @@ namespace z80
switch (opcode)
{
case 0x00: INVALID(); break;
case 0x01: INVALID(); break;
case 0x02: INVALID(); break;
case 0x03: INVALID(); break;
case 0x00: INVALID(opcode); break;
case 0x01: INVALID(opcode); break;
case 0x02: INVALID(opcode); break;
case 0x03: INVALID(opcode); break;
case 0x04: INC8(_rB); break;
case 0x05: DEC8(_rB); break;
case 0x06: rB = READ_MEM_8(); break;
case 0x07: INVALID(); break;
case 0x08: INVALID(); break;
case 0x07: INVALID(opcode); break;
case 0x08: INVALID(opcode); break;
case 0x09: ADD16(_rIY, rBC); break;
case 0x0A: INVALID(); break;
case 0x0B: INVALID(); break;
case 0x0A: INVALID(opcode); break;
case 0x0B: INVALID(opcode); break;
case 0x0C: INC8(_rC); break;
case 0x0D: DEC8(_rC); break;
case 0x0E: rC = READ_MEM_8(); break;
case 0x0F: INVALID(); break;
case 0x0F: INVALID(opcode); break;
case 0x10: INVALID(); break;
case 0x11: INVALID(); break;
case 0x12: INVALID(); break;
case 0x13: INVALID(); break;
case 0x10: INVALID(opcode); break;
case 0x11: INVALID(opcode); break;
case 0x12: INVALID(opcode); break;
case 0x13: INVALID(opcode); break;
case 0x14: INC8(_rD); break;
case 0x15: DEC8(_rD); break;
case 0x16: rD = READ_MEM_8(); break;
case 0x17: INVALID(); break;
case 0x18: INVALID(); break;
case 0x17: INVALID(opcode); break;
case 0x18: INVALID(opcode); break;
case 0x19: ADD16(_rIY, rDE); break;
case 0x1A: INVALID(); break;
case 0x1B: INVALID(); break;
case 0x1A: INVALID(opcode); break;
case 0x1B: INVALID(opcode); break;
case 0x1C: INC8(_rE); break;
case 0x1D: DEC8(_rE); break;
case 0x1E: rE = READ_MEM_8(); break;
case 0x1F: INVALID(); break;
case 0x1F: INVALID(opcode); break;
case 0x20: INVALID(); break;
case 0x20: INVALID(opcode); break;
case 0x21: rIY = READ_MEM_16(); break;
case 0x22: WRITE_MEM_16(READ_MEM_16(),rIY); break;
case 0x23: INC16(_rIY); break;
case 0x24: INC8(_rIYH); break;
case 0x25: DEC8(_rIYH); break;
case 0x26: rIYH = READ_MEM_8(); break;
case 0x27: INVALID(); break;
case 0x28: INVALID(); break;
case 0x27: INVALID(opcode); break;
case 0x28: INVALID(opcode); break;
case 0x29: ADD16(_rIY, rIY); break;
case 0x2A: rIY = READ_MEM_16(READ_MEM_16());break;
case 0x2B: DEC16(_rIY); break;
case 0x2C: INC8(_rIYL); break;
case 0x2D: DEC8(_rIYL); break;
case 0x2E: rIYL = READ_MEM_8(); break;
case 0x2F: INVALID(); break;
case 0x2F: INVALID(opcode); break;
case 0x30: INVALID(); break;
case 0x31: INVALID(); break;
case 0x32: INVALID(); break;
case 0x33: INVALID(); break;
case 0x30: INVALID(opcode); break;
case 0x31: INVALID(opcode); break;
case 0x32: INVALID(opcode); break;
case 0x33: INVALID(opcode); break;
case 0x34: INCMEM8(rIY+READ_MEM_8());t+=2; break;
case 0x35: DECMEM8(rIY+READ_MEM_8());t+=2; break;
case 0x36: d=READ_MEM_8(); WRITE_MEM_8(rIY+d, READ_MEM_8()); t+=2; break;
case 0x37: INVALID(); break;
case 0x38: INVALID(); break;
case 0x37: INVALID(opcode); break;
case 0x38: INVALID(opcode); break;
case 0x39: ADD16(_rIY, rSP); break;
case 0x3A: INVALID(); break;
case 0x3B: INVALID(); break;
case 0x3A: INVALID(opcode); break;
case 0x3B: INVALID(opcode); break;
case 0x3C: INC8(_rA); break;
case 0x3D: DEC8(_rA); break;
case 0x3E: rA = READ_MEM_8(); break;
case 0x3F: INVALID(); break;
case 0x3F: INVALID(opcode); break;
case 0x40: rB = rB; break;
case 0x41: rB = rC; break;
@@ -2332,7 +2335,7 @@ namespace z80
case 0x73: d=READ_MEM_8(); WRITE_MEM_8(rIY+d, rE);t+=5;break;
case 0x74: d=READ_MEM_8(); WRITE_MEM_8(rIY+d, rH);t+=5;break;
case 0x75: d=READ_MEM_8(); WRITE_MEM_8(rIY+d, rL);t+=5;break;
case 0x76: INVALID(); break;
case 0x76: INVALID(opcode); break;
case 0x77: d=READ_MEM_8(); WRITE_MEM_8(rIY+d, rA);t+=5;break;
case 0x78: rA = rB; break;
case 0x79: rA = rC; break;
@@ -2417,7 +2420,7 @@ namespace z80
case 0xE5: PUSH(rIY); break;
case 0xE9: JP(cNO, rIY); break;
case 0xF9: rSP = rIY; t+=2; break;
default: INVALID(); break;
default: INVALID(opcode); break;
}
}

View File

@@ -115,7 +115,7 @@ namespace zx_tape
current_pulse = 0;
pulse_level = 1;
current_section = PULSE_SYNC1;
printf("going to pulse_sync1...\n");
printf("going to pulse_sync1..%i.\n", current_block);
}
}
}
@@ -127,7 +127,7 @@ namespace zx_tape
pulse_pos -= PULSE_LEN_SYNC1;
pulse_level = 0;
current_section = PULSE_SYNC2;
printf("going to pulse_sync2...\n");
printf("going to pulse_sync2..%i.\n", current_block);
}
}
@@ -138,7 +138,7 @@ namespace zx_tape
pulse_pos -= PULSE_LEN_SYNC2;
pulse_level = 1;
current_section = PULSE_DATA;
printf("going to pulse_data...\n");
printf("going to pulse_data..%i.\n", current_block);
}
}
static int level[2] = {0, 0};
@@ -165,7 +165,7 @@ namespace zx_tape
{
block_pos = 0;
current_section = PULSE_SYNC3;
printf("going to pulse_sync3...\n");
printf("going to pulse_sync3..%i.\n", current_block);
}
}
}
@@ -200,7 +200,7 @@ namespace zx_tape
pulse_pos -= PULSE_LEN_SYNC3;
pulse_level = 0;
current_section = PULSE_WAIT;
printf("going to pulse_wait...\n");
printf("going to pulse_wait..%i.\n", current_block);
}
}
@@ -223,7 +223,7 @@ namespace zx_tape
}
else
{
zxscreen::fullrefresh();
//zxscreen::fullrefresh();
printf("going to pulse_pilot on block %i...\n", current_block);
}
}