OSDN Git Service

[VM][DEBUGGER] Add user-data (normally 0) field to detect some executing features...
authorK.Ohta <whatisthis.sowhat@gmail.com>
Fri, 24 May 2019 09:42:29 +0000 (18:42 +0900)
committerK.Ohta <whatisthis.sowhat@gmail.com>
Fri, 24 May 2019 09:42:29 +0000 (18:42 +0900)
43 files changed:
source/src/debugger.cpp
source/src/vm/common_vm/CMakeLists.txt
source/src/vm/debugger.h
source/src/vm/device.h
source/src/vm/hd6301.cpp
source/src/vm/hd6301.h
source/src/vm/huc6280.h
source/src/vm/huc6280_base.cpp
source/src/vm/i286.cpp
source/src/vm/i286.h
source/src/vm/i386.cpp
source/src/vm/i386.h
source/src/vm/i8080_base.cpp
source/src/vm/i8080_base.h
source/src/vm/jx/i286.cpp
source/src/vm/jx/i286.h
source/src/vm/libcpu_newdev/device.cpp
source/src/vm/libcpu_newdev/device.h
source/src/vm/m6502.cpp
source/src/vm/m6502.h
source/src/vm/m6502_base.cpp
source/src/vm/mame/emu/cpu/i386/i386.c
source/src/vm/mb8861.cpp
source/src/vm/mb8861.h
source/src/vm/mc6800.cpp
source/src/vm/mc6800.h
source/src/vm/mc6801.cpp
source/src/vm/mc6801.h
source/src/vm/mc6809.cpp
source/src/vm/mc6809.h
source/src/vm/mc6809_base.cpp
source/src/vm/mcs48.h
source/src/vm/mcs48_base.cpp
source/src/vm/n2a03.cpp
source/src/vm/tms9995.cpp
source/src/vm/tms9995.h
source/src/vm/upd7801.cpp
source/src/vm/upd7801.h
source/src/vm/upd7810.cpp
source/src/vm/upd7810.h
source/src/vm/z80.cpp
source/src/vm/z80.h
source/src/vm/z80_base.cpp

index cba85b9..1c0ef91 100644 (file)
@@ -648,11 +648,12 @@ void* debugger_thread(void *lpx)
                                        
                                        if(num >= 2) {
                                                if((strcasecmp(params[xnum], "0") == 0)) {
-                                                       steps = MAX_CPU_TRACE; // TBD
+                                                       steps = MAX_CPU_TRACE - 1; // TBD
                                                        xnum++;
                                                } else {
-                                                       steps = min((int)my_hexatoi(target, params[xnum]), MAX_CPU_TRACE);
+                                                       steps = min((int)atoi(params[xnum]), MAX_CPU_TRACE - 1);
                                                        if(steps > 0) xnum++;
+                                                       if(steps <= 0) goto _ut_finish;
                                                }
                                        }
                                        _TCHAR log_path[_MAX_PATH];
@@ -685,24 +686,26 @@ void* debugger_thread(void *lpx)
                                                }
                                        }
                                        int steps_left = steps;
-                                       int max_steps = MAX_CPU_TRACE;
-                                       int begin_step = (MAX_CPU_TRACE - steps) & (MAX_CPU_TRACE - 1);
+                                       int max_step = target_debugger->cpu_trace_ptr & (MAX_CPU_TRACE - 1);
+                                       int begin_step = (target_debugger->cpu_trace_ptr - steps) & (MAX_CPU_TRACE - 1);
                                        if(!(target_debugger->cpu_trace_overwrap)) {
-                                               max_steps = target_debugger->cpu_trace_ptr;
-                                               begin_step = 0;
-                                               steps_left = (max_steps > steps_left) ? steps_left : max_steps;
+                                               if(steps_left > max_step) {
+                                                       begin_step = 0;
+                                                       steps_left = max_step;
+                                                       steps = max_step;
+                                               }
                                        }
                                        if(steps_left > 1024) {
                                                if(logging) {
                                                        my_printf(p->osd, "** NOTE: Trace %d steps, but display only 1024 steps,more are only logging.", steps_left);
                                                } else {
                                                        my_printf(p->osd, "** NOTE: Request to trace %d steps, but display only 1024 steps.", steps_left);
-                                                       begin_step = max_steps - 1024;
-                                                       if(begin_step < 0) begin_step = 0;
+                                                       begin_step = (max_step - 1024) & (MAX_CPU_TRACE - 1);
                                                        steps_left = 1024;
                                                }
                                        }
-                                       for(int i = begin_step; i < max_steps; i++) {
+
+                                       for(int i = begin_step; i != max_step; i = ((i + 1) & (MAX_CPU_TRACE - 1)) ) {
                                                if(logging) {
                                                        if((log_fio != NULL)) {
                                                                if(!(log_fio->IsOpened())) {
@@ -712,11 +715,11 @@ void* debugger_thread(void *lpx)
                                                                logging = false;
                                                        }
                                                }
-                                               int index = (target_debugger->cpu_trace_ptr + i) & (MAX_CPU_TRACE - 1);
+                                               int index = i;
 
                                                if(!(target_debugger->cpu_trace[index] & ~target->get_debug_prog_addr_mask())) {
                                                        const _TCHAR *name = my_get_symbol(target, target_debugger->cpu_trace[index] & target->get_debug_prog_addr_mask());
-                                                       int len = target->debug_dasm(target_debugger->cpu_trace[index] & target->get_debug_prog_addr_mask(), buffer, array_length(buffer));
+                                                       int len = target->debug_dasm_with_userdata(target_debugger->cpu_trace[index] & target->get_debug_prog_addr_mask(), buffer, array_length(buffer), target_debugger->cpu_trace_userdata[index]);
                                                        _TCHAR tmps[8192];
                                                        _TCHAR tmps2[512];
                                                        memset(tmps, 0x00, sizeof(tmps));
@@ -754,9 +757,11 @@ void* debugger_thread(void *lpx)
                                                                my_printf(p->osd, "%s", tmps);
                                                        }
                                                        steps_left--;
+                                                       if(steps_left <= 0) break;
                                                }
                                        }
 //                                     if(logging) {
+                               _ut_finish:
                                                if(log_fio != NULL) {
                                                        if(log_fio->IsOpened()) {
                                                                {
index ef7af4e..990c52c 100644 (file)
@@ -1,6 +1,6 @@
 message("* vm/common_vm")
 
-SET(THIS_LIB_VERSION 2.16.0)
+SET(THIS_LIB_VERSION 2.16.1)
 
 #include(cotire)
 set(s_vm_common_vm_srcs
index 2f330be..79b6812 100644 (file)
@@ -97,6 +97,7 @@ public:
                memset(cpu_trace, 0xff, sizeof(cpu_trace));
                memset(cpu_trace_exp, 0x00, sizeof(cpu_trace_exp));
                memset(cpu_trace_exp_map, 0x00, sizeof(cpu_trace_exp_map));
+               memset(cpu_trace_userdata, 0x00, sizeof(cpu_trace_userdata));
                exception_happened = false;
                stop_on_exception = true;
                prev_cpu_trace = 0xffffffff;
@@ -501,14 +502,23 @@ public:
                cpu_trace_exp[(cpu_trace_ptr - 1) & (MAX_CPU_TRACE - 1)] = exception_code; 
                cpu_trace_exp_map[(cpu_trace_ptr - 1) & (MAX_CPU_TRACE - 1)] = true; 
        }
+       // Userdata should after executing instruction.
+       void add_cpu_trace_userdata(uint32_t data, uint32_t mask)
+       {
+               cpu_trace_userdata[(cpu_trace_ptr - 1) & (MAX_CPU_TRACE - 1)] &= ~mask;
+               cpu_trace_userdata[(cpu_trace_ptr - 1) & (MAX_CPU_TRACE - 1)] |= (data & mask);
+       }
        void add_cpu_trace(uint32_t pc)
        {
                if(prev_cpu_trace != pc) {
                        cpu_trace_exp_map[cpu_trace_ptr] = false; 
+                       cpu_trace_userdata[cpu_trace_ptr] = 0; 
                        cpu_trace_exp[cpu_trace_ptr] = 0; 
                        cpu_trace[cpu_trace_ptr++] = prev_cpu_trace = pc;
-                       if(cpu_trace_ptr >= MAX_CPU_TRACE) cpu_trace_overwrap = true;
-                       cpu_trace_ptr &= (MAX_CPU_TRACE - 1);
+                       if(cpu_trace_ptr >= MAX_CPU_TRACE) {
+                               cpu_trace_overwrap = true;
+                               cpu_trace_ptr = 0;
+                       }
                }
        }
        break_point_t bp, rbp, wbp, ibp, obp;
@@ -523,6 +533,8 @@ public:
        int history_ptr;
        uint32_t cpu_trace[MAX_CPU_TRACE], prev_cpu_trace;
        uint64_t cpu_trace_exp[MAX_CPU_TRACE];
+       uint32_t cpu_trace_userdata[MAX_CPU_TRACE]; // ToDo: Is need larger userdata?
+       
        bool cpu_trace_exp_map[MAX_CPU_TRACE];
        int cpu_trace_ptr;
        bool cpu_trace_overwrap;
index cb5cb05..276534f 100644 (file)
@@ -1086,6 +1086,10 @@ public:
        }
        virtual int debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len)
        {
+               return debug_dasm_with_userdata(pc, buffer, buffer_len, 0);
+       }
+       virtual int debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata = 0)
+       {
                return 0;
        }
 #endif
index 144bc4d..6d8c1f6 100644 (file)
@@ -583,7 +583,7 @@ void HD6301::tim_di()
        SET_NZ8(r);
 }
 
-int HD6301::debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len)
+int HD6301::debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata)
 {
        uint8_t ops[4];
        for(int i = 0; i < 4; i++) {
index 1ed0c27..61f192d 100644 (file)
@@ -61,7 +61,7 @@ public:
        ~HD6301() {}
        bool process_state(FILEIO* state_fio, bool loading);
 
-       int debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len) override;
+       int debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata = 0) override;
 
 };
 #endif
index 973ecf1..3945410 100644 (file)
@@ -79,7 +79,7 @@ public:
        uint32_t read_debug_io8(uint32_t addr);
        bool write_debug_reg(const _TCHAR *reg, uint32_t data);
        bool get_debug_regs_info(_TCHAR *buffer, size_t buffer_len);
-       int debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len);
+       int debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata = 0) override;
 //#endif
        
        // unique function
index c748157..2270d1c 100644 (file)
@@ -243,7 +243,7 @@ bool HUC6280_BASE::get_debug_regs_info(_TCHAR *buffer, size_t buffer_len)
 
 // disassembler
 
-int HUC6280_BASE::debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len)
+int HUC6280_BASE::debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata)
 {
        uint8_t oprom[8];
        uint8_t *opram = oprom;
index 4f3b37c..78ed372 100644 (file)
@@ -442,7 +442,7 @@ bool I286::get_debug_regs_info(_TCHAR *buffer, size_t buffer_len)
        return true;
 }
 
-int I286::debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len)
+int I286::debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata)
 {
        cpu_state *cpustate = (cpu_state *)opaque;
        UINT64 eip = pc - cpustate->base[CS];
index 406c3ee..6639756 100644 (file)
@@ -118,7 +118,8 @@ public:
        bool write_debug_reg(const _TCHAR *reg, uint32_t data);
        uint32_t read_debug_reg(const _TCHAR *reg);
        bool get_debug_regs_info(_TCHAR *buffer, size_t buffer_len);
-       int debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len);
+       int debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata = 0);
+
 #endif
        void save_state_cpustate(FILEIO* state_fio);
        void load_state_cpustate(FILEIO* state_fio);
index f210245..dc02141 100644 (file)
@@ -804,8 +804,7 @@ bool I386::get_debug_regs_info(_TCHAR *buffer, size_t buffer_len)
        cpustate->prev_total_cycles = cpustate->total_cycles;
        return true;
 }
-
-int I386::debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len)
+int I386::debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata)
 {
        i386_state *cpustate = (i386_state *)opaque;
        UINT64 eip = pc - cpustate->sreg[CS].base;
@@ -815,8 +814,8 @@ int I386::debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len)
                ops[i] = d_mem->read_data8w(pc + i, &wait);
        }
        UINT8 *oprom = ops;
-       
-       if(cpustate->operand_size) {
+       bool __op32 = (userdata & I386_TRACE_DATA_BIT_USERDATA_SET) ? ((userdata & I386_TRACE_DATA_BIT_OP32) ? true : false) : ((cpustate->operand_size != 0) ? true : false);
+       if(__op32) {
                return CPU_DISASSEMBLE_CALL(x86_32) & DASMFLAG_LENGTHMASK;
        } else {
                return CPU_DISASSEMBLE_CALL(x86_16) & DASMFLAG_LENGTHMASK;
index 1e9017f..dd1a307 100644 (file)
@@ -20,6 +20,9 @@
 
 #define SIG_I386_A20                   1
 #define SIG_I386_NOTIFY_RESET  2
+
+#define I386_TRACE_DATA_BIT_USERDATA_SET       0x80000000
+#define I386_TRACE_DATA_BIT_OP32                       0x00000001
 //#ifdef USE_DEBUGGER
 class DEBUGGER;
 //#endif
@@ -122,7 +125,7 @@ public:
        bool write_debug_reg(const _TCHAR *reg, uint32_t data);
        uint32_t read_debug_reg(const _TCHAR *reg);
        bool get_debug_regs_info(_TCHAR *buffer, size_t buffer_len);
-       int debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len);
+       int debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata = 0);
 //#endif
        bool process_state(FILEIO* state_fio, bool loading);
        
index 5404f03..26a2512 100644 (file)
@@ -1332,7 +1332,7 @@ Clocks = 0 (0)  Since Scanline = 0/0 (0/0)
 
 // disassembler
 
-int I8080_BASE::debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len)
+int I8080_BASE::debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata)
 {
        uint8_t ops[4];
        int ptr = 0;
index 8c53385..8c9e597 100644 (file)
@@ -164,7 +164,7 @@ public:
        uint32_t read_debug_io8(uint32_t addr);
        bool write_debug_reg(const _TCHAR *reg, uint32_t data);
        bool get_debug_regs_info(_TCHAR *buffer, size_t buffer_len);
-       int debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len);
+       int debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata = 0);
 //#endif
        // unique function
        void set_context_mem(DEVICE* device)
index fd1bca1..7448bd6 100644 (file)
@@ -405,7 +405,7 @@ bool I286::get_debug_regs_info(_TCHAR *buffer, size_t buffer_len)
        return true;
 }
 
-int I286::debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len)
+int I286::debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata)
 {
        cpu_state *cpustate = (cpu_state *)opaque;
        UINT64 eip = pc - cpustate->base[CS];
index 50a414e..84c9eb2 100644 (file)
@@ -116,7 +116,8 @@ public:
        uint32_t read_debug_io16(uint32_t addr);
        bool write_debug_reg(const _TCHAR *reg, uint32_t data);
        bool get_debug_regs_info(_TCHAR *buffer, size_t buffer_len);
-       int debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len);
+       int debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata = 0);
+
 #endif
        bool process_state(FILEIO* state_fio, bool loading);
        
index c08389a..fd70d2e 100644 (file)
@@ -531,6 +531,11 @@ bool DEVICE::get_debug_regs_info(_TCHAR *buffer, size_t buffer_len)
 }
 int DEVICE::debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len)
 {
+       return debug_dasm_with_userdata(pc, buffer, buffer_len, 0);
+}
+
+int DEVICE::debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata)
+{
        return 0;
 }
 /*
index 88f0438..3eda8a1 100644 (file)
@@ -632,6 +632,7 @@ public:
        virtual uint32_t read_debug_reg(const _TCHAR *reg);
        virtual bool get_debug_regs_info(_TCHAR *buffer, size_t buffer_len);
        virtual int debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len);
+       virtual int debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata = 0);
 /*
        These functions are used for debugging non-cpu device
        Insert debugger between standard read/write functions and these functions for checking breakpoints
index 79de86f..f9c8ae4 100644 (file)
@@ -1035,7 +1035,7 @@ int M6502::run(int clock)
 const UINT32 DASMFLAG_LENGTHMASK    = 0x0000ffff;   // the low 16-bits contain the actual length
 extern CPU_DISASSEMBLE(m6502);
 
-int M6502::debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len)
+int M6502::debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata)
 {
 #ifdef USE_DEBUGGER
        uint8_t oprom[4];
index d813bfc..1054f5e 100644 (file)
@@ -94,7 +94,7 @@ public:
        uint32_t read_debug_data8(uint32_t addr);
        bool write_debug_reg(const _TCHAR *reg, uint32_t data);
        bool get_debug_regs_info(_TCHAR *buffer, size_t buffer_len);
-       virtual int debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len);
+       virtual int debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata = 0);
 //#endif
        
        // unique functions
@@ -126,7 +126,7 @@ public:
        void initialize();
        void reset();
        int run(int clock);
-       int debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len);
+       int debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata = 0);
        bool process_state(FILEIO* state_fio, bool loading);
 };     
 
@@ -142,7 +142,7 @@ public:
        void initialize();
        void reset();
        int run(int clock);
-       int debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len);
+       int debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata = 0);
        bool process_state(FILEIO* state_fio, bool loading);
 };     
 
index e7f57ef..27e3dce 100644 (file)
@@ -262,7 +262,7 @@ const UINT32 DASMFLAG_OVERINSTSHIFT = 27;           // bits to shift after maski
 
 #include "mame/emu/cpu/m6502/6502dasm.c"
 
-int M6502_BASE::debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len)
+int M6502_BASE::debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata)
 {
    return 0;
 }
index 912d6e1..a6a4a62 100644 (file)
@@ -3816,6 +3816,9 @@ static CPU_EXECUTE( i386 )
                        try
                        {
                                I386OP(decode_opcode)(cpustate);
+                               UINT32 _ops = (cpustate->operand_size) ? (I386_TRACE_DATA_BIT_USERDATA_SET | I386_TRACE_DATA_BIT_OP32) : (I386_TRACE_DATA_BIT_USERDATA_SET);
+                               cpustate->debugger->add_cpu_trace_userdata(_ops, (I386_TRACE_DATA_BIT_USERDATA_SET | I386_TRACE_DATA_BIT_OP32));
+
                                if(cpustate->exception_caused != 0) {
                                        exception_pc = cpustate->exception_pc;
                                        exception_code = cpustate->exception_code;
@@ -3898,6 +3901,8 @@ static CPU_EXECUTE( i386 )
                        try
                        {
                                I386OP(decode_opcode)(cpustate);
+                               UINT32 _ops = (cpustate->operand_size) ? (I386_TRACE_DATA_BIT_USERDATA_SET | I386_TRACE_DATA_BIT_OP32) : (I386_TRACE_DATA_BIT_USERDATA_SET);
+                               cpustate->debugger->add_cpu_trace_userdata(_ops, (I386_TRACE_DATA_BIT_USERDATA_SET | I386_TRACE_DATA_BIT_OP32));
                                if(cpustate->TF && old_tf)
                                {
                                        cpustate->prev_eip = cpustate->eip;
index ae25479..cdc2861 100644 (file)
@@ -20,7 +20,7 @@
 #include "mc6800_consts.h"
 
 
-int MB8861::debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len)
+int MB8861::debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata )
 {
        uint8_t ops[4];
        if(d_mem_stored != NULL) {
index a08b98d..d84c9fe 100644 (file)
@@ -46,9 +46,7 @@ public:
                set_device_name(_T("MB8861 MPU"));
        }
        ~MB8861() {}
-       int debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len) override;
-
-
+       int debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata = 0);
 };
 
 #endif
index 1718ca0..18d66a5 100644 (file)
@@ -576,7 +576,7 @@ unsigned MC6800::Dasm680x(int subtype, _TCHAR *buf, unsigned pc, const UINT8 *op
        }
 }
 
-int MC6800::debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len)
+int MC6800::debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata)
 {
        uint8_t ops[4];
        if(d_mem_stored != NULL) {
index 538f7bc..5cf4da3 100644 (file)
@@ -366,7 +366,7 @@ public:
        uint32_t read_debug_data32(uint32_t addr);
        bool write_debug_reg(const _TCHAR *reg, uint32_t data);
        bool get_debug_regs_info(_TCHAR *buffer, size_t buffer_len);
-       virtual int debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len);
+       virtual int debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata = 0);
 //#endif
        virtual bool process_state(FILEIO* state_fio, bool loading);
        
index 4b7f7b4..e25c2e8 100644 (file)
@@ -561,7 +561,7 @@ void MC6801::run_one_opecode()
        }
 }
 
-int MC6801::debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len)
+int MC6801::debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata)
 {
        uint8_t ops[4];
        for(int i = 0; i < 4; i++) {
index 420b697..7f93882 100644 (file)
@@ -154,7 +154,7 @@ public:
        bool process_state(FILEIO* state_fio, bool loading);
 
 
-       int debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len) override;
+       int debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata = 0) override;
 //#if defined(HAS_MC6801) || defined(HAS_HD6301)
        void set_context_port1(DEVICE* device, int id, uint32_t mask, int shift)
        {
index 1d8d7db..16b03ff 100644 (file)
@@ -57,7 +57,7 @@ void MC6809::run_one_opecode()
                                now_debugging = false;
                        }
                
-                       d_debugger->add_cpu_trace(PC);
+                       d_debugger->add_cpu_trace(PC & 0xffff);
                        int first_icount = icount;
                        pPPC = pPC;
                        uint8_t ireg = ROP(PCD);
@@ -75,7 +75,7 @@ void MC6809::run_one_opecode()
                                d_mem = d_mem_stored;
                        }
                } else {
-                       d_debugger->add_cpu_trace(PC);
+                       d_debugger->add_cpu_trace(PC & 0xffff);
                        int first_icount = icount;
                        pPPC = pPC;
                        uint8_t ireg = ROP(PCD);
@@ -88,6 +88,7 @@ void MC6809::run_one_opecode()
                }
        } else {
                pPPC = pPC;
+               d_debugger->add_cpu_trace(PC & 0xffff);
                uint8_t ireg = ROP(PCD);
                PC++;
                icount -= cycles1[ireg];
@@ -810,7 +811,7 @@ uint32_t MC6809::cpu_disassemble_m6809(_TCHAR *buffer, uint32_t pc, const uint8_
        }
 }
 
-int MC6809::debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len)
+int MC6809::debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata)
 {
        if(__USE_DEBUGGER) {
                _TCHAR buffer_tmp[1024]; // enough ???
index b9ca4c7..5483435 100644 (file)
@@ -612,7 +612,7 @@ public:
        }
        bool write_debug_reg(const _TCHAR *reg, uint32_t data);
        bool get_debug_regs_info(_TCHAR *buffer, size_t buffer_len);
-       virtual int debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len);
+       virtual int debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata = 0);
        virtual uint32_t cpu_disassemble_m6809(_TCHAR *buffer, uint32_t pc, const uint8_t *oprom, const uint8_t *opram);
        virtual void debugger_hook(void);
        // common functions
@@ -704,7 +704,7 @@ class MC6809 : public MC6809_BASE
        void initialize();
        void run_one_opecode();
        uint32_t cpu_disassemble_m6809(_TCHAR *buffer, uint32_t pc, const uint8_t *oprom, const uint8_t *opram);
-       int debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len);
+       virtual int debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata = 0);
        void debugger_hook(void);
 };
 #endif
index b1b300a..0475345 100644 (file)
@@ -726,7 +726,7 @@ uint32_t MC6809_BASE::cpu_disassemble_m6809(_TCHAR *buffer, uint32_t pc, const u
        return 0;
 }
 
-int MC6809_BASE::debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len)
+int MC6809_BASE::debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata)
 {
        return 0;
 }
index dc7ebb3..508ddda 100644 (file)
@@ -495,7 +495,7 @@ public:
        uint32_t read_debug_io8(uint32_t addr);
        bool write_debug_reg(const _TCHAR *reg, uint32_t data);
        bool get_debug_regs_info(_TCHAR *buffer, size_t buffer_len);
-       int debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len);
+       int debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata = 0);
 //#endif
        
        // unique functions
index 1bcc6d6..e021511 100644 (file)
@@ -538,7 +538,7 @@ Clocks = 0 (0)  Since Scanline = 0/0 (0/0)
 
 ***************************************************************************/
 
-int MCS48_BASE::debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len)
+int MCS48_BASE::debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata)
 {
        mcs48_state *cpustate = (mcs48_state *)opaque;
        uint32_t ptr = pc;
index daa3289..2332b67 100644 (file)
@@ -958,7 +958,7 @@ const UINT32 DASMFLAG_LENGTHMASK    = 0x0000ffff;   // the low 16-bits contain t
 
 extern CPU_DISASSEMBLE(m6502);
        
-int N2A03::debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len)
+int N2A03::debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata)
 {
 #ifdef USE_DEBUGGER
        uint8_t oprom[4];
index 4635efa..1bcb813 100644 (file)
@@ -1691,7 +1691,7 @@ enum
 
 #include "mame/emu/cpu/tms9900/9900dasm.c"
 
-int TMS9995::debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len)
+int TMS9995::debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata)
 {
        UINT8 oprom[16], opram[16];
        for(int i = 0; i < 16; i++) {
index d721aea..804f9b7 100644 (file)
@@ -187,7 +187,7 @@ public:
        uint32_t read_debug_io8(uint32_t addr);
        bool write_debug_reg(const _TCHAR *reg, uint32_t data);
        bool get_debug_regs_info(_TCHAR *buffer, size_t buffer_len);
-       int debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len);
+       int debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata = 0);
 #endif
        bool process_state(FILEIO* state_fio, bool loading);
        // unique functions
index d0c17d3..29aa0b8 100644 (file)
@@ -1433,7 +1433,7 @@ uint8_t getwa()
        return getb();
 }
 
-int UPD7801::debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len)
+int UPD7801::debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata)
 {
        if(d_debugger == NULL) return 0;
        for(int i = 0; i < 4; i++) {
index 9e6b0ff..bdf5ccc 100644 (file)
@@ -162,7 +162,8 @@ public:
        uint32_t read_debug_io8(uint32_t addr);
        bool write_debug_reg(const _TCHAR *reg, uint32_t data);
        bool get_debug_regs_info(_TCHAR *buffer, size_t buffer_len);
-       int debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len);
+       int debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata = 0);
+
 //#endif
        bool process_state(FILEIO* state_fio, bool loading);
        
index e69a129..e4f8d62 100644 (file)
@@ -356,7 +356,7 @@ Clocks = 0 (0)  Since Scanline = 0/0 (0/0)
 
 // disassembler
 
-int UPD7810::debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len)
+int UPD7810::debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata)
 {
        uint8_t oprom[8];
        uint8_t *opram = oprom;
index 26aaad0..b09be50 100644 (file)
@@ -93,7 +93,7 @@ public:
        uint32_t read_debug_io8(uint32_t addr);
        bool write_debug_reg(const _TCHAR *reg, uint32_t data);
        bool get_debug_regs_info(_TCHAR *buffer, size_t buffer_len);
-       int debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len);
+       int debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata = 0);
 #endif
        bool process_state(FILEIO* state_fio, bool loading);
        
index 751310c..61a34f1 100644 (file)
@@ -574,7 +574,7 @@ extern uint8_t z80_dasm_ops[4];
 extern int z80_dasm_ptr;
 }
 
-int Z80::debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len)
+int Z80::debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata )
 {
        for(int i = 0; i < 4; i++) {
                int wait;
index 5c7f714..3aa2905 100644 (file)
@@ -334,7 +334,7 @@ public:
        }
        bool write_debug_reg(const _TCHAR *reg, uint32_t data);
        bool get_debug_regs_info(_TCHAR *buffer, size_t buffer_len);
-       virtual int debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len);
+       virtual int debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata = 0);
 //#endif
        // unique functions
        void set_context_mem(DEVICE* device)
@@ -380,7 +380,7 @@ public:
        void reset();
        int run(int clock) override;
 
-       int debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len);
+       int debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata = 0);
 #ifdef USE_DEBUGGER
        void write_debug_data8(uint32_t addr, uint32_t data);
        uint32_t read_debug_data8(uint32_t addr);
index 1606d0a..2cde6b4 100644 (file)
@@ -2364,7 +2364,7 @@ Total CPU Clocks = 0 (0) Since Scanline = 0/0 (0/0)
 
 // disassembler
 
-int Z80_BASE::debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len)
+int Z80_BASE::debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata )
 {
        return -1;
 }