OSDN Git Service

[General][WIP] Merge upstream 2017-03-20.Still not implement UIs.
[csp-qt/common_source_project-fm7.git] / source / src / vm / mcs48.h
1 /*
2         Skelton for retropc emulator
3
4         Origin : MAME 0.148
5         Author : Takeda.Toshiya
6         Date   : 2013.05.01-
7
8         [ MCS48 ]
9 */
10
11 #ifndef _MCS84_H_ 
12 #define _MCS48_H_
13
14 #if defined(USE_DEVICES_SHARED_LIB)
15 #include "libcpu_newdev/mcs48.h"
16 #else
17 #include "vm.h"
18 #include "../emu.h"
19 #include "device.h"
20
21 #define MCS48_PORT_P0   0x100   /* Not used */
22 #define MCS48_PORT_P1   0x101   /* P10-P17 */
23 #define MCS48_PORT_P2   0x102   /* P20-P28 */
24 #define MCS48_PORT_T0   0x110
25 #define MCS48_PORT_T1   0x111
26 #define MCS48_PORT_BUS  0x120   /* DB0-DB7 */
27 #define MCS48_PORT_PROG 0x121   /* PROG line to 8243 expander */
28
29 #ifdef USE_DEBUGGER
30 class DEBUGGER;
31 #endif
32
33 class MCS48MEM : public DEVICE
34 {
35 private:
36         uint8_t ram[0x100];
37 public:
38         MCS48MEM(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
39         {
40                 memset(ram, 0, sizeof(ram));
41                 set_device_name(_T("MCS48 MEMORY BUS"));
42         }
43         ~MCS48MEM() {}
44         
45         uint32_t read_data8(uint32_t addr)
46         {
47                 return ram[addr & 0xff];
48         }
49         void write_data8(uint32_t addr, uint32_t data)
50         {
51                 ram[addr & 0xff] = data;
52         }
53         void save_state(FILEIO* state_fio);
54         bool load_state(FILEIO* state_fio);
55 };
56
57 class MCS48 : public DEVICE
58 {
59 private:
60         /* ---------------------------------------------------------------------------
61         contexts
62         --------------------------------------------------------------------------- */
63         
64         DEVICE *d_mem, *d_io, *d_intr;
65 #ifdef USE_DEBUGGER
66         DEBUGGER *d_debugger;
67         DEVICE *d_mem_stored, *d_io_stored;
68 #endif
69         void *opaque;
70         
71 public:
72         MCS48(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
73         {
74                 d_mem = d_io = d_intr = NULL;
75                 set_device_name(_T("MCS48 MCU"));
76         }
77         ~MCS48() {}
78         
79         // common functions
80         void initialize();
81         void release();
82         void reset();
83         int run(int icount);
84         void write_signal(int id, uint32_t data, uint32_t mask);
85         uint32_t get_pc();
86         uint32_t get_next_pc();
87 #ifdef USE_DEBUGGER
88         void *get_debugger()
89         {
90                 return d_debugger;
91         }
92         uint32_t get_debug_prog_addr_mask()
93         {
94                 return 0xfff;
95         }
96         uint32_t get_debug_data_addr_mask()
97         {
98                 return 0xff;
99         }
100         void write_debug_data8(uint32_t addr, uint32_t data);
101         uint32_t read_debug_data8(uint32_t addr);
102         void write_debug_io8(uint32_t addr, uint32_t data);
103         uint32_t read_debug_io8(uint32_t addr);
104         bool write_debug_reg(const _TCHAR *reg, uint32_t data);
105         void get_debug_regs_info(_TCHAR *buffer, size_t buffer_len);
106         int debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len);
107 #endif
108         void save_state(FILEIO* state_state_fio);
109         bool load_state(FILEIO* state_state_fio);
110         
111         // unique functions
112         void set_context_mem(DEVICE* device)
113         {
114                 d_mem = device;
115         }
116         void set_context_io(DEVICE* device)
117         {
118                 d_io = device;
119         }
120         void set_context_intr(DEVICE* device)
121         {
122                 d_intr = device;
123         }
124 #ifdef USE_DEBUGGER
125         void set_context_debugger(DEBUGGER* device)
126         {
127                 d_debugger = device;
128         }
129 #endif
130         void load_rom_image(const _TCHAR *file_path);
131         uint8_t *get_rom_ptr();
132 };
133 #endif
134 #endif
135