OSDN Git Service

[VM] TRY:Use namespace {VMNAME} to separate around VMs. This feature still apply...
[csp-qt/common_source_project-fm7.git] / source / src / vm / fm7 / mainmem_utils.cpp
index e14ce75..910eb56 100644 (file)
@@ -9,6 +9,9 @@
 #include "emu.h"
 #include "fm7_mainmem.h"
 
+namespace FM7 {
+
+
 void FM7_MAINMEM::initialize(void)
 {
        int i;
@@ -69,12 +72,13 @@ void FM7_MAINMEM::initialize(void)
        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 
@@ -357,21 +361,30 @@ void FM7_MAINMEM::initialize(void)
    
        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;
@@ -380,6 +393,7 @@ void FM7_MAINMEM::initialize(void)
        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();
@@ -480,6 +494,15 @@ void FM7_MAINMEM::init_data_table(void)
                        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
@@ -490,10 +513,21 @@ void FM7_MAINMEM::init_data_table(void)
                        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)
 {
@@ -544,3 +578,4 @@ uint32_t FM7_MAINMEM::write_bios(const _TCHAR *name, uint8_t *ptr, uint32_t size
        return blocks * size;
 }
 
+}