OSDN Git Service

[VM][UPD7810] Fix FTBFS.
[csp-qt/common_source_project-fm7.git] / source / src / vm / z80dma.h
1 /*
2         Skelton for retropc emulator
3
4         Origin : MAME Z80DMA / Xmillenium
5         Author : Takeda.Toshiya
6         Date   : 2011.04.96-
7
8         [ Z80DMA ]
9 */
10
11 #ifndef _Z80DMA_H_
12 #define _Z80DMA_H_
13
14 //#include "vm.h"
15 //#include "../emu.h"
16 #include "device.h"
17
18 #define SIG_Z80DMA_READY        0
19
20 class Z80DMA : public DEVICE
21 {
22 private:
23         DEVICE *d_mem, *d_io;
24         
25         typedef union {
26                 uint16_t m[7][8];
27                 uint16_t t[6*8+1+1];
28         } regs_t;
29         regs_t regs;
30         uint8_t status;
31         
32         uint16_t wr_tmp[4];
33         int wr_num, wr_ptr;
34         uint16_t rr_tmp[7];
35         int rr_num, rr_ptr;
36         
37         bool enabled;
38         uint32_t ready;
39         bool force_ready;
40         
41         uint16_t addr_a;
42         uint16_t addr_b;
43         int upcount;
44         int blocklen;
45         bool dma_stop;
46         bool bus_master;
47         
48         // interrupt
49         bool req_intr;
50         bool in_service;
51         uint8_t vector;
52
53         bool _SINGLE_MODE_DMA;
54         bool _DMA_DEBUG;
55         
56         bool now_ready();
57         void request_bus();
58         void release_bus();
59         void update_read_buffer();
60         void request_intr(int level);
61         
62         // daisy chain
63         DEVICE *d_cpu, *d_child;
64         bool iei, oei;
65         uint32_t intr_bit;
66         void update_intr();
67         
68 public:
69         Z80DMA(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
70         {
71                 for(int i = 0; i < 6 * 8 + 1 + 1; i++) {
72                         regs.t[i] = 0;
73                 }
74                 _SINGLE_MODE_DMA = _DMA_DEBUG = false;
75                 d_cpu = d_child = NULL;
76                 set_device_name(_T("Z80 DMA"));
77         }
78         ~Z80DMA() {}
79         
80         // common functions
81         void reset();
82         void initialize();
83         void write_io8(uint32_t addr, uint32_t data);
84         uint32_t read_io8(uint32_t addr);
85         void write_signal(int id, uint32_t data, uint32_t mask);
86         void do_dma();
87         bool process_state(FILEIO* state_fio, bool loading);
88         // interrupt common functions
89         void set_context_intr(DEVICE* device, uint32_t bit)
90         {
91                 d_cpu = device;
92                 intr_bit = bit;
93         }
94         void set_context_child(DEVICE* device)
95         {
96                 d_child = device;
97         }
98         void set_intr_iei(bool val);
99         uint32_t get_intr_ack();
100         void notify_intr_reti();
101         
102         // unique function
103         void set_context_memory(DEVICE* device)
104         {
105                 d_mem = device;
106         }
107         void set_context_io(DEVICE* device)
108         {
109                 d_io = device;
110         }
111 };
112
113 #endif
114