2 Skelton for retropc emulator
\r
4 Author : Takeda.Toshiya
\r
17 #define SIG_I8155_PORT_A 0
\r
18 #define SIG_I8155_PORT_B 1
\r
19 #define SIG_I8155_PORT_C 2
\r
20 #define SIG_I8155_CLOCK 3
\r
22 class I8155 : public DEVICE
\r
25 uint16 count, countreg;
\r
26 bool now_count, stop_tc, half;
\r
27 bool prev_out, prev_in;
\r
32 uint32 input_clk, prev_clk;
\r
46 outputs_t outputs_timer;
\r
47 uint8 cmdreg, statreg;
\r
51 void input_clock(int clock);
\r
54 void update_count();
\r
55 int get_next_clock();
\r
56 void set_signal(bool signal);
\r
57 void set_pio(int ch, uint8 data);
\r
60 I8155(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
\r
62 for(int i = 0; i < 3; i++) {
\r
63 init_output_signals(&pio[i].outputs);
\r
64 pio[i].wreg = pio[i].rreg = 0;//0xff;
\r
66 init_output_signals(&outputs_timer);
\r
74 void write_data8(uint32 addr, uint32 data);
\r
75 uint32 read_data8(uint32 addr);
\r
76 void write_io8(uint32 addr, uint32 data);
\r
77 uint32 read_io8(uint32 addr);
\r
78 void write_signal(int id, uint32 data, uint32 mask);
\r
79 void event_callback(int event_id, int err);
\r
80 void update_timing(int new_clocks, double new_frames_per_sec, int new_lines_per_frame)
\r
82 cpu_clocks = new_clocks;
\r
86 void set_context_port_a(DEVICE* device, int id, uint32 mask, int shift)
\r
88 register_output_signal(&pio[0].outputs, device, id, mask, shift);
\r
90 void set_context_port_b(DEVICE* device, int id, uint32 mask, int shift)
\r
92 register_output_signal(&pio[1].outputs, device, id, mask, shift);
\r
94 void set_context_port_c(DEVICE* device, int id, uint32 mask, int shift)
\r
96 register_output_signal(&pio[2].outputs, device, id, mask, shift);
\r
98 void set_context_timer(DEVICE* device, int id, uint32 mask)
\r
100 register_output_signal(&outputs_timer, device, id, mask);
\r
102 void set_constant_clock(uint32 hz)
\r