2 Skelton for retropc emulator
4 Author : Takeda.Toshiya
17 #define SIG_Z80CTC_TRIG_0 0
18 #define SIG_Z80CTC_TRIG_1 1
19 #define SIG_Z80CTC_TRIG_2 2
20 #define SIG_Z80CTC_TRIG_3 3
22 class Z80CTC : public DEVICE
53 bool _E_Z80CTC_CLOCKS;
54 double __Z80CTC_CLOCKS;
56 void input_clock(int ch, int clock);
57 void input_sysclock(int ch, int clock);
58 void update_event(int ch, int err);
61 DEVICE *d_cpu, *d_child;
67 Z80CTC(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
69 memset(counter, 0, sizeof(counter));
70 for(int i = 0; i < 4; i++) {
71 initialize_output_signals(&counter[i].outputs);
73 counter[i].prev_in = false;
75 d_cpu = d_child = NULL;
76 _E_Z80CTC_CLOCKS = false;
77 __Z80CTC_CLOCKS = 1.0;
78 set_device_name(_T("Z80 CTC"));
85 void write_io8(uint32_t addr, uint32_t data);
86 uint32_t read_io8(uint32_t addr);
87 void write_signal(int id, uint32_t data, uint32_t mask);
88 void event_callback(int event_id, int err);
89 void update_timing(int new_clocks, double new_frames_per_sec, int new_lines_per_frame)
91 cpu_clocks = new_clocks;
93 bool process_state(FILEIO* state_fio, bool loading);
94 // interrupt common functions
95 void set_context_intr(DEVICE* device, uint32_t bit)
100 void set_context_child(DEVICE* device)
104 void set_intr_iei(bool val);
105 uint32_t get_intr_ack();
106 void notify_intr_reti();
109 void set_context_zc0(DEVICE* device, int id, uint32_t mask)
111 register_output_signal(&counter[0].outputs, device, id, mask);
113 void set_context_zc1(DEVICE* device, int id, uint32_t mask)
115 register_output_signal(&counter[1].outputs, device, id, mask);
117 void set_context_zc2(DEVICE* device, int id, uint32_t mask)
119 register_output_signal(&counter[2].outputs, device, id, mask);
121 void set_constant_clock(int ch, uint32_t hz)
123 counter[ch].freq = hz;