OSDN Git Service

[VM] Add PC-8001/mk2/8801/mk2.
[csp-qt/common_source_project-fm7.git] / source / src / vm / pcm1bit.cpp
index 6c17da9..645aa34 100644 (file)
 
 void PCM1BIT::initialize()
 {
+       DEVICE::initialize();
        signal = false;
        on = true;
        mute = false;
+       realtime = false;
        changed = 0;
        last_vol_l = last_vol_r = 0;
        
@@ -31,6 +33,7 @@ void PCM1BIT::write_signal(int id, uint32_t data, uint32_t mask)
        if(id == SIG_PCM1BIT_SIGNAL) {
                bool next = ((data & mask) != 0);
                if(signal != next) {
+                       touch_sound();
                        if(signal) {
                                positive_clocks += get_passed_clock(prev_clock);
                        } else {
@@ -44,11 +47,11 @@ void PCM1BIT::write_signal(int id, uint32_t data, uint32_t mask)
        } else if(id == SIG_PCM1BIT_ON) {
                touch_sound();
                on = ((data & mask) != 0);
-               set_realtime_render(on & !mute);
+               set_realtime_render(this, on & !mute);
        } else if(id == SIG_PCM1BIT_MUTE) {
                touch_sound();
                mute = ((data & mask) != 0);
-               set_realtime_render(on & !mute);
+               set_realtime_render(this, on & !mute);
        }
 }
 
@@ -110,42 +113,30 @@ void PCM1BIT::initialize_sound(int rate, int volume)
        max_vol = volume;
 }
 
-#define STATE_VERSION  2
+#define STATE_VERSION  3
 
-void PCM1BIT::save_state(FILEIO* state_fio)
+bool PCM1BIT::process_state(FILEIO* state_fio, bool loading)
 {
-       state_fio->FputUint32(STATE_VERSION);
-       state_fio->FputInt32(this_device_id);
-       
-       state_fio->FputBool(signal);
-       state_fio->FputBool(on);
-       state_fio->FputBool(mute);
-       state_fio->FputInt32(changed);
-       state_fio->FputUint32(prev_clock);
-       state_fio->FputInt32(positive_clocks);
-       state_fio->FputInt32(negative_clocks);
-}
-
-bool PCM1BIT::load_state(FILEIO* state_fio)
-{
-       if(state_fio->FgetUint32() != STATE_VERSION) {
-               return false;
+       if(!state_fio->StateCheckUint32(STATE_VERSION)) {
+               return false;
+       }
+       if(!state_fio->StateCheckInt32(this_device_id)) {
+               return false;
+       }
+       state_fio->StateValue(signal);
+       state_fio->StateValue(on);
+       state_fio->StateValue(mute);
+       state_fio->StateValue(realtime);
+       state_fio->StateValue(changed);
+       state_fio->StateValue(prev_clock);
+       state_fio->StateValue(positive_clocks);
+       state_fio->StateValue(negative_clocks);
+       
+       // post process
+       if(loading) {
+               last_vol_l = last_vol_r = 0;
+               set_realtime_render(this, on & !mute);
+               //touch_sound();
        }
-       if(state_fio->FgetInt32() != this_device_id) {
-               return false;
-       }
-       signal = state_fio->FgetBool();
-       on = state_fio->FgetBool();
-       mute = state_fio->FgetBool();
-       changed = state_fio->FgetInt32();
-       prev_clock = state_fio->FgetUint32();
-       positive_clocks = state_fio->FgetInt32();
-       negative_clocks = state_fio->FgetInt32();
-       
-       // post process
-       last_vol_l = last_vol_r = 0;
-       //touch_sound();
-       set_realtime_render(on & !mute);
-       return true;
+       return true;
 }
-