OSDN Git Service

[VM][General][WIP] Apply new (Upstream 2016-02-21) APIs to VMs.
[csp-qt/common_source_project-fm7.git] / source / src / vm / i8251.h
1 /*
2         Skelton for retropc emulator
3
4         Author : Takeda.Toshiya
5         Date   : 2006.09.14 -
6
7         [ i8251 ]
8 */
9
10 #ifndef _I8251_H_
11 #define _I8251_H_
12
13 #include "vm.h"
14 #include "../emu.h"
15 #include "device.h"
16
17 #define SIG_I8251_RECV          0
18 #define SIG_I8251_BREAK         1
19 #define SIG_I8251_DSR           2
20 #define SIG_I8251_CLEAR         3
21 #define SIG_I8251_LOOPBACK      4
22
23 class FIFO;
24
25 class I8251 : public DEVICE
26 {
27 private:
28         // i8251
29         uint8 recv, status, mode;
30         bool txen, rxen, loopback;
31         
32         // output signals
33         outputs_t outputs_out;
34         outputs_t outputs_rxrdy;
35         outputs_t outputs_syndet;
36         outputs_t outputs_txrdy;
37         outputs_t outputs_txe;
38         outputs_t outputs_dtr;
39         outputs_t outputs_rst;
40         
41         // buffer
42         FIFO *recv_buffer;
43         FIFO *send_buffer;
44         int recv_id, send_id;
45         
46 public:
47         I8251(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
48         {
49                 initialize_output_signals(&outputs_out);
50                 initialize_output_signals(&outputs_rxrdy);
51                 initialize_output_signals(&outputs_syndet);
52                 initialize_output_signals(&outputs_txrdy);
53                 initialize_output_signals(&outputs_txe);
54                 initialize_output_signals(&outputs_dtr);
55                 initialize_output_signals(&outputs_rst);
56         }
57         ~I8251() {}
58         
59         // common functions
60         void initialize();
61         void release();
62         void reset();
63         void write_io8(uint32 addr, uint32 data);
64         uint32 read_io8(uint32 addr);
65         void write_signal(int id, uint32 data, uint32 mask);
66         void event_callback(int event_id, int err);
67         void save_state(FILEIO* state_fio);
68         bool load_state(FILEIO* state_fio);
69         
70         // unique functions
71         void set_context_out(DEVICE* device, int id)
72         {
73                 register_output_signal(&outputs_out, device, id, 0xff);
74         }
75         void set_context_rxrdy(DEVICE* device, int id, uint32 mask)
76         {
77                 register_output_signal(&outputs_rxrdy, device, id, mask);
78         }
79         void set_context_syndet(DEVICE* device, int id, uint32 mask)
80         {
81                 register_output_signal(&outputs_syndet, device, id, mask);
82         }
83         void set_context_txrdy(DEVICE* device, int id, uint32 mask)
84         {
85                 register_output_signal(&outputs_txrdy, device, id, mask);
86         }
87         void set_context_txe(DEVICE* device, int id, uint32 mask)
88         {
89                 register_output_signal(&outputs_txe, device, id, mask);
90         }
91         void set_context_dtr(DEVICE* device, int id, uint32 mask)
92         {
93                 register_output_signal(&outputs_dtr, device, id, mask);
94         }
95         void set_context_rst(DEVICE* device, int id, uint32 mask)
96         {
97                 register_output_signal(&outputs_rst, device, id, mask);
98         }
99 };
100
101 #endif
102