OSDN Git Service

[VM][STATE] Use namespace {VMNAME} to separate per VMs.
[csp-qt/common_source_project-fm7.git] / source / src / vm / pc8201 / cmt.cpp
index 1fcf514..58c8f4d 100644 (file)
@@ -11,6 +11,8 @@
 
 #define SAMPLE_RATE 48000
 
+namespace PC8201 {
+
 void CMT::initialize()
 {
        fio = new FILEIO();
@@ -108,9 +110,7 @@ void CMT::rec_tape(const _TCHAR* file_path)
        if(fio->Fopen(file_path, FILEIO_WRITE_BINARY)) {
                my_tcscpy_s(rec_file_path, _MAX_PATH, file_path);
                if(check_file_extension(file_path, _T(".wav"))) {
-                       uint8_t dummy[sizeof(wav_header_t) + sizeof(wav_chunk_t)];
-                       memset(dummy, 0, sizeof(dummy));
-                       fio->Fwrite(dummy, sizeof(dummy), 1);
+                       write_dummy_wav_header((void *)fio);
                        is_wav = true;
                }
                bufcnt = 0;
@@ -127,9 +127,9 @@ void CMT::close_tape()
                }
                if(is_wav) {
                        uint32_t length = fio->Ftell();
-                       
                        wav_header_t wav_header;
                        wav_chunk_t wav_chunk;
+#if 0                  
                        
                        pair_t __riff_chunk_size;
                        pair_t __fmt_chunk_size;
@@ -169,6 +169,13 @@ void CMT::close_tape()
                        fio->Fseek(0, FILEIO_SEEK_SET);
                        fio->Fwrite(&wav_header, sizeof(wav_header), 1);
                        fio->Fwrite(&wav_chunk, sizeof(wav_chunk), 1);
+#else
+                       if(set_wav_header(&wav_header, &wav_chunk, 1, SAMPLE_RATE, 8, length)) {
+                               fio->Fseek(0, FILEIO_SEEK_SET);
+                               fio->Fwrite(&wav_header, sizeof(wav_header), 1);
+                               fio->Fwrite(&wav_chunk, sizeof(wav_chunk), 1);
+                       }
+#endif
                }
                fio->Fclose();
        }
@@ -177,66 +184,53 @@ void CMT::close_tape()
 
 #define STATE_VERSION  1
 
-void CMT::save_state(FILEIO* state_fio)
-{
-       state_fio->FputUint32(STATE_VERSION);
-       state_fio->FputInt32(this_device_id);
-       
-       state_fio->FputBool(is_wav);
-       state_fio->FputBool(rec);
-       state_fio->FputBool(remote);
-       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(bufcnt);
-       state_fio->Fwrite(buffer, sizeof(buffer), 1);
-       state_fio->FputInt32(prev_signal);
-       state_fio->FputUint32(prev_clock);
-}
-
-bool CMT::load_state(FILEIO* state_fio)
+bool CMT::process_state(FILEIO* state_fio, bool loading)
 {
-       close_tape();
-       
-       if(state_fio->FgetUint32() != STATE_VERSION) {
+       if(!state_fio->StateCheckUint32(STATE_VERSION)) {
                return false;
        }
-       if(state_fio->FgetInt32() != this_device_id) {
+       if(!state_fio->StateCheckInt32(this_device_id)) {
                return false;
        }
-       is_wav = state_fio->FgetBool();
-       rec = state_fio->FgetBool();
-       remote = 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);
+       state_fio->StateBool(is_wav);
+       state_fio->StateBool(rec);
+       state_fio->StateBool(remote);
+       state_fio->StateBuffer(rec_file_path, sizeof(rec_file_path), 1);
+       if(loading) {
+               int length_tmp = state_fio->FgetInt32_LE();
+               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;
                        }
-                       length_tmp -= length_rw;
+               }
+       } else {
+               if(rec && fio->IsOpened()) {
+                       int length_tmp = (int)fio->Ftell();
+                       fio->Fseek(0, FILEIO_SEEK_SET);
+                       state_fio->FputInt32_LE(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_LE(0);
                }
        }
-       bufcnt = state_fio->FgetInt32();
-       state_fio->Fread(buffer, sizeof(buffer), 1);
-       prev_signal = state_fio->FgetInt32();
-       prev_clock = state_fio->FgetUint32();
+       state_fio->StateInt32(bufcnt);
+       state_fio->StateBuffer(buffer, sizeof(buffer), 1);
+       state_fio->StateInt32(prev_signal);
+       state_fio->StateUint32(prev_clock);
        return true;
 }
 
+}