OSDN Git Service

[VM][General][WIP] Apply new (Upstream 2016-02-21) APIs to VMs.
[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         }
49         ~I386() {}
50         
51         // common functions
52         void initialize();
53         void release();
54         void reset();
55         int run(int cycles);
56         void write_signal(int id, uint32 data, uint32 mask);
57         void set_intr_line(bool line, bool pending, uint32 bit);
58         void set_extra_clock(int cycles);
59         int get_extra_clock();
60         uint32 get_pc();
61         uint32 get_next_pc();
62 #ifdef USE_DEBUGGER
63         void *get_debugger()
64         {
65                 return d_debugger;
66         }
67         uint32 get_debug_prog_addr_mask()
68         {
69                 return 0xffffffff;
70         }
71         uint32 get_debug_data_addr_mask()
72         {
73                 return 0xffffffff;
74         }
75         void write_debug_data8(uint32 addr, uint32 data);
76         uint32 read_debug_data8(uint32 addr);
77         void write_debug_data16(uint32 addr, uint32 data);
78         uint32 read_debug_data16(uint32 addr);
79         void write_debug_data32(uint32 addr, uint32 data);
80         uint32 read_debug_data32(uint32 addr);
81         void write_debug_io8(uint32 addr, uint32 data);
82         uint32 read_debug_io8(uint32 addr);
83         void write_debug_io16(uint32 addr, uint32 data);
84         uint32 read_debug_io32(uint32 addr);
85         void write_debug_io32(uint32 addr, uint32 data);
86         uint32 read_debug_io16(uint32 addr);
87         bool write_debug_reg(const _TCHAR *reg, uint32 data);
88         void get_debug_regs_info(_TCHAR *buffer, size_t buffer_len);
89         int debug_dasm(uint32 pc, _TCHAR *buffer, size_t buffer_len);
90 #endif
91         void save_state(FILEIO* state_fio);
92         bool load_state(FILEIO* state_fio);
93         
94         // unique function
95         void set_context_mem(DEVICE* device)
96         {
97                 d_mem = device;
98         }
99         void set_context_io(DEVICE* device)
100         {
101                 d_io = device;
102         }
103         void set_context_intr(DEVICE* device)
104         {
105                 d_pic = device;
106         }
107 #ifdef I386_PSEUDO_BIOS
108         void set_context_bios(DEVICE* device)
109         {
110                 d_bios = device;
111         }
112 #endif
113 #ifdef SINGLE_MODE_DMA
114         void set_context_dma(DEVICE* device)
115         {
116                 d_dma = device;
117         }
118 #endif
119 #ifdef USE_DEBUGGER
120         void set_context_debugger(DEBUGGER* device)
121         {
122                 d_debugger = device;
123         }
124 #endif
125         void set_address_mask(uint32 mask);
126         uint32 get_address_mask();
127         void set_shutdown_flag(int shutdown);
128         int get_shutdown_flag();
129 };
130
131 #endif