From be110a64f3c6ef5417e205e45a68644a8148b980 Mon Sep 17 00:00:00 2001 From: Nathan Woods Date: Wed, 16 Nov 2016 18:47:49 -0500 Subject: [PATCH 1/2] Moved the declaration for ppc_dasm_one() to a header file --- src/devices/cpu/powerpc/ppccom.cpp | 1 - src/devices/cpu/powerpc/ppccom.h | 2 ++ src/devices/cpu/powerpc/ppcdrc.cpp | 2 -- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/devices/cpu/powerpc/ppccom.cpp b/src/devices/cpu/powerpc/ppccom.cpp index 45dac1db7bd..4d21c59ee0b 100644 --- a/src/devices/cpu/powerpc/ppccom.cpp +++ b/src/devices/cpu/powerpc/ppccom.cpp @@ -1234,7 +1234,6 @@ void ppc_device::device_reset() offs_t ppc_device::disasm_disassemble(char *buffer, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options) { - extern offs_t ppc_dasm_one(char *buffer, uint32_t pc, uint32_t op); uint32_t op = *(uint32_t *)oprom; op = big_endianize_int32(op); return ppc_dasm_one(buffer, pc, op); diff --git a/src/devices/cpu/powerpc/ppccom.h b/src/devices/cpu/powerpc/ppccom.h index 45c75169136..7ca21f15167 100644 --- a/src/devices/cpu/powerpc/ppccom.h +++ b/src/devices/cpu/powerpc/ppccom.h @@ -475,6 +475,8 @@ enum #define G_TO(op) ((op & M_TO) >> (31 - 10)) #define G_XO(op) ((op & M_XO) >> (31 - 30)) +extern offs_t ppc_dasm_one(char *buffer, uint32_t pc, uint32_t op); + #endif /* __PPCCOM_H__ */ diff --git a/src/devices/cpu/powerpc/ppcdrc.cpp b/src/devices/cpu/powerpc/ppcdrc.cpp index 2f229eac758..d03109867c4 100644 --- a/src/devices/cpu/powerpc/ppcdrc.cpp +++ b/src/devices/cpu/powerpc/ppcdrc.cpp @@ -25,8 +25,6 @@ using namespace uml; -extern offs_t ppc_dasm_one(char *buffer, uint32_t pc, uint32_t op); - /*************************************************************************** From 4651b54094b232d343aea7979267c876bc26a642 Mon Sep 17 00:00:00 2001 From: Nathan Woods Date: Wed, 16 Nov 2016 18:51:56 -0500 Subject: [PATCH 2/2] Changed the PowerPC disassembler to use 'std::ostream &' internally --- src/devices/cpu/powerpc/ppc_dasm.cpp | 25 +++++++++++++++++-------- src/devices/cpu/powerpc/ppccom.h | 1 + 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/devices/cpu/powerpc/ppc_dasm.cpp b/src/devices/cpu/powerpc/ppc_dasm.cpp index 28d8b5ce480..3c067e4a234 100644 --- a/src/devices/cpu/powerpc/ppc_dasm.cpp +++ b/src/devices/cpu/powerpc/ppc_dasm.cpp @@ -835,7 +835,7 @@ static int Simplified(uint32_t op, uint32_t vpc, char *signed16, char *mnem, cha return 1; } -offs_t ppc_dasm_one(char *buffer, uint32_t pc, uint32_t op) +offs_t ppc_dasm_one(std::ostream &stream, uint32_t pc, uint32_t op) { char signed16[12]; uint32_t disp; @@ -858,11 +858,11 @@ offs_t ppc_dasm_one(char *buffer, uint32_t pc, uint32_t op) */ if( Simplified(op, pc, signed16, mnem, oprs) ) { - buffer += sprintf(buffer, "%s", mnem); + util::stream_format(stream, "%s", mnem); for( j = strlen(mnem); j < 10; j++ ) { - buffer += sprintf(buffer, " "); + util::stream_format(stream, " "); } - buffer += sprintf(buffer, "%s", oprs); + util::stream_format(stream, "%s", oprs); return 4 | flags; } @@ -1156,19 +1156,28 @@ offs_t ppc_dasm_one(char *buffer, uint32_t pc, uint32_t op) else if (itab[i].flags & FL_SO) flags |= DASMFLAG_STEP_OUT; - buffer += sprintf(buffer, "%s", mnem); + util::stream_format(stream, "%s", mnem); for( j = strlen(mnem); j < 10; j++ ) { - buffer += sprintf(buffer, " "); + util::stream_format(stream, " "); } - buffer += sprintf(buffer, "%s", oprs); + util::stream_format(stream, "%s", oprs); return 4 | flags; } } - sprintf(buffer, "?"); + util::stream_format(stream, "?"); return 4 | flags; } +offs_t ppc_dasm_one(char *buffer, uint32_t pc, uint32_t op) +{ + std::ostringstream stream; + offs_t result = ppc_dasm_one(stream, pc, op); + std::string stream_str = stream.str(); + strcpy(buffer, stream_str.c_str()); + return result; +} + CPU_DISASSEMBLE( powerpc ) { uint32_t op = *(uint32_t *)oprom; diff --git a/src/devices/cpu/powerpc/ppccom.h b/src/devices/cpu/powerpc/ppccom.h index 7ca21f15167..63e0903666e 100644 --- a/src/devices/cpu/powerpc/ppccom.h +++ b/src/devices/cpu/powerpc/ppccom.h @@ -475,6 +475,7 @@ enum #define G_TO(op) ((op & M_TO) >> (31 - 10)) #define G_XO(op) ((op & M_XO) >> (31 - 30)) +extern offs_t ppc_dasm_one(std::ostream &stream, uint32_t pc, uint32_t op); extern offs_t ppc_dasm_one(char *buffer, uint32_t pc, uint32_t op);