2 * Main memory without MMR for FM-7 [FM7_MAINMEM]
8 #ifndef _FM7_MAINMEM_H_
9 #define _FM7_MAINMEM_H_
11 #include "fm7_common.h"
13 #include "../device.h"
14 #include "../mc6809.h"
20 class FM7_MAINMEM : public DEVICE
28 bank_t read_table[FM7_MAINMEM_END];
29 bank_t write_table[FM7_MAINMEM_END];
44 uint8 mmr_map_data[0x80];
50 #ifdef _FM77AV_VARIANTS
53 bool initiator_enabled;
55 #if defined(_FM77AV_VARIANTS) || defined(_FM77_VARIANTS)
62 uint8 fm7_mainmem_omote[0x8000];
63 uint8 fm7_mainmem_ura[0x7c00];
64 uint8 fm7_mainmem_basicrom[0x7c00];
65 uint8 fm7_mainmem_bioswork[0x80];
66 #if !defined(_FM77AV_VARIANTS)
67 uint8 *fm7_bootroms[4];
69 uint8 fm7_mainmem_bootrom_vector[0x1e]; // Without
70 uint8 fm7_mainmem_reset_vector[2]; // Without
71 uint8 fm7_mainmem_null[1];
72 #if defined(_FM77AV_VARIANTS) || defined(_FM77_VARIANTS)
73 uint8 fm7_bootram[0x200]; // $00000-$0ffff
76 bool extram_connected;
77 # ifdef _FM77AV_VARIANTS
78 bool diag_load_initrom;
79 bool diag_load_dictrom;
80 bool diag_load_learndata;
81 bool dictrom_connected;
85 bool use_page2_extram;
86 uint8 fm7_mainmem_initrom[0x2000]; // $00000-$0ffff
87 uint8 fm77av_hidden_bootmmr[0x200];
88 uint8 fm7_mainmem_mmrbank_0[0x10000]; // $00000-$0ffff
89 uint8 fm7_mainmem_mmrbank_2[0x10000]; // $20000-$2ffff
90 # if defined(CAPABLE_DICTROM)
91 bool diag_load_extrarom;
92 uint8 fm7_mainmem_extrarom[0x20000]; // $20000-$2cfff, banked
93 uint8 fm7_mainmem_dictrom[0x40000]; // $00000-$3ffff, banked
94 uint8 fm7_mainmem_learndata[0x2000];
96 # if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || \
97 defined(_FM77AV20) || defined(_FM77AV20SX) || defined(_FM77AV20EX)
99 uint8 *fm7_mainmem_extram; // $40000- : MAX 768KB ($c0000)
102 # if defined(_FM77_VARIANTS)
104 uint8 *fm7_mainmem_extram; // $00000-$2ffff
105 uint8 fm77_shadowram[0x200];
108 #if defined(CAPABLE_DICTROM)
110 //KANJIROM *kanjiclass2;
116 bool diag_load_basicrom;
117 bool diag_load_bootrom_bas;
118 bool diag_load_bootrom_dos;
119 bool diag_load_bootrom_mmr;
121 int getbank(uint32 addr, uint32 *realaddr);
122 int window_convert(uint32 addr, uint32 *realaddr);
123 int mmr_convert(uint32 addr, uint32 *realaddr);
124 int nonmmr_convert(uint32 addr, uint32 *realaddr);
125 uint32 read_bios(const char *name, uint8 *ptr, uint32 size);
126 uint32 write_bios(const char *name, uint8 *ptr, uint32 size);
127 void setclock(int mode);
130 FM7_MAINMEM(VM* parent_vm, EMU* parent_emu);
132 uint32 read_data8(uint32 addr);
133 uint32 read_dma_data8(uint32 addr);
134 uint32 read_dma_io8(uint32 addr);
136 void write_data8(uint32 addr, uint32 data);
137 void write_dma_data8(uint32 addr, uint32 data);
138 void write_dma_io8(uint32 addr, uint32 data);
140 virtual uint32 read_data16(uint32 addr);
141 virtual void write_data16(uint32 addr, uint32 data);
143 virtual uint32 read_data32(uint32 addr);
144 virtual void write_data32(uint32 addr, uint32 data);
146 void initialize(void);
151 bool get_loadstat_basicrom(void);
152 bool get_loadstat_bootrom_bas(void);
153 bool get_loadstat_bootrom_dos(void);
154 void save_state(FILEIO *state_fio);
155 bool load_state(FILEIO *state_fio);
157 void set_context_display(DEVICE *p){
160 i = FM7_MAINMEM_SHAREDRAM;
161 read_table[i].dev = display;
162 write_table[i].dev = display;
164 #if defined(_FM77AV_VARIANTS)
165 i = FM7_MAINMEM_AV_DIRECTACCESS;
166 read_table[i].dev = display;
167 write_table[i].dev = display;
170 void set_context_maincpu(MC6809 *p){
173 void set_context_mainio(DEVICE *p){
176 i = FM7_MAINMEM_MMIO;
177 read_table[i].dev = mainio;
178 read_table[i].memory = NULL;
179 write_table[i].dev = mainio;
180 write_table[i].memory = NULL;
183 #if defined(CAPABLE_DICTROM)
184 void set_context_kanjirom_class1(DEVICE *p){
188 void write_signal(int sigid, uint32 data, uint32 mask);
189 uint32 read_signal(int sigid);
190 uint32 read_io8(uint32 addr) {
191 return mainio->read_io8(addr);