2 Skelton for retropc emulator
4 Author : Takeda.Toshiya
18 #define IO_ADDR_MAX 0x100
20 #define IO_ADDR_MASK (IO_ADDR_MAX - 1)
22 class IO : public DEVICE
31 } wr_table[IO_ADDR_MAX];
37 bool value_registered;
39 } rd_table[IO_ADDR_MAX];
41 void write_port8(uint32_t addr, uint32_t data, bool is_dma);
42 uint32_t read_port8(uint32_t addr, bool is_dma);
43 void write_port16(uint32_t addr, uint32_t data, bool is_dma);
44 uint32_t read_port16(uint32_t addr, bool is_dma);
45 void write_port32(uint32_t addr, uint32_t data, bool is_dma);
46 uint32_t read_port32(uint32_t addr, bool is_dma);
49 IO(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
51 memset(wr_table, 0, sizeof(wr_table));
52 memset(rd_table, 0, sizeof(rd_table));
54 // vm->dummy must be generated first !
55 for(int i = 0; i < IO_ADDR_MAX; i++) {
56 wr_table[i].dev = rd_table[i].dev = vm->dummy;
57 wr_table[i].addr = rd_table[i].addr = i;
62 set_device_name(_T("GENERIC I/O"));
67 void write_io8(uint32_t addr, uint32_t data);
68 uint32_t read_io8(uint32_t addr);
69 void write_io16(uint32_t addr, uint32_t data);
70 uint32_t read_io16(uint32_t addr);
71 void write_io32(uint32_t addr, uint32_t data);
72 uint32_t read_io32(uint32_t addr);
73 void write_io8w(uint32_t addr, uint32_t data, int* wait);
74 uint32_t read_io8w(uint32_t addr, int* wait);
75 void write_io16w(uint32_t addr, uint32_t data, int* wait);
76 uint32_t read_io16w(uint32_t addr, int* wait);
77 void write_io32w(uint32_t addr, uint32_t data, int* wait);
78 uint32_t read_io32w(uint32_t addr, int* wait);
79 void write_dma_io8(uint32_t addr, uint32_t data);
80 uint32_t read_dma_io8(uint32_t addr);
81 void write_dma_io16(uint32_t addr, uint32_t data);
82 uint32_t read_dma_io16(uint32_t addr);
83 void write_dma_io32(uint32_t addr, uint32_t data);
84 uint32_t read_dma_io32(uint32_t addr);
85 void save_state(FILEIO* state_fio);
86 bool load_state(FILEIO* state_fio);
89 void set_iomap_single_r(uint32_t addr, DEVICE* device);
90 void set_iomap_single_w(uint32_t addr, DEVICE* device);
91 void set_iomap_single_rw(uint32_t addr, DEVICE* device);
92 void set_iomap_alias_r(uint32_t addr, DEVICE* device, uint32_t alias);
93 void set_iomap_alias_w(uint32_t addr, DEVICE* device, uint32_t alias);
94 void set_iomap_alias_rw(uint32_t addr, DEVICE* device, uint32_t alias);
95 void set_iomap_range_r(uint32_t s, uint32_t e, DEVICE* device);
96 void set_iomap_range_w(uint32_t s, uint32_t e, DEVICE* device);
97 void set_iomap_range_rw(uint32_t s, uint32_t e, DEVICE* device);
99 void set_iovalue_single_r(uint32_t addr, uint32_t value);
100 void set_iovalue_range_r(uint32_t s, uint32_t e, uint32_t value);
101 void set_flipflop_single_rw(uint32_t addr, uint32_t value);
102 void set_flipflop_range_rw(uint32_t s, uint32_t e, uint32_t value);
104 void set_iowait_single_r(uint32_t addr, int wait);
105 void set_iowait_single_w(uint32_t addr, int wait);
106 void set_iowait_single_rw(uint32_t addr, int wait);
107 void set_iowait_range_r(uint32_t s, uint32_t e, int wait);
108 void set_iowait_range_w(uint32_t s, uint32_t e, int wait);
109 void set_iowait_range_rw(uint32_t s, uint32_t e, int wait);