OSDN Git Service

b0d1d820f02ec3d48a1e64fbd387aa196f70bd14
[csp-qt/common_source_project-fm7.git] / source / src / vm / huc6280.h
1 /*
2         Skelton for retropc emulator
3
4         Origin : MESS 0.147
5         Author : Takeda.Toshiya
6         Date   : 2012.10.23-
7
8         [ HuC6280 ]
9 */
10
11 #ifndef _HUC6280_H_ 
12 #define _HUC6280_H_
13
14 #include "vm.h"
15 #include "../emu.h"
16 #include "device.h"
17
18 //#ifdef USE_DEBUGGER
19 class DEBUGGER;
20 //#endif
21
22 class HUC6280_BASE : public DEVICE
23 {
24 protected:
25         DEVICE *d_mem, *d_io;
26 //#ifdef USE_DEBUGGER
27         DEBUGGER *d_debugger;
28 //#endif
29         void *opaque;
30         int icount;
31         bool busreq;
32         int exec_call(void);
33         int exec_call_debug(void);
34         
35 public:
36         HUC6280_BASE(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu) {
37                 set_device_name(_T("HuC6280 CPU"));
38         }
39         ~HUC6280_BASE() {}
40         
41         // common functions
42         virtual void initialize();
43         virtual void release();
44         virtual void reset();
45         virtual int run(int clock);
46         void write_signal(int id, uint32_t data, uint32_t mask);
47         uint32_t get_pc();
48         uint32_t get_next_pc();
49 //#ifdef USE_DEBUGGER
50         void *get_debugger()
51         {
52                 return d_debugger;
53         }
54         uint32_t get_debug_prog_addr_mask()
55         {
56                 return 0xffff;
57         }
58         uint32_t get_debug_data_addr_mask()
59         {
60                 return 0x1fffff;
61         }
62         void write_debug_data8(uint32_t addr, uint32_t data);
63         uint32_t read_debug_data8(uint32_t addr);
64         void write_debug_io8(uint32_t addr, uint32_t data);
65         uint32_t read_debug_io8(uint32_t addr);
66         bool write_debug_reg(const _TCHAR *reg, uint32_t data);
67         void get_debug_regs_info(_TCHAR *buffer, size_t buffer_len);
68         int debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len);
69 //#endif
70         void save_state_registers(FILEIO* state_fio);
71         void load_state_registers(FILEIO* state_fio);
72         
73         // unique function
74         void set_context_mem(DEVICE* device)
75         {
76                 d_mem = device;
77         }
78         void set_context_io(DEVICE* device)
79         {
80                 d_io = device;
81         }
82         uint8_t irq_status_r(uint16_t offset);
83         void irq_status_w(uint16_t offset, uint8_t data);
84         uint8_t timer_r(uint16_t offset);
85         void timer_w(uint16_t offset, uint8_t data);
86 };
87
88 class HUC6280 : public HUC6280_BASE
89 {
90 private:
91         
92 public:
93         HUC6280(VM* parent_vm, EMU* parent_emu) : HUC6280_BASE(parent_vm, parent_emu) {
94                 set_device_name(_T("HuC6280 CPU"));
95         }
96         ~HUC6280() {}
97         
98         // common functions
99         void initialize();
100         void release();
101         void reset();
102         int run(int clock);
103         
104         void save_state(FILEIO* state_fio);
105         bool load_state(FILEIO* state_fio);
106         
107 #ifdef USE_DEBUGGER
108         void set_context_debugger(DEBUGGER* device)
109         {
110                 d_debugger = device;
111         }
112 #endif
113 };
114
115 #endif
116