#include "emu.h"
#include "fm7_mainmem.h"
+namespace FM7 {
+
+
void FM7_MAINMEM::initialize(void)
{
int i;
if(extram_pages > 3) extram_pages = 3;
#else
if(extram_pages > 12) extram_pages = 12;
-#endif
+#endif
+ extram_size = extram_pages * 0x10000;
if(extram_pages > 0) {
i = FM7_MAINMEM_EXTRAM;
- fm7_mainmem_extram = (uint8_t *)malloc(extram_pages * 0x10000);
+ fm7_mainmem_extram = (uint8_t *)malloc(extram_size);
if(fm7_mainmem_extram != NULL) {
- memset(fm7_mainmem_extram, 0x00, extram_pages * 0x10000);
+ memset(fm7_mainmem_extram, 0x00, extram_size);
}
}
#endif
i = FM7_MAINMEM_BIOSWORK;
memset(fm7_mainmem_bioswork, 0x00, 0x80 * sizeof(uint8_t));
+#if defined(_FM77AV40EX) || defined(_FM77AV40SX)
+ config.dipswitch = config.dipswitch | FM7_DIPSW_DICTROM_AV;
+#endif
#if defined(CAPABLE_DICTROM)
diag_load_dictrom = false;
i = FM7_MAINMEM_DICTROM;
memset(fm7_mainmem_dictrom, 0xff, 0x40000 * sizeof(uint8_t));
- if(read_bios(_T(ROM_FM77AV_DICTIONARY), fm7_mainmem_dictrom, 0x40000) == 0x40000) diag_load_dictrom = true;
- this->out_debug_log(_T("DICTIONARY ROM READING : %s"), diag_load_dictrom ? "OK" : "NG");
- dictrom_connected = diag_load_dictrom;
-
- i = FM7_MAINMEM_BACKUPED_RAM;
- diag_load_learndata = false;
memset(fm7_mainmem_learndata, 0x00, 0x2000 * sizeof(uint8_t));
+ if((config.dipswitch & FM7_DIPSW_DICTROM_AV) != 0) {
+ if(read_bios(_T(ROM_FM77AV_DICTIONARY), fm7_mainmem_dictrom, 0x40000) == 0x40000) diag_load_dictrom = true;
+ this->out_debug_log(_T("DICTIONARY ROM READING : %s"), diag_load_dictrom ? "OK" : "NG");
+ dictrom_connected = diag_load_dictrom;
- if(read_bios(_T(RAM_FM77AV_DIC_BACKUP), fm7_mainmem_learndata, 0x2000) == 0x2000) diag_load_learndata = true;
- this->out_debug_log(_T("DICTIONARY BACKUPED RAM READING : %s"), diag_load_learndata ? "OK" : "NG");
- if(!diag_load_learndata) write_bios(_T("USERDIC.DAT"), fm7_mainmem_learndata, 0x2000);
+ i = FM7_MAINMEM_BACKUPED_RAM;
+ diag_load_learndata = false;
+ if(read_bios(_T(RAM_FM77AV_DIC_BACKUP), fm7_mainmem_learndata, 0x2000) == 0x2000) diag_load_learndata = true;
+ this->out_debug_log(_T("DICTIONARY BACKUPED RAM READING : %s"), diag_load_learndata ? "OK" : "NG");
+ if(!diag_load_learndata) write_bios(_T("USERDIC.DAT"), fm7_mainmem_learndata, 0x2000);
+ } else {
+ this->out_debug_log(_T("LOADING FROM DICTIONARY CARD IS CANCELLED."));
+ dictrom_connected = false;
+ diag_load_dictrom = false;
+ diag_load_learndata = false;
+ }
#endif
i = FM7_MAINMEM_77AV40_EXTRAROM;
memset(fm7_mainmem_extrarom, 0xff, sizeof(fm7_mainmem_extrarom));
if(read_bios(_T(ROM_FM77AV40EX_EXTSUB), fm7_mainmem_extrarom, 0xc000) == 0xc000) diag_load_extrarom = true;
this->out_debug_log(_T("AV40SX/EX EXTRA ROM READING : %s"), diag_load_extrarom ? "OK" : "NG");
+ //register_event(this, EVENT_FM7_MAINMEM_DRAM_REFRESH, 13.02, true, &event_refresh); // OK?
#endif
init_data_table();
update_all_mmr_jumptable();
paddr = addr >> 7;
data_table[paddr].read_data = &fm7_mainmem_extram[addr - 0x40000];
data_table[paddr].write_data = &fm7_mainmem_extram[addr - 0x40000];
+ data_table[paddr].read_func = NULL;
+ data_table[paddr].write_func = NULL;
+ }
+ for(addr = 0x40000 + extram_pages * 0x10000; addr < 0x100000; addr += 0x80) {
+ paddr = addr >> 7;
+ data_table[paddr].read_data = NULL;
+ data_table[paddr].write_data = NULL;
+ data_table[paddr].read_func = NULL;
+ data_table[paddr].write_func = NULL;
}
}
# endif
paddr = addr >> 7;
data_table[paddr].read_data = &fm7_mainmem_extram[addr];
data_table[paddr].write_data = &fm7_mainmem_extram[addr];
+ data_table[paddr].read_func = NULL;
+ data_table[paddr].write_func = NULL;
+ }
+ if(extram_pages < 3) {
+ for(addr = extram_pages * 0x10000; addr < 0x30000; addr += 0x80) {
+ paddr = addr >> 7;
+ data_table[paddr].read_data = NULL;
+ data_table[paddr].write_data = NULL;
+ data_table[paddr].read_func = NULL;
+ data_table[paddr].write_func = NULL;
+ }
}
- }
+ }
#endif
-}
+}
bool FM7_MAINMEM::get_loadstat_basicrom(void)
{
return blocks * size;
}
+}