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
26 class MEMORY : public DEVICE
43 bool _MEMORY_DISABLE_DMA_MMIO;
44 bool bank_size_was_set;
45 bool addr_max_was_set;
47 MEMORY(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
49 // Set temporally values.
52 bank_size_was_set = false;
53 addr_max_was_set = false;
55 rd_table = wr_table = NULL;
56 rd_dummy = wr_dummy = NULL;
58 _MEMORY_DISABLE_DMA_MMIO = false;
60 set_device_name(_T("Generic Memory Bus"));
65 virtual void initialize();
66 virtual void release();
67 virtual uint32_t __FASTCALL read_data8(uint32_t addr);
68 virtual void __FASTCALL write_data8(uint32_t addr, uint32_t data);
69 virtual uint32_t __FASTCALL read_data16(uint32_t addr);
70 virtual void __FASTCALL write_data16(uint32_t addr, uint32_t data);
71 virtual uint32_t __FASTCALL read_data32(uint32_t addr);
72 virtual void __FASTCALL write_data32(uint32_t addr, uint32_t data);
73 virtual uint32_t __FASTCALL read_data8w(uint32_t addr, int* wait);
74 virtual void __FASTCALL write_data8w(uint32_t addr, uint32_t data, int* wait);
75 virtual uint32_t __FASTCALL read_data16w(uint32_t addr, int* wait);
76 virtual void __FASTCALL write_data16w(uint32_t addr, uint32_t data, int* wait);
77 virtual uint32_t __FASTCALL read_data32w(uint32_t addr, int* wait);
78 virtual void __FASTCALL write_data32w(uint32_t addr, uint32_t data, int* wait);
80 virtual uint32_t __FASTCALL read_dma_data8(uint32_t addr);
81 virtual void __FASTCALL write_dma_data8(uint32_t addr, uint32_t data);
82 virtual uint32_t __FASTCALL read_dma_data16(uint32_t addr);
83 virtual void __FASTCALL write_dma_data16(uint32_t addr, uint32_t data);
84 virtual uint32_t __FASTCALL read_dma_data32(uint32_t addr);
85 virtual void __FASTCALL write_dma_data32(uint32_t addr, uint32_t data);
88 virtual void set_memory_r(uint32_t start, uint32_t end, uint8_t *memory);
89 virtual void set_memory_w(uint32_t start, uint32_t end, uint8_t *memory);
90 void set_memory_rw(uint32_t start, uint32_t end, uint8_t *memory)
92 set_memory_r(start, end, memory);
93 set_memory_w(start, end, memory);
95 virtual void set_memory_mapped_io_r(uint32_t start, uint32_t end, DEVICE *device);
96 virtual void set_memory_mapped_io_w(uint32_t start, uint32_t end, DEVICE *device);
97 void set_memory_mapped_io_rw(uint32_t start, uint32_t end, DEVICE *device)
99 set_memory_mapped_io_r(start, end, device);
100 set_memory_mapped_io_w(start, end, device);
102 virtual void set_wait_r(uint32_t start, uint32_t end, int wait);
103 virtual void set_wait_w(uint32_t start, uint32_t end, int wait);
104 void set_wait_rw(uint32_t start, uint32_t end, int wait)
106 set_wait_r(start, end, wait);
107 set_wait_w(start, end, wait);
109 virtual void unset_memory_r(uint32_t start, uint32_t end);
110 virtual void unset_memory_w(uint32_t start, uint32_t end);
111 void unset_memory_rw(uint32_t start, uint32_t end)
113 unset_memory_r(start, end);
114 unset_memory_w(start, end);
116 virtual void copy_table_r(uint32_t to, uint32_t start, uint32_t end);
117 virtual void copy_table_w(uint32_t to, uint32_t start, uint32_t end);
118 void copy_table_rw(uint32_t to, uint32_t start, uint32_t end) {
119 copy_table_r(to, start, end);
120 copy_table_w(to, start, end);
122 int read_bios(const _TCHAR *file_name, uint8_t *buffer, int size);
123 bool write_bios(const _TCHAR *file_name, uint8_t *buffer, int size);
124 bool read_image(const _TCHAR *file_path, uint8_t *buffer, int size);
125 bool write_image(const _TCHAR *file_path, uint8_t *buffer, int size);
128 void set_addr_max(int64_t size)
130 // Allow to modify before initialize() or set_foo_r|w|rw()..
131 if(rd_table == NULL) {
132 addr_max_was_set = true;
136 void set_bank_size(int64_t size)
138 if(rd_table == NULL) {
139 bank_size_was_set = true;
143 uint64_t get_addr_max()
147 uint64_t get_bank_size()