OSDN Git Service

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