OSDN Git Service

[VM] MEMORY:: class within some VM will change Foo_MEMORY:: to reduce misundestanding...
[csp-qt/common_source_project-fm7.git] / source / src / vm / fmr30 / memory.h
1 /*
2         FUJITSU FMR-30 Emulator 'eFMR-30'
3
4         Author : Takeda.Toshiya
5         Date   : 2008.12.30 -
6
7         [ memory ]
8 */
9
10 #ifndef _FMR30_MEMORY_H_
11 #define _FMR30_MEMORY_H_
12
13 #include "../vm.h"
14 #include "../../emu.h"
15 #include "../device.h"
16
17 #define SIG_MEMORY_DISP         0
18 #define SIG_MEMORY_VSYNC        1
19
20 class FMR30_MEMORY : public DEVICE
21 {
22 private:
23         DEVICE *d_cpu, *d_dma;
24         
25         uint8_t* rbank[4096];   // 16MB / 4KB
26         uint8_t* wbank[4096];
27         uint8_t wdmy[0x1000];
28         uint8_t rdmy[0x1000];
29         
30 #if defined(HAS_I86)
31         uint8_t ram[0x100000];  // RAM 1MB
32 #elif defined(HAS_I286)
33         uint8_t ram[0x400000];  // RAM 1+3MB
34 #endif
35         uint8_t vram[0x20000];  // VRAM 32KB * 4pl
36         uint8_t cvram[0x1000];
37         uint8_t kvram[0x1000];
38         
39         uint8_t ipl[0x10000];   // IPL 64KB
40         uint8_t kanji16[0x40000];       // KANJI(16x16) 256KB
41         
42         uint8_t mcr1, mcr2, a20;
43         uint8_t lcdadr, lcdreg[32];
44         uint16_t dcr1, dcr2;
45         int kj_h, kj_l, kj_ofs, kj_row;
46         
47         int blinkcnt;
48         uint8_t screen_txt[400][648];
49         uint8_t screen_cg[400][640];
50         
51         void update_bank();
52         void draw_text40();
53         void draw_text80();
54         void draw_cg();
55         
56 public:
57         FMR30_MEMORY(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
58         {
59                 set_device_name(_T("Memory Bus"));
60         }
61         ~FMR30_MEMORY() {}
62         
63         // common functions
64         void initialize();
65         void reset();
66         void write_data8(uint32_t addr, uint32_t data);
67         uint32_t read_data8(uint32_t addr);
68         void write_io8(uint32_t addr, uint32_t data);
69         uint32_t read_io8(uint32_t addr);
70         void event_frame();
71         bool process_state(FILEIO* state_fio, bool loading);
72         
73         // unique functions
74         void set_context_cpu(DEVICE* device)
75         {
76                 d_cpu = device;
77         }
78         void set_context_dma(DEVICE* device)
79         {
80                 d_dma = device;
81         }
82         uint8_t* get_vram()
83         {
84                 return vram;
85         }
86         uint8_t* get_cvram()
87         {
88                 return cvram;
89         }
90         uint8_t* get_kvram()
91         {
92                 return kvram;
93         }
94         void draw_screen();
95 };
96
97 #endif
98