OSDN Git Service

[VM][i386] Revert new I386 class to older.Newer class will continue to work within...
[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
14 #include "vm.h"
15 #include "../emu.h"
16 #include "device.h"
17
18 #define SIG_I386_A20    1
19
20 #ifdef USE_DEBUGGER
21 class DEBUGGER;
22 #endif
23
24 class I386 : public DEVICE
25 {
26 private:
27         DEVICE *d_mem, *d_io, *d_pic;
28 #ifdef I386_PSEUDO_BIOS
29         DEVICE *d_bios;
30 #endif
31 #ifdef SINGLE_MODE_DMA
32         DEVICE *d_dma;
33 #endif
34 #ifdef USE_DEBUGGER
35         DEBUGGER *d_debugger;
36 #endif
37         void *opaque;
38         
39 public:
40         I386(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
41         {
42 #ifdef I386_PSEUDO_BIOS
43                 d_bios = NULL;
44 #endif
45 #ifdef SINGLE_MODE_DMA
46                 d_dma = NULL;
47 #endif
48 #if defined(HAS_I386)
49                 set_device_name(_T("i80386 CPU"));
50 #elif defined(HAS_I486)
51                 set_device_name(_T("i80486 CPU"));
52 #elif defined(HAS_PENTIUM)
53                 set_device_name(_T("Pentium CPU"));
54 #elif defined(HAS_MEDIAGX)
55                 set_device_name(_T("Media GX CPU"));
56 #elif defined(HAS_PENTIUM_PRO)
57                 set_device_name(_T("Pentium Pro CPU"));
58 #elif defined(HAS_PENTIUM_MMX)
59                 set_device_name(_T("Pentium MMX CPU"));
60 #elif defined(HAS_PENTIUM2)
61                 set_device_name(_T("Pentium2 CPU"));
62 #elif defined(HAS_PENTIUM3)
63                 set_device_name(_T("Pentium3 CPU"));
64 #elif defined(HAS_PENTIUM4)
65                 set_device_name(_T("Pentium4 CPU"));
66 #endif
67         }
68         ~I386() {}
69         
70         // common functions
71         void initialize();
72         void release();
73         void reset();
74         int run(int cycles);
75         void write_signal(int id, uint32_t data, uint32_t mask);
76         void set_intr_line(bool line, bool pending, uint32_t bit);
77         void set_extra_clock(int cycles);
78         int get_extra_clock();
79         uint32_t get_pc();
80         uint32_t get_next_pc();
81 #ifdef USE_DEBUGGER
82         void *get_debugger()
83         {
84                 return d_debugger;
85         }
86         uint32_t get_debug_prog_addr_mask()
87         {
88                 return 0xffffffff;
89         }
90         uint32_t get_debug_data_addr_mask()
91         {
92                 return 0xffffffff;
93         }
94         void write_debug_data8(uint32_t addr, uint32_t data);
95         uint32_t read_debug_data8(uint32_t addr);
96         void write_debug_data16(uint32_t addr, uint32_t data);
97         uint32_t read_debug_data16(uint32_t addr);
98         void write_debug_data32(uint32_t addr, uint32_t data);
99         uint32_t read_debug_data32(uint32_t addr);
100         void write_debug_io8(uint32_t addr, uint32_t data);
101         uint32_t read_debug_io8(uint32_t addr);
102         void write_debug_io16(uint32_t addr, uint32_t data);
103         uint32_t read_debug_io32(uint32_t addr);
104         void write_debug_io32(uint32_t addr, uint32_t data);
105         uint32_t read_debug_io16(uint32_t addr);
106         bool write_debug_reg(const _TCHAR *reg, uint32_t data);
107         void get_debug_regs_info(_TCHAR *buffer, size_t buffer_len);
108         int debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len);
109 #endif
110         void save_state(FILEIO* state_fio);
111         bool load_state(FILEIO* state_fio);
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 I386_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         void set_address_mask(uint32_t mask);
145         uint32_t get_address_mask();
146         void set_shutdown_flag(int shutdown);
147         int get_shutdown_flag();
148 };
149
150 #endif