OSDN Git Service

[VM][PC9801][DISPLAY] Keep memory switch settings (saved to MEMSW.BIN).
authorK.Ohta <whatisthis.sowhat@gmail.com>
Tue, 26 Jun 2018 16:24:46 +0000 (01:24 +0900)
committerK.Ohta <whatisthis.sowhat@gmail.com>
Tue, 26 Jun 2018 16:24:46 +0000 (01:24 +0900)
source/src/vm/pc9801/display.cpp
source/src/vm/pc9801/display.h

index 48d6fc3..3c93bcb 100644 (file)
@@ -219,7 +219,6 @@ void DISPLAY::initialize()
                memcpy(font + ANK_FONT_OFS + FONT_SIZE * 0x300, font + ANK_FONT_OFS, FONT_SIZE * 0x100);
        }
 #endif
-       delete fio;
        
        // init palette
        for(int i = 0; i < 8; i++) {
@@ -238,9 +237,24 @@ void DISPLAY::initialize()
 //     memset(tvram, 0, sizeof(tvram));
        memset(vram, 0, sizeof(vram));
        
-       for(int i = 0; i < 16; i++) {
-               tvram[0x3fe0 + (i << 1)] = memsw_default[i];
+// WIP: MEMSW
+       bool memsw_stat = false;
+       if(fio->Fopen(create_local_path(_T("MEMSW.BIN")), FILEIO_READ_BINARY)) {
+               if(fio->IsOpened()) {
+                       for(int i = 0; i < 16; i++) {
+                               tvram[0x3fe0 + (i << 1)] = fio->FgetUint8();
+                               if(i == 15) memsw_stat = true;
+                       }
+                       fio->Fclose();
+               }
        }
+       if(!memsw_stat) {
+               for(int i = 0; i < 16; i++) {
+                       tvram[0x3fe0 + (i << 1)] = memsw_default[i];
+               }
+       }
+       delete fio;
+
 #ifndef HAS_UPD4990A
        cur_time_t cur_time;
        get_host_time(&cur_time);
@@ -257,6 +271,21 @@ void DISPLAY::initialize()
        register_frame_event(this);
 }
 
+void DISPLAY::release()
+{
+       FILEIO *fio = new FILEIO();
+       if(fio == NULL) return;
+       if(fio->Fopen(create_local_path(_T("MEMSW.BIN")), FILEIO_WRITE_BINARY)) {
+               if(fio->IsOpened()) {
+                       for(int i = 0; i < 16; i++) {
+                               fio->FputUint8(tvram[0x3fe0 + (i << 1)]);
+                       }
+                       fio->Fclose();
+               }
+       }
+       delete fio;
+}
+
 #if !defined(SUPPORT_HIRESO)
 void DISPLAY::kanji_copy(uint8_t *dst, uint8_t *src, int from, int to)
 {
index 9b73204..11da08b 100644 (file)
@@ -202,6 +202,7 @@ public:
        
        // common functions
        void initialize();
+       void release();
        void reset();
        void event_frame();
        void write_io8(uint32_t addr, uint32_t data);