OSDN Git Service

[VM][General][WIP] Syncing to UPSTREAM 2015-01-21 , work-in-progress.
[csp-qt/common_source_project-fm7.git] / source / src / vm / upd71071.h
1 /*\r
2         Skelton for retropc emulator\r
3 \r
4         Author : Takeda.Toshiya\r
5         Date   : 2007.08.14 -\r
6 \r
7         [ uPD71071 ]\r
8 */\r
9 \r
10 #ifndef _UPD71071_H_\r
11 #define _UPD71071_H_\r
12 \r
13 #include "vm.h"\r
14 #include "../emu.h"\r
15 #include "device.h"\r
16 \r
17 #define SIG_UPD71071_CH0        0\r
18 #define SIG_UPD71071_CH1        1\r
19 #define SIG_UPD71071_CH2        2\r
20 #define SIG_UPD71071_CH3        3\r
21 \r
22 class UPD71071 : public DEVICE\r
23 {\r
24 private:\r
25         DEVICE* d_mem;\r
26 #ifdef SINGLE_MODE_DMA\r
27         DEVICE* d_dma;\r
28 #endif\r
29         outputs_t outputs_tc;\r
30         \r
31         struct {\r
32                 DEVICE* dev;\r
33                 uint32 areg, bareg;\r
34                 uint16 creg, bcreg;\r
35                 uint8 mode;\r
36         } dma[4];\r
37         \r
38         uint8 b16, selch, base;\r
39         uint16 cmd, tmp;\r
40         uint8 req, sreq, mask, tc;\r
41         \r
42 public:\r
43         UPD71071(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)\r
44         {\r
45                 for(int i = 0; i < 4; i++) {\r
46                         dma[i].dev = vm->dummy;\r
47                 }\r
48 #ifdef SINGLE_MODE_DMA\r
49                 d_dma = NULL;\r
50 #endif\r
51                 init_output_signals(&outputs_tc);\r
52         }\r
53         ~UPD71071() {}\r
54         \r
55         // common functions\r
56         void reset();\r
57         void write_io8(uint32 addr, uint32 data);\r
58         uint32 read_io8(uint32 addr);\r
59         void write_signal(int id, uint32 data, uint32 mask);\r
60         void do_dma();\r
61         void save_state(FILEIO* state_fio);\r
62         bool load_state(FILEIO* state_fio);\r
63         \r
64         // unique functions\r
65         void set_context_memory(DEVICE* device)\r
66         {\r
67                 d_mem = device;\r
68         }\r
69         void set_context_ch0(DEVICE* device)\r
70         {\r
71                 dma[0].dev = device;\r
72         }\r
73         void set_context_ch1(DEVICE* device)\r
74         {\r
75                 dma[1].dev = device;\r
76         }\r
77         void set_context_ch2(DEVICE* device)\r
78         {\r
79                 dma[2].dev = device;\r
80         }\r
81         void set_context_ch3(DEVICE* device)\r
82         {\r
83                 dma[3].dev = device;\r
84         }\r
85 #ifdef SINGLE_MODE_DMA\r
86         void set_context_child_dma(DEVICE* device)\r
87         {\r
88                 d_dma = device;\r
89         }\r
90 #endif\r
91         void set_context_tc(DEVICE* device, int id, uint32 mask)\r
92         {\r
93                 register_output_signal(&outputs_tc, device, id, mask);\r
94         }\r
95 };\r
96 \r
97 #endif\r
98 \r