OSDN Git Service

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