OSDN Git Service

[VM][FP200] Add CMT button's sounds.
authorK.Ohta <whatisthis.sowhat@gmail.com>
Wed, 5 Oct 2016 07:23:50 +0000 (16:23 +0900)
committerK.Ohta <whatisthis.sowhat@gmail.com>
Wed, 5 Oct 2016 07:23:50 +0000 (16:23 +0900)
source/src/vm/fp200/fp200.cpp
source/src/vm/fp200/fp200.h
source/src/vm/fp200/io.cpp

index 173f0c3..a7387d5 100644 (file)
@@ -51,6 +51,11 @@ VM::VM(EMU* parent_emu) : emu(parent_emu)
        // set contexts
        event->set_context_cpu(cpu);
        event->set_context_sound(drec);
+#if defined(USE_SOUND_FILES)
+       drec->load_sound_data(DATAREC_SNDFILE_PLAY,  _T("CMTPLAY.WAV"));
+       drec->load_sound_data(DATAREC_SNDFILE_STOP,  _T("CMTSTOP.WAV"));
+       drec->load_sound_data(DATAREC_SNDFILE_EJECT, _T("CMTEJECT.WAV"));
+#endif 
        
        drec->set_context_ear(io, SIG_IO_CMT, 1);
        cpu->set_context_sod(io, SIG_IO_SOD, 1);
@@ -184,6 +189,11 @@ void VM::set_sound_device_volume(int ch, int decibel_l, int decibel_r)
        if(ch == 0) {
                drec->set_volume(0, decibel_l, decibel_r);
        }
+#if defined(USE_SOUND_FILES)
+       else if(ch == 1) {
+               drec->set_volume(2 + DATAREC_SNDFILE_EJECT, decibel_l, decibel_r);
+       }
+#endif
 }
 #endif
 
@@ -221,6 +231,9 @@ void VM::rec_tape(const _TCHAR* file_path)
 
 void VM::close_tape()
 {
+#if defined(USE_SOUND_FILES)
+       drec->write_signal(SIG_SOUNDER_ADD + DATAREC_SNDFILE_EJECT, 1, 1);
+#endif
        drec->close_tape();
        io->close_tape();
 }
index 48e1cf7..a15d54e 100644 (file)
@@ -23,6 +23,7 @@
 #define I8080_MEMORY_WAIT
 #define MEMORY_ADDR_MAX                0x10000
 #define MEMORY_BANK_SIZE       0x2000
+#define USE_SOUND_FILES                3
 
 // device informations for win32
 #define WINDOW_MODE_BASE       2
 #define USE_AUTO_KEY           5
 #define USE_AUTO_KEY_RELEASE   6
 #define USE_AUTO_KEY_CAPS
+#if defined(USE_SOUND_FILES)
+#define USE_SOUND_VOLUME       2
+#else
 #define USE_SOUND_VOLUME       1
+#endif
 #define USE_DEBUGGER
 #define USE_STATE
 
@@ -43,6 +48,9 @@
 #ifdef USE_SOUND_VOLUME
 static const _TCHAR *sound_device_caption[] = {
        _T("CMT"),
+#if defined(USE_SOUND_FILES)
+       _T("CMT Relay"),
+#endif
 };
 #endif
 
index 4712e89..20faed1 100644 (file)
@@ -272,8 +272,22 @@ void IO::write_io8(uint32_t addr, uint32_t data)
                        lcd_addr = (lcd_addr & 0xff00) | data;
                        break;
                case 0x10:
-                       cmt_selected = ((data & 2) == 0);
-                       d_drec->write_signal(SIG_DATAREC_REMOTE, CMT_MODE_PLAY ? 1 : 0, 1);
+
+                       {
+                               bool cmt_selected_old = cmt_selected;; 
+                               cmt_selected = ((data & 2) == 0);
+                               bool tmp_val = (CMT_PLAYING || CMT_RECORDING);
+                               d_drec->write_signal(SIG_DATAREC_REMOTE, tmp_val ? 1 : 0, 1);
+#if defined(USE_SOUND_FILES)
+                               if(cmt_selected != cmt_selected_old) {
+                                       if(tmp_val) {
+                                               d_drec->write_signal(SIG_SOUNDER_ADD + DATAREC_SNDFILE_PLAY, 1, 1);
+                                       } else {
+                                               d_drec->write_signal(SIG_SOUNDER_ADD + DATAREC_SNDFILE_STOP, 1, 1);
+                                       }
+                               }
+#endif
+                       }
                        break;
                case 0x21:
                        key_column = data & 0x0f;
@@ -297,8 +311,21 @@ void IO::write_io8(uint32_t addr, uint32_t data)
                        }
                        break;
                case 0x43:
-                       cmt_mode = data & 7;
-                       d_drec->write_signal(SIG_DATAREC_REMOTE, CMT_MODE_PLAY ? 1 : 0, 1);
+                       {
+                               uint8_t cmt_mode_old = cmt_mode & 7;
+                               cmt_mode = data & 7;
+                               int tmp_val = (CMT_PLAYING || CMT_RECORDING);
+                               d_drec->write_signal(SIG_DATAREC_REMOTE, tmp_val ? 1 : 0, 1);
+#if defined(USE_SOUND_FILES)
+                               if(cmt_mode_old != cmt_mode) {
+                                       if(tmp_val) {
+                                               d_drec->write_signal(SIG_SOUNDER_ADD + DATAREC_SNDFILE_PLAY, 1, 1);
+                                       } else {
+                                               d_drec->write_signal(SIG_SOUNDER_ADD + DATAREC_SNDFILE_STOP, 1, 1);
+                                       }
+                               }
+#endif
+                       }
                        break;
                }
        } else {