OSDN Git Service

[General] Convert sourcecode's CRLF format: DOS(WINDOWS) to Unix, to apply patches...
[csp-qt/common_source_project-fm7.git] / source / src / vm / mc6820.h
1 /*
2         Skelton for retropc emulator
3
4         Author : Takeda.Toshiya
5         Date   : 2011.06.02-
6
7         [ mc6820 ]
8 */
9
10 #ifndef _MC6820_H_
11 #define _MC6820_H_
12
13 #include "vm.h"
14 #include "../emu.h"
15 #include "device.h"
16
17 #define SIG_MC6820_PORT_A       0
18 #define SIG_MC6820_PORT_B       1
19 #define SIG_MC6820_C1_A         2
20 #define SIG_MC6820_C1_B         3
21 #define SIG_MC6820_C2_A         4
22 #define SIG_MC6820_C2_B         5
23
24 class MC6820 : public DEVICE
25 {
26 private:
27         struct {
28                 uint8 wreg;
29                 uint8 rreg;
30                 uint8 ctrl;
31                 uint8 ddr;
32                 bool c1, c2;
33                 bool first;
34                 // output signals
35                 outputs_t outputs;
36                 outputs_t outputs_irq;
37         } port[2];
38         
39 public:
40         MC6820(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
41         {
42                 for(int i = 0; i < 2; i++) {
43                         init_output_signals(&port[i].outputs);
44                         init_output_signals(&port[i].outputs_irq);
45                         port[i].wreg = port[i].rreg = 0;//0xff;
46                 }
47         }
48         ~MC6820() {}
49         
50         // common functions
51         void reset();
52         void write_io8(uint32 addr, uint32 data);
53         uint32 read_io8(uint32 addr);
54         void write_signal(int id, uint32 data, uint32 mask);
55         void save_state(FILEIO* state_fio);
56         bool load_state(FILEIO* state_fio);
57         
58         // unique functions
59         void set_context_port_a(DEVICE* device, int id, uint32 mask, int shift)
60         {
61                 register_output_signal(&port[0].outputs, device, id, mask, shift);
62         }
63         void set_context_port_b(DEVICE* device, int id, uint32 mask, int shift)
64         {
65                 register_output_signal(&port[1].outputs, device, id, mask, shift);
66         }
67         void set_context_irq_a(DEVICE* device, int id, uint32 mask)
68         {
69                 register_output_signal(&port[0].outputs_irq, device, id, mask);
70         }
71         void set_context_irq_b(DEVICE* device, int id, uint32 mask)
72         {
73                 register_output_signal(&port[1].outputs_irq, device, id, mask);
74         }
75 };
76
77 #endif
78