diff options
Diffstat (limited to 'src/devices/cpu/mcs51/mcs51dasm.cpp')
-rw-r--r-- | src/devices/cpu/mcs51/mcs51dasm.cpp | 156 |
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) +{ +} |