OSDN Git Service

[VM][COMMON_VM] Add i8080.
[csp-qt/common_source_project-fm7.git] / source / src / vm / i8080_base.h
1 /*
2         Skelton for retropc emulator
3
4         Origin : MAME
5         Author : Takeda.Toshiya
6         Date   : 2008.11.04 -
7
8         [ i8080 / i8085 ]
9 */
10
11 #ifndef _I8080_BASE_H_ 
12 #define _I8080_BASE_H_
13
14 //#include "vm.h"
15 //#include "../emu.h"
16 #include "device.h"
17
18 #define SIG_I8080_INTR  0
19 //#ifdef HAS_I8085
20 #define SIG_I8085_RST5  1
21 #define SIG_I8085_RST6  2
22 #define SIG_I8085_RST7  3
23 #define SIG_I8085_SID   4
24 //#endif
25 #define SIG_I8080_INTE  5
26
27 //#ifdef USE_DEBUGGER
28 class DEBUGGER;
29 //#endif
30
31 class I8080_BASE : public DEVICE
32 {
33 protected:
34         /* ---------------------------------------------------------------------------
35         contexts
36         --------------------------------------------------------------------------- */
37         
38         DEVICE *d_mem, *d_io, *d_pic;
39 //#ifdef USE_DEBUGGER
40         DEBUGGER *d_debugger;
41         DEVICE *d_mem_stored, *d_io_stored;
42 //#endif
43         
44         // output signals
45         outputs_t outputs_busack;
46         outputs_t outputs_sod;
47         
48         /* ---------------------------------------------------------------------------
49         registers
50         --------------------------------------------------------------------------- */
51         
52         int count;
53         pair_t regs[4];
54         uint16_t SP, PC, prevPC;
55         uint16_t IM, RIM_IEN;
56         bool HALT, BUSREQ, SID, afterEI;
57
58 public:
59         I8080_BASE(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
60         {
61                 BUSREQ = false;
62                 SID = true;
63                 initialize_output_signals(&outputs_busack);
64                 initialize_output_signals(&outputs_sod);
65                 d_mem = d_pic = d_io = NULL;
66                 d_mem_stored = d_io_stored = NULL;
67                 d_debugger = NULL;
68                 set_device_name(_T("i8080 CPU"));
69         }
70         ~I8080_BASE() {}
71         virtual void initialize();
72         virtual void reset();
73         virtual int run(int clock);
74         virtual void write_signal(int id, uint32_t data, uint32_t mask);
75         uint32_t read_signal(int ch);
76         void set_intr_line(bool line, bool pending, uint32_t bit);
77         uint32_t get_pc()
78         {
79                 return prevPC;
80         }
81         uint32_t get_next_pc()
82         {
83                 return PC;
84         }
85 //#ifdef USE_DEBUGGER
86         void *get_debugger()
87         {
88                 return d_debugger;
89         }
90         uint32_t get_debug_prog_addr_mask()
91         {
92                 return 0xffff;
93         }
94         uint32_t get_debug_data_addr_mask()
95         {
96                 return 0xffff;
97         }
98         void write_debug_data8(uint32_t addr, uint32_t data);
99         uint32_t read_debug_data8(uint32_t addr);
100         void write_debug_io8(uint32_t addr, uint32_t data);
101         uint32_t read_debug_io8(uint32_t addr);
102         bool write_debug_reg(const _TCHAR *reg, uint32_t data);
103         void get_debug_regs_info(_TCHAR *buffer, size_t buffer_len);
104         int debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len);
105 //#endif
106         // unique function
107         void set_context_mem(DEVICE* device)
108         {
109                 d_mem = device;
110         }
111         void set_context_io(DEVICE* device)
112         {
113                 d_io = device;
114         }
115         void set_context_intr(DEVICE* device)
116         {
117                 d_pic = device;
118         }
119         void set_context_busack(DEVICE* device, int id, uint32_t mask)
120         {
121                 register_output_signal(&outputs_busack, device, id, mask);
122         }
123         void set_context_sod(DEVICE* device, int id, uint32_t mask)
124         {
125                 register_output_signal(&outputs_sod, device, id, mask);
126         }
127
128 };
129 #endif