mirror of
https://github.com/mamedev/mame.git
synced 2024-11-18 10:06:19 +01:00
cop400: Fixed disassembly of jump instructions and used decimal for LDD/XAD. [Curt Coder]
This commit is contained in:
parent
2c2e538488
commit
b4e5fdcedb
4 changed files with 33 additions and 31 deletions
|
@ -49,10 +49,6 @@
|
||||||
TODO:
|
TODO:
|
||||||
|
|
||||||
- remove InstLen
|
- remove InstLen
|
||||||
- run interrupt test suite
|
|
||||||
- run production test suite
|
|
||||||
- run microbus test suite
|
|
||||||
- when is the microbus int cleared?
|
|
||||||
- opcode support for 2048x8 and 128x4/160x4 memory sizes
|
- opcode support for 2048x8 and 128x4/160x4 memory sizes
|
||||||
- CKO sync input
|
- CKO sync input
|
||||||
- save internal RAM when CKO is RAM power supply pin
|
- save internal RAM when CKO is RAM power supply pin
|
||||||
|
|
|
@ -20,22 +20,24 @@ CPU_DISASSEMBLE(cop410)
|
||||||
|
|
||||||
if ((opcode >= 0x80 && opcode <= 0xBE) || (opcode >= 0xC0 && opcode <= 0xFE))
|
if ((opcode >= 0x80 && opcode <= 0xBE) || (opcode >= 0xC0 && opcode <= 0xFE))
|
||||||
{
|
{
|
||||||
if ((pc & 0x3E0) >= 0x80 && (pc & 0x3E0) < 0x100) //JP pages 2,3
|
int page = pc >> 6;
|
||||||
|
|
||||||
|
if (page == 2 | page == 3) //JP pages 2,3
|
||||||
{
|
{
|
||||||
address = (uint16_t)((pc & 0x380) | (opcode & 0x7F));
|
address = (uint16_t)((pc & 0x180) | (opcode & 0x7F));
|
||||||
util::stream_format(stream, "JP %x", address);
|
util::stream_format(stream, "JP %03x", address);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ((opcode & 0xC0) == 0xC0) //JP other pages
|
if ((opcode & 0xC0) == 0xC0) //JP other pages
|
||||||
{
|
{
|
||||||
address = (uint16_t)((pc & 0x3C0) | (opcode & 0x3F));
|
address = (uint16_t)((pc & 0x1C0) | (opcode & 0x3F));
|
||||||
util::stream_format(stream, "JP %x", address);
|
util::stream_format(stream, "JP %03x", address);
|
||||||
}
|
}
|
||||||
else //JSRP
|
else //JSRP
|
||||||
{
|
{
|
||||||
address = (uint16_t)(0x80 | (opcode & 0x3F));
|
address = (uint16_t)(0x80 | (opcode & 0x3F));
|
||||||
util::stream_format(stream, "JSRP %x", address);
|
util::stream_format(stream, "JSRP %03x", address);
|
||||||
flags = DASMFLAG_STEP_OVER;
|
flags = DASMFLAG_STEP_OVER;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -63,13 +65,13 @@ CPU_DISASSEMBLE(cop410)
|
||||||
else if (opcode >= 0x60 && opcode <= 0x61)
|
else if (opcode >= 0x60 && opcode <= 0x61)
|
||||||
{
|
{
|
||||||
address = ((opcode & 0x01) << 8) | next_opcode;
|
address = ((opcode & 0x01) << 8) | next_opcode;
|
||||||
util::stream_format(stream, "JMP %x", address);
|
util::stream_format(stream, "JMP %03x", address);
|
||||||
bytes = 2;
|
bytes = 2;
|
||||||
}
|
}
|
||||||
else if (opcode >= 0x68 && opcode <= 0x69)
|
else if (opcode >= 0x68 && opcode <= 0x69)
|
||||||
{
|
{
|
||||||
address = ((opcode & 0x01) << 8) | next_opcode;
|
address = ((opcode & 0x01) << 8) | next_opcode;
|
||||||
util::stream_format(stream, "JSR %x", address);
|
util::stream_format(stream, "JSR %03x", address);
|
||||||
flags = DASMFLAG_STEP_OVER;
|
flags = DASMFLAG_STEP_OVER;
|
||||||
bytes = 2;
|
bytes = 2;
|
||||||
}
|
}
|
||||||
|
@ -155,7 +157,7 @@ CPU_DISASSEMBLE(cop410)
|
||||||
if (next_opcode >= 0x80 && next_opcode <= 0xbf)
|
if (next_opcode >= 0x80 && next_opcode <= 0xbf)
|
||||||
{
|
{
|
||||||
address = (uint16_t)(next_opcode & 0x3F);
|
address = (uint16_t)(next_opcode & 0x3F);
|
||||||
util::stream_format(stream, "XAD %x,%x", ((address & 0x30) >> 4),address & 0x0F);
|
util::stream_format(stream, "XAD %u,%u", ((address & 0x30) >> 4),address & 0x0F);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -20,22 +20,24 @@ CPU_DISASSEMBLE(cop420)
|
||||||
|
|
||||||
if ((opcode >= 0x80 && opcode <= 0xBE) || (opcode >= 0xC0 && opcode <= 0xFE))
|
if ((opcode >= 0x80 && opcode <= 0xBE) || (opcode >= 0xC0 && opcode <= 0xFE))
|
||||||
{
|
{
|
||||||
if ((pc & 0x3E0) >= 0x80 && (pc & 0x3E0) < 0x100) //JP pages 2,3
|
int page = pc >> 6;
|
||||||
|
|
||||||
|
if (page == 2 | page == 3) //JP pages 2,3
|
||||||
{
|
{
|
||||||
address = (uint16_t)((pc & 0x380) | (opcode & 0x7F));
|
address = (uint16_t)((pc & 0x380) | (opcode & 0x7F));
|
||||||
util::stream_format(stream, "JP %x", address);
|
util::stream_format(stream, "JP %03x", address);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ((opcode & 0xC0) == 0xC0) //JP other pages
|
if ((opcode & 0xC0) == 0xC0) //JP other pages
|
||||||
{
|
{
|
||||||
address = (uint16_t)((pc & 0x3C0) | (opcode & 0x3F));
|
address = (uint16_t)((pc & 0x3C0) | (opcode & 0x3F));
|
||||||
util::stream_format(stream, "JP %x", address);
|
util::stream_format(stream, "JP %03x", address);
|
||||||
}
|
}
|
||||||
else //JSRP
|
else //JSRP
|
||||||
{
|
{
|
||||||
address = (uint16_t)(0x80 | (opcode & 0x3F));
|
address = (uint16_t)(0x80 | (opcode & 0x3F));
|
||||||
util::stream_format(stream, "JSRP %x", address);
|
util::stream_format(stream, "JSRP %03x", address);
|
||||||
flags = DASMFLAG_STEP_OVER;
|
flags = DASMFLAG_STEP_OVER;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -63,13 +65,13 @@ CPU_DISASSEMBLE(cop420)
|
||||||
else if (opcode >= 0x60 && opcode <= 0x63)
|
else if (opcode >= 0x60 && opcode <= 0x63)
|
||||||
{
|
{
|
||||||
address = ((opcode & 0x03) << 8) | next_opcode;
|
address = ((opcode & 0x03) << 8) | next_opcode;
|
||||||
util::stream_format(stream, "JMP %x", address);
|
util::stream_format(stream, "JMP %03x", address);
|
||||||
bytes = 2;
|
bytes = 2;
|
||||||
}
|
}
|
||||||
else if (opcode >= 0x68 && opcode <= 0x6B)
|
else if (opcode >= 0x68 && opcode <= 0x6B)
|
||||||
{
|
{
|
||||||
address = ((opcode & 0x03) << 8) | next_opcode;
|
address = ((opcode & 0x03) << 8) | next_opcode;
|
||||||
util::stream_format(stream, "JSR %x", address);
|
util::stream_format(stream, "JSR %03x", address);
|
||||||
flags = DASMFLAG_STEP_OVER;
|
flags = DASMFLAG_STEP_OVER;
|
||||||
bytes = 2;
|
bytes = 2;
|
||||||
}
|
}
|
||||||
|
@ -163,12 +165,12 @@ CPU_DISASSEMBLE(cop420)
|
||||||
if (next_opcode <= 0x3f)
|
if (next_opcode <= 0x3f)
|
||||||
{
|
{
|
||||||
address = (uint16_t)(next_opcode & 0x3F);
|
address = (uint16_t)(next_opcode & 0x3F);
|
||||||
util::stream_format(stream, "LDD %x,%x", ((address & 0x30) >> 4),address & 0x0F);
|
util::stream_format(stream, "LDD %u,%u", ((address & 0x30) >> 4),address & 0x0F);
|
||||||
}
|
}
|
||||||
else if (next_opcode >= 0x80 && next_opcode <= 0xbf)
|
else if (next_opcode >= 0x80 && next_opcode <= 0xbf)
|
||||||
{
|
{
|
||||||
address = (uint16_t)(next_opcode & 0x3F);
|
address = (uint16_t)(next_opcode & 0x3F);
|
||||||
util::stream_format(stream, "XAD %x,%x", ((address & 0x30) >> 4),address & 0x0F);
|
util::stream_format(stream, "XAD %u,%u", ((address & 0x30) >> 4),address & 0x0F);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -20,22 +20,24 @@ CPU_DISASSEMBLE(cop444)
|
||||||
|
|
||||||
if ((opcode >= 0x80 && opcode <= 0xBE) || (opcode >= 0xC0 && opcode <= 0xFE))
|
if ((opcode >= 0x80 && opcode <= 0xBE) || (opcode >= 0xC0 && opcode <= 0xFE))
|
||||||
{
|
{
|
||||||
if ((pc & 0x3E0) >= 0x80 && (pc & 0x3E0) < 0x100) //JP pages 2,3
|
int page = pc >> 6;
|
||||||
|
|
||||||
|
if (page == 2 | page == 3) //JP pages 2,3
|
||||||
{
|
{
|
||||||
address = (uint16_t)((pc & 0x380) | (opcode & 0x7F));
|
address = (uint16_t)((pc & 0x780) | (opcode & 0x7F));
|
||||||
util::stream_format(stream, "JP %x", address);
|
util::stream_format(stream, "JP %03x", address);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ((opcode & 0xC0) == 0xC0) //JP other pages
|
if ((opcode & 0xC0) == 0xC0) //JP other pages
|
||||||
{
|
{
|
||||||
address = (uint16_t)((pc & 0x3C0) | (opcode & 0x3F));
|
address = (uint16_t)((pc & 0x7C0) | (opcode & 0x3F));
|
||||||
util::stream_format(stream, "JP %x", address);
|
util::stream_format(stream, "JP %03x", address);
|
||||||
}
|
}
|
||||||
else //JSRP
|
else //JSRP
|
||||||
{
|
{
|
||||||
address = (uint16_t)(0x80 | (opcode & 0x3F));
|
address = (uint16_t)(0x80 | (opcode & 0x3F));
|
||||||
util::stream_format(stream, "JSRP %x", address);
|
util::stream_format(stream, "JSRP %03x", address);
|
||||||
flags = DASMFLAG_STEP_OVER;
|
flags = DASMFLAG_STEP_OVER;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -63,13 +65,13 @@ CPU_DISASSEMBLE(cop444)
|
||||||
else if (opcode >= 0x60 && opcode <= 0x63)
|
else if (opcode >= 0x60 && opcode <= 0x63)
|
||||||
{
|
{
|
||||||
address = ((opcode & 0x03) << 8) | next_opcode;
|
address = ((opcode & 0x03) << 8) | next_opcode;
|
||||||
util::stream_format(stream, "JMP %x", address);
|
util::stream_format(stream, "JMP %03x", address);
|
||||||
bytes = 2;
|
bytes = 2;
|
||||||
}
|
}
|
||||||
else if (opcode >= 0x68 && opcode <= 0x6B)
|
else if (opcode >= 0x68 && opcode <= 0x6B)
|
||||||
{
|
{
|
||||||
address = ((opcode & 0x03) << 8) | next_opcode;
|
address = ((opcode & 0x03) << 8) | next_opcode;
|
||||||
util::stream_format(stream, "JSR %x", address);
|
util::stream_format(stream, "JSR %03x", address);
|
||||||
flags = DASMFLAG_STEP_OVER;
|
flags = DASMFLAG_STEP_OVER;
|
||||||
bytes = 2;
|
bytes = 2;
|
||||||
}
|
}
|
||||||
|
@ -163,12 +165,12 @@ CPU_DISASSEMBLE(cop444)
|
||||||
if (next_opcode <= 0x3f)
|
if (next_opcode <= 0x3f)
|
||||||
{
|
{
|
||||||
address = (uint16_t)(next_opcode & 0x3F);
|
address = (uint16_t)(next_opcode & 0x3F);
|
||||||
util::stream_format(stream, "LDD %x,%x", ((address & 0x30) >> 4),address & 0x0F);
|
util::stream_format(stream, "LDD %u,%u", ((address & 0x30) >> 4),address & 0x0F);
|
||||||
}
|
}
|
||||||
else if (next_opcode >= 0x80 && next_opcode <= 0xbf)
|
else if (next_opcode >= 0x80 && next_opcode <= 0xbf)
|
||||||
{
|
{
|
||||||
address = (uint16_t)(next_opcode & 0x3F);
|
address = (uint16_t)(next_opcode & 0x3F);
|
||||||
util::stream_format(stream, "XAD %x,%x", ((address & 0x30) >> 4),address & 0x0F);
|
util::stream_format(stream, "XAD %u,%u", ((address & 0x30) >> 4),address & 0x0F);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue