OSDN Git Service

Merge branch 'master' of github.com:Artanejp/common_source_project-fm7
[csp-qt/common_source_project-fm7.git] / source / src / vm / fm7 / fm7_mainmem.h
index 6a4e262..f7925de 100644 (file)
@@ -24,6 +24,8 @@
 class DEVICE;
 class MEMORY;
 class FM7_MAINIO;
+class KANJIROM;
+class DISPLAY;
 
 class FM7_MAINMEM : public DEVICE
 {
@@ -48,6 +50,8 @@ class FM7_MAINMEM : public DEVICE
        bool ioaccess_wait;
        int waitfactor;
        int waitcount;
+       int cpu_clocks;
+       
        bool sub_halted;
        // V2
 #ifdef HAS_MMR
@@ -81,8 +85,8 @@ class FM7_MAINMEM : public DEVICE
        uint8_t fm7_mainmem_ura[0x7c00];
        uint8_t fm7_mainmem_basicrom[0x7c00];
        uint8_t fm7_mainmem_bioswork[0x80];
-#if !defined(_FM77AV_VARIANTS)
-       uint8_t *fm7_bootroms[4];
+#if !defined(_FM77AV)
+       uint8_t *fm7_bootroms[8];
 #endif 
        uint8_t fm7_mainmem_bootrom_vector[0x1e]; // Without
        uint8_t fm7_mainmem_reset_vector[2]; // Without
@@ -90,9 +94,19 @@ class FM7_MAINMEM : public DEVICE
 #if defined(_FM77AV_VARIANTS) || defined(_FM77_VARIANTS)
        uint8_t fm7_bootram[0x200]; // $00000-$0ffff
 #endif
+# if defined(_FM8)
+       bool diag_load_sm11_14;
+       bool diag_load_sm11_15;
+# elif defined(_FM77_VARIANTS)
+       bool diag_load_wb11_12;
+# elif defined(_FM7) || defined(_FMNEW7)
+       bool diag_load_tl11_11;
+       bool diag_load_tl11_12;
+#endif
 #ifdef HAS_MMR
        bool extram_connected;
-# ifdef _FM77AV_VARIANTS
+
+# if defined(_FM77AV_VARIANTS)
        bool diag_load_initrom;
        bool diag_load_dictrom;
        bool diag_load_learndata;
@@ -113,27 +127,36 @@ class FM7_MAINMEM : public DEVICE
        bool diag_load_extrarom;
        uint8_t fm7_mainmem_extrarom[0x10000]; // $20000-$2bfff, banked
        int extram_pages;
+       uint32_t extram_size;
        uint8_t *fm7_mainmem_extram; // $40000- : MAX 768KB ($c0000)
 #  endif
 # endif
 # if defined(_FM77_VARIANTS)
        int extram_pages;
+       uint32_t extram_size;
        uint8_t *fm7_mainmem_extram; // $00000-$2ffff
        uint8_t fm77_shadowram[0x200];
 # endif
 #endif
 #if defined(CAPABLE_DICTROM)
-       DEVICE *kanjiclass1;
+       KANJIROM *kanjiclass1;
        //KANJIROM *kanjiclass2;
 #endif 
        MC6809 *maincpu;
-       DEVICE *mainio;
-       DEVICE *display;
+       FM7_MAINIO *mainio;
+       DISPLAY *display;
        
        bool diag_load_basicrom;
        bool diag_load_bootrom_bas;
        bool diag_load_bootrom_dos;
        bool diag_load_bootrom_mmr;
+       bool diag_load_bootrom_bubble;
+       bool diag_load_bootrom_bubble_128k;
+       bool diag_load_bootrom_sfd8;
+       bool diag_load_bootrom_2hd;
+
+       uint32_t mem_waitfactor;
+       uint32_t mem_waitcount;
 
        int check_extrom(uint32_t raddr, uint32_t *realaddr);
        
@@ -171,6 +194,36 @@ class FM7_MAINMEM : public DEVICE
        uint8_t read_with_mmr(uint32_t addr, uint32_t segment, uint32_t dmamode);
        void write_with_mmr(uint32_t addr, uint32_t segment, uint32_t data, uint32_t dmamode);
 
+       template <class T>
+       void call_write_signal(T *np, int id, uint32_t data, uint32_t mask)
+       {
+               //T *nnp = static_cast<T *>(np);
+               static_cast<T *>(np)->write_signal(id, data, mask);
+       }
+       template <class T>
+               void call_write_data8(T *np, uint32_t addr, uint32_t data)
+       {
+               //T *nnp = static_cast<T *>(np);
+               static_cast<T *>(np)->write_data8(addr, data);
+       }
+       template <class T>
+               uint32_t call_read_data8(T *np, uint32_t addr)
+       {
+               //T *nnp = static_cast<T *>(np);
+               return static_cast<T *>(np)->read_data8(addr);
+       }
+       template <class T>
+               void call_write_dma_data8(T *np, uint32_t addr, uint32_t data)
+       {
+               //T *nnp = static_cast<T *>(np);
+               static_cast<T *>(np)->write_dma_data8(addr, data);
+       }
+       template <class T>
+               uint32_t call_read_dma_data8(T *np, uint32_t addr)
+       {
+               //T *nnp = static_cast<T *>(np);
+               return static_cast<T *>(np)->read_dma_data8(addr);
+       }
  public:
        FM7_MAINMEM(VM* parent_vm, EMU* parent_emu);
        ~FM7_MAINMEM();
@@ -178,7 +231,7 @@ class FM7_MAINMEM : public DEVICE
        uint32_t read_dma_data8(uint32_t addr);
        uint32_t read_dma_io8(uint32_t addr);
        uint32_t read_data8_main(uint32_t addr, bool dmamode);
-   
+
        void write_data8(uint32_t addr, uint32_t data);
        void write_dma_data8(uint32_t addr, uint32_t data);
        void write_dma_io8(uint32_t addr, uint32_t data);
@@ -191,39 +244,37 @@ class FM7_MAINMEM : public DEVICE
        virtual void write_data32(uint32_t addr, uint32_t data);
    
        void initialize(void);
-       void wait(void);
+       void iowait(void);
+       void dram_refresh(void);
        void reset(void);
        void release(void);
 
        bool get_loadstat_basicrom(void);
        bool get_loadstat_bootrom_bas(void);
        bool get_loadstat_bootrom_dos(void);
+       void decl_state();
        void save_state(FILEIO *state_fio);
        void update_config();
        bool load_state(FILEIO *state_fio);
 
        void set_context_display(DEVICE *p){
-               display = p;
+               display = (DISPLAY *)p;
        }
        void set_context_maincpu(MC6809 *p){
-               maincpu = p;
+               maincpu = (MC6809 *)p;
        }
        void set_context_mainio(DEVICE *p){
-               mainio = p;
+               mainio = (FM7_MAINIO *)p;
        }
 #if defined(CAPABLE_DICTROM)
        void set_context_kanjirom_class1(DEVICE *p){
-               kanjiclass1 = p;
+               kanjiclass1 = (KANJIROM *)p;
        }
 #endif 
        void write_signal(int sigid, uint32_t data, uint32_t mask);
        uint32_t read_signal(int sigid);
-       uint32_t read_io8(uint32_t addr) {
-               return mainio->read_io8(addr);
-       }
-       void write_io8(uint32_t addr, uint32_t data) {
-               return mainio->write_io8(addr, data);
-       }
+       uint32_t read_io8(uint32_t addr);
+       void write_io8(uint32_t addr, uint32_t data);
 };
 
 #endif