summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/i8008/8008dasm.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/i8008/8008dasm.cpp')
-rw-r--r--src/devices/cpu/i8008/8008dasm.cpp43
1 files changed, 23 insertions, 20 deletions
diff --git a/src/devices/cpu/i8008/8008dasm.cpp b/src/devices/cpu/i8008/8008dasm.cpp
index 66be08a40b7..88d2cacf88b 100644
--- a/src/devices/cpu/i8008/8008dasm.cpp
+++ b/src/devices/cpu/i8008/8008dasm.cpp
@@ -9,18 +9,21 @@
*****************************************************************************/
#include "emu.h"
+#include "8008dasm.h"
-#define OP(A) oprom[(A) - PC]
-#define ARG(A) opram[(A) - PC]
+const char i8008_disassembler::reg[] = { 'a', 'b', 'c', 'd', 'e', 'h', 'l', 'm' };
+const char i8008_disassembler::flag_names[] = { 'c', 'z', 's', 'p' };
-static const char reg[] = { 'a', 'b', 'c', 'd', 'e', 'h', 'l', 'm' };
-static const char flag_names[] = { 'c', 'z', 's', 'p' };
+u32 i8008_disassembler::opcode_alignment() const
+{
+ return 1;
+}
-CPU_DISASSEMBLE(i8008)
+offs_t i8008_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer &params)
{
uint32_t flags = 0;
unsigned PC = pc;
- uint8_t op = OP(pc++);
+ uint8_t op = opcodes.r8(pc++);
switch (op >> 6)
{
case 0x03: // starting with 11
@@ -65,28 +68,28 @@ CPU_DISASSEMBLE(i8008)
case 3 : util::stream_format(stream, "r%c%c",(BIT(op,5) ? 't' : 'f'),flag_names[(op>>3)&3]); break;
case 4 : {
switch((op >> 3) & 7) {
- case 0 : util::stream_format(stream, "adi %02x",ARG(pc)); pc++; break;
- case 1 : util::stream_format(stream, "aci %02x",ARG(pc)); pc++; break;
- case 2 : util::stream_format(stream, "sui %02x",ARG(pc)); pc++; break;
- case 3 : util::stream_format(stream, "sbi %02x",ARG(pc)); pc++; break;
- case 4 : util::stream_format(stream, "ndi %02x",ARG(pc)); pc++; break;
- case 5 : util::stream_format(stream, "xri %02x",ARG(pc)); pc++; break;
- case 6 : util::stream_format(stream, "ori %02x",ARG(pc)); pc++; break;
- case 7 : util::stream_format(stream, "cpi %02x",ARG(pc)); pc++; break;
+ case 0 : util::stream_format(stream, "adi %02x",params.r8(pc)); pc++; break;
+ case 1 : util::stream_format(stream, "aci %02x",params.r8(pc)); pc++; break;
+ case 2 : util::stream_format(stream, "sui %02x",params.r8(pc)); pc++; break;
+ case 3 : util::stream_format(stream, "sbi %02x",params.r8(pc)); pc++; break;
+ case 4 : util::stream_format(stream, "ndi %02x",params.r8(pc)); pc++; break;
+ case 5 : util::stream_format(stream, "xri %02x",params.r8(pc)); pc++; break;
+ case 6 : util::stream_format(stream, "ori %02x",params.r8(pc)); pc++; break;
+ case 7 : util::stream_format(stream, "cpi %02x",params.r8(pc)); pc++; break;
}
}
break;
case 5 : util::stream_format(stream, "rst %02x",(op>>3) & 7); break;
- case 6 : util::stream_format(stream, "l%ci %02x",reg[(op >> 3) & 7],ARG(pc)); pc++; break;
+ case 6 : util::stream_format(stream, "l%ci %02x",reg[(op >> 3) & 7],params.r8(pc)); pc++; break;
case 7 : util::stream_format(stream, "ret"); break;
}
break;
case 0x01: // starting with 01
switch(op & 7) {
- case 0 : util::stream_format(stream, "j%c%c %02x%02x",(BIT(op,5)? 't' : 'f'),flag_names[(op>>3)&3], ARG(pc+1) & 0x3f,ARG(pc)); pc+=2; break;
- case 2 : util::stream_format(stream, "c%c%c %02x%02x",(BIT(op,5)? 't' : 'f'),flag_names[(op>>3)&3], ARG(pc+1) & 0x3f,ARG(pc)); pc+=2; break;
- case 4 : util::stream_format(stream, "jmp %02x%02x",ARG(pc+1) & 0x3f,ARG(pc)); pc+=2; break;
- case 6 : util::stream_format(stream, "cal %02x%02x",ARG(pc+1) & 0x3f,ARG(pc)); pc+=2; break;
+ case 0 : util::stream_format(stream, "j%c%c %02x%02x",(BIT(op,5)? 't' : 'f'),flag_names[(op>>3)&3], params.r8(pc+1) & 0x3f,params.r8(pc)); pc+=2; break;
+ case 2 : util::stream_format(stream, "c%c%c %02x%02x",(BIT(op,5)? 't' : 'f'),flag_names[(op>>3)&3], params.r8(pc+1) & 0x3f,params.r8(pc)); pc+=2; break;
+ case 4 : util::stream_format(stream, "jmp %02x%02x",params.r8(pc+1) & 0x3f,params.r8(pc)); pc+=2; break;
+ case 6 : util::stream_format(stream, "cal %02x%02x",params.r8(pc+1) & 0x3f,params.r8(pc)); pc+=2; break;
case 1 :
case 3 :
case 5 :
@@ -111,5 +114,5 @@ CPU_DISASSEMBLE(i8008)
}
break;
}
- return (pc - PC) | flags | DASMFLAG_SUPPORTED;
+ return (pc - PC) | flags | SUPPORTED;
}