2 Skelton for retropc emulator
4 Author : Takeda.Toshiya
17 #define SIG_Z80PIO_PORT_A 0
18 #define SIG_Z80PIO_PORT_B 1
19 #define SIG_Z80PIO_STROBE_A 2
20 #define SIG_Z80PIO_STROBE_B 3
24 class Z80PIO : public DEVICE
49 outputs_t outputs_data;
50 outputs_t outputs_ready;
54 void check_mode3_intr(int ch);
57 DEVICE *d_cpu, *d_child;
63 Z80PIO(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
65 memset(port, 0, sizeof(port));
66 for(int i = 0; i < 2; i++) {
67 initialize_output_signals(&port[i].outputs_data);
68 initialize_output_signals(&port[i].outputs_ready);
69 port[i].wreg = 0xffffff00;
72 d_cpu = d_child = NULL;
73 set_device_name(_T("Z80 PIO"));
79 void write_io8(uint32_t addr, uint32_t data);
80 uint32_t read_io8(uint32_t addr);
81 void write_signal(int id, uint32_t data, uint32_t mask);
82 bool process_state(FILEIO* state_fio, bool loading);
83 // interrupt common functions
84 void set_context_intr(DEVICE* device, uint32_t bit)
89 void set_context_child(DEVICE* device)
93 void set_intr_iei(bool val);
94 uint32_t get_intr_ack();
95 void notify_intr_reti();
98 void set_context_port_a(DEVICE* device, int id, uint32_t mask, int shift)
100 register_output_signal(&port[0].outputs_data, device, id, mask, shift);
102 void set_context_port_b(DEVICE* device, int id, uint32_t mask, int shift)
104 register_output_signal(&port[1].outputs_data, device, id, mask, shift);
106 void set_context_ready_a(DEVICE* device, int id, uint32_t mask)
108 register_output_signal(&port[0].outputs_ready, device, id, mask);
110 void set_context_ready_b(DEVICE* device, int id, uint32_t mask)
112 register_output_signal(&port[1].outputs_ready, device, id, mask);
114 void set_hand_shake(int ch, bool value)
116 port[ch].hand_shake = value;