2 Skelton for retropc emulator
4 Author : Takeda.Toshiya
18 NOTE: I8259_MAX_CHIPS shoud be 1 or 2
21 #define SIG_I8259_IR0 0
22 #define SIG_I8259_IR1 1
23 #define SIG_I8259_IR2 2
24 #define SIG_I8259_IR3 3
25 #define SIG_I8259_IR4 4
26 #define SIG_I8259_IR5 5
27 #define SIG_I8259_IR6 6
28 #define SIG_I8259_IR7 7
29 #define SIG_I8259_CHIP0 0
30 #define SIG_I8259_CHIP1 8
31 //#define SIG_I8259_CHIP2 16
32 //#define SIG_I8259_CHIP3 24
34 #define I8259_ADDR_CHIP0 0
35 #define I8259_ADDR_CHIP1 2
36 //#define I8259_ADDR_CHIP2 4
37 //#define I8259_ADDR_CHIP3 6
39 class I8259 : public DEVICE
45 uint8_t imr, isr, irr, irr_tmp, prio;
46 uint8_t icw1, icw2, icw3, icw4, ocw3;
47 uint8_t icw2_r, icw3_r, icw4_r;
49 } pic[I8259_MAX_CHIPS];
50 int req_chip, req_level;
56 I8259(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
65 void write_io8(uint32_t addr, uint32_t data);
66 uint32_t read_io8(uint32_t addr);
67 void write_signal(int id, uint32_t data, uint32_t mask);
68 uint32_t read_signal(int id);
69 void event_callback(int event_id, int err);
70 void save_state(FILEIO* state_fio);
71 bool load_state(FILEIO* state_fio);
72 const _TCHAR *get_device_name()
77 // interrupt common functions
78 void set_intr_line(bool line, bool pending, uint32_t bit)
80 // request from Z80 familly
81 write_signal(bit, line ? 1 : 0, 1);
83 uint32_t get_intr_ack();
86 void set_context_cpu(DEVICE* device)