OSDN Git Service

[VM][General] Merge upstream 2016-03-01. (Pahse 1).
[csp-qt/common_source_project-fm7.git] / source / src / vm / pc6001 / psub.cpp
index 02836f0..4248b00 100644 (file)
@@ -13,8 +13,6 @@
 
 #include "psub.h"
 #include "timer.h"
-#include "../event.h"
-#include "../../fileio.h"
 #include "../i8255.h"
 
 #define STICK0_SPACE   0x80
@@ -44,7 +42,7 @@
 #define EVENT_STRIG    1
 
 /* normal (small alphabet) */
-byte Keys1[256][2] =
+uint8_t Keys1[256][2] =
 {
 /* 0       1         2        3        4        5        6        7 */
 /* 00 */
@@ -137,7 +135,7 @@ byte Keys1[256][2] =
 };
 
 /* normal (small alphabet) + shift */
-byte Keys2[256][2] =
+uint8_t Keys2[256][2] =
 {
 /* 00 */
   {0,0x35},{0,0x00},{0,0x00},{0,0x00},{0,0x00},{0,0x00},{0,0x00},{0,0x00},
@@ -224,7 +222,7 @@ byte Keys2[256][2] =
 };
 
 /* hiragana */
-byte Keys3[256][2] =
+uint8_t Keys3[256][2] =
 {
 /* 00 */
   {0,0x00},{0,0x00},{0,0x00},{0,0x00},{0,0x00},{0,0x00},{0,0x00},{0,0x00},
@@ -311,7 +309,7 @@ byte Keys3[256][2] =
 };
 
 /* hiragana + shift */
-byte Keys4[256][2] =
+uint8_t Keys4[256][2] =
 {
 /* 00 */
   {0,0x35},{0,0x00},{0,0x00},{0,0x00},{0,0x00},{0,0x00},{0,0x00},{0,0x00},
@@ -394,7 +392,7 @@ byte Keys4[256][2] =
 };
 
 /* katakana */
-byte Keys5[256][2] =
+uint8_t Keys5[256][2] =
 {
 /* 00 */
   {0,0x00},{0,0x00},{0,0x00},{0,0x00},{0,0x00},{0,0x00},{0,0x00},{0,0x00},
@@ -478,7 +476,7 @@ byte Keys5[256][2] =
 };
 
 /* katakana + shift */
-byte Keys6[256][2] =
+uint8_t Keys6[256][2] =
 {
 /* 00 */
   {0,0x35},{0,0x00},{0,0x00},{0,0x00},{0,0x00},{0,0x00},{0,0x00},{0,0x00},
@@ -558,7 +556,7 @@ byte Keys6[256][2] =
 };
 
 /* with graph key */
-byte Keys7[256][2] =
+uint8_t Keys7[256][2] =
 {
 /* 00 */
   {0,0x35},{0,0x00},{0,0x00},{0,0x00},{0,0x00},{0,0x00},{0,0x00},{0,0x00},
@@ -636,14 +634,16 @@ void PSUB::update_keyboard()
 {
        for (int code=0; code < 256; code++) {
                if (key_stat[code] & 0x80) {
+                       if (code == VK_LSHIFT || code == VK_LCONTROL || code == VK_LMENU ||
+                           code == VK_RSHIFT || code == VK_RCONTROL || code == VK_RMENU) continue;
                        if (code == VK_SHIFT || code == VK_CONTROL) continue;
                        key_stat[code]=0;
                        if (code == 0x75) {kanaMode = -1 * (kanaMode-1);continue;} // VK_F6
                        if (code == 0x76) {katakana = -1 * (katakana-1);continue;} // VK_F7
                        if (code == 0x77) {kbFlagGraph = -1 * (kbFlagGraph-1);continue;} // VK_F8
                        p6key=code;
-                       byte *Keys;
-                       byte ascii=0;
+                       uint8_t *Keys;
+                       uint8_t ascii=0;
                        if (kbFlagGraph) {
                                Keys = Keys7[code];
                        } else if (kanaMode) {
@@ -670,7 +670,7 @@ void PSUB::update_keyboard()
        }
 }
 
-bool PSUB::play_tape(_TCHAR* file_path)
+bool PSUB::play_tape(const _TCHAR* file_path)
 {
        close_tape();
        
@@ -685,16 +685,16 @@ bool PSUB::play_tape(_TCHAR* file_path)
                        fio->Fseek(length, FILEIO_SEEK_SET);
                        char id_p = fio->Fgetc();
                        char id_6 = fio->Fgetc();
-                       uint8 ver = fio->FgetUint8();
+                       uint8_t ver = fio->FgetUint8();
                        if(id_p == 'P' && id_6 == '6' && ver == 2) {
-                               uint8 blocks = fio->FgetUint8();
+                               uint8_t blocks = fio->FgetUint8();
                                if(blocks >= 1) {
                                        fio->FgetUint8();
                                        fio->FgetUint8();
                                        fio->FgetUint8();
-                                       uint16 cmd = fio->FgetUint16();
+                                       uint16_t cmd = fio->FgetUint16();
                                        fio->Fseek(cmd, FILEIO_SEEK_CUR);
-                                       uint16 exp = fio->FgetUint16();
+                                       uint16_t exp = fio->FgetUint16();
                                        fio->Fseek(exp, FILEIO_SEEK_CUR);
                                        // check 1st data block
                                        char id_t = fio->Fgetc();
@@ -705,7 +705,7 @@ bool PSUB::play_tape(_TCHAR* file_path)
                                                FileBaud = (int)fio->FgetUint16();
                                        }
                                }
-                               remain = min(length, sizeof(CasData));
+                               remain = min(length, (int)sizeof(CasData));
                        }
                }
                fio->Fseek(0, FILEIO_SEEK_SET);
@@ -714,6 +714,8 @@ bool PSUB::play_tape(_TCHAR* file_path)
                        CasData[CasLength++] = data;
                        remain--;
                }
+               fio->Fclose();
+               
                if(CasMode == CAS_LOADING /*&& CasBaud == FileBaud*/) {
                        register_event(this, EVENT_CASSETTE, 1000000.0 / (CasBaud / 12), false, NULL);
                }
@@ -723,11 +725,12 @@ bool PSUB::play_tape(_TCHAR* file_path)
        return play;
 }
 
-bool PSUB::rec_tape(_TCHAR* file_path)
+bool PSUB::rec_tape(const _TCHAR* file_path)
 {
        close_tape();
        
-       if(fio->Fopen(file_path, FILEIO_WRITE_BINARY)) {
+       if(fio->Fopen(file_path, FILEIO_READ_WRITE_NEW_BINARY)) {
+               my_tcscpy_s(rec_file_path, _MAX_PATH, file_path);
                CasIndex=0;
                rec = true;
                is_wav = check_file_extension(file_path, _T(".wav"));
@@ -736,40 +739,19 @@ bool PSUB::rec_tape(_TCHAR* file_path)
        return rec;
 }
 
-#pragma pack(1)
-typedef struct {
-       char id[4];
-       uint32 size;
-} wav_chunk_t;
-#pragma pack()
-
-#pragma pack(1)
-typedef struct {
-       wav_chunk_t riff_chunk;
-       char wave[4];
-       wav_chunk_t fmt_chunk;
-       uint16 format_id;
-       uint16 channels;
-       uint32 sample_rate;
-       uint32 data_speed;
-       uint16 block_size;
-       uint16 sample_bits;
-} wav_header_t;
-#pragma pack()
-
-static const uint8 pulse_1200hz[40] = {
+static const uint8_t pulse_1200hz[40] = {
        0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
        0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 };
 
-static const uint8 pulse_2400hz[20] = {
+static const uint8_t pulse_2400hz[20] = {
        0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 };
 
-static const uint8 pulse_2400hz_x2[40] = {
+static const uint8_t pulse_2400hz_x2[40] = {
        0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
@@ -778,124 +760,124 @@ static const uint8 pulse_2400hz_x2[40] = {
 
 void PSUB::close_tape()
 {
-       if(rec) {
-               if(is_wav) {
-                       wav_header_t wav_header;
-                       wav_chunk_t wav_chunk;
-                       int sample_rate = (CasBaud == 600) ? 24000 : 48000;
-                       
-                       fio->Fwrite(&wav_header, sizeof(wav_header), 1);
-                       fio->Fwrite(&wav_chunk, sizeof(wav_chunk), 1);
-                       
-                       for(int i = 0; i < 9600; i++) {
-                               fio->Fwrite((void *)pulse_2400hz, sizeof(pulse_2400hz), 1);
-                       }
-                       for(int i = 0; i < 16; i++) {
-                               fio->Fwrite((void *)pulse_1200hz, sizeof(pulse_1200hz), 1);
-                               for(int j = 0; j < 8; j++) {
-                                       if(CasData[i] & (1 << j)) {
-                                               fio->Fwrite((void *)pulse_2400hz_x2, sizeof(pulse_2400hz_x2), 1);
-                                       } else {
-                                               fio->Fwrite((void *)pulse_1200hz, sizeof(pulse_1200hz), 1);
+       if(fio->IsOpened()) {
+               if(rec) {
+                       if(is_wav) {
+                               wav_header_t wav_header;
+                               wav_chunk_t wav_chunk;
+                               int sample_rate = (CasBaud == 600) ? 24000 : 48000;
+                               
+                               fio->Fwrite(&wav_header, sizeof(wav_header), 1);
+                               fio->Fwrite(&wav_chunk, sizeof(wav_chunk), 1);
+                               
+                               for(int i = 0; i < 9600; i++) {
+                                       fio->Fwrite((void *)pulse_2400hz, sizeof(pulse_2400hz), 1);
+                               }
+                               for(int i = 0; i < 16; i++) {
+                                       fio->Fwrite((void *)pulse_1200hz, sizeof(pulse_1200hz), 1);
+                                       for(int j = 0; j < 8; j++) {
+                                               if(CasData[i] & (1 << j)) {
+                                                       fio->Fwrite((void *)pulse_2400hz_x2, sizeof(pulse_2400hz_x2), 1);
+                                               } else {
+                                                       fio->Fwrite((void *)pulse_1200hz, sizeof(pulse_1200hz), 1);
+                                               }
                                        }
+                                       fio->Fwrite((void *)pulse_2400hz_x2, sizeof(pulse_2400hz_x2), 1);
+                                       fio->Fwrite((void *)pulse_2400hz_x2, sizeof(pulse_2400hz_x2), 1);
+                                       fio->Fwrite((void *)pulse_2400hz_x2, sizeof(pulse_2400hz_x2), 1);
                                }
-                               fio->Fwrite((void *)pulse_2400hz_x2, sizeof(pulse_2400hz_x2), 1);
-                               fio->Fwrite((void *)pulse_2400hz_x2, sizeof(pulse_2400hz_x2), 1);
-                               fio->Fwrite((void *)pulse_2400hz_x2, sizeof(pulse_2400hz_x2), 1);
-                       }
-//                     for(int i = 0; i < 1280; i++) {
-                       for(int i = 0; i < 2400; i++) {
-                               fio->Fwrite((void *)pulse_2400hz, sizeof(pulse_2400hz), 1);
-                       }
-                       for(int i = 16; i < CasIndex; i++) {
-                               fio->Fwrite((void *)pulse_1200hz, sizeof(pulse_1200hz), 1);
-                               for(int j = 0; j < 8; j++) {
-                                       if(CasData[i] & (1 << j)) {
-                                               fio->Fwrite((void *)pulse_2400hz_x2, sizeof(pulse_2400hz_x2), 1);
-                                       } else {
-                                               fio->Fwrite((void *)pulse_1200hz, sizeof(pulse_1200hz), 1);
+       //                      for(int i = 0; i < 1280; i++) {
+                               for(int i = 0; i < 2400; i++) {
+                                       fio->Fwrite((void *)pulse_2400hz, sizeof(pulse_2400hz), 1);
+                               }
+                               for(int i = 16; i < CasIndex; i++) {
+                                       fio->Fwrite((void *)pulse_1200hz, sizeof(pulse_1200hz), 1);
+                                       for(int j = 0; j < 8; j++) {
+                                               if(CasData[i] & (1 << j)) {
+                                                       fio->Fwrite((void *)pulse_2400hz_x2, sizeof(pulse_2400hz_x2), 1);
+                                               } else {
+                                                       fio->Fwrite((void *)pulse_1200hz, sizeof(pulse_1200hz), 1);
+                                               }
                                        }
+                                       fio->Fwrite((void *)pulse_2400hz_x2, sizeof(pulse_2400hz_x2), 1);
+                                       fio->Fwrite((void *)pulse_2400hz_x2, sizeof(pulse_2400hz_x2), 1);
+                                       fio->Fwrite((void *)pulse_2400hz_x2, sizeof(pulse_2400hz_x2), 1);
                                }
-                               fio->Fwrite((void *)pulse_2400hz_x2, sizeof(pulse_2400hz_x2), 1);
-                               fio->Fwrite((void *)pulse_2400hz_x2, sizeof(pulse_2400hz_x2), 1);
-                               fio->Fwrite((void *)pulse_2400hz_x2, sizeof(pulse_2400hz_x2), 1);
-                       }
 #if 1
-                       for(int i = 0; i < 16; i++) {
-                               fio->Fwrite((void *)pulse_1200hz, sizeof(pulse_1200hz), 1);
-                               for(int j = 0; j < 8; j++) {
+                               for(int i = 0; i < 16; i++) {
                                        fio->Fwrite((void *)pulse_1200hz, sizeof(pulse_1200hz), 1);
+                                       for(int j = 0; j < 8; j++) {
+                                               fio->Fwrite((void *)pulse_1200hz, sizeof(pulse_1200hz), 1);
+                                       }
+                                       fio->Fwrite((void *)pulse_2400hz_x2, sizeof(pulse_2400hz_x2), 1);
+                                       fio->Fwrite((void *)pulse_2400hz_x2, sizeof(pulse_2400hz_x2), 1);
+                                       fio->Fwrite((void *)pulse_2400hz_x2, sizeof(pulse_2400hz_x2), 1);
                                }
-                               fio->Fwrite((void *)pulse_2400hz_x2, sizeof(pulse_2400hz_x2), 1);
-                               fio->Fwrite((void *)pulse_2400hz_x2, sizeof(pulse_2400hz_x2), 1);
-                               fio->Fwrite((void *)pulse_2400hz_x2, sizeof(pulse_2400hz_x2), 1);
-                       }
 #endif
-                       uint32 length = fio->Ftell();
-                       
-                       memcpy(wav_header.riff_chunk.id, "RIFF", 4);
-                       wav_header.riff_chunk.size = length - 8;
-                       memcpy(wav_header.wave, "WAVE", 4);
-                       memcpy(wav_header.fmt_chunk.id, "fmt ", 4);
-                       wav_header.fmt_chunk.size = 16;
-                       wav_header.format_id = 1;
-                       wav_header.channels = 1;
-                       wav_header.sample_rate = sample_rate;
-                       wav_header.data_speed = sample_rate;
-                       wav_header.block_size = 1;
-                       wav_header.sample_bits = 8;
-                       
-                       memcpy(wav_chunk.id, "data", 4);
-                       wav_chunk.size = length - sizeof(wav_header) - sizeof(wav_chunk);
-                       
-                       fio->Fseek(0, FILEIO_SEEK_SET);
-                       fio->Fwrite(&wav_header, sizeof(wav_header), 1);
-                       fio->Fwrite(&wav_chunk, sizeof(wav_chunk), 1);
-               } else {
-                       fio->Fwrite(CasData, CasIndex, 1);
-                       if(is_p6t) {
-                               fio->Fputc('P');
-                               fio->Fputc('6');
-                               fio->FputUint8(2);
-                               fio->FputUint8(2);
-                               fio->FputUint8(0);
-                               fio->FputUint8(0);
-                               fio->FputUint8(0);
-                               fio->FputUint16(0);
-                               fio->FputUint16(0);
+                               uint32_t length = fio->Ftell();
                                
-                               fio->Fputc('T');
-                               fio->Fputc('I');
-                               fio->FputUint8(0);
-                               for(int i = 0; i < 6; i++) {
-                                       fio->FputUint8(CasData[10 + i]);
-                               }
-                               for(int i = 6; i < 16; i++) {
-                                       fio->FputUint8(0);
-                               }
-                               fio->FputUint16(CasBaud);
-                               fio->FputUint16(3000);
-                               fio->FputUint16(4000);
-                               fio->FputUint32(0);
-                               fio->FputUint32(16);
+                               memcpy(wav_header.riff_chunk.id, "RIFF", 4);
+                               wav_header.riff_chunk.size = length - 8;
+                               memcpy(wav_header.wave, "WAVE", 4);
+                               memcpy(wav_header.fmt_chunk.id, "fmt ", 4);
+                               wav_header.fmt_chunk.size = 16;
+                               wav_header.format_id = 1;
+                               wav_header.channels = 1;
+                               wav_header.sample_rate = sample_rate;
+                               wav_header.data_speed = sample_rate;
+                               wav_header.block_size = 1;
+                               wav_header.sample_bits = 8;
                                
-                               fio->Fputc('T');
-                               fio->Fputc('I');
-                               fio->FputUint8(0);
-                               for(int i = 0; i < 16; i++) {
+                               memcpy(wav_chunk.id, "data", 4);
+                               wav_chunk.size = length - sizeof(wav_header) - sizeof(wav_chunk);
+                               
+                               fio->Fseek(0, FILEIO_SEEK_SET);
+                               fio->Fwrite(&wav_header, sizeof(wav_header), 1);
+                               fio->Fwrite(&wav_chunk, sizeof(wav_chunk), 1);
+                       } else {
+                               fio->Fwrite(CasData, CasIndex, 1);
+                               if(is_p6t) {
+                                       fio->Fputc('P');
+                                       fio->Fputc('6');
+                                       fio->FputUint8(2);
+                                       fio->FputUint8(2);
+                                       fio->FputUint8(0);
                                        fio->FputUint8(0);
+                                       fio->FputUint8(0);
+                                       fio->FputUint16(0);
+                                       fio->FputUint16(0);
+                                       
+                                       fio->Fputc('T');
+                                       fio->Fputc('I');
+                                       fio->FputUint8(0);
+                                       for(int i = 0; i < 6; i++) {
+                                               fio->FputUint8(CasData[10 + i]);
+                                       }
+                                       for(int i = 6; i < 16; i++) {
+                                               fio->FputUint8(0);
+                                       }
+                                       fio->FputUint16(CasBaud);
+                                       fio->FputUint16(3000);
+                                       fio->FputUint16(4000);
+                                       fio->FputUint32(0);
+                                       fio->FputUint32(16);
+                                       
+                                       fio->Fputc('T');
+                                       fio->Fputc('I');
+                                       fio->FputUint8(0);
+                                       for(int i = 0; i < 16; i++) {
+                                               fio->FputUint8(0);
+                                       }
+                                       fio->FputUint16(CasBaud);
+                                       fio->FputUint16(0);
+                                       fio->FputUint16(1000);
+                                       fio->FputUint32(16);
+                                       fio->FputUint32(CasIndex - 16);
+                                       
+                                       fio->FputUint32(CasIndex);
                                }
-                               fio->FputUint16(CasBaud);
-                               fio->FputUint16(0);
-                               fio->FputUint16(1000);
-                               fio->FputUint32(16);
-                               fio->FputUint32(CasIndex - 16);
-                               
-                               fio->FputUint32(CasIndex);
                        }
                }
-       }
-       if(play || rec) {
                fio->Fclose();
        }
        play = rec = false;
@@ -906,7 +888,9 @@ void PSUB::initialize()
        fio = new FILEIO();
        play = rec = false;
        
-       key_stat = emu->key_buffer();
+//     key_stat = emu->get_key_buffer();
+       memset(key_stat, 0, sizeof(key_stat));
+       
        kbFlagCtrl=0;
        kbFlagGraph=0;
        kbFlagFunc=0;
@@ -992,7 +976,7 @@ void PSUB::event_callback(int event_id, int err)
        }
 }
 
-uint32 PSUB::intr_ack()
+uint32_t PSUB::get_intr_ack()
 {
        if (CasMode != CAS_NONE && p6key == 0xFA && kbFlagGraph) {
                return(INTADDR_CMTSTOP); /* Press STOP while CMT Load or Save */
@@ -1014,9 +998,9 @@ uint32 PSUB::intr_ack()
        return(INTADDR_TIMER);
 }
 
-void PSUB::write_io8(uint32 addr, uint32 data)
+void PSUB::write_io8(uint32_t addr, uint32_t data)
 {
-       uint16 port=(addr & 0x00ff);
+       uint16_t port=(addr & 0x00ff);
        if (port == 0x90) {
                if (CasMode == CAS_SAVEBYTE) {  /* CMT SAVE */
                        if (CasIndex<0x10000) {
@@ -1062,10 +1046,10 @@ void PSUB::write_io8(uint32 addr, uint32 data)
        d_pio->write_io8(addr, data);
 }
 
-uint32 PSUB::read_io8(uint32 addr)
+uint32_t PSUB::read_io8(uint32_t addr)
 {
-       uint16 port=(addr & 0x00ff);
-       byte Value=0xff;
+       uint16_t port=(addr & 0x00ff);
+       uint8_t Value=0xff;
        if (port == 0x90) {
                if (CasMode == CAS_LOADING) {
                        Value=CasRecv;
@@ -1080,3 +1064,109 @@ uint32 PSUB::read_io8(uint32 addr)
        }
        return Value;
 }
+
+void PSUB::key_down(int code)
+{
+       key_stat[code] = 0x80;
+}
+
+void PSUB::key_up(int code)
+{
+       key_stat[code] = 0x00;
+}
+
+#define STATE_VERSION  1
+
+void PSUB::save_state(FILEIO* state_fio)
+{
+       state_fio->FputUint32(STATE_VERSION);
+       state_fio->FputInt32(this_device_id);
+       
+       state_fio->FputBool(play);
+       state_fio->FputBool(rec);
+       state_fio->FputBool(is_wav);
+       state_fio->FputBool(is_p6t);
+       state_fio->Fwrite(rec_file_path, sizeof(rec_file_path), 1);
+       if(rec && fio->IsOpened()) {
+               int length_tmp = (int)fio->Ftell();
+               fio->Fseek(0, FILEIO_SEEK_SET);
+               state_fio->FputInt32(length_tmp);
+               while(length_tmp != 0) {
+                       uint8_t buffer_tmp[1024];
+                       int length_rw = min(length_tmp, (int)sizeof(buffer_tmp));
+                       fio->Fread(buffer_tmp, length_rw, 1);
+                       state_fio->Fwrite(buffer_tmp, length_rw, 1);
+                       length_tmp -= length_rw;
+               }
+       } else {
+               state_fio->FputInt32(0);
+       }
+       state_fio->FputInt32(CasIntFlag);
+       state_fio->FputInt32(CasIndex);
+       state_fio->FputInt32(CasRecv);
+       state_fio->FputInt32(CasMode);
+       state_fio->FputInt32(CasBaud);
+       state_fio->FputInt32(FileBaud);
+       state_fio->Fwrite(CasData, sizeof(CasData), 1);
+       state_fio->FputInt32(CasLength);
+       state_fio->FputInt32(CasSkipFlag);
+       state_fio->FputInt32(kbFlagFunc);
+       state_fio->FputInt32(kbFlagGraph);
+       state_fio->FputInt32(kbFlagCtrl);
+       state_fio->FputInt32(kanaMode);
+       state_fio->FputInt32(katakana);
+       state_fio->FputInt32(p6key);
+       state_fio->FputInt32(stick0);
+       state_fio->FputInt32(StrigIntFlag);
+       state_fio->FputInt32(StrigEventID);
+}
+
+bool PSUB::load_state(FILEIO* state_fio)
+{
+       close_tape();
+       
+       if(state_fio->FgetUint32() != STATE_VERSION) {
+               return false;
+       }
+       if(state_fio->FgetInt32() != this_device_id) {
+               return false;
+       }
+       play = state_fio->FgetBool();
+       rec = state_fio->FgetBool();
+       is_wav = state_fio->FgetBool();
+       is_p6t = state_fio->FgetBool();
+       state_fio->Fread(rec_file_path, sizeof(rec_file_path), 1);
+       int length_tmp = state_fio->FgetInt32();
+       if(rec) {
+               fio->Fopen(rec_file_path, FILEIO_READ_WRITE_NEW_BINARY);
+               while(length_tmp != 0) {
+                       uint8_t buffer_tmp[1024];
+                       int length_rw = min(length_tmp, (int)sizeof(buffer_tmp));
+                       state_fio->Fread(buffer_tmp, length_rw, 1);
+                       if(fio->IsOpened()) {
+                               fio->Fwrite(buffer_tmp, length_rw, 1);
+                       }
+                       length_tmp -= length_rw;
+               }
+       }
+       CasIntFlag = state_fio->FgetInt32();
+       CasIndex = state_fio->FgetInt32();
+       CasRecv = state_fio->FgetInt32();
+       CasMode = state_fio->FgetInt32();
+       CasBaud = state_fio->FgetInt32();
+       FileBaud = state_fio->FgetInt32();
+       state_fio->Fread(CasData, sizeof(CasData), 1);
+       CasLength = state_fio->FgetInt32();
+       CasSkipFlag = state_fio->FgetInt32();
+       kbFlagFunc = state_fio->FgetInt32();
+       kbFlagGraph = state_fio->FgetInt32();
+       kbFlagCtrl = state_fio->FgetInt32();
+       kanaMode = state_fio->FgetInt32();
+       katakana = state_fio->FgetInt32();
+       p6key = state_fio->FgetInt32();
+       stick0 = state_fio->FgetInt32();
+       StrigIntFlag = state_fio->FgetInt32();
+       StrigEventID = state_fio->FgetInt32();
+       return true;
+}
+