OSDN Git Service

779ddd0326d92e39142a61c9579687092b1b6e0e
[csp-qt/common_source_project-fm7.git] / source / src / vm / mz5500 / memory.h
1 /*
2         SHARP MZ-5500 Emulator 'EmuZ-5500'
3
4         Author : Takeda.Toshiya
5         Date   : 2008.04.10 -
6
7         [ memory ]
8 */
9
10 #ifndef _MZ5500_MEMORY_H_
11 #define _MZ5500_MEMORY_H_
12
13 #include "../vm.h"
14 #include "../../emu.h"
15 #include "../device.h"
16
17 #define SIG_MEMORY_BANK 0
18
19 class MZ5500_MEMORY : public DEVICE
20 {
21 private:
22         DEVICE* d_cpu;
23         
24         uint8_t* rbank[64];     // 1MB / 16KB
25         uint8_t* wbank[64];
26         uint8_t wdmy[0x4000];
27         uint8_t rdmy[0x4000];
28 #ifdef _MZ6550
29         uint8_t ipl[0x8000];    // IPL 32KB
30 #else
31         uint8_t ipl[0x4000];    // IPL 16KB
32 #endif
33 #if defined(_MZ6500) || defined(_MZ6550)
34         uint8_t ram[0x90000];   // Main RAM 640KB
35 #else
36         uint8_t ram[0x80000];   // Main RAM 512KB
37 #endif
38         uint8_t vram[0x80000];  // VRAM 192KB + 1024B + padding
39         uint8_t kanji[0x40000]; // Kanji ROM 256KB
40         uint8_t dic[0x40000];   // Dictionary ROM 256KB
41 #ifdef _MZ6550
42         uint8_t dic2[0x100000]; // New Dictionary ROM 1MB
43 #endif
44 #if defined(_MZ6500) || defined(_MZ6550)
45         uint8_t mz1r32[0x100000];       // MZ-1R32 512KB * 2
46 #endif
47         uint8_t bank1, bank2;
48         uint32_t haddr;         // DMAC high-order address latch
49         
50         void update_bank();
51         
52 public:
53         MZ5500_MEMORY(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
54         {
55                 set_device_name(_T("Memory Bus"));
56         }
57         ~MZ5500_MEMORY() {}
58         
59         // common functions
60         void initialize();
61         void reset();
62         void write_data8(uint32_t addr, uint32_t data);
63         uint32_t read_data8(uint32_t addr);
64         void write_dma_data8(uint32_t addr, uint32_t data);
65         uint32_t read_dma_data8(uint32_t addr);
66         void write_signal(int id, uint32_t data, uint32_t mask);
67         void write_io8(uint32_t addr, uint32_t data);
68         uint32_t read_io8(uint32_t addr);
69         bool process_state(FILEIO* state_fio, bool loading);
70         
71         // unique functions
72         void set_context_cpu(DEVICE* device)
73         {
74                 d_cpu = device;
75         }
76         uint8_t* get_vram()
77         {
78                 return vram;
79         }
80 };
81
82 #endif
83