OSDN Git Service

[VM][FM7] keyboard.cpp : Add implementation ofd RTC, includes within keyboard.
[csp-qt/common_source_project-fm7.git] / source / src / vm / i8237.h
1 /*
2         Skelton for retropc emulator
3
4         Origin : MESS
5         Author : Takeda.Toshiya
6         Date   : 2006.12.06 -
7
8         [ i8237 ]
9 */
10
11 #ifndef _I8237_H_
12 #define _I8237_H_
13
14 #include "vm.h"
15 #include "../emu.h"
16 #include "device.h"
17
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
30
31 class I8237 : public DEVICE
32 {
33 private:
34         DEVICE* d_mem;
35 #ifdef SINGLE_MODE_DMA
36         DEVICE* d_dma;
37 #endif
38         
39         struct {
40                 DEVICE* dev;
41                 uint16 areg;
42                 uint16 creg;
43                 uint16 bareg;
44                 uint16 bcreg;
45                 uint8 mode;
46                 // external bank
47                 uint16 bankreg;
48                 uint16 incmask;
49         } dma[4];
50         
51         bool low_high;
52         uint8 cmd;
53         uint8 req;
54         uint8 mask;
55         uint8 tc;
56         uint32 tmp;
57         bool mode_word;
58         
59         void write_mem(uint32 addr, uint32 data);
60         uint32 read_mem(uint32 addr);
61         void write_io(int ch, uint32 data);
62         uint32 read_io(int ch);
63         
64 public:
65         I8237(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
66         {
67                 for(int i = 0; i < 4; i++) {
68                         dma[i].dev = vm->dummy;
69                         dma[i].bankreg = dma[i].incmask = 0;
70                 }
71 #ifdef SINGLE_MODE_DMA
72                 d_dma = NULL;
73 #endif
74                 mode_word = false;
75         }
76         ~I8237() {}
77         
78         // common functions
79         void reset();
80         void write_io8(uint32 addr, uint32 data);
81         uint32 read_io8(uint32 addr);
82         void write_signal(int id, uint32 data, uint32 mask);
83         void do_dma();
84         void save_state(FILEIO* state_fio);
85         bool load_state(FILEIO* state_fio);
86         
87         // unique functions
88         void set_context_memory(DEVICE* device)
89         {
90                 d_mem = device;
91         }
92         void set_context_ch0(DEVICE* device)
93         {
94                 dma[0].dev = device;
95         }
96         void set_context_ch1(DEVICE* device)
97         {
98                 dma[1].dev = device;
99         }
100         void set_context_ch2(DEVICE* device)
101         {
102                 dma[2].dev = device;
103         }
104         void set_context_ch3(DEVICE* device)
105         {
106                 dma[3].dev = device;
107         }
108 #ifdef SINGLE_MODE_DMA
109         void set_context_child_dma(DEVICE* device)
110         {
111                 d_dma = device;
112         }
113 #endif
114         void set_mode_word(bool val)
115         {
116                 mode_word = val;
117         }
118 };
119
120 #endif
121