2 * Main memory for FM-7 [FM7_MAINMEM/MAINMEM_UTIL]
10 #include "fm7_mainmem.h"
15 void FM7_MAINMEM::initialize(void)
18 diag_load_basicrom = false;
19 diag_load_bootrom_bas = false;
20 diag_load_bootrom_dos = false;
21 diag_load_bootrom_mmr = false;
22 diag_load_bootrom_bubble = false;
23 diag_load_bootrom_bubble_128k = false;
24 diag_load_bootrom_sfd8 = false;
25 diag_load_bootrom_2hd = false;
27 #if defined(_FM77AV_VARIANTS)
28 dictrom_connected = false;
31 for(i = 0x00; i < 0x80; i++) {
38 window_enabled = false;
40 #ifdef _FM77AV_VARIANTS
43 dictrom_enabled = false;
44 dictram_enabled = false;
46 initiator_enabled = true;
47 boot_ram_write = true;
49 #if defined(_FM7) || defined(_FM77AV_VARIANTS)
50 bootmode = config.boot_mode & 3;
52 bootmode = config.boot_mode & 7;
54 basicrom_fd0f = false;
55 is_basicrom = ((bootmode & 0x03) == 0) ? true : false;
58 i = FM7_MAINMEM_OMOTE;
59 memset(fm7_mainmem_omote, 0x00, 0x8000 * sizeof(uint8_t));
63 memset(fm7_mainmem_ura, 0x00, 0x7c00 * sizeof(uint8_t));
65 i = FM7_MAINMEM_VECTOR;
66 memset(fm7_mainmem_bootrom_vector, 0x00, 0x1e);
68 #if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
69 defined(_FM77_VARIANTS)
70 extram_pages = FM77_EXRAM_BANKS;
71 #if defined(_FM77_VARIANTS)
72 if(extram_pages > 3) extram_pages = 3;
74 if(extram_pages > 12) extram_pages = 12;
76 extram_size = extram_pages * 0x10000;
77 if(extram_pages > 0) {
78 i = FM7_MAINMEM_EXTRAM;
79 fm7_mainmem_extram = (uint8_t *)malloc(extram_size);
80 if(fm7_mainmem_extram != NULL) {
81 memset(fm7_mainmem_extram, 0x00, extram_size);
86 #if defined(_FM77_VARIANTS)
87 memset(fm77_shadowram, 0x00, 0x200);
89 #if defined(_FM77_VARIANTS) || defined(_FM8)
90 for(i = 0; i < 8; i++) memset(fm7_bootroms[i], 0xff, 0x200);
91 #elif defined(_FM7) || defined(_FMNEW7)
92 for(i = 0; i < 4; i++) memset(fm7_bootroms[i], 0xff, 0x200);
96 // FM-8 HAS TWO TYPE of BOOTROM.
97 // See http://www.mindspring.com/~thasegaw/rpcg/fm8_boot.html .
101 tmpp = malloc(0x800);
103 diag_load_sm11_14 = false;
104 diag_load_sm11_15 = false;
106 tmpb = (read_bios(_T(ROM_FM8_SM11_14), tmpp, 0x800) >= 0x800);
109 memcpy(fm7_bootroms[0], &(tmpp[0x000]), 0x200); // BASIC
110 memcpy(fm7_bootroms[2], &(tmpp[0x200]), 0x200); // BUBBLE
111 memcpy(fm7_bootroms[1], &(tmpp[0x400]), 0x200); // DOS 320K
112 memcpy(fm7_bootroms[3], &(tmpp[0x600]), 0x200); // DEBUG
113 this->out_debug_log(_T("NOTE: LOADING BULK BOOTROM SM11-14 OK."));
114 diag_load_sm11_14 = true;
116 if(read_bios(_T(ROM_FM8_BOOT_BASIC), fm7_bootroms[0], 0x200) >= 0x1e0) {
117 diag_load_bootrom_bas = true;
119 if(read_bios(_T(ROM_FM8_BOOT_DOS), fm7_bootroms[1], 0x200) >= 0x1e0) {
120 diag_load_bootrom_dos = true;
122 if(read_bios(_T(ROM_FM8_BOOT_BUBBLE_128K), fm7_bootroms[2], 0x200) >= 0x1e0) {
123 diag_load_bootrom_bubble_128k = true;
124 } else if(read_bios(_T(ROM_FM8_BOOT_BUBBLE), fm7_bootroms[2], 0x200) >= 0x1e0) {
125 diag_load_bootrom_bubble = true;
127 if(read_bios(_T(ROM_FM8_BOOT_DEBUG), fm7_bootroms[3], 0x200) >= 0x1e0) {
128 //diag_load_bootrom_debug = true;
134 tmpb = (read_bios(_T(ROM_FM8_SM11_15), tmpp, 0x800) >= 0x800);
137 memcpy(fm7_bootroms[4], &(tmpp[0x000]), 0x200); // Basic
138 memcpy(fm7_bootroms[6], &(tmpp[0x200]), 0x200); // BUBBLE
139 memcpy(fm7_bootroms[5], &(tmpp[0x400]), 0x200); // DOS 320K
140 memcpy(fm7_bootroms[7], &(tmpp[0x600]), 0x200); // DOS 8INCH
141 this->out_debug_log(_T("NOTE: LOADING BULK BOOTROM SM11-15 OK."));
142 diag_load_sm11_15 = true;
144 memcpy(fm7_bootroms[4], fm7_bootroms[0], 0x200); // Basic
145 memcpy(fm7_bootroms[5], fm7_bootroms[1], 0x200); // DOS 5Inch
146 memcpy(fm7_bootroms[6], fm7_bootroms[2], 0x200); // BUBBLE
147 if(read_bios(_T(ROM_FM8_BOOT_DOS_FD8), fm7_bootroms[7], 0x200) >= 0x1e0) {
148 diag_load_bootrom_sfd8 = true;
151 if(tmpp != NULL) free(tmpp);
154 #elif defined(_FM7) || defined(_FMNEW7)
155 // FM-7 HAS TWO TYPE ROM.
156 // See, http://www.mindspring.com/~thasegaw/rpcg/fm7rom.html .
157 diag_load_tl11_11 = false;
158 diag_load_tl11_12 = false;
162 tmpp = malloc(0x800);
163 if(tmpp != NULL) memset(tmpp, 0xff, 0x800);
164 # if defined(_FMNEW7)
165 // For FM-NEW7, If you have TL11-12, load first.
167 diag_load_tl11_12 = (read_bios(_T(ROM_FM7_BOOT_TL11_12), tmpp, 0x800) >= 0x800);
169 if(diag_load_tl11_12) {
170 memcpy(fm7_bootroms[0], &(tmpp[0x000]), 0x200);
171 memcpy(fm7_bootroms[2], &(tmpp[0x200]), 0x200);
172 memcpy(fm7_bootroms[1], &(tmpp[0x400]), 0x200);
173 memcpy(fm7_bootroms[3], &(tmpp[0x600]), 0x200);
174 diag_load_bootrom_bas = true;
175 diag_load_bootrom_dos = true;
176 diag_load_bootrom_bubble = true;
177 this->out_debug_log(_T("NOTE: LOADING BULK BOOTROM TL11-12 OK"));
180 if(!diag_load_tl11_12) {
183 tmpb = (read_bios(_T(ROM_FM7_BOOT_TL11_11), tmpp, 0x800) >= 0x800);
186 # if defined(_FMNEW7)
187 this->out_debug_log(_T("NOTE: LOADING BULK BOOTROM TL11-11 (FALLBACK) OK"));
189 this->out_debug_log(_T("NOTE: LOADING BULK BOOTROM TL11-11 OK"));
191 memcpy(fm7_bootroms[0], &(tmpp[0x000]), 0x200);
192 memcpy(fm7_bootroms[2], &(tmpp[0x200]), 0x200);
193 memcpy(fm7_bootroms[1], &(tmpp[0x400]), 0x200);
194 memcpy(fm7_bootroms[3], &(tmpp[0x600]), 0x200);
195 diag_load_bootrom_bas = true;
196 diag_load_bootrom_dos = true;
197 diag_load_bootrom_bubble = true;
198 diag_load_tl11_11 = true;
200 if(read_bios(_T(ROM_FM7_BOOT_BASIC), fm7_bootroms[0], 0x200) >= 0x1e0) {
201 diag_load_bootrom_bas = true;
203 if(read_bios(_T(ROM_FM7_BOOT_DOS), fm7_bootroms[1], 0x200) >= 0x1e0) {
204 diag_load_bootrom_dos = true;
206 if(read_bios(_T(ROM_FM7_BOOT_BUBBLE_7), fm7_bootroms[2], 0x200) >= 0x1e0) {
207 diag_load_bootrom_bubble = true;
210 if(tmpp != NULL) free(tmpp);
213 #elif defined(_FM77_VARIANTS)
214 // FM-77 HAS ONE TYPE ROM.
215 // See, http://www.mindspring.com/~thasegaw/rpcg/fm7rom.html .
219 tmpp = malloc(0x1000);
221 diag_load_wb11_12 = false;
223 tmpb = (read_bios(_T(ROM_FM77_BOOT_WB11_12), tmpp, 0x1000) >= 0x1000);
226 diag_load_wb11_12 = true;
227 this->out_debug_log(_T("NOTE: LOADING BULK BOOTROM WB11-12 OK."));
228 memcpy(fm7_bootroms[2], &(tmpp[0x000]), 0x200); // Basic (MMR)
229 memcpy(fm7_bootroms[5], &(tmpp[0x200]), 0x200); // Bubble (128K)
230 memcpy(fm7_bootroms[6], &(tmpp[0x400]), 0x200); // Bubble (32K)
231 memcpy(fm7_bootroms[4], &(tmpp[0x600]), 0x200); // Reserve
232 memcpy(fm7_bootroms[0], &(tmpp[0x800]), 0x200); // Basic
233 memcpy(fm7_bootroms[1], &(tmpp[0xa00]), 0x200); // DOS (320K)
234 memcpy(fm7_bootroms[3], &(tmpp[0xc00]), 0x200); // DOS (1M)
235 memcpy(fm7_bootroms[7], &(tmpp[0xe00]), 0x200); // Reserve 2
236 diag_load_bootrom_bas = true;
237 diag_load_bootrom_dos = true;
238 diag_load_bootrom_mmr = true;
239 diag_load_bootrom_2hd = true;
241 if(read_bios(_T(ROM_FM7_BOOT_BASIC), fm7_bootroms[0], 0x200) >= 0x1e0) {
242 diag_load_bootrom_bas = true;
245 if(read_bios(_T(ROM_FM7_BOOT_DOS), fm7_bootroms[1], 0x200) >= 0x1e0) {
246 diag_load_bootrom_dos = true;
248 if(read_bios(_T(ROM_FM7_BOOT_MMR), fm7_bootroms[2], 0x200) >= 0x1e0) {
249 diag_load_bootrom_mmr = true;
251 memcpy(fm7_bootroms[2], fm7_bootroms[0], 0x200); // Copy Fallback
252 diag_load_bootrom_mmr = false;
254 if(read_bios(_T(ROM_FM7_BOOT_2HD), fm7_bootroms[3], 0x200) >= 0x1e0) {
255 diag_load_bootrom_2hd = true;
258 if(read_bios(_T(ROM_FM77_BOOT_BUBBLE_128K), fm7_bootroms[5], 0x200) >= 0x1e0) { // Bubble 128K
259 //diag_load_bootrom_dos = true;
261 if(read_bios(_T(ROM_FM7_BOOT_BUBBLE_7), fm7_bootroms[6], 0x200) >= 0x1e0) { // Bubble 32K
262 //diag_load_bootrom_dos = true;
265 if(tmpp != NULL) free(tmpp);
267 i = FM7_MAINMEM_BOOTROM_RAM;
268 memset(fm7_bootram, 0x00, 0x200 * sizeof(uint8_t)); // RAM
269 # elif defined(_FM77AV_VARIANTS)
270 i = FM7_MAINMEM_AV_PAGE0;
271 memset(fm7_mainmem_mmrbank_0, 0x00, 0x10000 * sizeof(uint8_t));
273 i = FM7_MAINMEM_AV_PAGE2;
274 memset(fm7_mainmem_mmrbank_2, 0x00, 0x10000 * sizeof(uint8_t));
276 i = FM7_MAINMEM_INITROM;
277 diag_load_initrom = false;
278 memset(fm7_mainmem_initrom, 0xff, 0x2000 * sizeof(uint8_t));
280 if(read_bios(_T(ROM_FM77AV_INITIATOR), fm7_mainmem_initrom, 0x2000) >= 0x2000) diag_load_initrom = true;
281 this->out_debug_log(_T("77AV INITIATOR ROM READING : %s"), diag_load_initrom ? "OK" : "NG");
283 if(read_bios(_T(ROM_FM7_BOOT_MMR), fm77av_hidden_bootmmr, 0x200) < 0x1e0) {
284 memcpy(fm77av_hidden_bootmmr, &fm7_mainmem_initrom[0x1a00], 0x200);
285 diag_load_bootrom_mmr = true;
287 fm77av_hidden_bootmmr[0x1fe] = 0xfe;
288 fm77av_hidden_bootmmr[0x1fe] = 0x00;
290 i = FM7_MAINMEM_BOOTROM_RAM;
291 memset(fm7_bootram, 0x00, 0x200 * sizeof(uint8_t)); // RAM
293 if(diag_load_initrom) diag_load_bootrom_bas = true;
294 if(diag_load_initrom) diag_load_bootrom_dos = true;
296 if((config.boot_mode & 0x03) == 0) {
297 memcpy(fm7_bootram, &fm7_mainmem_initrom[0x1800], 0x1e0 * sizeof(uint8_t));
299 memcpy(fm7_bootram, &fm7_mainmem_initrom[0x1a00], 0x1e0 * sizeof(uint8_t));
301 fm7_bootram[0x1fe] = 0xfe; // Set reset vector.
302 fm7_bootram[0x1ff] = 0x00; //
305 this->out_debug_log(_T("BOOT ROM (basic mode) READING : %s"), diag_load_bootrom_bas ? "OK" : "NG");
306 this->out_debug_log(_T("BOOT ROM (DOS mode) READING : %s"), diag_load_bootrom_dos ? "OK" : "NG");
308 #if defined(_FM77_VARIANTS)
309 this->out_debug_log(_T("BOOT ROM (MMR mode) READING : %s"), diag_load_bootrom_mmr ? "OK" : "NG");
310 this->out_debug_log(_T("BOOT ROM (2HD mode) READING : %s"), diag_load_bootrom_2hd ? "OK" : "NG");
312 if(diag_load_bootrom_bubble_128k) {
313 this->out_debug_log(_T("BOOT ROM (BUBBLE 128K) READING : %s"), "OK");
314 } else if(diag_load_bootrom_bubble) {
315 this->out_debug_log(_T("BOOT ROM (BUBBLE 32K) READING : %s"), "OK");
317 this->out_debug_log(_T("BOOT ROM (BUBBLE 32K) READING : %s"), "NG");
319 this->out_debug_log(_T("BOOT ROM (2HD mode) READING : %s"), diag_load_bootrom_2hd ? "OK" : "NG");
320 #elif defined(_FM7) || defined(_FM7)
321 if(diag_load_bootrom_bubble) {
322 this->out_debug_log(_T("BOOT ROM (BUBBLE mode) READING : %s"), "OK");
324 this->out_debug_log(_T("BOOT ROM (BUBBLE mode) READING : %s"), "NG");
327 this->out_debug_log(_T("BOOT ROM (MMR mode) READING : %s"), diag_load_bootrom_mmr ? "OK" : "NG");
331 #if !defined(_FM77AV_VARIANTS)
332 for(i = 0; i <= 3; i++) {
333 uint8_t *p = fm7_bootroms[i];
334 p[0x1fe] = 0xfe; // Set reset vector.
339 i = FM7_MAINMEM_RESET_VECTOR;
340 fm7_mainmem_reset_vector[0] = 0xfe;
341 fm7_mainmem_reset_vector[1] = 0x00;
343 i = FM7_MAINMEM_BASICROM;
344 memset(fm7_mainmem_basicrom, 0xff, 0x7c00 * sizeof(uint8_t));
347 if(read_bios(_T(ROM_FM7_FBASICV30L20), fm7_mainmem_basicrom, 0x7c00) == 0x7c00) {
348 diag_load_basicrom = true;
349 } else if(read_bios(_T(ROM_FM7_FBASICV30L10), fm7_mainmem_basicrom, 0x7c00) == 0x7c00) {
350 diag_load_basicrom = true;
351 } else if(read_bios(_T(ROM_FM7_FBASICV30L00), fm7_mainmem_basicrom, 0x7c00) == 0x7c00) {
352 diag_load_basicrom = true;
353 } else if(read_bios(_T(ROM_FM7_FBASICV30), fm7_mainmem_basicrom, 0x7c00) == 0x7c00) {
354 diag_load_basicrom = true;
358 if(read_bios(_T(ROM_FM8_FBASICV10), fm7_mainmem_basicrom, 0x7c00) == 0x7c00) diag_load_basicrom = true;
360 this->out_debug_log(_T("BASIC ROM READING : %s"), diag_load_basicrom ? "OK" : "NG");
362 i = FM7_MAINMEM_BIOSWORK;
363 memset(fm7_mainmem_bioswork, 0x00, 0x80 * sizeof(uint8_t));
364 #if defined(_FM77AV40EX) || defined(_FM77AV40SX)
365 config.dipswitch = config.dipswitch | FM7_DIPSW_DICTROM_AV;
367 #if defined(CAPABLE_DICTROM)
368 diag_load_dictrom = false;
369 i = FM7_MAINMEM_DICTROM;
370 memset(fm7_mainmem_dictrom, 0xff, 0x40000 * sizeof(uint8_t));
371 memset(fm7_mainmem_learndata, 0x00, 0x2000 * sizeof(uint8_t));
372 if((config.dipswitch & FM7_DIPSW_DICTROM_AV) != 0) {
373 if(read_bios(_T(ROM_FM77AV_DICTIONARY), fm7_mainmem_dictrom, 0x40000) == 0x40000) diag_load_dictrom = true;
374 this->out_debug_log(_T("DICTIONARY ROM READING : %s"), diag_load_dictrom ? "OK" : "NG");
375 dictrom_connected = diag_load_dictrom;
377 i = FM7_MAINMEM_BACKUPED_RAM;
378 diag_load_learndata = false;
379 if(read_bios(_T(RAM_FM77AV_DIC_BACKUP), fm7_mainmem_learndata, 0x2000) == 0x2000) diag_load_learndata = true;
380 this->out_debug_log(_T("DICTIONARY BACKUPED RAM READING : %s"), diag_load_learndata ? "OK" : "NG");
381 if(!diag_load_learndata) write_bios(_T("USERDIC.DAT"), fm7_mainmem_learndata, 0x2000);
383 this->out_debug_log(_T("LOADING FROM DICTIONARY CARD IS CANCELLED."));
384 dictrom_connected = false;
385 diag_load_dictrom = false;
386 diag_load_learndata = false;
390 i = FM7_MAINMEM_77AV40_EXTRAROM;
391 #if defined(_FM77AV40EX) || defined(_FM77AV40SX)
392 diag_load_extrarom = false;
393 memset(fm7_mainmem_extrarom, 0xff, sizeof(fm7_mainmem_extrarom));
394 if(read_bios(_T(ROM_FM77AV40EX_EXTSUB), fm7_mainmem_extrarom, 0xc000) == 0xc000) diag_load_extrarom = true;
395 this->out_debug_log(_T("AV40SX/EX EXTRA ROM READING : %s"), diag_load_extrarom ? "OK" : "NG");
396 //register_event(this, EVENT_FM7_MAINMEM_DRAM_REFRESH, 13.02, true, &event_refresh); // OK?
399 update_all_mmr_jumptable();
402 void FM7_MAINMEM::release()
404 # if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
405 defined(_FM77_VARIANTS)
406 if(fm7_mainmem_extram != NULL) free(fm7_mainmem_extram);
408 #if !defined(_FM77AV_VARIANTS)
410 for(i = 0; i < 4; i++) {
411 if(fm7_bootroms[i] != NULL) free(fm7_bootroms[i]);
412 fm7_bootroms[i] = NULL;
415 #if defined(CAPABLE_DICTROM)
416 write_bios(_T("USERDIC.DAT"), fm7_mainmem_learndata, 0x2000);
418 // MEMORY::release();
421 void FM7_MAINMEM::init_data_table(void)
426 data_func_table_t *p;
427 memset(data_table, 0x00, sizeof(data_table));
429 main_begin = 0x30000;
431 main_begin = 0x00000;
433 for(addr = main_begin; addr < (main_begin + 0x8000); addr += 0x80) {
435 data_table[paddr].read_data = &fm7_mainmem_omote[addr & 0x7fff];
436 data_table[paddr].write_data = &fm7_mainmem_omote[addr & 0x7fff];
438 for(addr = main_begin + 0x8000; addr < (main_begin + 0xfc00); addr += 0x80) {
440 data_table[paddr].read_func = &FM7_MAINMEM::read_ura_basicrom;
441 data_table[paddr].write_func = &FM7_MAINMEM::write_ura_basicrom;
444 addr = main_begin + 0xfc00;
446 data_table[paddr].read_data = fm7_mainmem_bioswork;
447 data_table[paddr].write_data = fm7_mainmem_bioswork;
450 addr = main_begin + 0xfc80;
452 data_table[paddr].read_func = &FM7_MAINMEM::read_shared_ram;
453 data_table[paddr].write_func = &FM7_MAINMEM::write_shared_ram;
455 for(addr = main_begin + 0xfd00; addr < (main_begin + 0xfe00); addr += 0x80) {
457 data_table[paddr].read_func = &FM7_MAINMEM::read_mmio;
458 data_table[paddr].write_func = &FM7_MAINMEM::write_mmio;
460 for(addr = main_begin + 0xfe00; addr < (main_begin + 0x10000); addr += 0x80) {
462 data_table[paddr].read_func = &FM7_MAINMEM::read_bootrom;
463 data_table[paddr].write_func = &FM7_MAINMEM::write_bootrom;
466 #if defined(_FM77AV_VARIANTS)
467 for(addr = 0x00000; addr < 0x10000; addr += 0x80) {
469 data_table[paddr].read_data = &fm7_mainmem_mmrbank_0[addr & 0xffff];
470 data_table[paddr].write_data = &fm7_mainmem_mmrbank_0[addr & 0xffff];
472 for(addr = 0x10000; addr < 0x20000; addr += 0x80) {
474 data_table[paddr].read_func = &FM7_MAINMEM::read_direct_access;
475 data_table[paddr].write_func = &FM7_MAINMEM::write_direct_access;
477 # if defined(CAPABLE_DICTROM)
478 for(addr = 0x20000; addr < 0x30000; addr += 0x80) {
480 data_table[paddr].read_func = &FM7_MAINMEM::read_page2;
481 data_table[paddr].write_func = &FM7_MAINMEM::write_page2;
484 for(addr = 0x20000; addr < 0x30000; addr += 0x80) {
486 data_table[paddr].read_data = &fm7_mainmem_mmrbank_2[addr & 0xffff];
487 data_table[paddr].write_data = &fm7_mainmem_mmrbank_2[addr & 0xffff];
490 # if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
491 int pages = extram_pages;
492 if((pages > 0) && (pages < 12) && (fm7_mainmem_extram != NULL)) {
493 for(addr = 0x40000; addr < (0x40000 + extram_pages * 0x10000) ; addr += 0x80) {
495 data_table[paddr].read_data = &fm7_mainmem_extram[addr - 0x40000];
496 data_table[paddr].write_data = &fm7_mainmem_extram[addr - 0x40000];
497 data_table[paddr].read_func = NULL;
498 data_table[paddr].write_func = NULL;
500 for(addr = 0x40000 + extram_pages * 0x10000; addr < 0x100000; addr += 0x80) {
502 data_table[paddr].read_data = NULL;
503 data_table[paddr].write_data = NULL;
504 data_table[paddr].read_func = NULL;
505 data_table[paddr].write_func = NULL;
509 #elif defined(_FM77_VARIANTS)
510 int pages = extram_pages;
511 if((pages > 0) && (pages < 4) && (fm7_mainmem_extram != NULL)) {
512 for(addr = 0x00000; addr < (extram_pages * 0x10000) ; addr += 0x80) { // Thanks to Ryu Takegami
514 data_table[paddr].read_data = &fm7_mainmem_extram[addr];
515 data_table[paddr].write_data = &fm7_mainmem_extram[addr];
516 data_table[paddr].read_func = NULL;
517 data_table[paddr].write_func = NULL;
519 if(extram_pages < 3) {
520 for(addr = extram_pages * 0x10000; addr < 0x30000; addr += 0x80) {
522 data_table[paddr].read_data = NULL;
523 data_table[paddr].write_data = NULL;
524 data_table[paddr].read_func = NULL;
525 data_table[paddr].write_func = NULL;
532 bool FM7_MAINMEM::get_loadstat_basicrom(void)
534 return diag_load_basicrom;
537 bool FM7_MAINMEM::get_loadstat_bootrom_bas(void)
539 return diag_load_bootrom_bas;
542 bool FM7_MAINMEM::get_loadstat_bootrom_dos(void)
544 return diag_load_bootrom_dos;
547 uint32_t FM7_MAINMEM::read_bios(const _TCHAR *name, uint8_t *ptr, uint32_t size)
553 if((name == NULL) || (ptr == NULL)) return 0;
554 s = create_local_path(name);
555 if(s == NULL) return 0;
557 if(!fio.Fopen(s, FILEIO_READ_BINARY)) return 0;
558 blocks = fio.Fread(ptr, size, 1);
561 return blocks * size;
564 uint32_t FM7_MAINMEM::write_bios(const _TCHAR *name, uint8_t *ptr, uint32_t size)
570 if((name == NULL) || (ptr == NULL)) return 0;
571 s = create_local_path(name);
572 if(s == NULL) return 0;
574 fio.Fopen(s, FILEIO_WRITE_BINARY);
575 blocks = fio.Fwrite(ptr, size, 1);
578 return blocks * size;