2 Skelton for retropc emulator
5 Author : Takeda.Toshiya
11 #ifndef _I8080_BASE_H_
12 #define _I8080_BASE_H_
18 #define SIG_I8080_INTR 0
20 #define SIG_I8085_RST5 1
21 #define SIG_I8085_RST6 2
22 #define SIG_I8085_RST7 3
23 #define SIG_I8085_SID 4
25 #define SIG_I8080_INTE 5
31 class I8080_BASE : public DEVICE
34 /* ---------------------------------------------------------------------------
36 --------------------------------------------------------------------------- */
38 DEVICE *d_mem, *d_io, *d_pic;
41 DEVICE *d_mem_stored, *d_io_stored;
45 outputs_t outputs_busack;
46 outputs_t outputs_sod;
48 /* ---------------------------------------------------------------------------
50 --------------------------------------------------------------------------- */
54 uint16_t SP, PC, prevPC;
56 bool HALT, BUSREQ, SID, afterEI;
59 I8080_BASE(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
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;
68 set_device_name(_T("i8080 CPU"));
71 virtual void initialize();
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);
81 uint32_t get_next_pc()
90 uint32_t get_debug_prog_addr_mask()
94 uint32_t get_debug_data_addr_mask()
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);
107 void set_context_mem(DEVICE* device)
111 void set_context_io(DEVICE* device)
115 void set_context_intr(DEVICE* device)
119 void set_context_busack(DEVICE* device, int id, uint32_t mask)
121 register_output_signal(&outputs_busack, device, id, mask);
123 void set_context_sod(DEVICE* device, int id, uint32_t mask)
125 register_output_signal(&outputs_sod, device, id, mask);