2 Skelton for retropc emulator
4 Author : Takeda.Toshiya
13 #include "vm_template.h"
14 #include "../emu_template.h"
17 class DLL_PREFIX MEMORY : public DEVICE
32 MEMORY(VM_TEMPLATE* parent_vm, EMU_TEMPLATE* parent_emu) : DEVICE(parent_vm, parent_emu)
37 rd_table = wr_table = NULL;
38 rd_dummy = wr_dummy = NULL;
43 set_device_name(_T("Generic Memory Bus"));
48 virtual void initialize() override;
49 virtual void release() override;
51 virtual uint32_t __FASTCALL read_data8(uint32_t addr) override;
52 virtual void __FASTCALL write_data8(uint32_t addr, uint32_t data) override;
53 virtual uint32_t __FASTCALL read_data16(uint32_t addr) override;
54 virtual void __FASTCALL write_data16(uint32_t addr, uint32_t data) override;
55 virtual uint32_t __FASTCALL read_data32(uint32_t addr) override;
56 virtual void __FASTCALL write_data32(uint32_t addr, uint32_t data) override;
57 virtual uint32_t __FASTCALL read_data8w(uint32_t addr, int* wait) override;
58 virtual void __FASTCALL write_data8w(uint32_t addr, uint32_t data, int* wait) override;
59 virtual uint32_t __FASTCALL read_data16w(uint32_t addr, int* wait) override;
60 virtual void __FASTCALL write_data16w(uint32_t addr, uint32_t data, int* wait) override;
61 virtual uint32_t __FASTCALL read_data32w(uint32_t addr, int* wait) override;
62 virtual void __FASTCALL write_data32w(uint32_t addr, uint32_t data, int* wait) override;
65 inline int get_bank(uint32_t addr) const
67 const uint64_t _mask = space - 1;
69 return (uint32_t)(((uint64_t)addr & _mask) >> addr_shift);
71 inline int bus_access_times_16(uint32_t addr) const
74 return ((addr & 3) == 3 ? 2 : 1);
75 } else if(bus_width >= 16) {
76 return ((addr & 1) == 1 ? 2 : 1);
81 inline int bus_access_times_32(uint32_t addr) const
84 return ((addr & 3) != 0 ? 2 : 1);
85 } else if(bus_width >= 16) {
86 return ((addr & 1) == 1 ? 3 : 2);
91 virtual void set_memory_r(uint32_t start, uint32_t end, uint8_t *memory);
92 virtual void set_memory_w(uint32_t start, uint32_t end, uint8_t *memory);
93 inline void set_memory_rw(uint32_t start, uint32_t end, uint8_t *memory)
95 set_memory_r(start, end, memory);
96 set_memory_w(start, end, memory);
98 virtual void set_memory_mapped_io_r(uint32_t start, uint32_t end, DEVICE *device);
99 virtual void set_memory_mapped_io_w(uint32_t start, uint32_t end, DEVICE *device);
100 inline void set_memory_mapped_io_rw(uint32_t start, uint32_t end, DEVICE *device)
102 set_memory_mapped_io_r(start, end, device);
103 set_memory_mapped_io_w(start, end, device);
105 virtual void set_wait_r(uint32_t start, uint32_t end, int wait);
106 virtual void set_wait_w(uint32_t start, uint32_t end, int wait);
107 inline void set_wait_rw(uint32_t start, uint32_t end, int wait)
109 set_wait_r(start, end, wait);
110 set_wait_w(start, end, wait);
112 virtual void unset_memory_r(uint32_t start, uint32_t end);
113 virtual void unset_memory_w(uint32_t start, uint32_t end);
114 inline void unset_memory_rw(uint32_t start, uint32_t end)
116 unset_memory_r(start, end);
117 unset_memory_w(start, end);
119 virtual void copy_table_r(uint32_t to, uint32_t start, uint32_t end);
120 virtual void copy_table_w(uint32_t to, uint32_t start, uint32_t end);
121 inline void copy_table_rw(uint32_t to, uint32_t start, uint32_t end)
123 copy_table_r(to, start, end);
124 copy_table_w(to, start, end);
126 virtual void unset_wait_r(uint32_t start, uint32_t end);
127 virtual void unset_wait_w(uint32_t start, uint32_t end);
128 inline void unset_wait_rw(uint32_t start, uint32_t end)
130 unset_wait_r(start, end);
131 unset_wait_w(start, end);
133 int read_bios(const _TCHAR *file_name, uint8_t *buffer, int size);
134 bool write_bios(const _TCHAR *file_name, uint8_t *buffer, int size);
135 bool read_image(const _TCHAR *file_path, uint8_t *buffer, int size);
136 bool write_image(const _TCHAR *file_path, uint8_t *buffer, int size);