X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=source%2Fsrc%2Fvm%2Fbmjr%2Fbmjr.cpp;h=42f5b61d662414e56cc4c508aeb2f5019717b87d;hb=75c44472a1250625fba8d2835934e592cabb5a14;hp=5a25826bc234cbf64d7b92b162fa4d1d439741f4;hpb=ef7e2d55278936e3e2a6fea6440dd46a783137b6;p=csp-qt%2Fcommon_source_project-fm7.git diff --git a/source/src/vm/bmjr/bmjr.cpp b/source/src/vm/bmjr/bmjr.cpp index 5a25826bc..42f5b61d6 100644 --- a/source/src/vm/bmjr/bmjr.cpp +++ b/source/src/vm/bmjr/bmjr.cpp @@ -15,6 +15,7 @@ #include "../datarec.h" #include "../mc6800.h" #include "../mc6820.h" +#include "../noise.h" #ifdef USE_DEBUGGER #include "../debugger.h" @@ -26,7 +27,7 @@ // initialize // ---------------------------------------------------------------------------- -VM::VM(EMU* parent_emu) : emu(parent_emu) +VM::VM(EMU* parent_emu) : VM_TEMPLATE(parent_emu) { // create devices first_device = last_device = NULL; @@ -34,15 +35,25 @@ VM::VM(EMU* parent_emu) : emu(parent_emu) event = new EVENT(this, emu); // must be 2nd device drec = new DATAREC(this, emu); + drec->set_context_noise_play(new NOISE(this, emu)); + drec->set_context_noise_stop(new NOISE(this, emu)); + drec->set_context_noise_fast(new NOISE(this, emu)); cpu = new MC6800(this, emu); pia = new MC6820(this, emu); memory = new MEMORY(this, emu); + // Set names +#if defined(_USE_QT) + dummy->set_device_name(_T("1st Dummy")); +#endif // set contexts event->set_context_cpu(cpu); event->set_context_sound(drec); event->set_context_sound(memory); + event->set_context_sound(drec->get_context_noise_play()); + event->set_context_sound(drec->get_context_noise_stop()); + event->set_context_sound(drec->get_context_noise_fast()); drec->set_context_ear(memory, SIG_MEMORY_DATAREC_EAR, 1); @@ -60,6 +71,7 @@ VM::VM(EMU* parent_emu) : emu(parent_emu) for(DEVICE* device = first_device; device; device = device->next_device) { device->initialize(); } + decl_state(); } VM::~VM() @@ -146,7 +158,7 @@ void VM::initialize_sound(int rate, int samples) event->initialize_sound(rate, samples); } -uint16* VM::create_sound(int* extra_frames) +uint16_t* VM::create_sound(int* extra_frames) { return event->create_sound(extra_frames); } @@ -163,7 +175,11 @@ void VM::set_sound_device_volume(int ch, int decibel_l, int decibel_r) memory->set_volume(0, decibel_l, decibel_r); } else if(ch == 1) { drec->set_volume(0, decibel_l, decibel_r); - } + } else if(ch == 2) { + drec->get_context_noise_play()->set_volume(0, decibel_l, decibel_r); + drec->get_context_noise_stop()->set_volume(0, decibel_l, decibel_r); + drec->get_context_noise_fast()->set_volume(0, decibel_l, decibel_r); + } } #endif @@ -186,62 +202,69 @@ void VM::key_up(int code) // user interface // ---------------------------------------------------------------------------- -void VM::play_tape(const _TCHAR* file_path) +void VM::play_tape(int drv, const _TCHAR* file_path) { drec->play_tape(file_path); - push_play(); +// drec->set_remote(true); } -void VM::rec_tape(const _TCHAR* file_path) +void VM::rec_tape(int drv, const _TCHAR* file_path) { drec->rec_tape(file_path); - push_play(); +// drec->set_remote(true); } -void VM::close_tape() +void VM::close_tape(int drv) { - push_stop(); + emu->lock_vm(); drec->close_tape(); + emu->unlock_vm(); +// drec->set_remote(false); } -bool VM::is_tape_inserted() +bool VM::is_tape_inserted(int drv) { return drec->is_tape_inserted(); } -bool VM::is_tape_playing() +bool VM::is_tape_playing(int drv) { return drec->is_tape_playing(); } -bool VM::is_tape_recording() +bool VM::is_tape_recording(int drv) { return drec->is_tape_recording(); } -int VM::get_tape_position() +int VM::get_tape_position(int drv) { return drec->get_tape_position(); } -void VM::push_play() +const _TCHAR* VM::get_tape_message(int drv) +{ + return drec->get_message(); +} + +void VM::push_play(int drv) { drec->set_ff_rew(0); drec->set_remote(true); } -void VM::push_stop() +void VM::push_stop(int drv) { drec->set_remote(false); } -void VM::push_fast_forward() +void VM::push_fast_forward(int drv) { drec->set_ff_rew(1); drec->set_remote(true); } -void VM::push_fast_rewind() +void VM::push_fast_rewind(int drv) { drec->set_ff_rew(-1); drec->set_remote(true); @@ -259,12 +282,27 @@ void VM::update_config() } } -#define STATE_VERSION 1 +#define STATE_VERSION 3 + +#include "../../statesub.h" +#include "../../qt/gui/csp_logger.h" +extern CSP_Logger DLL_PREFIX_I *csp_logger; + +void VM::decl_state(void) +{ + state_entry = new csp_state_utils(STATE_VERSION, 0, (_TCHAR *)(_T("CSP::BASIC_MASTER_HEAD")), csp_logger); + for(DEVICE* device = first_device; device; device = device->next_device) { + device->decl_state(); + } +} void VM::save_state(FILEIO* state_fio) { - state_fio->FputUint32(STATE_VERSION); + //state_fio->FputUint32(STATE_VERSION); + if(state_entry != NULL) { + state_entry->save_state(state_fio); + } for(DEVICE* device = first_device; device; device = device->next_device) { device->save_state(state_fio); } @@ -272,7 +310,15 @@ void VM::save_state(FILEIO* state_fio) bool VM::load_state(FILEIO* state_fio) { - if(state_fio->FgetUint32() != STATE_VERSION) { + //if(state_fio->FgetUint32() != STATE_VERSION) { + // return false; + //} + bool mb = false; + if(state_entry != NULL) { + mb = state_entry->load_state(state_fio); + } + if(!mb) { + emu->out_debug_log("INFO: HEADER DATA ERROR"); return false; } for(DEVICE* device = first_device; device; device = device->next_device) {