OSDN Git Service

a4430708de93075487b34981d6dd6842c8c32ac0
[csp-qt/common_source_project-fm7.git] / source / src / vm / i386.h
1 /*
2         Skelton for retropc emulator
3
4         Origin : MAME i386 core
5         Author : Takeda.Toshiya
6         Date  : 2009.06.08-
7
8         [ i386/i486/Pentium/MediaGX ]
9 */
10
11 #ifndef _I386_H_ 
12 #define _I386_H_
13 #if defined(USE_SHARED_DLL)
14 //#if 0
15 #include "libcpu_newdev/i386.h"
16 #else
17 #include "vm.h"
18 #include "../emu.h"
19 #include "device.h"
20
21 #define SIG_I386_A20    1
22
23 #ifdef USE_DEBUGGER
24 class DEBUGGER;
25 #endif
26
27 class I386 : public DEVICE
28 {
29 private:
30         DEVICE *d_mem, *d_io, *d_pic;
31 #ifdef I386_PSEUDO_BIOS
32         DEVICE *d_bios;
33 #endif
34 #ifdef SINGLE_MODE_DMA
35         DEVICE *d_dma;
36 #endif
37 #ifdef USE_DEBUGGER
38         DEBUGGER *d_debugger;
39 #endif
40         void *opaque;
41         
42 public:
43         I386(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
44         {
45 #ifdef I386_PSEUDO_BIOS
46                 d_bios = NULL;
47 #endif
48 #ifdef SINGLE_MODE_DMA
49                 d_dma = NULL;
50 #endif
51 #if defined(HAS_I386)
52                 set_device_name(_T("i80386 CPU"));
53 #elif defined(HAS_I486)
54                 set_device_name(_T("i80486 CPU"));
55 #elif defined(HAS_PENTIUM)
56                 set_device_name(_T("Pentium CPU"));
57 #elif defined(HAS_MEDIAGX)
58                 set_device_name(_T("Media GX CPU"));
59 #elif defined(HAS_PENTIUM_PRO)
60                 set_device_name(_T("Pentium Pro CPU"));
61 #elif defined(HAS_PENTIUM_MMX)
62                 set_device_name(_T("Pentium MMX CPU"));
63 #elif defined(HAS_PENTIUM2)
64                 set_device_name(_T("Pentium2 CPU"));
65 #elif defined(HAS_PENTIUM3)
66                 set_device_name(_T("Pentium3 CPU"));
67 #elif defined(HAS_PENTIUM4)
68                 set_device_name(_T("Pentium4 CPU"));
69 #endif
70 #if defined(HAS_I386)
71                 set_device_name(_T("80386 CPU"));
72 #elif defined(HAS_I486)
73                 set_device_name(_T("80486 CPU"));
74 #elif defined(HAS_PENTIUM)
75                 set_device_name(_T("Pentium CPU"));
76 #elif defined(HAS_MEDIAGX)
77                 set_device_name(_T("Media GX CPU"));
78 #elif defined(HAS_PENTIUM_PRO)
79                 set_device_name(_T("Pentium Pro CPU"));
80 #elif defined(HAS_PENTIUM_MMX)
81                 set_device_name(_T("Pentium MMX CPU"));
82 #elif defined(HAS_PENTIUM2)
83                 set_device_name(_T("Pentium2 CPU"));
84 #elif defined(HAS_PENTIUM3)
85                 set_device_name(_T("Pentium3 CPU"));
86 #elif defined(HAS_PENTIUM4)
87                 set_device_name(_T("Pentium4 CPU"));
88 #endif
89         }
90         ~I386() {}
91         
92         // common functions
93         void initialize();
94         void release();
95         void reset();
96         int run(int cycles);
97         void write_signal(int id, uint32_t data, uint32_t mask);
98         void set_intr_line(bool line, bool pending, uint32_t bit);
99         void set_extra_clock(int cycles);
100         int get_extra_clock();
101         uint32_t get_pc();
102         uint32_t get_next_pc();
103 #ifdef USE_DEBUGGER
104         void *get_debugger()
105         {
106                 return d_debugger;
107         }
108         uint32_t get_debug_prog_addr_mask()
109         {
110                 return 0xffffffff;
111         }
112         uint32_t get_debug_data_addr_mask()
113         {
114                 return 0xffffffff;
115         }
116         void write_debug_data8(uint32_t addr, uint32_t data);
117         uint32_t read_debug_data8(uint32_t addr);
118         void write_debug_data16(uint32_t addr, uint32_t data);
119         uint32_t read_debug_data16(uint32_t addr);
120         void write_debug_data32(uint32_t addr, uint32_t data);
121         uint32_t read_debug_data32(uint32_t addr);
122         void write_debug_io8(uint32_t addr, uint32_t data);
123         uint32_t read_debug_io8(uint32_t addr);
124         void write_debug_io16(uint32_t addr, uint32_t data);
125         uint32_t read_debug_io32(uint32_t addr);
126         void write_debug_io32(uint32_t addr, uint32_t data);
127         uint32_t read_debug_io16(uint32_t addr);
128         bool write_debug_reg(const _TCHAR *reg, uint32_t data);
129         uint32_t read_debug_reg(const _TCHAR *reg);
130         void get_debug_regs_info(_TCHAR *buffer, size_t buffer_len);
131         int debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len);
132 #endif
133         void save_state(FILEIO* state_fio);
134         bool load_state(FILEIO* state_fio);
135         
136         // unique function
137         void set_context_mem(DEVICE* device)
138         {
139                 d_mem = device;
140         }
141         void set_context_io(DEVICE* device)
142         {
143                 d_io = device;
144         }
145         void set_context_intr(DEVICE* device)
146         {
147                 d_pic = device;
148         }
149 #ifdef I386_PSEUDO_BIOS
150         void set_context_bios(DEVICE* device)
151         {
152                 d_bios = device;
153         }
154 #endif
155 #ifdef SINGLE_MODE_DMA
156         void set_context_dma(DEVICE* device)
157         {
158                 d_dma = device;
159         }
160 #endif
161 #ifdef USE_DEBUGGER
162         void set_context_debugger(DEBUGGER* device)
163         {
164                 d_debugger = device;
165         }
166 #endif
167         void set_address_mask(uint32_t mask);
168         uint32_t get_address_mask();
169         void set_shutdown_flag(int shutdown);
170         int get_shutdown_flag();
171 };
172 #endif // USE_SHARED_DLL
173 #endif