OSDN Git Service

[VM][COMMON_VM] Include IO:: class to common_vm.
[csp-qt/common_source_project-fm7.git] / source / src / vm / i86.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 #pragma once
11 #ifndef _I86_H_ 
12 #define _I86_H_
13
14 //#include "fileio.h"
15 //#include "vm_template.h"
16 //#include "../emu.h"
17 #include "device.h"
18
19 #define SIG_I86_TEST    0
20
21 class DEBUGGER;
22
23 enum {
24         N_CPU_TYPE_I8086 = 0,
25         N_CPU_TYPE_I8088,
26         N_CPU_TYPE_I80186,
27         N_CPU_TYPE_V30,
28         N_CPU_TYPE_I80286,
29 };      
30
31
32 class I8086 : public DEVICE
33 {
34 protected:
35         DEVICE *d_mem, *d_io, *d_pic;
36         DEVICE *d_bios;
37         DEVICE *d_dma;
38         DEBUGGER *d_debugger;
39         void *opaque;
40         int n_cpu_type;
41         bool _HAS_i80286;
42         bool _HAS_v30;
43         void cpu_reset_generic();
44
45 public:
46         I8086(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
47         {
48                 d_bios = NULL;
49                 d_dma = NULL;
50                 d_debugger = NULL;;
51         }
52         ~I8086() {}
53         
54         // common functions
55         virtual void initialize();
56         virtual void release();
57         virtual void reset();
58         virtual int __FASTCALL run(int icount);
59         virtual uint32_t __FASTCALL read_signal(int id);
60         virtual void __FASTCALL write_signal(int id, uint32_t data, uint32_t mask);
61         virtual void set_intr_line(bool line, bool pending, uint32_t bit);
62         virtual void set_extra_clock(int icount);
63         virtual int get_extra_clock();
64         virtual uint32_t get_pc();
65         virtual uint32_t get_next_pc();
66         virtual uint32_t __FASTCALL translate_address(int segment, uint32_t offset);
67
68
69         bool is_cpu()
70         {
71                 return true;
72         }
73         bool is_debugger_available()
74         {
75                 return true;
76         }
77         void *get_debugger()
78         {
79                 return d_debugger;
80         }
81         virtual uint32_t get_debug_prog_addr_mask()
82         {
83                 return 0xfffff;
84         }
85         virtual uint32_t get_debug_data_addr_mask()
86         {
87                 return 0xfffff;
88         }
89         virtual void __FASTCALL write_debug_data8(uint32_t addr, uint32_t data);
90         virtual uint32_t __FASTCALL read_debug_data8(uint32_t addr);
91         virtual void __FASTCALL write_debug_data16(uint32_t addr, uint32_t data);
92         virtual uint32_t __FASTCALL read_debug_data16(uint32_t addr);
93         virtual void __FASTCALL write_debug_io8(uint32_t addr, uint32_t data);
94         virtual uint32_t __FASTCALL read_debug_io8(uint32_t addr);
95         virtual void __FASTCALL write_debug_io16(uint32_t addr, uint32_t data);
96         virtual uint32_t __FASTCALL read_debug_io16(uint32_t addr);
97         virtual bool write_debug_reg(const _TCHAR *reg, uint32_t data);
98         virtual uint32_t __FASTCALL read_debug_reg(const _TCHAR *reg);
99         virtual bool get_debug_regs_info(_TCHAR *buffer, size_t buffer_len);
100         virtual int debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata = 0);
101         virtual bool process_state(FILEIO* state_fio, bool loading);
102         
103         // unique function
104         void set_context_mem(DEVICE* device)
105         {
106                 d_mem = device;
107         }
108         void set_context_io(DEVICE* device)
109         {
110                 d_io = device;
111         }
112         void set_context_intr(DEVICE* device, uint32_t bit = 0xffffffff)
113         {
114                 d_pic = device;
115         }
116         void set_context_bios(DEVICE* device)
117         {
118                 d_bios = device;
119         }
120         void set_context_dma(DEVICE* device)
121         {
122                 d_dma = device;
123         }
124         void set_context_debugger(DEBUGGER* device)
125         {
126                 d_debugger = device;
127         }
128
129 };
130
131 #endif