2 Skelton for retropc emulator
\r
4 Author : Takeda.Toshiya
\r
17 #define SIG_MC6840_CLOCK_0 0
\r
18 #define SIG_MC6840_CLOCK_1 1
\r
19 #define SIG_MC6840_CLOCK_2 2
\r
21 class MC6840 : public DEVICE
\r
25 uint16 counter, latch;
\r
26 uint8 counter_lo, latch_hi;
\r
28 bool in_pin, out_pin;
\r
30 int clocks, prescaler;
\r
36 uint8 status, status_read;
\r
37 outputs_t outputs_irq;
\r
39 void set_control(int ch, uint32 data);
\r
40 void set_counter(int ch);
\r
41 void input_clocks(int ch, int clocks);
\r
42 void set_irq(int ch, bool signal);
\r
43 void set_signal(int ch, bool signal);
\r
46 MC6840(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
\r
48 for(int i = 0; i < 3; i++) {
\r
49 init_output_signals(&timer[i].outputs);
\r
50 counter[i].freq = 0;
\r
58 void write_io8(uint32 addr, uint32 data);
\r
59 uint32 read_io8(uint32 addr);
\r
60 void event_callback(int event_id, int err);
\r
61 void write_signal(int id, uint32 data, uint32 mask);
\r
62 void save_state(FILEIO* state_fio);
\r
63 bool load_state(FILEIO* state_fio);
\r
66 void set_context_irq(DEVICE* device, int id, uint32 mask)
\r
68 register_output_signal(&outputs_irq, device, id, mask);
\r
70 void set_context_ch0(DEVICE* device, int id, uint32 mask)
\r
72 register_output_signal(&timer[0].outputs, device, id, mask);
\r
74 void set_context_ch1(DEVICE* device, int id, uint32 mask)
\r
76 register_output_signal(&timer[1].outputs, device, id, mask);
\r
78 void set_context_ch2(DEVICE* device, int id, uint32 mask)
\r
80 register_output_signal(&timer[2].outputs, device, id, mask);
\r
82 void set_constant_clock(int ch, uint32 hz)
\r
84 timer[ch].freq = hz;
\r