OSDN Git Service

[VM][STATE] Use namespace {VMNAME} to separate per VMs.
[csp-qt/common_source_project-fm7.git] / source / src / vm / pc6001 / timer.cpp
index 3ac7f87..e455d77 100644 (file)
 
 #include "timer.h"
 #ifndef _PC6001
-#include "memory.h"
+#include "./memory.h"
 #endif
 
 #define EVENT_TIMER    0
 
+namespace PC6001 {
+
 void TIMER::initialize()
 {
 #if defined(_PC6601SR) || defined(_PC6001MK2SR)
@@ -46,7 +48,7 @@ void TIMER::reset()
 }
 
 #ifndef _PC6001
-void TIMER::write_io8(uint32 addr, uint32 data)
+void TIMER::write_io8(uint32_t addr, uint32_t data)
 {
        switch(addr & 0xff) {
 #if defined(_PC6601SR) || defined(_PC6001MK2SR)
@@ -88,7 +90,7 @@ void TIMER::write_io8(uint32 addr, uint32 data)
        }
 }
 
-uint32 TIMER::read_io8(uint32 addr)
+uint32_t TIMER::read_io8(uint32_t addr)
 {
        switch(addr & 0xff) {
 #if defined(_PC6601SR) || defined(_PC6001MK2SR)
@@ -133,7 +135,7 @@ void TIMER::event_callback(int event_id, int err)
                register_event(this, EVENT_TIMER, 2000.0, false, &timer_id);
 #else
 #if defined(_PC6601SR) || defined(_PC6001MK2SR)
-               if(vm->sr_mode) {
+               if(static_cast<VM *>(vm)->sr_mode) {
                        register_event(this, EVENT_TIMER, 2000.0 * (portF6 + 1) / 0x80, false, &timer_id);
                } else
 #endif
@@ -142,7 +144,7 @@ void TIMER::event_callback(int event_id, int err)
        }
 }
 
-void TIMER::set_portB0(uint32 data)
+void TIMER::set_portB0(uint32_t data)
 {
        if(data & 1) {
                // stop
@@ -158,7 +160,7 @@ void TIMER::set_portB0(uint32 data)
                        register_event(this, EVENT_TIMER, 1000.0, false, &timer_id);
 #else
 #if defined(_PC6601SR) || defined(_PC6001MK2SR)
-                       if(vm->sr_mode) {
+                       if(static_cast<VM *>(vm)->sr_mode) {
                                register_event(this, EVENT_TIMER, 2000.0 * (portF6 + 1) / 0x80, false, &timer_id);
                        } else
 #endif
@@ -168,7 +170,7 @@ void TIMER::set_portB0(uint32 data)
        }
 }
 
-void TIMER::write_signal(int id, uint32 data, uint32 mask)
+void TIMER::write_signal(int id, uint32_t data, uint32_t mask)
 {
        if(data & mask) {
                IRQ |= (1 << id);
@@ -178,10 +180,10 @@ void TIMER::write_signal(int id, uint32 data, uint32 mask)
        update_intr();
 }
 
-uint32 TIMER::intr_ack()
+uint32_t TIMER::get_intr_ack()
 {
 #if defined(_PC6601SR) || defined(_PC6001MK2SR)
-       if(vm->sr_mode) {
+       if(static_cast<VM *>(vm)->sr_mode) {
                for(int i = 0, bit = 1; i < 8; i++, bit <<= 1) {
                        if(NewIRQ & bit) {
                                if(portFB & bit) {
@@ -200,7 +202,7 @@ uint32 TIMER::intr_ack()
                        return portF4;
                }
 #endif
-               return d_sub->intr_ack();
+               return d_sub->get_intr_ack();
        }
 #ifndef _PC6001
        else if(NewIRQ & 0x02) {        // Joystick
@@ -244,7 +246,7 @@ uint32 TIMER::intr_ack()
        return 0x06;    // dummy
 }
 
-void TIMER::intr_reti()
+void TIMER::notify_intr_reti()
 {
        update_intr();
 }
@@ -256,7 +258,7 @@ void TIMER::update_intr()
        NewIRQ &= 0x05; // Only Sub-CPU and Timer
 #else
 #if defined(_PC6601SR) || defined(_PC6001MK2SR)
-       if(vm->sr_mode) {
+       if(static_cast<VM *>(vm)->sr_mode) {
                NewIRQ &= ~portFA;
        } else
 #endif
@@ -279,3 +281,33 @@ void TIMER::update_intr()
        }
 }
 
+#define STATE_VERSION  1
+
+bool TIMER::process_state(FILEIO* state_fio, bool loading)
+{
+       if(!state_fio->StateCheckUint32(STATE_VERSION)) {
+               return false;
+       }
+       if(!state_fio->StateCheckInt32(this_device_id)) {
+               return false;
+       }
+       state_fio->StateUint8(IRQ);
+       state_fio->StateUint8(NewIRQ);
+       state_fio->StateInt32(timer_id);
+#ifndef _PC6001
+#if defined(_PC6601SR) || defined(_PC6001MK2SR)
+       state_fio->StateBuffer(sr_vectors, sizeof(sr_vectors), 1);
+       state_fio->StateUint8(portFA);
+       state_fio->StateUint8(portFB);
+#endif
+       state_fio->StateUint8(portF3);
+       state_fio->StateUint8(portF4);
+       state_fio->StateUint8(portF5);
+       state_fio->StateUint8(portF6);
+       state_fio->StateUint8(portF7);
+#endif
+       return true;
+}
+
+}
+