2521
|
1 #ifndef I8255_H_
|
|
2 #define I8255_H_
|
|
3
|
|
4 #include <stdint.h>
|
|
5
|
|
6 typedef struct i8255 i8255;
|
|
7 typedef void (*i8255_out_update)(i8255 *ppi, uint32_t cycle, uint32_t port, uint8_t data);
|
|
8 typedef uint8_t (*i8255_in_sample)(i8255 *ppi, uint32_t cycle, uint32_t port);
|
|
9
|
|
10 struct i8255 {
|
|
11 uint8_t latches[4];
|
|
12 uint8_t control;
|
|
13 uint8_t portc_write_mask;
|
|
14 uint8_t portc_out_mask;
|
|
15 i8255_out_update out_handler;
|
|
16 i8255_in_sample in_handler;
|
|
17 void *system;
|
|
18 };
|
|
19
|
|
20 void i8255_init(i8255 *ppi, i8255_out_update out, i8255_in_sample in);
|
|
21 void i8255_write(uint32_t address, i8255 *ppi, uint8_t value, uint32_t cycle);
|
|
22 uint8_t i8255_read(uint32_t address, i8255 *ppi, uint32_t cycle);
|
|
23 void i8255_input_strobe_a(i8255 *ppi, uint8_t value, uint32_t cycle);
|
|
24 void i8255_input_strobe_b(i8255 *ppi, uint8_t value, uint32_t cycle);
|
|
25 uint8_t i8255_output_ack_a(i8255 *ppi, uint32_t cycle);
|
|
26 uint8_t i8255_output_ack_b(i8255 *ppi, uint32_t cycle);
|
|
27
|
|
28 #endif //I8255_H_
|