2 Skelton for retropc emulator
4 Author : Takeda.Toshiya
17 #ifndef MEMORY_ADDR_MAX
18 #define MEMORY_ADDR_MAX 0x10000
20 #ifndef MEMORY_BANK_SIZE
21 #define MEMORY_BANK_SIZE 0x1000
24 class MEMORY : public DEVICE
38 uint8 read_dummy[MEMORY_BANK_SIZE];
39 uint8 write_dummy[MEMORY_BANK_SIZE];
42 MEMORY(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
44 int bank_num = MEMORY_ADDR_MAX / MEMORY_BANK_SIZE;
46 read_table = (bank_t *)malloc(sizeof(bank_t) * bank_num);
47 write_table = (bank_t *)malloc(sizeof(bank_t) * bank_num);
49 for(int i = 0; i < bank_num; i++) {
50 read_table[i].dev = NULL;
51 read_table[i].memory = read_dummy;
52 read_table[i].wait = 0;
54 write_table[i].dev = NULL;
55 write_table[i].memory = write_dummy;
56 read_table[i].wait = 0;
58 for(int i = 0;; i++) {
59 if(MEMORY_BANK_SIZE == (1 << i)) {
64 memset(read_dummy, 0xff, MEMORY_BANK_SIZE);
70 uint32 read_data8(uint32 addr);
71 void write_data8(uint32 addr, uint32 data);
72 uint32 read_data16(uint32 addr);
73 void write_data16(uint32 addr, uint32 data);
74 uint32 read_data32(uint32 addr);
75 void write_data32(uint32 addr, uint32 data);
76 uint32 read_data8w(uint32 addr, int* wait);
77 void write_data8w(uint32 addr, uint32 data, int* wait);
78 uint32 read_data16w(uint32 addr, int* wait);
79 void write_data16w(uint32 addr, uint32 data, int* wait);
80 uint32 read_data32w(uint32 addr, int* wait);
81 void write_data32w(uint32 addr, uint32 data, int* wait);
84 void set_memory_r(uint32 start, uint32 end, uint8 *memory);
85 void set_memory_w(uint32 start, uint32 end, uint8 *memory);
86 void set_memory_rw(uint32 start, uint32 end, uint8 *memory)
88 set_memory_r(start, end, memory);
89 set_memory_w(start, end, memory);
91 void set_memory_mapped_io_r(uint32 start, uint32 end, DEVICE *device);
92 void set_memory_mapped_io_w(uint32 start, uint32 end, DEVICE *device);
93 void set_memory_mapped_io_rw(uint32 start, uint32 end, DEVICE *device)
95 set_memory_mapped_io_r(start, end, device);
96 set_memory_mapped_io_w(start, end, device);
98 void set_wait_r(uint32 start, uint32 end, int wait);
99 void set_wait_w(uint32 start, uint32 end, int wait);
100 void set_wait_rw(uint32 start, uint32 end, int wait)
102 set_wait_r(start, end, wait);
103 set_wait_w(start, end, wait);
105 void unset_memory_r(uint32 start, uint32 end);
106 void unset_memory_w(uint32 start, uint32 end);
107 void unset_memory_rw(uint32 start, uint32 end)
109 unset_memory_r(start, end);
110 unset_memory_w(start, end);
112 int read_bios(_TCHAR *file_name, uint8 *buffer, int size);
113 bool write_bios(_TCHAR *file_name, uint8 *buffer, int size);
114 bool read_image(_TCHAR *file_path, uint8 *buffer, int size);
115 bool write_image(_TCHAR *file_path, uint8 *buffer, int size);