2 Skelton for retropc emulator
4 Origin : MESS UPD7810 Core
5 Author : Takeda.Toshiya
18 #define SIG_UPD7801_INTF0 0
19 #define SIG_UPD7801_INTF1 1
20 #define SIG_UPD7801_INTF2 2
21 #define SIG_UPD7801_WAIT 3
22 #define SIG_UPD7801_SI 4
23 #define SIG_UPD7801_SCK 5
25 // virtual i/o port address
34 class UPD7801 : public DEVICE
37 /* ---------------------------------------------------------------------------
39 --------------------------------------------------------------------------- */
45 DEVICE *d_mem_stored, *d_io_stored;
48 /* ---------------------------------------------------------------------------
50 --------------------------------------------------------------------------- */
54 uint64_t prev_total_count;
56 int count, period, scount, tcount;
60 uint16_t SP, PC, prevPC;
61 uint8_t PSW, IRR, IFF, SIRQ, HALT, MK, MB, MC, TM0, TM1, SR;
63 uint8_t SAK, TO, HLDA, PORTC;
68 /* ---------------------------------------------------------------------------
69 virtual machine interface
70 --------------------------------------------------------------------------- */
73 inline uint8_t RM8(uint16_t addr);
74 inline void WM8(uint16_t addr, uint8_t val);
75 inline uint16_t RM16(uint16_t addr);
76 inline void WM16(uint16_t addr, uint16_t val);
77 inline uint8_t FETCH8();
78 inline uint16_t FETCH16();
79 inline uint16_t FETCHWA();
80 inline uint8_t POP8();
81 inline void PUSH8(uint8_t val);
82 inline uint16_t POP16();
83 inline void PUSH16(uint16_t val);
86 inline uint8_t IN8(int port);
87 inline void OUT8(int port, uint8_t val);
88 inline void UPDATE_PORTC(uint8_t IOM);
91 bool __UPD7801_MEMORY_WAIT;
93 /* ---------------------------------------------------------------------------
95 --------------------------------------------------------------------------- */
97 void run_one_opecode();
99 void run_one_opecode_debugger();
111 UPD7801(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
114 total_count = prev_total_count = 0;
116 initialize_output_signals(&outputs_so);
119 d_mem_stored = d_io_stored = NULL;
120 __USE_DEBUGGER = __UPD7801_MEMORY_WAIT = false;
121 set_device_name(_T("uPD7801 CPU"));
129 void write_signal(int id, uint32_t data, uint32_t mask);
134 uint32_t get_next_pc()
138 //#ifdef USE_DEBUGGER
143 uint32_t get_debug_prog_addr_mask()
147 uint32_t get_debug_data_addr_mask()
151 void write_debug_data8(uint32_t addr, uint32_t data);
152 uint32_t read_debug_data8(uint32_t addr);
153 void write_debug_io8(uint32_t addr, uint32_t data);
154 uint32_t read_debug_io8(uint32_t addr);
155 bool write_debug_reg(const _TCHAR *reg, uint32_t data);
156 void get_debug_regs_info(_TCHAR *buffer, size_t buffer_len);
157 int debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len);
159 bool process_state(FILEIO* state_fio, bool loading);
162 void set_context_mem(DEVICE* device)
166 void set_context_io(DEVICE* device)
170 //#ifdef USE_DEBUGGER
171 void set_context_debugger(DEBUGGER* device)
176 void set_context_so(DEVICE* device, int id, uint32_t mask)
178 register_output_signal(&outputs_so, device, id, mask);