diff --git a/src/devices/cpu/f8/f8dasm.cpp b/src/devices/cpu/f8/f8dasm.cpp index 90d5c0e3baa..c67a1372c2d 100644 --- a/src/devices/cpu/f8/f8dasm.cpp +++ b/src/devices/cpu/f8/f8dasm.cpp @@ -9,7 +9,7 @@ static const char *const rname[16] = { "R8", "J", "HU", "HL", "KU", "KL", "QU", "QL" }; -CPU_DISASSEMBLE( f8 ) +static offs_t internal_disasm_f8(cpu_device *device, std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, int options) { unsigned size = 0; uint8_t op = oprom[size++]; @@ -18,149 +18,149 @@ CPU_DISASSEMBLE( f8 ) { /* opcode bitmask */ case 0x00: /* 0000 0000 */ - sprintf(buffer, "LR A,KU"); + util::stream_format(stream, "LR A,KU"); break; case 0x01: /* 0000 0001 */ - sprintf(buffer, "LR A,KL"); + util::stream_format(stream, "LR A,KL"); break; case 0x02: /* 0000 0010 */ - sprintf(buffer, "LR A,QU"); + util::stream_format(stream, "LR A,QU"); break; case 0x03: /* 0000 0011 */ - sprintf(buffer, "LR A,QL"); + util::stream_format(stream, "LR A,QL"); break; case 0x04: /* 0000 0100 */ - sprintf(buffer, "LR KU,A"); + util::stream_format(stream, "LR KU,A"); break; case 0x05: /* 0000 0101 */ - sprintf(buffer, "LR KL,A"); + util::stream_format(stream, "LR KL,A"); break; case 0x06: /* 0000 0110 */ - sprintf(buffer, "LR QU,A"); + util::stream_format(stream, "LR QU,A"); break; case 0x07: /* 0000 0111 */ - sprintf(buffer, "LR QL,A"); + util::stream_format(stream, "LR QL,A"); break; case 0x08: /* 0000 1000 */ - sprintf(buffer, "LR K,P"); + util::stream_format(stream, "LR K,P"); break; case 0x09: /* 0000 1001 */ - sprintf(buffer, "LR P,K"); + util::stream_format(stream, "LR P,K"); break; case 0x0a: /* 0000 1010 */ - sprintf(buffer, "LR A,IS"); + util::stream_format(stream, "LR A,IS"); break; case 0x0b: /* 0000 1011 */ - sprintf(buffer, "LR IS,A"); + util::stream_format(stream, "LR IS,A"); break; case 0x0c: /* 0000 1100 */ - sprintf(buffer, "PK") ; + util::stream_format(stream, "PK") ; break; case 0x0d: /* 0000 1101 */ - sprintf(buffer, "LR P0,Q"); + util::stream_format(stream, "LR P0,Q"); break; case 0x0e: /* 0000 1110 */ - sprintf(buffer, "LR Q,DC"); + util::stream_format(stream, "LR Q,DC"); break; case 0x0f: /* 0000 1111 */ - sprintf(buffer, "LR DC,Q"); + util::stream_format(stream, "LR DC,Q"); break; case 0x10: /* 0001 0000 */ - sprintf(buffer, "LR DC,H"); + util::stream_format(stream, "LR DC,H"); break; case 0x11: /* 0001 0001 */ - sprintf(buffer, "LR H,DC"); + util::stream_format(stream, "LR H,DC"); break; case 0x12: /* 0001 0010 */ - sprintf(buffer, "SR 1"); + util::stream_format(stream, "SR 1"); break; case 0x13: /* 0001 0011 */ - sprintf(buffer, "SL 1"); + util::stream_format(stream, "SL 1"); break; case 0x14: /* 0001 0100 */ - sprintf(buffer, "SR 4"); + util::stream_format(stream, "SR 4"); break; case 0x15: /* 0001 0101 */ - sprintf(buffer, "SL 4"); + util::stream_format(stream, "SL 4"); break; case 0x16: /* 0001 0110 */ - sprintf(buffer, "LM") ; + util::stream_format(stream, "LM") ; break; case 0x17: /* 0001 0111 */ - sprintf(buffer, "ST"); + util::stream_format(stream, "ST"); break; case 0x18: /* 0001 1000 */ - sprintf(buffer, "COM"); + util::stream_format(stream, "COM"); break; case 0x19: /* 0001 1001 */ - sprintf(buffer, "LNK"); + util::stream_format(stream, "LNK"); break; case 0x1a: /* 0001 1010 */ - sprintf(buffer, "DI"); + util::stream_format(stream, "DI"); break; case 0x1b: /* 0001 1011 */ - sprintf(buffer, "EI"); + util::stream_format(stream, "EI"); break; case 0x1c: /* 0001 1100 */ - sprintf(buffer, "POP"); + util::stream_format(stream, "POP"); break; case 0x1d: /* 0001 1101 */ - sprintf(buffer, "LR W,J"); + util::stream_format(stream, "LR W,J"); break; case 0x1e: /* 0001 1110 */ - sprintf(buffer, "LR J,W"); + util::stream_format(stream, "LR J,W"); break; case 0x1f: /* 0001 1111 */ - sprintf(buffer, "INC"); + util::stream_format(stream, "INC"); break; case 0x20: /* 0010 0000 */ - sprintf(buffer, "LI $%02X", oprom[size++]); + util::stream_format(stream, "LI $%02X", oprom[size++]); break; case 0x21: /* 0010 0001 */ - sprintf(buffer, "NI $%02X", oprom[size++]); + util::stream_format(stream, "NI $%02X", oprom[size++]); break; case 0x22: /* 0010 0010 */ - sprintf(buffer, "OI $%02X", oprom[size++]); + util::stream_format(stream, "OI $%02X", oprom[size++]); break; case 0x23: /* 0010 0011 */ - sprintf(buffer, "XI $%02X", oprom[size++]); + util::stream_format(stream, "XI $%02X", oprom[size++]); break; case 0x24: /* 0010 0100 */ - sprintf(buffer, "AI $%02X", oprom[size++]); + util::stream_format(stream, "AI $%02X", oprom[size++]); break; case 0x25: /* 0010 0101 */ - sprintf(buffer, "CI $%02X", oprom[size++]); + util::stream_format(stream, "CI $%02X", oprom[size++]); break; case 0x26: /* 0010 0110 */ - sprintf(buffer, "IN $%02X", oprom[size++]); + util::stream_format(stream, "IN $%02X", oprom[size++]); break; case 0x27: /* 0010 0111 */ - sprintf(buffer, "OUT $%02X", oprom[size++]); + util::stream_format(stream, "OUT $%02X", oprom[size++]); break; case 0x28: /* 0010 1000 */ - sprintf(buffer, "PI $%02X%02X", oprom[size + 0], oprom[size + 1]); + util::stream_format(stream, "PI $%02X%02X", oprom[size + 0], oprom[size + 1]); size += 2; break; case 0x29: /* 0010 1001 */ - sprintf(buffer, "JMP $%02X%02X", oprom[size + 0], oprom[size + 1]); + util::stream_format(stream, "JMP $%02X%02X", oprom[size + 0], oprom[size + 1]); size += 2; break; case 0x2a: /* 0010 1010 */ - sprintf(buffer, "DCI $%02X%02X", oprom[size + 0], oprom[size + 1]); + util::stream_format(stream, "DCI $%02X%02X", oprom[size + 0], oprom[size + 1]); size += 2; break; case 0x2b: /* 0010 1011 */ - sprintf(buffer, "NOP"); + util::stream_format(stream, "NOP"); break; case 0x2c: /* 0010 1100 */ - sprintf(buffer, "XDC"); + util::stream_format(stream, "XDC"); break; case 0x2d: /* 0010 1101 */ case 0x2e: /* 0010 1110 */ case 0x2f: /* 0010 1111 */ - sprintf(buffer, "??? $%02X",op); + util::stream_format(stream, "??? $%02X",op); break; case 0x30: /* 0011 0000 */ @@ -175,19 +175,19 @@ CPU_DISASSEMBLE( f8 ) case 0x39: /* 0011 1001 */ case 0x3a: /* 0011 1010 */ case 0x3b: /* 0011 1011 */ - sprintf(buffer, "DS %s",rname[op & 15]); + util::stream_format(stream, "DS %s",rname[op & 15]); break; case 0x3c: /* 0011 1100 */ - sprintf(buffer, "DS (IS)"); + util::stream_format(stream, "DS (IS)"); break; case 0x3d: /* 0011 1101 */ - sprintf(buffer, "DS (IS++)"); + util::stream_format(stream, "DS (IS++)"); break; case 0x3e: /* 0011 1110 */ - sprintf(buffer, "DS (IS--)"); + util::stream_format(stream, "DS (IS--)"); break; case 0x3f: /* 0011 1111 */ - sprintf(buffer, "??? $%02X",op); + util::stream_format(stream, "??? $%02X",op); break; case 0x40: /* 0100 0000 */ @@ -202,19 +202,19 @@ CPU_DISASSEMBLE( f8 ) case 0x49: /* 0100 1001 */ case 0x4a: /* 0100 1010 */ case 0x4b: /* 0100 1011 */ - sprintf(buffer, "LR A,%s",rname[op & 15]); + util::stream_format(stream, "LR A,%s",rname[op & 15]); break; case 0x4c: /* 0100 1100 */ - sprintf(buffer, "LR A,(IS)"); + util::stream_format(stream, "LR A,(IS)"); break; case 0x4d: /* 0100 1101 */ - sprintf(buffer, "LR A,(IS++)"); + util::stream_format(stream, "LR A,(IS++)"); break; case 0x4e: /* 0100 1110 */ - sprintf(buffer, "LR A,(IS--)"); + util::stream_format(stream, "LR A,(IS--)"); break; case 0x4f: /* 0100 1111 */ - sprintf(buffer, "??? $%02X",op); + util::stream_format(stream, "??? $%02X",op); break; case 0x50: /* 0101 0000 */ @@ -229,19 +229,19 @@ CPU_DISASSEMBLE( f8 ) case 0x59: /* 0101 1001 */ case 0x5a: /* 0101 1010 */ case 0x5b: /* 0101 1011 */ - sprintf(buffer, "LR %s,A",rname[op & 15]); + util::stream_format(stream, "LR %s,A",rname[op & 15]); break; case 0x5c: /* 0101 1100 */ - sprintf(buffer, "LR (IS),A"); + util::stream_format(stream, "LR (IS),A"); break; case 0x5d: /* 0101 1101 */ - sprintf(buffer, "LR (IS++),A"); + util::stream_format(stream, "LR (IS++),A"); break; case 0x5e: /* 0101 1110 */ - sprintf(buffer, "LR (IS--),A"); + util::stream_format(stream, "LR (IS--),A"); break; case 0x5f: /* 0101 1111 */ - sprintf(buffer, "??? $%02X",op); + util::stream_format(stream, "??? $%02X",op); break; case 0x60: /* 0110 0000 */ @@ -252,7 +252,7 @@ CPU_DISASSEMBLE( f8 ) case 0x65: /* 0110 0101 */ case 0x66: /* 0110 0110 */ case 0x67: /* 0110 0111 */ - sprintf(buffer, "LISU $%02X", op & 0x07); + util::stream_format(stream, "LISU $%02X", op & 0x07); break; case 0x68: /* 0110 1000 */ case 0x69: /* 0110 1001 */ @@ -262,7 +262,7 @@ CPU_DISASSEMBLE( f8 ) case 0x6d: /* 0110 1101 */ case 0x6e: /* 0110 1110 */ case 0x6f: /* 0110 1111 */ - sprintf(buffer, "LISL $%02X", op & 0x07); + util::stream_format(stream, "LISL $%02X", op & 0x07); break; case 0x70: /* 0111 0000 */ @@ -281,80 +281,80 @@ CPU_DISASSEMBLE( f8 ) case 0x7d: /* 0111 1101 */ case 0x7e: /* 0111 1110 */ case 0x7f: /* 0111 1111 */ - sprintf(buffer, "LIS $%02X", op & 0x0f); + util::stream_format(stream, "LIS $%02X", op & 0x0f); break; case 0x81: /* 1000 0001 */ case 0x85: /* 1000 0101 */ - sprintf(buffer, "BP $%04X", pc + (int8_t)oprom[size++] + 1); + util::stream_format(stream, "BP $%04X", pc + (int8_t)oprom[size++] + 1); break; case 0x82: /* 1000 0010 */ - sprintf(buffer, "BC $%04X", pc + (int8_t)oprom[size++] + 1); + util::stream_format(stream, "BC $%04X", pc + (int8_t)oprom[size++] + 1); break; case 0x84: /* 1000 0100 */ - sprintf(buffer, "BZ $%04X", pc + (int8_t)oprom[size++] + 1); + util::stream_format(stream, "BZ $%04X", pc + (int8_t)oprom[size++] + 1); break; case 0x80: /* 1000 0000 */ case 0x83: /* 1000 0011 */ case 0x86: /* 1000 0110 */ case 0x87: /* 1000 0111 */ - sprintf(buffer, "BT $%02X,$%04X", op & 0x07, pc + (int8_t)oprom[size++] + 1); + util::stream_format(stream, "BT $%02X,$%04X", op & 0x07, pc + (int8_t)oprom[size++] + 1); break; case 0x88: /* 1000 1000 */ - sprintf(buffer, "AM"); + util::stream_format(stream, "AM"); break; case 0x89: /* 1000 1001 */ - sprintf(buffer, "AMD"); + util::stream_format(stream, "AMD"); break; case 0x8a: /* 1000 1010 */ - sprintf(buffer, "NM"); + util::stream_format(stream, "NM"); break; case 0x8b: /* 1000 1011 */ - sprintf(buffer, "OM"); + util::stream_format(stream, "OM"); break; case 0x8c: /* 1000 1100 */ - sprintf(buffer, "XM"); + util::stream_format(stream, "XM"); break; case 0x8d: /* 1000 1101 */ - sprintf(buffer, "CM"); + util::stream_format(stream, "CM"); break; case 0x8e: /* 1000 1110 */ - sprintf(buffer, "ADC"); + util::stream_format(stream, "ADC"); break; case 0x8f: /* 1000 1111 */ - sprintf(buffer, "BR7 $%04X", pc + (int8_t)oprom[size++] + 1); + util::stream_format(stream, "BR7 $%04X", pc + (int8_t)oprom[size++] + 1); break; case 0x90: /* 1001 0000 */ - sprintf(buffer, "BR $%04X", pc + (int8_t)oprom[size++] + 1); + util::stream_format(stream, "BR $%04X", pc + (int8_t)oprom[size++] + 1); break; case 0x91: /* 1001 0001 */ case 0x95: /* 1001 0101 */ - sprintf(buffer, "BM $%04X", pc + (int8_t)oprom[size++] + 1); + util::stream_format(stream, "BM $%04X", pc + (int8_t)oprom[size++] + 1); break; case 0x92: /* 1001 0010 */ - sprintf(buffer, "BNC $%04X", pc + (int8_t)oprom[size++] + 1); + util::stream_format(stream, "BNC $%04X", pc + (int8_t)oprom[size++] + 1); break; case 0x94: /* 1001 0100 */ - sprintf(buffer, "BNZ $%04X", pc + (int8_t)oprom[size++] + 1); + util::stream_format(stream, "BNZ $%04X", pc + (int8_t)oprom[size++] + 1); break; case 0x98: /* 1001 1000 */ - sprintf(buffer, "BNO $%04X", pc + (int8_t)oprom[size++] + 1); + util::stream_format(stream, "BNO $%04X", pc + (int8_t)oprom[size++] + 1); break; case 0x93: /* 1001 0011 */ @@ -367,17 +367,17 @@ CPU_DISASSEMBLE( f8 ) case 0x9d: /* 1001 1101 */ case 0x9e: /* 1001 1110 */ case 0x9f: /* 1001 1111 */ - sprintf(buffer, "BF $%02X,$%04X", op & 0x0f, pc + (int8_t)oprom[size++] + 1); + util::stream_format(stream, "BF $%02X,$%04X", op & 0x0f, pc + (int8_t)oprom[size++] + 1); break; case 0xa0: /* 1010 0000 */ case 0xa1: /* 1010 0001 */ - sprintf(buffer, "INS $%02X", (unsigned) (int8_t) (op & 0x0F)); + util::stream_format(stream, "INS $%02X", (unsigned) (int8_t) (op & 0x0F)); break; case 0xa2: /* 1010 0010 */ case 0xa3: /* 1010 0011 */ - sprintf(buffer, "??? $%02X\n", op); + util::stream_format(stream, "??? $%02X\n", op); break; case 0xa4: /* 1010 0100 */ @@ -392,17 +392,17 @@ CPU_DISASSEMBLE( f8 ) case 0xad: /* 1010 1101 */ case 0xae: /* 1010 1110 */ case 0xaf: /* 1010 1111 */ - sprintf(buffer, "INS $%02X", (int8_t) op & 0x0f); + util::stream_format(stream, "INS $%02X", (int8_t) op & 0x0f); break; case 0xb0: /* 1011 0000 */ case 0xb1: /* 1011 0001 */ - sprintf(buffer, "OUTS $%02X", (int8_t) op & 0x0f); + util::stream_format(stream, "OUTS $%02X", (int8_t) op & 0x0f); break; case 0xb2: /* 1011 0010 */ case 0xb3: /* 1011 0011 */ - sprintf(buffer, "??? $%02X\n", op); + util::stream_format(stream, "??? $%02X\n", op); break; case 0xb4: /* 1011 0100 */ @@ -417,7 +417,7 @@ CPU_DISASSEMBLE( f8 ) case 0xbd: /* 1011 1101 */ case 0xbe: /* 1011 1110 */ case 0xbf: /* 1011 1111 */ - sprintf(buffer, "OUTS $%02X", (unsigned) (int8_t) op & 0x0f); + util::stream_format(stream, "OUTS $%02X", (unsigned) (int8_t) op & 0x0f); break; case 0xc0: /* 1100 0000 */ @@ -432,19 +432,19 @@ CPU_DISASSEMBLE( f8 ) case 0xc9: /* 1100 1001 */ case 0xca: /* 1100 1010 */ case 0xcb: /* 1100 1011 */ - sprintf(buffer, "AS %s", rname[op & 15]); + util::stream_format(stream, "AS %s", rname[op & 15]); break; case 0xcc: /* 1100 1100 */ - sprintf(buffer, "AS (IS)"); + util::stream_format(stream, "AS (IS)"); break; case 0xcd: /* 1100 1101 */ - sprintf(buffer, "AS (IS++)"); + util::stream_format(stream, "AS (IS++)"); break; case 0xce: /* 1100 1110 */ - sprintf(buffer, "AS (IS--)"); + util::stream_format(stream, "AS (IS--)"); break; case 0xcf: /* 1100 1111 */ - sprintf(buffer, "??? $%02X\n", op); + util::stream_format(stream, "??? $%02X\n", op); break; case 0xd0: /* 1101 0000 */ @@ -459,19 +459,19 @@ CPU_DISASSEMBLE( f8 ) case 0xd9: /* 1101 1001 */ case 0xda: /* 1101 1010 */ case 0xdb: /* 1101 1011 */ - sprintf(buffer, "ASD %s", rname[op & 15]); + util::stream_format(stream, "ASD %s", rname[op & 15]); break; case 0xdc: /* 1101 1100 */ - sprintf(buffer, "ASD (IS)"); + util::stream_format(stream, "ASD (IS)"); break; case 0xdd: /* 1101 1101 */ - sprintf(buffer, "ASD (IS++)"); + util::stream_format(stream, "ASD (IS++)"); break; case 0xde: /* 1101 1110 */ - sprintf(buffer, "ASD (IS--)"); + util::stream_format(stream, "ASD (IS--)"); break; case 0xdf: /* 1101 1111 */ - sprintf(buffer, "??? $%02X\n", op); + util::stream_format(stream, "??? $%02X\n", op); break; case 0xe0: /* 1110 0000 */ @@ -486,19 +486,19 @@ CPU_DISASSEMBLE( f8 ) case 0xe9: /* 1110 1001 */ case 0xea: /* 1110 1010 */ case 0xeb: /* 1110 1011 */ - sprintf(buffer, "XS %s", rname[op & 15]); + util::stream_format(stream, "XS %s", rname[op & 15]); break; case 0xec: /* 1110 1100 */ - sprintf(buffer, "XS (IS)"); + util::stream_format(stream, "XS (IS)"); break; case 0xed: /* 1110 1101 */ - sprintf(buffer, "XS (IS++)"); + util::stream_format(stream, "XS (IS++)"); break; case 0xee: /* 1110 1110 */ - sprintf(buffer, "XS (IS--)"); + util::stream_format(stream, "XS (IS--)"); break; case 0xef: /* 1110 1111 */ - sprintf(buffer, "??? $%02X\n", op); + util::stream_format(stream, "??? $%02X\n", op); break; @@ -514,21 +514,31 @@ CPU_DISASSEMBLE( f8 ) case 0xf9: /* 1111 1001 */ case 0xfa: /* 1111 1010 */ case 0xfb: /* 1111 1011 */ - sprintf(buffer, "NS %s", rname[op & 15]); + util::stream_format(stream, "NS %s", rname[op & 15]); break; case 0xfc: /* 1111 1100 */ - sprintf(buffer, "NS (IS)"); + util::stream_format(stream, "NS (IS)"); break; case 0xfd: /* 1111 1101 */ - sprintf(buffer, "NS (IS++)"); + util::stream_format(stream, "NS (IS++)"); break; case 0xfe: /* 1111 1110 */ - sprintf(buffer, "NS (IS--)"); + util::stream_format(stream, "NS (IS--)"); break; case 0xff: /* 1111 1111 */ - sprintf(buffer, "??? $%02X\n", op); + util::stream_format(stream, "??? $%02X\n", op); break; } return size; } + + +CPU_DISASSEMBLE(f8) +{ + std::ostringstream stream; + offs_t result = internal_disasm_f8(device, stream, pc, oprom, opram, options); + std::string stream_str = stream.str(); + strcpy(buffer, stream_str.c_str()); + return result; +}