OSDN Git Service

[VM] Add vm_template.h . This class, VM_TEMPLATE:: must be mother of VM:: .See fm7...
[csp-qt/common_source_project-fm7.git] / source / src / vm / memory.h
1 /*
2         Skelton for retropc emulator
3
4         Author : Takeda.Toshiya
5         Date   : 2010.09.16-
6
7         [ memory ]
8 */
9
10 #ifndef _MEMORY_H_
11 #define _MEMORY_H_
12
13 #include "vm.h"
14 #include "../emu.h"
15 #include "device.h"
16
17 #ifndef MEMORY_ADDR_MAX
18 #define MEMORY_ADDR_MAX 0x10000
19 #endif
20 #ifndef MEMORY_BANK_SIZE
21 #define MEMORY_BANK_SIZE 0x1000
22 #endif
23
24 class VM;
25 class EMU;
26 class MEMORY : public DEVICE
27 {
28 private:
29         typedef struct {
30                 DEVICE* dev;
31                 uint8_t* memory;
32                 int wait;
33         } bank_t;
34         
35         bank_t *rd_table;
36         bank_t *wr_table;
37         
38         int addr_shift;
39         
40         uint8_t *rd_dummy;
41         uint8_t *wr_dummy;
42         
43 public:
44         MEMORY(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
45         {
46                 addr_max = MEMORY_ADDR_MAX;
47                 bank_size = MEMORY_BANK_SIZE;
48                 
49                 rd_table = wr_table = NULL;
50                 rd_dummy = wr_dummy = NULL;
51                 
52                 set_device_name(_T("Generic Memory Bus"));
53         }
54         ~MEMORY() {}
55         
56         // common functions
57         void initialize();
58         void release();
59         uint32_t read_data8(uint32_t addr);
60         void write_data8(uint32_t addr, uint32_t data);
61         uint32_t read_data16(uint32_t addr);
62         void write_data16(uint32_t addr, uint32_t data);
63         uint32_t read_data32(uint32_t addr);
64         void write_data32(uint32_t addr, uint32_t data);
65         uint32_t read_data8w(uint32_t addr, int* wait);
66         void write_data8w(uint32_t addr, uint32_t data, int* wait);
67         uint32_t read_data16w(uint32_t addr, int* wait);
68         void write_data16w(uint32_t addr, uint32_t data, int* wait);
69         uint32_t read_data32w(uint32_t addr, int* wait);
70         void write_data32w(uint32_t addr, uint32_t data, int* wait);
71 #ifdef MEMORY_DISABLE_DMA_MMIO
72         uint32_t read_dma_data8(uint32_t addr);
73         void write_dma_data8(uint32_t addr, uint32_t data);
74         uint32_t read_dma_data16(uint32_t addr);
75         void write_dma_data16(uint32_t addr, uint32_t data);
76         uint32_t read_dma_data32(uint32_t addr);
77         void write_dma_data32(uint32_t addr, uint32_t data);
78 #endif
79         
80         // unique functions
81         void set_memory_r(uint32_t start, uint32_t end, uint8_t *memory);
82         void set_memory_w(uint32_t start, uint32_t end, uint8_t *memory);
83         void set_memory_rw(uint32_t start, uint32_t end, uint8_t *memory)
84         {
85                 set_memory_r(start, end, memory);
86                 set_memory_w(start, end, memory);
87         }
88         void set_memory_mapped_io_r(uint32_t start, uint32_t end, DEVICE *device);
89         void set_memory_mapped_io_w(uint32_t start, uint32_t end, DEVICE *device);
90         void set_memory_mapped_io_rw(uint32_t start, uint32_t end, DEVICE *device)
91         {
92                 set_memory_mapped_io_r(start, end, device);
93                 set_memory_mapped_io_w(start, end, device);
94         }
95         void set_wait_r(uint32_t start, uint32_t end, int wait);
96         void set_wait_w(uint32_t start, uint32_t end, int wait);
97         void set_wait_rw(uint32_t start, uint32_t end, int wait)
98         {
99                 set_wait_r(start, end, wait);
100                 set_wait_w(start, end, wait);
101         }
102         void unset_memory_r(uint32_t start, uint32_t end);
103         void unset_memory_w(uint32_t start, uint32_t end);
104         void unset_memory_rw(uint32_t start, uint32_t end)
105         {
106                 unset_memory_r(start, end);
107                 unset_memory_w(start, end);
108         }
109         int read_bios(const _TCHAR *file_name, uint8_t *buffer, int size);
110         bool write_bios(const _TCHAR *file_name, uint8_t *buffer, int size);
111         bool read_image(const _TCHAR *file_path, uint8_t *buffer, int size);
112         bool write_image(const _TCHAR *file_path, uint8_t *buffer, int size);
113         
114         int addr_max;
115         int bank_size;
116 };
117
118 #endif
119