OSDN Git Service

[VM] Add vm_template.h . This class, VM_TEMPLATE:: must be mother of VM:: .See fm7...
[csp-qt/common_source_project-fm7.git] / source / src / vm / mc6850.h
1 /*
2         Skelton for retropc emulator
3
4         Author : Takeda.Toshiya
5         Date   : 2017.05.09-
6
7         [ MC6850 ]
8 */
9
10 #ifndef _MC6850_H_
11 #define _MC6850_H_
12
13 //#include "vm.h"
14 //#include "../emu.h"
15 #include "device.h"
16
17 #define SIG_MC6850_RECV         0
18 #define SIG_MC6850_DCD          1
19 #define SIG_MC6850_CTS          2
20 #define SIG_MC6850_CLEAR        3
21
22 class FIFO;
23
24 class MC6850 : public DEVICE
25 {
26 private:
27         uint8_t recv, status, ctrl;
28         
29         outputs_t outputs_out;
30         outputs_t outputs_rts;
31         outputs_t outputs_irq;
32         
33         FIFO *recv_buffer;
34         FIFO *send_buffer;
35         int recv_id, send_id;
36         
37         void update_irq();
38         
39 public:
40         MC6850(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
41         {
42                 initialize_output_signals(&outputs_out);
43                 initialize_output_signals(&outputs_rts);
44                 initialize_output_signals(&outputs_irq);
45                 set_device_name(_T("MC6850 ACIA"));
46         }
47         ~MC6850() {}
48         
49         // common functions
50         void initialize();
51         void release();
52         void reset();
53         void write_io8(uint32_t addr, uint32_t data);
54         uint32_t read_io8(uint32_t addr);
55         void write_signal(int id, uint32_t data, uint32_t mask);
56         void event_callback(int event_id, int err);
57         void decl_state();
58         void save_state(FILEIO* state_fio);
59         bool load_state(FILEIO* state_fio);
60         
61         // unique functions
62         void set_context_out(DEVICE* device, int id)
63         {
64                 register_output_signal(&outputs_out, device, id, 0xff);
65         }
66         void set_context_rts(DEVICE* device, int id, uint32_t mask)
67         {
68                 register_output_signal(&outputs_rts, device, id, mask);
69         }
70         void set_context_irq(DEVICE* device, int id, uint32_t mask)
71         {
72                 register_output_signal(&outputs_irq, device, id, mask);
73         }
74 };
75
76 #endif
77