2 Skelton for retropc emulator
4 Author : Takeda.Toshiya
17 #define SIG_I8155_PORT_A 0
18 #define SIG_I8155_PORT_B 1
19 #define SIG_I8155_PORT_C 2
20 #define SIG_I8155_CLOCK 3
24 class I8155 : public DEVICE
27 uint16_t count, countreg;
28 bool now_count, stop_tc, half;
29 bool prev_out, prev_in;
34 uint32_t input_clk, prev_clk;
47 outputs_t outputs_timer;
48 uint8_t cmdreg, statreg;
52 void input_clock(int clock);
57 void set_signal(bool signal);
58 void set_pio(int ch, uint8_t data);
61 I8155(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
63 for(int i = 0; i < 3; i++) {
64 initialize_output_signals(&pio[i].outputs);
65 pio[i].wreg = pio[i].rreg = 0;//0xff;
67 initialize_output_signals(&outputs_timer);
69 set_device_name(_T("i8155 TIMER/RAM"));
76 void write_data8(uint32_t addr, uint32_t data);
77 uint32_t read_data8(uint32_t addr);
78 void write_io8(uint32_t addr, uint32_t data);
79 uint32_t read_io8(uint32_t addr);
80 void write_signal(int id, uint32_t data, uint32_t mask);
81 void event_callback(int event_id, int err);
82 void update_timing(int new_clocks, double new_frames_per_sec, int new_lines_per_frame)
84 cpu_clocks = new_clocks;
86 bool process_state(FILEIO* state_fio, bool loading);
89 void set_context_port_a(DEVICE* device, int id, uint32_t mask, int shift)
91 register_output_signal(&pio[0].outputs, device, id, mask, shift);
93 void set_context_port_b(DEVICE* device, int id, uint32_t mask, int shift)
95 register_output_signal(&pio[1].outputs, device, id, mask, shift);
97 void set_context_port_c(DEVICE* device, int id, uint32_t mask, int shift)
99 register_output_signal(&pio[2].outputs, device, id, mask, shift);
101 void set_context_timer(DEVICE* device, int id, uint32_t mask)
103 register_output_signal(&outputs_timer, device, id, mask);
105 void set_constant_clock(uint32_t hz)