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_t read_dummy[MEMORY_BANK_SIZE];
39 uint8_t 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);
65 set_device_name(_T("GENERIC MEMORY"));
71 uint32_t read_data8(uint32_t addr);
72 void write_data8(uint32_t addr, uint32_t data);
73 uint32_t read_data16(uint32_t addr);
74 void write_data16(uint32_t addr, uint32_t data);
75 uint32_t read_data32(uint32_t addr);
76 void write_data32(uint32_t addr, uint32_t data);
77 uint32_t read_data8w(uint32_t addr, int* wait);
78 void write_data8w(uint32_t addr, uint32_t data, int* wait);
79 uint32_t read_data16w(uint32_t addr, int* wait);
80 void write_data16w(uint32_t addr, uint32_t data, int* wait);
81 uint32_t read_data32w(uint32_t addr, int* wait);
82 void write_data32w(uint32_t addr, uint32_t data, int* wait);
85 void set_memory_r(uint32_t start, uint32_t end, uint8_t *memory);
86 void set_memory_w(uint32_t start, uint32_t end, uint8_t *memory);
87 void set_memory_rw(uint32_t start, uint32_t end, uint8_t *memory)
89 set_memory_r(start, end, memory);
90 set_memory_w(start, end, memory);
92 void set_memory_mapped_io_r(uint32_t start, uint32_t end, DEVICE *device);
93 void set_memory_mapped_io_w(uint32_t start, uint32_t end, DEVICE *device);
94 void set_memory_mapped_io_rw(uint32_t start, uint32_t end, DEVICE *device)
96 set_memory_mapped_io_r(start, end, device);
97 set_memory_mapped_io_w(start, end, device);
99 void set_wait_r(uint32_t start, uint32_t end, int wait);
100 void set_wait_w(uint32_t start, uint32_t end, int wait);
101 void set_wait_rw(uint32_t start, uint32_t end, int wait)
103 set_wait_r(start, end, wait);
104 set_wait_w(start, end, wait);
106 void unset_memory_r(uint32_t start, uint32_t end);
107 void unset_memory_w(uint32_t start, uint32_t end);
108 void unset_memory_rw(uint32_t start, uint32_t end)
110 unset_memory_r(start, end);
111 unset_memory_w(start, end);
113 int read_bios(const _TCHAR *file_name, uint8_t *buffer, int size);
114 bool write_bios(const _TCHAR *file_name, uint8_t *buffer, int size);
115 bool read_image(const _TCHAR *file_path, uint8_t *buffer, int size);
116 bool write_image(const _TCHAR *file_path, uint8_t *buffer, int size);