summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/mcs51/mcs51dasm.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/mcs51/mcs51dasm.cpp')
-rw-r--r--src/devices/cpu/mcs51/mcs51dasm.cpp156
1 files changed, 145 insertions, 11 deletions
diff --git a/src/devices/cpu/mcs51/mcs51dasm.cpp b/src/devices/cpu/mcs51/mcs51dasm.cpp
index 365ffe915cd..2c98f132218 100644
--- a/src/devices/cpu/mcs51/mcs51dasm.cpp
+++ b/src/devices/cpu/mcs51/mcs51dasm.cpp
@@ -27,6 +27,7 @@
#include "mcs51dasm.h"
// Note: addresses >= 0x100 are bit addresses
+// Note: place default_names last in constructors to allow other names to override it
const mcs51_disassembler::mem_info mcs51_disassembler::default_names[] = {
{ 0x00, "rb0r0" },
@@ -226,7 +227,7 @@ const mcs51_disassembler::mem_info mcs51_disassembler::i8xc51gb_names[] = {
{ 0xd4, "ad5" },
{ 0xe4, "ad6" },
{ 0xf4, "ad7" },
- { 0x85, "acon" },
+ { 0x97, "acon" },
{ 0xc7, "acmp" },
{ 0xe8, "c1con" },
@@ -649,6 +650,120 @@ const mcs51_disassembler::mem_info mcs51_disassembler::rupi44_names[] = {
{ -1 }
};
+const mcs51_disassembler::mem_info mcs51_disassembler::p8xc562_names[] = {
+ { 0xa8, "ien0" },
+ { 0xa9, "cml0" },
+ { 0xaa, "cml1" },
+ { 0xab, "cml2" },
+ { 0xac, "ctl0" },
+ { 0xad, "ctl1" },
+ { 0xae, "ctl2" },
+ { 0xaf, "ctl3" },
+ { 0xb8, "ip0" },
+ { 0xc0, "p4" },
+ { 0xc4, "p5" },
+ { 0xc5, "adcon" },
+ { 0xc6, "adch" },
+ { 0xc8, "tm2ir" },
+ { 0xc9, "cmh0" },
+ { 0xca, "cmh1" },
+ { 0xcb, "cmh2" },
+ { 0xcc, "cth0" },
+ { 0xcd, "cth1" },
+ { 0xce, "cth2" },
+ { 0xcf, "cth3" },
+ { 0xe8, "ien1" },
+ { 0xea, "tm2con" },
+ { 0xeb, "ctcon" },
+ { 0xec, "tml2" },
+ { 0xed, "tmh2" },
+ { 0xee, "ste" },
+ { 0xef, "rte" },
+ { 0xf8, "ip1" },
+ { 0xfc, "pwm0" },
+ { 0xfd, "pwm1" },
+ { 0xfe, "pwmp" },
+ { 0xff, "t3" },
+
+ { 0x190, "ct0i" },
+ { 0x191, "ct1i" },
+ { 0x192, "ct2i" },
+ { 0x193, "ct3i" },
+ { 0x194, "t2" },
+ { 0x195, "rt2" },
+
+ { 0x1ae, "ead" },
+
+ { 0x1be, "pad" },
+
+ { 0x1c0, "cmsr0" },
+ { 0x1c1, "cmsr1" },
+ { 0x1c2, "cmsr2" },
+ { 0x1c3, "cmsr3" },
+ { 0x1c4, "cmsr4" },
+ { 0x1c5, "cmsr5" },
+ { 0x1c6, "cmt0" },
+ { 0x1c7, "cmt1" },
+
+ { 0x1c8, "cti0" },
+ { 0x1c9, "cti1" },
+ { 0x1ca, "cti2" },
+ { 0x1cb, "cti3" },
+ { 0x1cc, "cmi0" },
+ { 0x1cd, "cmi1" },
+ { 0x1ce, "cmi2" },
+ { 0x1cf, "t2ov" },
+
+ { 0x1e8, "ect0" },
+ { 0x1e9, "ect1" },
+ { 0x1ea, "ect2" },
+ { 0x1eb, "ect3" },
+ { 0x1ec, "ecm0" },
+ { 0x1ed, "ecm1" },
+ { 0x1ee, "ecm2" },
+ { 0x1ef, "et2" },
+
+ { 0x1f8, "pct0" },
+ { 0x1f9, "pct1" },
+ { 0x1fa, "pct2" },
+ { 0x1fb, "pct3" },
+ { 0x1fc, "pcm0" },
+ { 0x1fd, "pcm1" },
+ { 0x1fe, "pcm2" },
+ { 0x1ff, "pt2" },
+
+ { -1 }
+};
+
+const mcs51_disassembler::mem_info mcs51_disassembler::p8xc552_names[] = {
+ { 0x98, "s0con" },
+ { 0x99, "s0buf" },
+ { 0xd8, "s1con" },
+ { 0xd9, "s1sta" },
+ { 0xda, "s1dat" },
+ { 0xdb, "s1adr" },
+
+ { 0x196, "scl" },
+ { 0x197, "sda" },
+
+ { 0x1ac, "es0" },
+ { 0x1ad, "es1" },
+
+ { 0x1bc, "ps0" },
+ { 0x1bd, "ps1" },
+
+ { 0x1d8, "cr0" },
+ { 0x1d9, "cr1" },
+ { 0x1da, "aa" },
+ { 0x1db, "si" },
+ { 0x1dc, "sto" },
+ { 0x1dd, "sta" },
+ { 0x1de, "ens1" },
+ { 0x1df, "cr2" },
+
+ { -1 }
+};
+
mcs51_disassembler::mcs51_disassembler()
{
}
@@ -784,6 +899,7 @@ offs_t mcs51_disassembler::disassemble_op(std::ostream &stream, unsigned PC, off
sym = get_bit_address(params.r8(PC++));
rel = params.r8(PC++);
util::stream_format(stream, "jbc %s,$%04X", sym, PC + rel);
+ flags = STEP_COND;
break;
//ACALL code addr /* 1: aaa1 0001 */
@@ -846,6 +962,7 @@ offs_t mcs51_disassembler::disassemble_op(std::ostream &stream, unsigned PC, off
sym = get_bit_address(params.r8(PC++));
rel = params.r8(PC++);
util::stream_format(stream, "jb %s,$%04X", sym, (PC + rel));
+ flags = STEP_COND;
break;
//RET
@@ -894,6 +1011,7 @@ offs_t mcs51_disassembler::disassemble_op(std::ostream &stream, unsigned PC, off
sym = get_bit_address(params.r8(PC++));
rel = params.r8(PC++);
util::stream_format(stream, "jnb %s,$%04X", sym, (PC + rel));
+ flags = STEP_COND;
break;
//RETI
@@ -940,6 +1058,7 @@ offs_t mcs51_disassembler::disassemble_op(std::ostream &stream, unsigned PC, off
case 0x40: /* 1: 0100 0000 */
rel = params.r8(PC++);
util::stream_format(stream, "jc $%04X", PC + rel);
+ flags = STEP_COND;
break;
//ORL data addr, A
@@ -988,6 +1107,7 @@ offs_t mcs51_disassembler::disassemble_op(std::ostream &stream, unsigned PC, off
case 0x50: /* 1: 0101 0000 */
rel = params.r8(PC++);
util::stream_format(stream, "jnc $%04X", PC + rel);
+ flags = STEP_COND;
break;
//Unable to test
@@ -1038,6 +1158,7 @@ offs_t mcs51_disassembler::disassemble_op(std::ostream &stream, unsigned PC, off
case 0x60: /* 1: 0110 0000 */
rel = params.r8(PC++);
util::stream_format(stream, "jz $%04X", PC + rel);
+ flags = STEP_COND;
break;
//Unable to test
@@ -1087,6 +1208,7 @@ offs_t mcs51_disassembler::disassemble_op(std::ostream &stream, unsigned PC, off
case 0x70: /* 1: 0111 0000 */
rel = params.r8(PC++);
util::stream_format(stream, "jnz $%04X", PC + rel);
+ flags = STEP_COND;
break;
//Unable to test
@@ -1302,6 +1424,7 @@ offs_t mcs51_disassembler::disassemble_op(std::ostream &stream, unsigned PC, off
data = params.r8(PC++);
rel = params.r8(PC++);
util::stream_format(stream, "cjne a,#$%02X,$%04X", data, PC + rel);
+ flags = STEP_COND;
break;
//CJNE A, data addr, code addr
@@ -1309,6 +1432,7 @@ offs_t mcs51_disassembler::disassemble_op(std::ostream &stream, unsigned PC, off
sym = get_data_address(params.r8(PC++));
rel = params.r8(PC++);
util::stream_format(stream, "cjne a,%s,$%04X", sym, PC + rel);
+ flags = STEP_COND;
break;
//Unable to test
@@ -1318,6 +1442,7 @@ offs_t mcs51_disassembler::disassemble_op(std::ostream &stream, unsigned PC, off
data = params.r8(PC++);
rel = params.r8(PC++);
util::stream_format(stream, "cjne @r%d,#$%02X,$%04X", op&1, data, PC + rel);
+ flags = STEP_COND;
break;
//CJNE R0 to R7, #data, code addr/* 1: 1011 1rrr */
@@ -1332,6 +1457,7 @@ offs_t mcs51_disassembler::disassemble_op(std::ostream &stream, unsigned PC, off
data = params.r8(PC++);
rel = params.r8(PC++);
util::stream_format(stream, "cjne r%d,#$%02X,$%04X", op&7, data, PC + rel);
+ flags = STEP_COND;
break;
//PUSH data addr
@@ -1408,7 +1534,7 @@ offs_t mcs51_disassembler::disassemble_op(std::ostream &stream, unsigned PC, off
sym = get_data_address(params.r8(PC++));
rel = params.r8(PC++);
util::stream_format(stream, "djnz %s,$%04X", sym, PC + rel);
- flags = STEP_OVER;
+ flags = STEP_COND;
break;
//XCHD A, @R0/@R1 /* 1: 1101 011i */
@@ -1428,7 +1554,7 @@ offs_t mcs51_disassembler::disassemble_op(std::ostream &stream, unsigned PC, off
case 0xdf:
rel = params.r8(PC++);
util::stream_format(stream, "djnz r%d,$%04X", op&7, (PC + rel));
- flags = STEP_OVER;
+ flags = STEP_COND;
break;
//MOVX A,@DPTR
@@ -1532,7 +1658,7 @@ i8051_disassembler::i8051_disassembler() : mcs51_disassembler(default_names)
{
}
-i8052_disassembler::i8052_disassembler() : mcs51_disassembler(default_names, i8052_names)
+i8052_disassembler::i8052_disassembler() : mcs51_disassembler(i8052_names, default_names)
{
}
@@ -1540,34 +1666,42 @@ i80c51_disassembler::i80c51_disassembler() : mcs51_disassembler(default_names)
{
}
-i80c52_disassembler::i80c52_disassembler() : mcs51_disassembler(default_names, i8052_names, i80c52_names)
+i80c52_disassembler::i80c52_disassembler() : mcs51_disassembler(i8052_names, i80c52_names, default_names)
{
}
-i8xc51fx_disassembler::i8xc51fx_disassembler() : mcs51_disassembler(default_names, i8052_names, i80c52_names, i8xc51fx_names)
+i8xc51fx_disassembler::i8xc51fx_disassembler() : mcs51_disassembler(i8052_names, i80c52_names, i8xc51fx_names, default_names)
{
}
-i8xc51gb_disassembler::i8xc51gb_disassembler() : mcs51_disassembler(default_names, i8052_names, i80c52_names, i8xc51fx_names, i8xc51gb_names)
+i8xc51gb_disassembler::i8xc51gb_disassembler() : mcs51_disassembler(i8052_names, i80c52_names, i8xc51fx_names, i8xc51gb_names, default_names)
{
}
-ds5002fp_disassembler::ds5002fp_disassembler() : mcs51_disassembler(default_names, i8052_names, i80c52_names, ds5002fp_names, i8xc751_names)
+ds5002fp_disassembler::ds5002fp_disassembler() : mcs51_disassembler(i8052_names, i80c52_names, ds5002fp_names, i8xc751_names, default_names)
{
}
-ds80c320_disassembler::ds80c320_disassembler() : mcs51_disassembler(default_names, i8052_names, ds80c320_names)
+ds80c320_disassembler::ds80c320_disassembler() : mcs51_disassembler(i8052_names, ds80c320_names, default_names)
{
}
-sab80515_disassembler::sab80515_disassembler() : mcs51_disassembler(default_names, sab80515_names)
+sab80515_disassembler::sab80515_disassembler() : mcs51_disassembler(sab80515_names, default_names)
{
}
-sab80c515_disassembler::sab80c515_disassembler() : mcs51_disassembler(default_names, sab80515_names, sab80c515_names)
+sab80c515_disassembler::sab80c515_disassembler() : mcs51_disassembler(sab80515_names, sab80c515_names, default_names)
{
}
rupi44_disassembler::rupi44_disassembler() : mcs51_disassembler(rupi44_names)
{
}
+
+p8xc552_disassembler::p8xc552_disassembler() : mcs51_disassembler(p8xc562_names, p8xc552_names, default_names)
+{
+}
+
+p8xc562_disassembler::p8xc562_disassembler() : mcs51_disassembler(p8xc562_names, default_names)
+{
+}