OSDN Git Service

ab3257d2bb22643d46bddfd27b0ade5a07f97ca6
[csp-qt/common_source_project-fm7.git] / source / src / vm / i286.h
1 /*
2         Skelton for retropc emulator
3
4         Origin : MAME i286 core
5         Author : Takeda.Toshiya
6         Date  : 2012.10.18-
7
8         [ i286 ]
9 */
10
11 #ifndef _I286_H_ 
12 #define _I286_H_
13
14 #include "vm.h"
15 #include "../emu.h"
16 #include "device.h"
17
18 #define SIG_I86_TEST    0
19 #define SIG_I286_A20    1
20
21 #ifdef USE_DEBUGGER
22 class DEBUGGER;
23 #endif
24
25 class I286 : public DEVICE
26 {
27 private:
28         DEVICE *d_mem, *d_io, *d_pic;
29 #ifdef I86_PSEUDO_BIOS
30         DEVICE *d_bios;
31 #endif
32 #ifdef SINGLE_MODE_DMA
33         DEVICE *d_dma;
34 #endif
35 #ifdef USE_DEBUGGER
36         DEBUGGER *d_debugger;
37 #endif
38         void *opaque;
39         
40 public:
41         I286(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
42         {
43 #ifdef I86_PSEUDO_BIOS
44                 d_bios = NULL;
45 #endif
46 #ifdef SINGLE_MODE_DMA
47                 d_dma = NULL;
48 #endif
49 #if defined(HAS_I86)
50                 set_device_name(_T("8086 CPU"));
51 #elif defined(HAS_I88)
52                 set_device_name(_T("8088 CPU"));
53 #elif defined(HAS_I186)
54                 set_device_name(_T("80186 CPU"));
55 #elif defined(HAS_V30)
56                 set_device_name(_T("V30 CPU"));
57 #elif defined(HAS_I286)
58                 set_device_name(_T("80286 CPU"));
59 #endif
60         }
61         ~I286() {}
62         
63         // common functions
64         void initialize();
65         void release();
66         void reset();
67         int run(int icount);
68         void write_signal(int id, uint32_t data, uint32_t mask);
69         void set_intr_line(bool line, bool pending, uint32_t bit);
70         void set_extra_clock(int icount);
71         int get_extra_clock();
72         uint32_t get_pc();
73         uint32_t get_next_pc();
74 #ifdef USE_DEBUGGER
75         void *get_debugger()
76         {
77                 return d_debugger;
78         }
79         uint32_t get_debug_prog_addr_mask()
80         {
81 #ifdef HAS_I286
82                 return 0xffffff;
83 #else
84                 return 0xfffff;
85 #endif
86         }
87         uint32_t get_debug_data_addr_mask()
88         {
89 #ifdef HAS_I286
90                 return 0xffffff;
91 #else
92                 return 0xfffff;
93 #endif
94         }
95         void write_debug_data8(uint32_t addr, uint32_t data);
96         uint32_t read_debug_data8(uint32_t addr);
97         void write_debug_data16(uint32_t addr, uint32_t data);
98         uint32_t read_debug_data16(uint32_t addr);
99         void write_debug_io8(uint32_t addr, uint32_t data);
100         uint32_t read_debug_io8(uint32_t addr);
101         void write_debug_io16(uint32_t addr, uint32_t data);
102         uint32_t read_debug_io16(uint32_t addr);
103         bool write_debug_reg(const _TCHAR *reg, uint32_t data);
104         uint32_t read_debug_reg(const _TCHAR *reg);
105         void get_debug_regs_info(_TCHAR *buffer, size_t buffer_len);
106         int debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len);
107 #endif
108         void save_state_cpustate(FILEIO* state_fio);
109         void load_state_cpustate(FILEIO* state_fio);
110         
111         bool process_state(FILEIO* state_fio, bool loading);
112         
113         // unique function
114         void set_context_mem(DEVICE* device)
115         {
116                 d_mem = device;
117         }
118         void set_context_io(DEVICE* device)
119         {
120                 d_io = device;
121         }
122         void set_context_intr(DEVICE* device)
123         {
124                 d_pic = device;
125         }
126 #ifdef I86_PSEUDO_BIOS
127         void set_context_bios(DEVICE* device)
128         {
129                 d_bios = device;
130         }
131 #endif
132 #ifdef SINGLE_MODE_DMA
133         void set_context_dma(DEVICE* device)
134         {
135                 d_dma = device;
136         }
137 #endif
138 #ifdef USE_DEBUGGER
139         void set_context_debugger(DEBUGGER* device)
140         {
141                 d_debugger = device;
142         }
143 #endif
144 #ifdef HAS_I286
145         void set_address_mask(uint32_t mask);
146         uint32_t get_address_mask();
147         void set_shutdown_flag(int shutdown);
148         int get_shutdown_flag();
149 #endif
150 };
151
152 #endif