8085: correct rim/sim cycles, rename some undocumented opcodes, arhl is arithmetic shift

This commit is contained in:
hap 2023-08-03 12:15:27 +02:00
parent 6933421cd5
commit 9acb7796b5
2 changed files with 19 additions and 19 deletions

View File

@ -40,7 +40,7 @@ offs_t i8085_disassembler::disassemble(std::ostream &stream, offs_t pc, const da
case 0x0d: util::stream_format(stream, "dcr c"); break;
case 0x0e: util::stream_format(stream, "mvi c,$%02x", params.r8(pc)); pc++; break;
case 0x0f: util::stream_format(stream, "rrc"); break;
case 0x10: util::stream_format(stream, "asrh (*)"); break;
case 0x10: util::stream_format(stream, "arhl (*)"); break;
case 0x11: util::stream_format(stream, "lxi d,$%04x", params.r16(pc)); pc+=2; break;
case 0x12: util::stream_format(stream, "stax d"); break;
case 0x13: util::stream_format(stream, "inx d"); break;
@ -48,7 +48,7 @@ offs_t i8085_disassembler::disassemble(std::ostream &stream, offs_t pc, const da
case 0x15: util::stream_format(stream, "dcr d"); break;
case 0x16: util::stream_format(stream, "mvi d,$%02x", params.r8(pc)); pc++; break;
case 0x17: util::stream_format(stream, "ral"); break;
case 0x18: util::stream_format(stream, "rlde (*)"); break;
case 0x18: util::stream_format(stream, "rdel (*)"); break;
case 0x19: util::stream_format(stream, "dad d"); break;
case 0x1a: util::stream_format(stream, "ldax d"); break;
case 0x1b: util::stream_format(stream, "dcx d"); break;
@ -64,7 +64,7 @@ offs_t i8085_disassembler::disassemble(std::ostream &stream, offs_t pc, const da
case 0x25: util::stream_format(stream, "dcr h"); break;
case 0x26: util::stream_format(stream, "mvi h,$%02x", params.r8(pc)); pc++; break;
case 0x27: util::stream_format(stream, "daa"); break;
case 0x28: util::stream_format(stream, "ldeh $%02x (*)", params.r8(pc)); pc++; break;
case 0x28: util::stream_format(stream, "ldhi $%02x (*)", params.r8(pc)); pc++; break;
case 0x29: util::stream_format(stream, "dad h"); break;
case 0x2a: util::stream_format(stream, "lhld $%04x", params.r16(pc)); pc+=2; break;
case 0x2b: util::stream_format(stream, "dcx h"); break;
@ -80,7 +80,7 @@ offs_t i8085_disassembler::disassemble(std::ostream &stream, offs_t pc, const da
case 0x35: util::stream_format(stream, "dcr m"); break;
case 0x36: util::stream_format(stream, "mvi m,$%02x", params.r8(pc)); pc++; break;
case 0x37: util::stream_format(stream, "stc"); break;
case 0x38: util::stream_format(stream, "ldes $%02x (*)", params.r8(pc)); pc++; break;
case 0x38: util::stream_format(stream, "ldsi $%02x (*)", params.r8(pc)); pc++; break;
case 0x39: util::stream_format(stream, "dad sp"); break;
case 0x3a: util::stream_format(stream, "lda $%04x", params.r16(pc)); pc+=2; break;
case 0x3b: util::stream_format(stream, "dcx sp"); break;
@ -245,7 +245,7 @@ offs_t i8085_disassembler::disassemble(std::ostream &stream, offs_t pc, const da
case 0xda: util::stream_format(stream, "jc $%04x", params.r16(pc)); pc+=2; flags = STEP_COND; break;
case 0xdb: util::stream_format(stream, "in $%02x", params.r8(pc)); pc++; break;
case 0xdc: util::stream_format(stream, "cc $%04x", params.r16(pc)); pc+=2; flags = STEP_OVER | STEP_COND; break;
case 0xdd: util::stream_format(stream, "jnx $%04x (*)", params.r16(pc)); pc+=2; flags = STEP_COND; break;
case 0xdd: util::stream_format(stream, "jnx5 $%04x (*)", params.r16(pc)); pc+=2; flags = STEP_COND; break;
case 0xde: util::stream_format(stream, "sbi $%02x", params.r8(pc)); pc++; break;
case 0xdf: util::stream_format(stream, "rst 3"); flags = STEP_OVER; break;
case 0xe0: util::stream_format(stream, "rpo"); flags = STEP_OUT | STEP_COND; break;
@ -277,7 +277,7 @@ offs_t i8085_disassembler::disassemble(std::ostream &stream, offs_t pc, const da
case 0xfa: util::stream_format(stream, "jm $%04x", params.r16(pc)); pc+=2; flags = STEP_COND; break;
case 0xfb: util::stream_format(stream, "ei"); break;
case 0xfc: util::stream_format(stream, "cm $%04x", params.r16(pc)); pc+=2; flags = STEP_OVER | STEP_COND; break;
case 0xfd: util::stream_format(stream, "jx $%04x (*)", params.r16(pc)); pc+=2; flags = STEP_COND; break;
case 0xfd: util::stream_format(stream, "jx5 $%04x (*)", params.r16(pc)); pc+=2; flags = STEP_COND; break;
case 0xfe: util::stream_format(stream, "cpi $%02x", params.r8(pc)); pc++; break;
case 0xff: util::stream_format(stream, "rst 7"); flags = STEP_OVER; break;
}

View File

@ -171,8 +171,8 @@ const u8 i8085a_cpu_device::lut_cycles_8085[256]={
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
/* 0 */ 4, 10,7, 6, 4, 4, 7, 4, 10,10,7, 6, 4, 4, 7, 4,
/* 1 */ 7, 10,7, 6, 4, 4, 7, 4, 10,10,7, 6, 4, 4, 7, 4,
/* 2 */ 7, 10,16,6, 4, 4, 7, 4, 10,10,16,6, 4, 4, 7, 4,
/* 3 */ 7, 10,13,6, 10,10,10,4, 10,10,13,6, 4, 4, 7, 4,
/* 2 */ 4, 10,16,6, 4, 4, 7, 4, 10,10,16,6, 4, 4, 7, 4,
/* 3 */ 4, 10,13,6, 10,10,10,4, 10,10,13,6, 4, 4, 7, 4,
/* 4 */ 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,
/* 5 */ 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,
/* 6 */ 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,
@ -928,7 +928,7 @@ void i8085a_cpu_device::execute_one(int opcode)
m_AF.b.l = (m_AF.b.l & 0xfe) | (m_AF.b.h & CF);
break;
case 0x08: // 8085: DSUB, otherwise undocumented NOP
case 0x08: // 8085: undocumented DSUB, otherwise undocumented NOP
if (is_8085())
{
int q = m_HL.b.l - m_BC.b.l;
@ -970,11 +970,11 @@ void i8085a_cpu_device::execute_one(int opcode)
m_AF.b.h = (m_AF.b.h >> 1) | (m_AF.b.h << 7);
break;
case 0x10: // 8085: ASRH, otherwise undocumented NOP
case 0x10: // 8085: undocumented ARHL, otherwise undocumented NOP
if (is_8085())
{
m_AF.b.l = (m_AF.b.l & ~CF) | (m_HL.b.l & CF);
m_HL.w.l = (m_HL.w.l >> 1);
m_HL.w.l = (m_HL.w.l & 0x8000) | (m_HL.w.l >> 1);
}
break;
case 0x11: // LXI D,nnnn
@ -1010,7 +1010,7 @@ void i8085a_cpu_device::execute_one(int opcode)
break;
}
case 0x18: // 8085: RLDE, otherwise undocumented NOP
case 0x18: // 8085: undocumented RDEL, otherwise undocumented NOP
if (is_8085())
{
m_AF.b.l = (m_AF.b.l & ~(CF | VF)) | (m_DE.b.h >> 7);
@ -1102,7 +1102,7 @@ void i8085a_cpu_device::execute_one(int opcode)
m_AF.b.h = m_WZ.b.h;
break;
case 0x28: // 8085: LDEH nn, otherwise undocumented NOP
case 0x28: // 8085: undocumented LDHI nn, otherwise undocumented NOP
if (is_8085())
{
m_WZ.d = read_arg();
@ -1204,7 +1204,7 @@ void i8085a_cpu_device::execute_one(int opcode)
m_AF.b.l = (m_AF.b.l & 0xfe) | CF;
break;
case 0x38: // 8085: LDES nn, otherwise undocumented NOP
case 0x38: // 8085: undocumented LDSI nn, otherwise undocumented NOP
if (is_8085())
{
m_WZ.d = read_arg();
@ -1426,7 +1426,7 @@ void i8085a_cpu_device::execute_one(int opcode)
case 0xca: // JZ nnnn
op_jmp(m_AF.b.l & ZF);
break;
case 0xcb: // 8085: RST V, otherwise undocumented JMP nnnn
case 0xcb: // 8085: undocumented RSTV, otherwise undocumented JMP nnnn
if (is_8085())
{
if (m_AF.b.l & VF)
@ -1484,7 +1484,7 @@ void i8085a_cpu_device::execute_one(int opcode)
case 0xd8: // RC
op_ret(m_AF.b.l & CF);
break;
case 0xd9: // 8085: SHLX, otherwise undocumented RET
case 0xd9: // 8085: undocumented SHLX, otherwise undocumented RET
if (is_8085())
{
m_WZ.w.l = m_DE.w.l;
@ -1506,7 +1506,7 @@ void i8085a_cpu_device::execute_one(int opcode)
case 0xdc: // CC nnnn
op_call(m_AF.b.l & CF);
break;
case 0xdd: // 8085: JNX nnnn, otherwise undocumented CALL nnnn
case 0xdd: // 8085: undocumented JNX5 nnnn, otherwise undocumented CALL nnnn
if (is_8085())
op_jmp(!(m_AF.b.l & KF));
else
@ -1565,7 +1565,7 @@ void i8085a_cpu_device::execute_one(int opcode)
case 0xec: // CPE nnnn
op_call(m_AF.b.l & PF);
break;
case 0xed: // 8085: LHLX, otherwise undocumented CALL nnnn
case 0xed: // 8085: undocumented LHLX, otherwise undocumented CALL nnnn
if (is_8085())
{
m_WZ.w.l = m_DE.w.l;
@ -1631,7 +1631,7 @@ void i8085a_cpu_device::execute_one(int opcode)
case 0xfc: // CM nnnn
op_call(m_AF.b.l & SF);
break;
case 0xfd: // 8085: JX nnnn, otherwise undocumented CALL nnnn
case 0xfd: // 8085: undocumented JX5 nnnn, otherwise undocumented CALL nnnn
if (is_8085())
op_jmp(m_AF.b.l & KF);
else