OSDN Git Service

[VM] Add EMU::set_vm_screen_lines() to some VMs.
[csp-qt/common_source_project-fm7.git] / source / src / vm / upd7810.h
1 /*
2         Skelton for retropc emulator
3
4         Origin : MESS 0.152
5         Author : Takeda.Toshiya
6         Date   : 2016.03.17-
7
8         [ uPD7810 ]
9 */
10
11 #ifndef _UPD7810_H_ 
12 #define _UPD7810_H_
13
14 #include "vm.h"
15 #include "../emu.h"
16 #include "device.h"
17
18 #define SIG_UPD7810_INTF1       0
19 #define SIG_UPD7810_INTF2       1
20 #define SIG_UPD7810_INTF0       2
21 #define SIG_UPD7810_INTFE1      3
22 #define SIG_UPD7810_NMI         4
23
24 #ifdef USE_DEBUGGER
25 class DEBUGGER;
26 #endif
27
28 class UPD7810 : public DEVICE
29 {
30 private:
31         DEVICE *d_mem, *d_io;
32 #ifdef USE_DEBUGGER
33         DEBUGGER *d_debugger;
34 #endif
35         outputs_t outputs_to;
36         outputs_t outputs_txd;
37         void *opaque;
38 #ifdef USE_DEBUGGER
39         uint64_t total_icount;
40         uint64_t prev_total_icount;
41 #endif
42         int icount;
43         bool busreq, rxd_status;
44         
45         int run_one_opecode();
46         
47 public:
48         UPD7810(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
49         {
50 #ifdef USE_DEBUGGER
51                 total_icount = prev_total_icount = 0;
52 #endif
53                 initialize_output_signals(&outputs_to);
54                 initialize_output_signals(&outputs_txd);
55                 set_device_name(_T("uPD7810/7811 MCU"));
56         }
57         ~UPD7810() {}
58         
59         // common functions
60         void initialize();
61         void release();
62         void reset();
63         int run(int clock);
64         void write_signal(int id, uint32_t data, uint32_t mask);
65         uint32_t get_pc();
66         uint32_t get_next_pc();
67 #ifdef USE_DEBUGGER
68         void *get_debugger()
69         {
70                 return d_debugger;
71         }
72         uint32_t get_debug_prog_addr_mask()
73         {
74                 return 0xffff;
75         }
76         uint32_t get_debug_data_addr_mask()
77         {
78                 return 0xffff;
79         }
80         void write_debug_data8(uint32_t addr, uint32_t data);
81         uint32_t read_debug_data8(uint32_t addr);
82         void write_debug_io8(uint32_t addr, uint32_t data);
83         uint32_t read_debug_io8(uint32_t addr);
84         bool write_debug_reg(const _TCHAR *reg, uint32_t data);
85         void get_debug_regs_info(_TCHAR *buffer, size_t buffer_len);
86         int debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len);
87 #endif
88         void save_state(FILEIO* state_fio);
89         bool load_state(FILEIO* state_fio);
90         
91         // unique functions
92         void set_context_mem(DEVICE* device)
93         {
94                 d_mem = device;
95         }
96         void set_context_io(DEVICE* device)
97         {
98                 d_io = device;
99         }
100 #ifdef USE_DEBUGGER
101         void set_context_debugger(DEBUGGER* device)
102         {
103                 d_debugger = device;
104         }
105 #endif
106         void set_context_to(DEVICE* device, int id, uint32_t mask)
107         {
108                 register_output_signal(&outputs_to, device, id, mask);
109         }
110         void set_context_txd(DEVICE* device, int id, uint32_t mask)
111         {
112                 register_output_signal(&outputs_txd, device, id, mask);
113         }
114 };
115
116 #endif
117