2 Skelton for retropc emulator
5 Author : Takeda.Toshiya
18 #define SIG_I8237_CH0 0
19 #define SIG_I8237_CH1 1
20 #define SIG_I8237_CH2 2
21 #define SIG_I8237_CH3 3
22 #define SIG_I8237_BANK0 4
23 #define SIG_I8237_BANK1 5
24 #define SIG_I8237_BANK2 6
25 #define SIG_I8237_BANK3 7
26 #define SIG_I8237_MASK0 8
27 #define SIG_I8237_MASK1 9
28 #define SIG_I8237_MASK2 10
29 #define SIG_I8237_MASK3 11
32 class I8237_BASE : public DEVICE
51 outputs_t outputs_wrote_mem;
62 void __FASTCALL write_mem(uint32_t addr, uint32_t data);
63 uint32_t __FASTCALL read_mem(uint32_t addr);
64 void __FASTCALL write_io(int ch, uint32_t data);
65 uint32_t __FASTCALL read_io(int ch);
68 I8237_BASE(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
70 for(int i = 0; i < 4; i++) {
71 //dma[i].dev = vm->dummy;
73 dma[i].bankreg = dma[i].incmask = 0;
74 initialize_output_signals(&dma[i].outputs_tc);
76 initialize_output_signals(&outputs_wrote_mem);
78 addr_mask = 0xffffffff;
80 set_device_name(_T("i8237 DMAC"));
87 virtual void __FASTCALL write_io8(uint32_t addr, uint32_t data);
88 uint32_t __FASTCALL read_io8(uint32_t addr);
89 virtual void __FASTCALL write_signal(int id, uint32_t data, uint32_t mask);
90 virtual void __FASTCALL do_dma();
92 virtual bool is_debugger_available()
100 bool get_debug_regs_info(_TCHAR *buffer, size_t buffer_len);
101 void __FASTCALL write_via_debugger_data8(uint32_t addr, uint32_t data);
102 uint32_t __FASTCALL read_via_debugger_data8(uint32_t addr);
103 void __FASTCALL write_via_debugger_data16(uint32_t addr, uint32_t data);
104 uint32_t __FASTCALL read_via_debugger_data16(uint32_t addr);
107 void set_context_memory(DEVICE* device)
111 void set_context_ch0(DEVICE* device)
115 void set_context_ch1(DEVICE* device)
119 void set_context_ch2(DEVICE* device)
123 void set_context_ch3(DEVICE* device)
127 void set_context_tc0(DEVICE* device, int id, uint32_t mask)
129 register_output_signal(&dma[0].outputs_tc, device, id, mask);
131 void set_context_tc1(DEVICE* device, int id, uint32_t mask)
133 register_output_signal(&dma[1].outputs_tc, device, id, mask);
135 void set_context_tc2(DEVICE* device, int id, uint32_t mask)
137 register_output_signal(&dma[2].outputs_tc, device, id, mask);
139 void set_context_tc3(DEVICE* device, int id, uint32_t mask)
141 register_output_signal(&dma[3].outputs_tc, device, id, mask);
143 void set_context_wrote_mem(DEVICE* device, int id)
145 register_output_signal(&outputs_wrote_mem, device, id, 1);
147 void set_mode_word(bool val)
151 void set_address_mask(uint32_t val)
157 class I8237 : public I8237_BASE {
159 #ifdef SINGLE_MODE_DMA
163 I8237(VM_TEMPLATE* parent_vm, EMU* parent_emu);
167 virtual void __FASTCALL write_io8(uint32_t addr, uint32_t data);
168 void __FASTCALL write_signal(int id, uint32_t data, uint32_t mask);
169 uint32_t __FASTCALL read_signal(int id);
170 void __FASTCALL do_dma();
171 bool process_state(FILEIO* state_fio, bool loading);
174 bool is_debugger_available()
179 #ifdef SINGLE_MODE_DMA
180 void set_context_child_dma(DEVICE* device)
186 void set_context_debugger(DEBUGGER* device)