- FILEIO fio;
- uint32 blocks;
- _TCHAR *s;
-
- if((name == NULL) || (ptr == NULL)) return 0;
- s = emu->bios_path((_TCHAR *)name);
- if(s == NULL) return 0;
-
- if(!fio.Fopen(s, FILEIO_READ_BINARY)) return 0;
- blocks = fio.Fread(ptr, size, 1);
- fio.Fclose();
-
- return blocks * size;
-}
-
-uint32 FM7_MAINMEM::write_bios(const char *name, uint8 *ptr, uint32 size)
-{
- FILEIO fio;
- uint32 blocks;
- _TCHAR *s;
-
- if((name == NULL) || (ptr == NULL)) return 0;
- s = emu->bios_path((_TCHAR *)name);
- if(s == NULL) return 0;
-
- fio.Fopen(s, FILEIO_WRITE_BINARY);
- blocks = fio.Fwrite(ptr, size, 1);
- fio.Fclose();
-
- return blocks * size;
-}
-
-FM7_MAINMEM::FM7_MAINMEM(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
-{
- p_vm = parent_vm;
- p_emu = parent_emu;
-#if !defined(_FM77AV_VARIANTS)
- for(int i = 0; i < 4; i++) fm7_bootroms[i] = (uint8 *)malloc(0x200);
-#endif
- mainio = NULL;
- display = NULL;
- maincpu = NULL;
- kanjiclass1 = NULL;
- kanjiclass2 = NULL;
-#if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || defined(_FM77AV20) || defined(_FM77_VARIANTS)
- fm7_mainmem_extram = NULL;
-#endif
- // Initialize table
- memset(read_table, 0x00, sizeof(read_table));
- memset(write_table, 0x00, sizeof(write_table));
-}
-
-FM7_MAINMEM::~FM7_MAINMEM()
-{
-}
-
-void FM7_MAINMEM::initialize(void)
-{
- int i;
- diag_load_basicrom = false;
- diag_load_bootrom_bas = false;
- diag_load_bootrom_dos = false;
- diag_load_bootrom_mmr = false;
-#if defined(_FM77AV_VARIANTS)
- dictrom_connected = false;
-#endif
-#ifdef HAS_MMR
- for(i = 0x00; i < 0x80; i++) {
- mmr_map_data[i] = 0;
- }
- mmr_segment = 0;
- window_offset = 0;
- mmr_enabled = false;
- mmr_fast = false;
- window_enabled = false;
-#endif
-#ifdef _FM77AV_VARIANTS
- extcard_bank = 0;
- extrom_bank = 0;
- initiator_enabled = true;
- boot_ram_write = false;
-#endif
- bootmode = config.boot_mode & 3;
- basicrom_fd0f = false;
- is_basicrom = ((bootmode & 0x03) == 0) ? true : false;
-
- // $0000-$7FFF
- i = FM7_MAINMEM_OMOTE;
- memset(fm7_mainmem_omote, 0x00, 0x8000 * sizeof(uint8));
- read_table[i].memory = fm7_mainmem_omote;
- write_table[i].memory = fm7_mainmem_omote;
-
- // $8000-$FBFF
- i = FM7_MAINMEM_URA;
- memset(fm7_mainmem_ura, 0x00, 0x7c00 * sizeof(uint8));
- read_table[i].memory = fm7_mainmem_ura;
- write_table[i].memory = fm7_mainmem_ura;
-
- i = FM7_MAINMEM_VECTOR;
- memset(fm7_mainmem_bootrom_vector, 0x00, 0x1e);
- read_table[i].memory = fm7_mainmem_bootrom_vector;
- write_table[i].memory = fm7_mainmem_bootrom_vector;
-
-#if defined(CAPABLE_DICTROM)
- diag_load_dictrom = false;
- i = FM7_MAINMEM_DICTROM;
- memset(fm7_mainmem_extrarom, 0xff, 0x40000 * sizeof(uint8));
- read_table[i].memory = fm7_mainmem_dictrom;
- write_table[i].memory = NULL;
- if(read_bios("DICROM.ROM", fm7_mainmem_dictrom, 0x40000) == 0x40000) diag_load_dictrom = true;
- emu->out_debug_log("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));
- read_table[i].memory = fm7_mainmem_learndata;
- write_table[i].memory = fm7_mainmem_learndata;
- if(read_bios("USERDIC.DAT", read_table[i].memory, 0x2000) == 0x2000) diag_load_learndata = true;
- emu->out_debug_log("DICTIONARY ROM READING : %s", diag_load_learndata ? "OK" : "NG");
- if(!diag_load_learndata) write_bios("USERDIC.DAT", fm7_mainmem_learndata, 0x2000);
-#endif
-
-#if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || defined(_FM77AV20)
- i = FM7_MAINMEM_77AV40_EXTRAROM;
- diag_load_extrarom = false;
- memset(fm7_mainmem_extrarom, 0xff, 0x20000 * sizeof(uint8));
- read_table[i].memory = fm7_mainmem_extrarom;
- write_table[i].memory = NULL;
- if(read_bios("EXTSUB.ROM", read_table[i].memory, 0xc000) >= 0xc000) diag_load_extrarom = true;
- emu->out_debug_log("AV40 EXTRA ROM READING : %s", diag_load_extrarom ? "OK" : "NG");
-#endif
-
-#if defined(_FM77AV40) || defined(_FM77AV40SX) || defined(_FM77AV40EX) || defined(_FM77AV20) || defined(_FM77_VARIANTS)
- extram_pages = FM77_EXRAM_BANKS;
-#if defined(_FM77_VARIANTS)
- if(extram_pages > 3) extram_pages = 3;
-#else
- if(extram_pages > 12) extram_pages = 12;
-#endif
- if(extram_pages > 0) {
- i = FM7_MAINMEM_EXTRAM;
- fm7_mainmem_extram = (uint8 *)malloc(extram_pages * 0x10000);
- if(fm7_mainmem_extram != NULL) {
- memset(fm7_mainmem_extram, 0x00, extram_pages * 0x10000);
- read_table[i].memory = fm7_mainmem_extram;
- write_table[i].memory = fm7_mainmem_extram;
- }
- }
-#endif
-
-#if defined(_FM77_VARIANTS)
- memset(fm77_shadowram, 0x00, 0x200);
- read_table[FM7_MAINMEM_SHADOWRAM].memory = fm77_shadowram;
- write_table[FM7_MAINMEM_SHADOWRAM].memory = fm77_shadowram;
-#endif
-#if !defined(_FM77AV_VARIANTS)
- for(i = FM7_MAINMEM_BOOTROM_BAS; i <= FM7_MAINMEM_BOOTROM_EXTRA; i++) {
- memset(fm7_bootroms[i - FM7_MAINMEM_BOOTROM_BAS], 0xff, 0x200);
- read_table[i].memory = fm7_bootroms[i - FM7_MAINMEM_BOOTROM_BAS];
- write_table[i].memory = NULL;
- }
-#endif
-#if defined(_FM8)
- if(read_bios("BOOT_BAS8.ROM", fm7_bootroms[0], 0x200) >= 0x1e0) {
- diag_load_bootrom_bas = true;
- } else {
- diag_load_bootrom_bas = false;
- }
- if(read_bios("BOOT_DOS8.ROM", fm7_bootroms[1], 0x200) >= 0x1e0) {
- diag_load_bootrom_dos = true;
- } else {
- diag_load_bootrom_dos = false;
- }
- diag_load_bootrom_mmr = false;
-# elif defined(_FM7) || defined(_FMNEW7) || defined(_FM77_VARIANTS)
- if(read_bios("BOOT_BAS.ROM", fm7_bootroms[0], 0x200) >= 0x1e0) {
- diag_load_bootrom_bas = true;
- } else {
- diag_load_bootrom_bas = false;