OSDN Git Service

[VM][COMMON_VM] Include IO:: class to common_vm.
[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 VM;
25 class EMU;
26 class MC6820 : public DEVICE
27 {
28 private:
29         struct {
30                 uint8_t wreg;
31                 uint8_t rreg;
32                 uint8_t ctrl;
33                 uint8_t ddr;
34                 bool c1, c2;
35                 bool first;
36                 // output signals
37                 outputs_t outputs;
38                 outputs_t outputs_irq;
39         } port[2];
40         
41 public:
42         MC6820(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
43         {
44                 for(int i = 0; i < 2; i++) {
45                         initialize_output_signals(&port[i].outputs);
46                         initialize_output_signals(&port[i].outputs_irq);
47                         port[i].wreg = port[i].rreg = 0;//0xff;
48                 }
49                 set_device_name(_T("MC6820 PIA"));
50         }
51         ~MC6820() {}
52         
53         // common functions
54         void reset();
55         void __FASTCALL write_io8(uint32_t addr, uint32_t data);
56         uint32_t __FASTCALL read_io8(uint32_t addr);
57         void __FASTCALL write_signal(int id, uint32_t data, uint32_t mask);
58         bool process_state(FILEIO* state_fio, bool loading);
59
60         // unique functions
61         void set_context_port_a(DEVICE* device, int id, uint32_t mask, int shift)
62         {
63                 register_output_signal(&port[0].outputs, device, id, mask, shift);
64         }
65         void set_context_port_b(DEVICE* device, int id, uint32_t mask, int shift)
66         {
67                 register_output_signal(&port[1].outputs, device, id, mask, shift);
68         }
69         void set_context_irq_a(DEVICE* device, int id, uint32_t mask)
70         {
71                 register_output_signal(&port[0].outputs_irq, device, id, mask);
72         }
73         void set_context_irq_b(DEVICE* device, int id, uint32_t mask)
74         {
75                 register_output_signal(&port[1].outputs_irq, device, id, mask);
76         }
77 };
78
79 #endif
80