#include <wx/dir.h>
#include <wx/sound.h>
#include <wx/fileconf.h>
+#include <wx/filename.h>
+#include <cassert>
#include <cstdarg>
#include "type.h"
#include "anago_gui.h"
wxMutexGuiEnter();
g->SetValue(value);
- l->SetLabel(str);
+ if(label != NULL){
+ l->SetLabel(str);
+ }
wxMutexGuiLeave();
}
//---- script execute thread ----
class anago_frame;
-class anago_panel_dump;
+//class anago_panel_dump;
class anago_panel_program;
class anago_dumper : public wxThread
{
private:
- anago_panel_dump *m_frame;
- struct dump_config m_config;
+ wxWindow *const m_frame;
+ wxTextCtrl *const m_log;
const wxSound m_sound_success, m_sound_fail;
+ RomDb *const m_romdb;
+
+ struct dump_config m_config;
protected:
- void *Entry(void);
+ void *Entry(void)
+ {
+ try{
+ bool r;
+ switch(m_config.mode){
+ case MODE_ROM_DUMP:
+ r = script_dump_execute(&m_config);
+ break;
+ case MODE_RAM_READ: case MODE_RAM_WRITE:
+ r = script_workram_execute(&m_config);
+ break;
+ default:
+ assert(0);
+ break;
+ }
+ if(r == true && m_sound_success.IsOk() == true){
+ m_sound_success.Play();
+ }
+ }catch(const wxChar *t){
+ if(m_sound_fail.IsOk() == true){
+ m_sound_fail.Play();
+ }
+ *m_log << t;
+ }
+ if(m_romdb != NULL){
+ m_romdb->Search(m_config.crc, m_log);
+ }
+ m_frame->Enable();
+ return NULL;
+ }
void OnExit()
{
delete [] m_config.script;
delete [] m_config.target;
}
public:
- anago_dumper(anago_panel_dump *f, const struct dump_config *d, wxString sound_success, wxString sound_fail)
- : wxThread(), m_sound_success(sound_success), m_sound_fail(sound_fail)
+ anago_dumper(wxWindow *f, const struct dump_config *d, wxTextCtrl *log, wxString sound_success, wxString sound_fail, RomDb *db = NULL)
+ : wxThread(), m_frame(f), m_log(log),
+ m_sound_success(sound_success), m_sound_fail(sound_fail),
+ m_romdb(db)
{
- m_frame = f;
m_config = *d; //struct data copy
}
};
class anago_programmer : public wxThread
{
private:
- anago_panel_program *m_frame;
+ wxWindow *const m_frame;
+ wxTextCtrl *const m_log;
struct program_config m_config;
const wxSound m_sound_success, m_sound_fail;
protected:
- void *Entry(void);
+ void *Entry(void)
+ {
+ try{
+ if(script_program_execute(&m_config) == true){
+ if(m_sound_success.IsOk() == true){
+ m_sound_success.Play();
+ }
+ }
+ }catch(const wxChar *t){
+ if(m_sound_fail.IsOk() == true){
+ m_sound_fail.Play();
+ }
+ *m_log << t;
+ }
+ m_frame->Enable();
+ return NULL;
+ }
+
void OnExit()
{
delete [] m_config.script;
delete [] m_config.target;
}
public:
- anago_programmer(anago_panel_program *f, const struct program_config *d, wxString sound_success, wxString sound_fail)
- : wxThread(), m_sound_success(sound_success), m_sound_fail(sound_fail)
+ anago_programmer(wxWindow *f, wxTextCtrl *log, const struct program_config *d, wxString sound_success, wxString sound_fail)
+ : wxThread(), m_frame(f), m_log(log),
+ m_sound_success(sound_success), m_sound_fail(sound_fail)
{
- m_frame = f;
m_config = *d;
}
};
-static void script_choice_init(wxControlWithItems *c, wxString filespec, wxTextCtrl *log)
+static void script_choice_init(wxControlWithItems *c, wxArrayString filespec, wxTextCtrl *log)
{
wxDir dir(wxGetCwd());
- wxString filename;
wxArrayString ar;
c->Clear();
if ( !dir.IsOpened() ){
return;
}
- bool cont = dir.GetFirst(&filename, filespec, wxDIR_FILES);
- while ( cont ){
- ar.Add(filename);
- cont = dir.GetNext(&filename);
+ for(size_t i = 0; i < filespec.GetCount(); i++){
+ wxString filename;
+ bool cont = dir.GetFirst(&filename, filespec[i], wxDIR_FILES);
+ while ( cont ){
+ ar.Add(filename);
+ cont = dir.GetNext(&filename);
+ }
}
if(ar.GetCount() == 0){
- *log << wxT("warning: ") << filespec << wxT(" script not found.\n");
+ *log << wxT("warning: ");
+ for(size_t i = 0; i < filespec.GetCount(); i++){
+ *log << filespec[i] << wxT(" ");
+ }
+ *log << wxT("script not found.\n");
}else{
ar.Sort(false);
for(size_t i = 0; i < ar.GetCount(); i++){
}
}
-void gauge_init(struct gauge *t)
+static void script_choice_init(wxControlWithItems *c, wxString filespec, wxTextCtrl *log)
+{
+ wxArrayString spec;
+ spec.Add(filespec);
+ script_choice_init(c, spec, log);
+}
+
+static void gauge_init(struct gauge *t)
{
t->label_set = label_set;
t->range_set = range_set;
{
private:
wxThread *m_anago_thread;
- wxTextCtrl *m_log;
- const struct reader_driver *m_reader;
- wxString m_dump_sound_success, m_dump_sound_fail;
+ const struct reader_driver *const m_reader;
+ enum anago_status *const m_status;
+ wxTextCtrl *const m_log;
+ wxString m_sound_success, m_sound_fail;
+ wxString m_database;
RomDb *m_romdb;
- enum anago_status m_status;
- void dump_increase_init(wxControlWithItems *c)
+ void increase_init(wxControlWithItems *c)
{
c->Clear();
c->Append(wxT("x1"));
c->Append(wxT("x4"));
c->Select(0);
}
- int dump_increase_get(wxControlWithItems *c)
+ int increase_get(wxControlWithItems *c)
{
switch(c->GetSelection()){
case 0: return 1;
}
return 1;
}
- void dump_execute(void)
+ void execute(void)
{
struct dump_config config;
config.mode = MODE_ROM_DUMP;
- config.cpu.gauge.bar = m_dump_cpu_gauge;
- config.cpu.gauge.label = m_dump_cpu_value;
+ config.cpu.gauge.bar = m_cpu_gauge;
+ config.cpu.gauge.label = m_cpu_value;
gauge_init(&config.cpu.gauge);
- config.ppu.gauge.bar = m_dump_ppu_gauge;
- config.ppu.gauge.label = m_dump_ppu_value;
+ config.ppu.gauge.bar = m_ppu_gauge;
+ config.ppu.gauge.label = m_ppu_value;
gauge_init(&config.ppu.gauge);
config.log.object = m_log;
config.log.append = text_append;
config.log.append_va = text_append_va;
config.except = throw_error;
- config.cpu.increase = dump_increase_get(m_dump_cpu_increase);
- config.ppu.increase = dump_increase_get(m_dump_ppu_increase);
+ config.cpu.increase = increase_get(m_cpu_increase);
+ config.ppu.increase = increase_get(m_ppu_increase);
config.progress = true;
- config.battery = m_dump_check_battery->GetValue();
+ config.battery = m_check_battery->GetValue();
{
- wxString str_script = m_dump_script_choice->GetStringSelection();
+ wxString str_script = m_script_choice->GetStringSelection();
wxChar *t = new wxChar[str_script.Length() + 1];
config.script = t;
STRNCPY(t, str_script.fn_str(), str_script.Length() + 1);
{
wxString str;
config.mappernum = -1;
- if(m_dump_check_forcemapper->GetValue() == true){
- str = m_dump_text_forcemapper->GetValue();
+ if(m_check_forcemapper->GetValue() == true){
+ str = m_text_forcemapper->GetValue();
if(str.ToLong(&config.mappernum) == false){
*m_log << wxT("bad mapper number\n");
return;
}
{
- wxTextCtrl *text = m_dump_romimage_picker->GetTextCtrl();
+ wxTextCtrl *text = m_romimage_picker->GetTextCtrl();
wxString str_rom = text->GetValue();
wxChar *t = new wxChar[str_rom.Length() + 1];
if(text->IsEmpty() == true){
config.cpu.access = &m_reader->cpu;
config.ppu.access = &m_reader->ppu;
- m_dump_script_choice->Disable();
- m_dump_romimage_picker->Disable();
- m_dump_check_battery->Disable();
- m_dump_check_forcemapper->Disable();
- m_dump_button->SetLabel(wxT("cancel"));
- m_dump_text_forcemapper->Disable();
- m_dump_cpu_increase->Disable();
- m_dump_ppu_increase->Disable();
+ this->Disable();
/* if(m_anago_thread != NULL){ //???
delete m_anago_thread;
}*/
- m_anago_thread = new anago_dumper(this, &config, m_dump_sound_success, m_dump_sound_fail);
+ m_anago_thread = new anago_dumper(this, &config, m_log, m_sound_success, m_sound_fail, m_romdb);
if(m_anago_thread->Create() != wxTHREAD_NO_ERROR){
*m_log << wxT("thread creating error");
}else if(m_anago_thread->Run() != wxTHREAD_NO_ERROR){
*m_log << wxT("thread running error");
}else{
-// m_status = STATUS_DUMPPING;
+ *m_status = STATUS_DUMPPING;
}
}
protected:
- void dump_button_click(wxCommandEvent& event)
+ void button_click(wxCommandEvent& event)
{
- switch(m_status){
+ switch(*m_status){
case STATUS_IDLE:
- this->dump_execute();
+ this->execute();
break;
case STATUS_DUMPPING:
m_anago_thread->Kill();
- this->DumpThreadFinish();
- m_status = STATUS_IDLE;
+ this->Enable();
break;
default: //do nothing
break;
void mapper_change_check(wxCommandEvent& event)
{
- if(m_dump_check_forcemapper->GetValue() == true){
- m_dump_text_forcemapper->Enable();
+ if(m_check_forcemapper->GetValue() == true){
+ m_text_forcemapper->Enable();
}else{
- m_dump_text_forcemapper->Disable();
+ m_text_forcemapper->Disable();
}
}
+
public:
- anago_panel_dump(wxWindow *p, const struct reader_driver *r, wxFileConfig *config, wxTextCtrl *log) : panel_dump(p), m_status(STATUS_IDLE)
+ anago_panel_dump(wxNotebook *p, const struct reader_driver *r, enum anago_status *status, wxFileConfig *config, wxTextCtrl *log)
+ : panel_dump(p), m_reader(r), m_status(status), m_log(log)
{
- m_reader = r;
- m_log = log;
- m_romdb = new RomDb(wxT("NesCarts (2010-02-08).xml"));
- m_romdb->Generate();
-
- config->Read(wxT("dump.sound.success"), &m_dump_sound_success, wxT("tinkalink2.wav"));
- config->Read(wxT("dump.sound.fail"), &m_dump_sound_fail, wxT("doggrowl.wav"));
+ config->Read(wxT("dump.database"), &m_database, wxT("NesCarts (2010-02-08).xml"));
+ if(wxFileName::FileExists(m_database) == true){
+ m_romdb = new RomDb(m_database);
+ m_romdb->Generate();
+ }else{
+ *log << wxT("m_database not found\n");
+ m_romdb = new RomDb();
+ }
- script_choice_init(m_dump_script_choice, wxT("*.ad"), log);
- this->dump_increase_init(m_dump_cpu_increase);
- m_dump_cpu_increase->Append(wxT("Auto"));
- m_dump_cpu_increase->Select(3);
- this->dump_increase_init(m_dump_ppu_increase);
+ config->Read(wxT("dump.sound.success"), &m_sound_success, wxT("tinkalink2.wav"));
+ config->Read(wxT("dump.sound.fail"), &m_sound_fail, wxT("doggrowl.wav"));
+
+ wxArrayString ar;
+ ar.Add(wxT("*.ad"));
+ ar.Add(wxT("*.ae"));
+ script_choice_init(m_script_choice, ar, log);
+ this->increase_init(m_cpu_increase);
+ m_cpu_increase->Append(wxT("Auto"));
+ m_cpu_increase->Select(3);
+ this->increase_init(m_ppu_increase);
if(DEBUG==1){
- m_dump_romimage_picker->GetTextCtrl()->SetLabel(wxT("t.nes"));
+ m_romimage_picker->GetTextCtrl()->SetLabel(wxT("t.nes"));
}
}
- void DumpThreadFinish(unsigned long crc)
+ virtual ~anago_panel_dump(void)
{
- m_romdb->Search(crc, m_log);
- this->DumpThreadFinish();
+ delete m_romdb;
}
- void DumpThreadFinish(void)
+ bool Enable(bool t = true)
{
- m_dump_script_choice->Enable();
- m_dump_script_choice->SetFocus();
- m_dump_romimage_picker->Enable();
- m_dump_check_battery->Enable();
- m_dump_check_forcemapper->Enable();
- m_dump_cpu_increase->Enable();
- m_dump_ppu_increase->Enable();
- m_dump_button->SetLabel(wxT("&dump"));
- if(m_dump_check_forcemapper->GetValue() == true){
- m_dump_text_forcemapper->Enable();
+ m_script_choice->Enable(t);
+ m_romimage_picker->Enable(t);
+ m_check_battery->Enable(t);
+ m_check_forcemapper->Enable(t);
+ m_cpu_increase->Enable(t);
+ m_ppu_increase->Enable(t);
+ if(t == true){
+ *m_status = STATUS_IDLE;
+ m_button->SetLabel(wxT("&dump"));
+ if(m_check_forcemapper->GetValue() == true){
+ m_text_forcemapper->Enable();
+ }
+ }else{
+ m_button->SetLabel(wxT("cancel"));
+ m_check_forcemapper->Disable();
}
- m_status = STATUS_IDLE;
+ m_button->SetFocus();
+ return true;
}
- void LogAppend(const wxChar *t)
+ bool Disable(void)
{
- *m_log << t;
+ return this->Enable(false);
}
};
-void *anago_dumper::Entry(void)
-{
- try{
- if(script_dump_execute(&m_config) == true){
- if(m_sound_success.IsOk() == true){
- m_sound_success.Play();
- }
- }
- }catch(const wxChar *t){
- if(m_sound_fail.IsOk() == true){
- m_sound_fail.Play();
- }
- m_frame->LogAppend(t);
- }
- m_frame->DumpThreadFinish(m_config.crc);
- return NULL;
-}
-
class anago_panel_program : public panel_program
{
private:
wxThread *m_anago_thread;
- const struct reader_driver *m_reader;
- wxString m_program_sound_success, m_program_sound_fail;
- enum anago_status m_status;
- wxTextCtrl *m_log;
- void program_padding_init(wxControlWithItems *c)
+ const struct reader_driver *const m_reader;
+ wxString m_sound_success, m_sound_fail;
+ enum anago_status *const m_status;
+ wxTextCtrl *const m_log;
+
+ void padding_init(wxControlWithItems *c)
{
c->Clear();
c->Append(wxT("full"));
c->Append(wxT("empty"));
c->Select(0);
}
- bool program_rom_set(wxString device, int trans, struct memory *m, struct flash_device *f)
+ bool rom_set(wxString device, int trans, struct memory *m, struct flash_device *f)
{
m->offset = 0;
if(flash_device_get(device, f) == false){
return true;
}
- void program_execute(void)
+ void execute(void)
{
struct program_config f;
- f.cpu.gauge.bar = m_program_cpu_gauge;
- f.cpu.gauge.label = m_program_cpu_value;
+ f.cpu.gauge.bar = m_cpu_gauge;
+ f.cpu.gauge.label = m_cpu_value;
gauge_init(&f.cpu.gauge);
- f.ppu.gauge.bar = m_program_ppu_gauge;
- f.ppu.gauge.label = m_program_ppu_value;
+ f.ppu.gauge.bar = m_ppu_gauge;
+ f.ppu.gauge.label = m_ppu_value;
gauge_init(&f.ppu.gauge);
f.log.object = m_log;
f.except = throw_error;
{
- wxString str_script = m_program_script_choice->GetStringSelection();
+ wxString str_script = m_script_choice->GetStringSelection();
wxChar *t = new wxChar[str_script.Length() + 1];
STRNCPY(t, str_script.fn_str(), str_script.Length() + 1);
f.script = t;
}
{
- wxTextCtrl *text = m_program_romimage_picker->GetTextCtrl();
+ wxTextCtrl *text = m_romimage_picker->GetTextCtrl();
wxString str_rom = text->GetValue();
if(text->IsEmpty() == true){
*m_log << wxT("Enter filename to ROM image\n");
STRNCPY(t, str_rom.fn_str(), str_rom.Length() + 1);
f.target = t;
}
- f.compare = m_program_compare->GetValue();
+ f.compare = m_compare->GetValue();
f.testrun = false;
- if(program_rom_set(
- m_program_cpu_device->GetStringSelection(),
- m_program_cpu_padding->GetSelection(),
+ if(rom_set(
+ m_cpu_device->GetStringSelection(),
+ m_cpu_padding->GetSelection(),
&f.cpu.memory, &f.cpu.flash
) == false){
return;
}
- if(program_rom_set(
- m_program_ppu_device->GetStringSelection(),
- m_program_ppu_padding->GetSelection(),
+ if(rom_set(
+ m_ppu_device->GetStringSelection(),
+ m_ppu_padding->GetSelection(),
&f.ppu.memory, &f.ppu.flash
) == false){
return;
f.cpu.access = &m_reader->cpu;
f.ppu.access = &m_reader->ppu;
- m_program_script_choice->Disable();
- m_program_romimage_picker->Disable();
- m_program_compare->Disable();
- m_program_button->SetLabel(wxT("cancel"));
- m_program_cpu_padding->Disable();
- m_program_cpu_device->Disable();
- m_program_ppu_padding->Disable();
- m_program_ppu_device->Disable();
- m_program_compare->Disable();
-
- m_anago_thread = new anago_programmer(this, &f, m_program_sound_success, m_program_sound_fail);
+ this->Disable();
+
+ m_anago_thread = new anago_programmer(this, m_log, &f, m_sound_success, m_sound_fail);
if(m_anago_thread->Create() != wxTHREAD_NO_ERROR){
*m_log << wxT("thread creating error");
}else if(m_anago_thread->Run() != wxTHREAD_NO_ERROR){
*m_log << wxT("thread running error");
}else{
- m_status = STATUS_PROGRAMMING;
+ *m_status = STATUS_PROGRAMMING;
}
}
- void program_device_load(wxControlWithItems *choice, wxFileConfig *c, wxString key)
+ void device_load(wxControlWithItems *choice, wxFileConfig *c, wxString key)
{
wxString device;
int val;
}
}
protected:
- void program_button_click(wxCommandEvent& event)
+ void button_click(wxCommandEvent& event)
{
- switch(m_status){
+ switch(*m_status){
case STATUS_IDLE:
- this->program_execute();
+ this->execute();
break;
case STATUS_PROGRAMMING:
m_anago_thread->Kill();
- this->ProgramThreadFinish();
- m_status = STATUS_IDLE;
+ this->Enable();
break;
default: //do nothing
break;
}
}
public:
- anago_panel_program(wxWindow *p, const struct reader_driver *r, wxFileConfig *config, wxTextCtrl *log) : panel_program(p), m_status(STATUS_IDLE)
+ anago_panel_program(wxNotebook *p, const struct reader_driver *r, enum anago_status *status, wxFileConfig *config, wxTextCtrl *log)
+ : panel_program(p), m_reader(r), m_status(status), m_log(log)
{
- m_reader = r;
- m_log = log;
- config->Read(wxT("program.sound.success"), &m_program_sound_success, wxT("cuckoo.wav"));
- config->Read(wxT("program.sound.fail"), &m_program_sound_fail, wxT("doggrowl.wav"));
- script_choice_init(m_program_script_choice, wxT("*.af"), m_log);
+ config->Read(wxT("program.sound.success"), &m_sound_success, wxT("cuckoo.wav"));
+ config->Read(wxT("program.sound.fail"), &m_sound_fail, wxT("doggrowl.wav"));
+ script_choice_init(m_script_choice, wxT("*.af"), m_log);
{
struct flash_listup list;
- list.obj_cpu = m_program_cpu_device;
- list.obj_ppu = m_program_ppu_device;
+ list.obj_cpu = m_cpu_device;
+ list.obj_ppu = m_ppu_device;
list.append = choice_append;
flash_device_listup(&list);
}
- if(m_program_cpu_device->GetCount() == 0){
+ if(m_cpu_device->GetCount() == 0){
*m_log << wxT("warning: flash device parameter not found\n");
}else{
- program_device_load(m_program_cpu_device, config, wxT("program.cpu.device"));
- program_device_load(m_program_ppu_device, config, wxT("program.ppu.device"));
+ device_load(m_cpu_device, config, wxT("program.cpu.device"));
+ device_load(m_ppu_device, config, wxT("program.ppu.device"));
}
- this->program_padding_init(m_program_cpu_padding);
- this->program_padding_init(m_program_ppu_padding);
+ this->padding_init(m_cpu_padding);
+ this->padding_init(m_ppu_padding);
m_anago_thread = NULL;
- m_status = STATUS_IDLE;
}
- void ProgramThreadFinish(void)
+ bool Enable(bool t = true)
{
- m_program_script_choice->Enable();
- m_program_romimage_picker->Enable();
- m_program_compare->Enable();
- m_program_button->SetLabel(wxT("&program"));
- m_program_cpu_padding->Enable();
- m_program_cpu_device->Enable();
- m_program_ppu_padding->Enable();
- m_program_ppu_device->Enable();
- m_status = STATUS_IDLE;
+ m_script_choice->Enable(t);
+ m_romimage_picker->Enable(t);
+ m_compare->Enable(t);
+ m_cpu_padding->Enable(t);
+ m_cpu_device->Enable(t);
+ m_ppu_padding->Enable(t);
+ m_ppu_device->Enable(t);
+ if(t == true){
+ *m_status = STATUS_IDLE;
+ m_button->SetLabel(wxT("&program"));
+ }else{
+ m_button->SetLabel(wxT("cancel"));
+ }
+ m_button->SetFocus();
+ return true;
}
- void LogAppend(const wxChar *t)
+ bool Disable(void)
{
- *m_log << t;
+ return this->Enable(false);
}
void ConfigWrite(wxFileConfig *c)
{
- c->Write(wxT("program.cpu.device"), m_program_cpu_device->GetStringSelection());
- c->Write(wxT("program.ppu.device"), m_program_ppu_device->GetStringSelection());
+ c->Write(wxT("program.cpu.device"), m_cpu_device->GetStringSelection());
+ c->Write(wxT("program.ppu.device"), m_ppu_device->GetStringSelection());
}
};
-void *anago_programmer::Entry(void)
+class anago_panel_workram : public panel_workram
{
- try{
- if(script_program_execute(&m_config) == true){
- if(m_sound_success.IsOk() == true){
- m_sound_success.Play();
+private:
+ wxThread *m_anago_thread;
+ const struct reader_driver *const m_reader;
+ enum anago_status *const m_status;
+ wxTextCtrl *const m_log;
+ wxString m_sound_success, m_sound_fail;
+
+ void execute(struct dump_config *c, wxControlWithItems *script, wxFilePickerCtrl *picker, enum anago_status status)
+ {
+ c->cpu.gauge.label = NULL;
+ gauge_init(&c->cpu.gauge);
+
+ c->log.object = m_log;
+ c->log.append = text_append;
+ c->log.append_va = text_append_va;
+ c->except = throw_error;
+ c->cpu.increase = 1; //increase_get(m_cpu_increase);
+ c->progress = true;
+ {
+ wxString str_script = script->GetStringSelection();
+ wxChar *t = new wxChar[str_script.Length() + 1];
+ c->script = t;
+ STRNCPY(t, str_script.fn_str(), str_script.Length() + 1);
+ }
+ {
+ wxTextCtrl *text = picker->GetTextCtrl();
+ wxString str_rom = text->GetValue();
+ wxChar *t = new wxChar[str_rom.Length() + 1];
+ if(text->IsEmpty() == true){
+ *m_log << wxT("Enter filename to ROM image\n");
+ return;
}
+ c->target = t;
+ STRNCPY(t, str_rom.fn_str(), str_rom.Length() + 1);
}
- }catch(const wxChar *t){
- if(m_sound_fail.IsOk() == true){
- m_sound_fail.Play();
+ c->control = &m_reader->control;
+ c->cpu.access = &m_reader->cpu;
+ c->ppu.access = &m_reader->ppu;
+
+ m_anago_thread = new anago_dumper(this, c, m_log, m_sound_success, m_sound_fail);
+ if(m_anago_thread->Create() != wxTHREAD_NO_ERROR){
+ *m_log << wxT("thread creating error");
+ }else if(m_anago_thread->Run() != wxTHREAD_NO_ERROR){
+ *m_log << wxT("thread running error");
+ }else{
+ *m_status = status; //先に status を設定すること
+ this->Disable();
}
- m_frame->LogAppend(t);
}
- m_frame->ProgramThreadFinish();
- return NULL;
-}
-class anago_panel_workram : public panel_workram
-{
-private:
-// wxTextCtrl *m_log;
+ void read(void)
+ {
+ struct dump_config config;
+ config.mode = MODE_RAM_READ;
+ config.cpu.gauge.bar = m_read_gauge;
+ execute(&config, m_read_script, m_read_picker, STATUS_RAM_READ);
+ }
+ void write(void)
+ {
+ struct dump_config config;
+ config.mode = MODE_RAM_WRITE;
+ config.cpu.gauge.bar = m_write_gauge;
+ execute(&config, m_write_script, m_write_picker, STATUS_RAM_WRITE);
+ }
protected:
void read_button_click(wxCommandEvent& event)
{
+ switch(*m_status){
+ case STATUS_IDLE:
+ read();
+ break;
+ case STATUS_RAM_READ:
+ this->Enable();
+ break;
+ default: //do nothing
+ break;
+ }
+ }
+
+ void write_button_click(wxCommandEvent& event)
+ {
+ switch(*m_status){
+ case STATUS_IDLE:
+ write();
+ break;
+ case STATUS_RAM_WRITE:
+ this->Enable();
+ break;
+ default: //do nothing
+ break;
+ }
}
public:
- anago_panel_workram(wxWindow *p, wxTextCtrl *log) : panel_workram(p)
+ anago_panel_workram(wxWindow *p, const struct reader_driver *r, enum anago_status *status, wxFileConfig *config, wxTextCtrl *log)
+ : panel_workram(p), m_reader(r), m_status(status), m_log(log)
+ {
+ config->Read(wxT("workram.sound.success"), &m_sound_success, wxT("tinkalink2.wav"));
+ config->Read(wxT("workram.sound.fail"), &m_sound_fail, wxT("doggrowl.wav"));
+
+ script_choice_init(m_read_script, wxT("*.ae"), log);
+ script_choice_init(m_write_script, wxT("*.ae"), log);
+
+ if(DEBUG == 1){
+ m_read_picker->GetTextCtrl()->SetLabel(wxT("t.sav"));
+ }
+ }
+
+ bool Enable(bool t = true)
+ {
+ m_read_script->Enable(t);
+ m_read_picker->Enable(t);
+ m_write_script->Enable(t);
+ m_write_picker->Enable(t);
+ if(t == true){
+ switch(*m_status){
+ case STATUS_RAM_READ:
+ m_read_button->SetLabel(wxT("&read"));
+ m_read_button->SetFocus();
+ m_write_button->Enable();
+ break;
+ case STATUS_RAM_WRITE:
+ m_write_button->SetLabel(wxT("&write"));
+ m_write_button->SetFocus();
+ m_read_button->Enable();
+ break;
+ default:
+ break;
+ }
+ *m_status = STATUS_IDLE;
+ }else{
+ switch(*m_status){
+ case STATUS_RAM_READ:
+ m_read_button->SetLabel(wxT("&cancel"));
+ m_write_button->Disable();
+ break;
+ case STATUS_RAM_WRITE:
+ m_write_button->SetLabel(wxT("&cancel"));
+ m_read_button->Disable();
+ break;
+ default:
+ break;
+ }
+ }
+ return true;
+ }
+
+ bool Disable(void)
{
-// m_log = log;
- script_choice_init(m_ram_read_script, wxT("*.ad"), log);
- script_choice_init(m_ram_write_script, wxT("*.ad"), log);
+ return this->Enable(false);
}
};
class anago_frame : public frame_main
{
private:
+ enum anago_status m_status; //ここだけ実体, 各パネルはこのポインタ
const wxString m_config_file;
anago_panel_program *m_panel_program;
protected:
public:
/** Constructor */
anago_frame(wxWindow* parent, const struct reader_driver *r)
- : frame_main(parent),
+ : frame_main(parent), m_status(STATUS_IDLE),
#ifdef WIN32
m_config_file(wxGetCwd() + wxT("/anago.cfg"))
#else
config.Read(wxT("size.y"), &size.y, 460);
this->SetSize(size);
- m_notebook->AddPage(new anago_panel_dump(m_notebook, r, &config, m_log), wxT("dump"), false);
- m_panel_program = new anago_panel_program(m_notebook, r, &config, m_log);
+ m_notebook->AddPage(new anago_panel_dump(m_notebook, r, &m_status, &config, m_log), wxT("dump"), false);
+
+ m_panel_program = new anago_panel_program(m_notebook, r, &m_status, &config, m_log);
m_notebook->AddPage(m_panel_program, wxT("program"), false);
- m_notebook->AddPage(new anago_panel_workram(m_notebook, m_log), wxT("workram"), false);
+
+ m_notebook->AddPage(new anago_panel_workram(m_notebook, r, &m_status, &config, m_log), wxT("workram"), false);
m_notebook->AddPage(new anago_panel_version(m_notebook), wxT("version"), false);
}
m_staticText16->Wrap( -1 );
fgSizer3->Add( m_staticText16, 0, wxALL, 5 );
- wxArrayString m_ram_read_scriptChoices;
- m_ram_read_script = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_ram_read_scriptChoices, 0 );
- m_ram_read_script->SetSelection( 0 );
- fgSizer3->Add( m_ram_read_script, 0, wxALL|wxEXPAND, 5 );
+ wxArrayString m_read_scriptChoices;
+ m_read_script = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_read_scriptChoices, 0 );
+ m_read_script->SetSelection( 0 );
+ fgSizer3->Add( m_read_script, 0, wxALL|wxEXPAND, 5 );
m_staticText17 = new wxStaticText( this, wxID_ANY, wxT("RAM image"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText17->Wrap( -1 );
fgSizer3->Add( m_staticText17, 0, wxALL, 5 );
- m_ram_read_picker = new wxFilePickerCtrl( this, wxID_ANY, wxEmptyString, wxT("Select a file"), wxT("*.sav"), wxDefaultPosition, wxDefaultSize, wxFLP_DEFAULT_STYLE|wxFLP_FILE_MUST_EXIST|wxFLP_USE_TEXTCTRL );
- fgSizer3->Add( m_ram_read_picker, 0, wxALL|wxEXPAND, 5 );
+ m_read_picker = new wxFilePickerCtrl( this, wxID_ANY, wxEmptyString, wxT("Select a file"), wxT("*.sav"), wxDefaultPosition, wxDefaultSize, wxFLP_DEFAULT_STYLE|wxFLP_FILE_MUST_EXIST|wxFLP_USE_TEXTCTRL );
+ fgSizer3->Add( m_read_picker, 0, wxALL|wxEXPAND, 5 );
bSizer17->Add( fgSizer3, 0, wxEXPAND, 2 );
wxBoxSizer* bSizer18;
bSizer18 = new wxBoxSizer( wxHORIZONTAL );
- m_ram_read_gauge = new wxGauge( this, wxID_ANY, 100, wxDefaultPosition, wxDefaultSize, wxGA_HORIZONTAL );
- m_ram_read_gauge->SetMinSize( wxSize( -1,12 ) );
+ m_read_gauge = new wxGauge( this, wxID_ANY, 100, wxDefaultPosition, wxDefaultSize, wxGA_HORIZONTAL );
+ m_read_gauge->SetMinSize( wxSize( -1,12 ) );
- bSizer18->Add( m_ram_read_gauge, 1, wxALL, 2 );
+ bSizer18->Add( m_read_gauge, 1, wxALL, 2 );
- m_ram_read_button = new wxButton( this, wxID_ANY, wxT("&read"), wxDefaultPosition, wxDefaultSize, 0 );
- bSizer18->Add( m_ram_read_button, 0, wxALL|wxALIGN_RIGHT, 5 );
+ m_read_button = new wxButton( this, wxID_ANY, wxT("&read"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer18->Add( m_read_button, 0, wxALL|wxALIGN_RIGHT, 5 );
bSizer17->Add( bSizer18, 0, wxEXPAND, 2 );
m_staticText161->Wrap( -1 );
fgSizer31->Add( m_staticText161, 0, wxALL, 5 );
- wxArrayString m_ram_write_scriptChoices;
- m_ram_write_script = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_ram_write_scriptChoices, 0 );
- m_ram_write_script->SetSelection( 0 );
- fgSizer31->Add( m_ram_write_script, 0, wxALL|wxEXPAND, 5 );
+ wxArrayString m_write_scriptChoices;
+ m_write_script = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_write_scriptChoices, 0 );
+ m_write_script->SetSelection( 0 );
+ fgSizer31->Add( m_write_script, 0, wxALL|wxEXPAND, 5 );
m_staticText171 = new wxStaticText( this, wxID_ANY, wxT("RAM image"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText171->Wrap( -1 );
fgSizer31->Add( m_staticText171, 0, wxALL, 5 );
- m_ram_write_picker = new wxFilePickerCtrl( this, wxID_ANY, wxEmptyString, wxT("Select a file"), wxT("*.sav"), wxDefaultPosition, wxDefaultSize, wxFLP_DEFAULT_STYLE|wxFLP_FILE_MUST_EXIST|wxFLP_SAVE|wxFLP_USE_TEXTCTRL );
- fgSizer31->Add( m_ram_write_picker, 0, wxALL|wxEXPAND, 5 );
+ m_write_picker = new wxFilePickerCtrl( this, wxID_ANY, wxEmptyString, wxT("Select a file"), wxT("*.sav"), wxDefaultPosition, wxDefaultSize, wxFLP_DEFAULT_STYLE|wxFLP_FILE_MUST_EXIST|wxFLP_SAVE|wxFLP_USE_TEXTCTRL );
+ fgSizer31->Add( m_write_picker, 0, wxALL|wxEXPAND, 5 );
bSizer17->Add( fgSizer31, 0, wxEXPAND, 2 );
wxBoxSizer* bSizer181;
bSizer181 = new wxBoxSizer( wxHORIZONTAL );
- m_ram_write_gauge = new wxGauge( this, wxID_ANY, 100, wxDefaultPosition, wxDefaultSize, wxGA_HORIZONTAL );
- m_ram_write_gauge->SetMinSize( wxSize( -1,12 ) );
+ m_write_gauge = new wxGauge( this, wxID_ANY, 100, wxDefaultPosition, wxDefaultSize, wxGA_HORIZONTAL );
+ m_write_gauge->SetMinSize( wxSize( -1,12 ) );
- bSizer181->Add( m_ram_write_gauge, 1, wxALL, 2 );
+ bSizer181->Add( m_write_gauge, 1, wxALL, 2 );
- m_ram_write_button = new wxButton( this, wxID_ANY, wxT("&write"), wxDefaultPosition, wxDefaultSize, 0 );
- bSizer181->Add( m_ram_write_button, 0, wxALL|wxALIGN_RIGHT, 5 );
+ m_write_button = new wxButton( this, wxID_ANY, wxT("&write"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer181->Add( m_write_button, 0, wxALL|wxALIGN_RIGHT, 5 );
bSizer17->Add( bSizer181, 0, wxEXPAND, 2 );
bSizer17->Fit( this );
// Connect Events
- m_ram_read_button->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( panel_workram::read_button_click ), NULL, this );
- m_ram_write_button->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( panel_workram::write_button_click ), NULL, this );
+ m_read_button->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( panel_workram::read_button_click ), NULL, this );
+ m_write_button->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( panel_workram::write_button_click ), NULL, this );
}
panel_workram::~panel_workram()
{
// Disconnect Events
- m_ram_read_button->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( panel_workram::read_button_click ), NULL, this );
- m_ram_write_button->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( panel_workram::write_button_click ), NULL, this );
+ m_read_button->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( panel_workram::read_button_click ), NULL, this );
+ m_write_button->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( panel_workram::write_button_click ), NULL, this );
}
fgSizer1->SetFlexibleDirection( wxBOTH );
fgSizer1->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
- m_dump_script_label = new wxStaticText( this, wxID_ANY, wxT("&script"), wxDefaultPosition, wxDefaultSize, 0 );
- m_dump_script_label->Wrap( -1 );
- fgSizer1->Add( m_dump_script_label, 0, wxALL, 5 );
+ m_script_label = new wxStaticText( this, wxID_ANY, wxT("&script"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_script_label->Wrap( -1 );
+ fgSizer1->Add( m_script_label, 0, wxALL, 5 );
- wxArrayString m_dump_script_choiceChoices;
- m_dump_script_choice = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_dump_script_choiceChoices, 0 );
- m_dump_script_choice->SetSelection( 0 );
- fgSizer1->Add( m_dump_script_choice, 0, wxALL|wxEXPAND, 5 );
+ wxArrayString m_script_choiceChoices;
+ m_script_choice = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_script_choiceChoices, 0 );
+ m_script_choice->SetSelection( 0 );
+ fgSizer1->Add( m_script_choice, 0, wxALL|wxEXPAND, 5 );
- m_dump_romimage_label = new wxStaticText( this, wxID_ANY, wxT("&ROM image"), wxDefaultPosition, wxDefaultSize, 0 );
- m_dump_romimage_label->Wrap( -1 );
- fgSizer1->Add( m_dump_romimage_label, 0, wxALL, 5 );
+ m_romimage_label = new wxStaticText( this, wxID_ANY, wxT("&ROM image"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_romimage_label->Wrap( -1 );
+ fgSizer1->Add( m_romimage_label, 0, wxALL, 5 );
- m_dump_romimage_picker = new wxFilePickerCtrl( this, wxID_ANY, wxEmptyString, wxT("Select a file"), wxT("*.nes"), wxDefaultPosition, wxDefaultSize, wxFLP_DEFAULT_STYLE|wxFLP_OVERWRITE_PROMPT|wxFLP_SAVE|wxFLP_USE_TEXTCTRL );
- fgSizer1->Add( m_dump_romimage_picker, 0, wxALL|wxEXPAND, 5 );
+ m_romimage_picker = new wxFilePickerCtrl( this, wxID_ANY, wxEmptyString, wxT("Select a file"), wxT("*.nes"), wxDefaultPosition, wxDefaultSize, wxFLP_DEFAULT_STYLE|wxFLP_OVERWRITE_PROMPT|wxFLP_SAVE|wxFLP_USE_TEXTCTRL );
+ fgSizer1->Add( m_romimage_picker, 0, wxALL|wxEXPAND, 5 );
bSizer9->Add( fgSizer1, 0, wxEXPAND, 5 );
wxBoxSizer* bSizer12;
bSizer12 = new wxBoxSizer( wxHORIZONTAL );
- m_dump_cpu_label = new wxStaticText( this, wxID_ANY, wxT("Program ROM"), wxDefaultPosition, wxDefaultSize, 0 );
- m_dump_cpu_label->Wrap( -1 );
- m_dump_cpu_label->SetMinSize( wxSize( 80,-1 ) );
+ m_cpu_label = new wxStaticText( this, wxID_ANY, wxT("Program ROM"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_cpu_label->Wrap( -1 );
+ m_cpu_label->SetMinSize( wxSize( 80,-1 ) );
- bSizer12->Add( m_dump_cpu_label, 0, wxALL, 5 );
+ bSizer12->Add( m_cpu_label, 0, wxALL, 5 );
- m_dump_cpu_gauge = new wxGauge( this, wxID_ANY, 100, wxDefaultPosition, wxSize( -1,12 ), wxGA_HORIZONTAL );
- bSizer12->Add( m_dump_cpu_gauge, 1, wxALL|wxALIGN_CENTER_VERTICAL, 0 );
+ m_cpu_gauge = new wxGauge( this, wxID_ANY, 100, wxDefaultPosition, wxSize( -1,12 ), wxGA_HORIZONTAL );
+ bSizer12->Add( m_cpu_gauge, 1, wxALL|wxALIGN_CENTER_VERTICAL, 0 );
bSizer9->Add( bSizer12, 1, wxEXPAND, 5 );
wxBoxSizer* bSizer14;
bSizer14 = new wxBoxSizer( wxHORIZONTAL );
- wxArrayString m_dump_cpu_increaseChoices;
- m_dump_cpu_increase = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_dump_cpu_increaseChoices, 0 );
- m_dump_cpu_increase->SetSelection( 0 );
- m_dump_cpu_increase->SetMinSize( wxSize( 60,-1 ) );
+ wxArrayString m_cpu_increaseChoices;
+ m_cpu_increase = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_cpu_increaseChoices, 0 );
+ m_cpu_increase->SetSelection( 0 );
+ m_cpu_increase->SetMinSize( wxSize( 60,-1 ) );
- bSizer14->Add( m_dump_cpu_increase, 0, wxALL, 5 );
+ bSizer14->Add( m_cpu_increase, 0, wxALL, 5 );
- m_dump_cpu_value = new wxStaticText( this, wxID_ANY, wxT("0x000000/0x000000"), wxDefaultPosition, wxDefaultSize, 0 );
- m_dump_cpu_value->Wrap( -1 );
- m_dump_cpu_value->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 76, 90, 90, false, wxEmptyString ) );
+ m_cpu_value = new wxStaticText( this, wxID_ANY, wxT("0x000000/0x000000"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_cpu_value->Wrap( -1 );
+ m_cpu_value->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 76, 90, 90, false, wxEmptyString ) );
- bSizer14->Add( m_dump_cpu_value, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+ bSizer14->Add( m_cpu_value, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
bSizer9->Add( bSizer14, 1, wxALIGN_RIGHT, 5 );
wxBoxSizer* bSizer13;
bSizer13 = new wxBoxSizer( wxHORIZONTAL );
- m_dump_ppu_label = new wxStaticText( this, wxID_ANY, wxT("Charcter ROM"), wxDefaultPosition, wxDefaultSize, 0 );
- m_dump_ppu_label->Wrap( -1 );
- m_dump_ppu_label->SetMinSize( wxSize( 80,-1 ) );
+ m_ppu_label = new wxStaticText( this, wxID_ANY, wxT("Charcter ROM"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_ppu_label->Wrap( -1 );
+ m_ppu_label->SetMinSize( wxSize( 80,-1 ) );
- bSizer13->Add( m_dump_ppu_label, 0, wxALL, 5 );
+ bSizer13->Add( m_ppu_label, 0, wxALL, 5 );
- m_dump_ppu_gauge = new wxGauge( this, wxID_ANY, 100, wxDefaultPosition, wxSize( -1,12 ), wxGA_HORIZONTAL );
- bSizer13->Add( m_dump_ppu_gauge, 1, wxALL|wxALIGN_CENTER_VERTICAL, 0 );
+ m_ppu_gauge = new wxGauge( this, wxID_ANY, 100, wxDefaultPosition, wxSize( -1,12 ), wxGA_HORIZONTAL );
+ bSizer13->Add( m_ppu_gauge, 1, wxALL|wxALIGN_CENTER_VERTICAL, 0 );
bSizer9->Add( bSizer13, 1, wxEXPAND, 5 );
wxBoxSizer* bSizer132;
bSizer132 = new wxBoxSizer( wxHORIZONTAL );
- wxArrayString m_dump_ppu_increaseChoices;
- m_dump_ppu_increase = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_dump_ppu_increaseChoices, 0 );
- m_dump_ppu_increase->SetSelection( 0 );
- m_dump_ppu_increase->SetMinSize( wxSize( 60,-1 ) );
+ wxArrayString m_ppu_increaseChoices;
+ m_ppu_increase = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_ppu_increaseChoices, 0 );
+ m_ppu_increase->SetSelection( 0 );
+ m_ppu_increase->SetMinSize( wxSize( 60,-1 ) );
- bSizer132->Add( m_dump_ppu_increase, 0, wxALL, 5 );
+ bSizer132->Add( m_ppu_increase, 0, wxALL, 5 );
- m_dump_ppu_value = new wxStaticText( this, wxID_ANY, wxT("0x000000/0x000000"), wxDefaultPosition, wxDefaultSize, 0 );
- m_dump_ppu_value->Wrap( -1 );
- m_dump_ppu_value->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 76, 90, 90, false, wxEmptyString ) );
+ m_ppu_value = new wxStaticText( this, wxID_ANY, wxT("0x000000/0x000000"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_ppu_value->Wrap( -1 );
+ m_ppu_value->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 76, 90, 90, false, wxEmptyString ) );
- bSizer132->Add( m_dump_ppu_value, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+ bSizer132->Add( m_ppu_value, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
bSizer9->Add( bSizer132, 1, wxALIGN_RIGHT, 5 );
wxBoxSizer* bSizer61;
bSizer61 = new wxBoxSizer( wxHORIZONTAL );
- m_dump_check_battery = new wxCheckBox( this, wxID_ANY, wxT("&battery"), wxDefaultPosition, wxDefaultSize, 0 );
- bSizer61->Add( m_dump_check_battery, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+ m_check_battery = new wxCheckBox( this, wxID_ANY, wxT("&battery"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer61->Add( m_check_battery, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
- m_dump_check_forcemapper = new wxCheckBox( this, wxID_ANY, wxT("&change mapper"), wxDefaultPosition, wxDefaultSize, 0 );
- bSizer61->Add( m_dump_check_forcemapper, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+ m_check_forcemapper = new wxCheckBox( this, wxID_ANY, wxT("&change mapper"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer61->Add( m_check_forcemapper, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
- m_dump_text_forcemapper = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
- m_dump_text_forcemapper->Enable( false );
- m_dump_text_forcemapper->SetMinSize( wxSize( 40,-1 ) );
+ m_text_forcemapper = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ m_text_forcemapper->Enable( false );
+ m_text_forcemapper->SetMinSize( wxSize( 40,-1 ) );
- bSizer61->Add( m_dump_text_forcemapper, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+ bSizer61->Add( m_text_forcemapper, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
- m_dump_button = new wxButton( this, wxID_ANY, wxT("&dump"), wxDefaultPosition, wxDefaultSize, 0 );
- bSizer61->Add( m_dump_button, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+ m_button = new wxButton( this, wxID_ANY, wxT("&dump"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer61->Add( m_button, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
bSizer9->Add( bSizer61, 0, wxALIGN_RIGHT, 5 );
bSizer9->Fit( this );
// Connect Events
- m_dump_check_forcemapper->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( panel_dump::mapper_change_check ), NULL, this );
- m_dump_button->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( panel_dump::dump_button_click ), NULL, this );
+ m_check_forcemapper->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( panel_dump::mapper_change_check ), NULL, this );
+ m_button->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( panel_dump::button_click ), NULL, this );
}
panel_dump::~panel_dump()
{
// Disconnect Events
- m_dump_check_forcemapper->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( panel_dump::mapper_change_check ), NULL, this );
- m_dump_button->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( panel_dump::dump_button_click ), NULL, this );
+ m_check_forcemapper->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( panel_dump::mapper_change_check ), NULL, this );
+ m_button->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( panel_dump::button_click ), NULL, this );
}
fgSizer11->SetFlexibleDirection( wxBOTH );
fgSizer11->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
- m_program_script_label = new wxStaticText( this, wxID_ANY, wxT("&script"), wxDefaultPosition, wxDefaultSize, 0 );
- m_program_script_label->Wrap( -1 );
- fgSizer11->Add( m_program_script_label, 0, wxALL, 5 );
+ m_script_label = new wxStaticText( this, wxID_ANY, wxT("&script"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_script_label->Wrap( -1 );
+ fgSizer11->Add( m_script_label, 0, wxALL, 5 );
- wxArrayString m_program_script_choiceChoices;
- m_program_script_choice = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_program_script_choiceChoices, 0 );
- m_program_script_choice->SetSelection( 0 );
- fgSizer11->Add( m_program_script_choice, 0, wxALL|wxEXPAND, 5 );
+ wxArrayString m_script_choiceChoices;
+ m_script_choice = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_script_choiceChoices, 0 );
+ m_script_choice->SetSelection( 0 );
+ fgSizer11->Add( m_script_choice, 0, wxALL|wxEXPAND, 5 );
- m_program_label = new wxStaticText( this, wxID_ANY, wxT("&ROM image"), wxDefaultPosition, wxDefaultSize, 0 );
- m_program_label->Wrap( -1 );
- fgSizer11->Add( m_program_label, 0, wxALL, 5 );
+ m_romimage_label = new wxStaticText( this, wxID_ANY, wxT("&ROM image"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_romimage_label->Wrap( -1 );
+ fgSizer11->Add( m_romimage_label, 0, wxALL, 5 );
- m_program_romimage_picker = new wxFilePickerCtrl( this, wxID_ANY, wxEmptyString, wxT("Select a file"), wxT("*.nes"), wxDefaultPosition, wxDefaultSize, wxFLP_DEFAULT_STYLE|wxFLP_FILE_MUST_EXIST|wxFLP_USE_TEXTCTRL );
- fgSizer11->Add( m_program_romimage_picker, 0, wxALL|wxEXPAND, 5 );
+ m_romimage_picker = new wxFilePickerCtrl( this, wxID_ANY, wxEmptyString, wxT("Select a file"), wxT("*.nes"), wxDefaultPosition, wxDefaultSize, wxFLP_DEFAULT_STYLE|wxFLP_FILE_MUST_EXIST|wxFLP_USE_TEXTCTRL );
+ fgSizer11->Add( m_romimage_picker, 0, wxALL|wxEXPAND, 5 );
bSizer91->Add( fgSizer11, 0, wxEXPAND, 5 );
wxBoxSizer* bSizer121;
bSizer121 = new wxBoxSizer( wxHORIZONTAL );
- m_program_cpu_label = new wxStaticText( this, wxID_ANY, wxT("Program flash"), wxDefaultPosition, wxDefaultSize, 0 );
- m_program_cpu_label->Wrap( -1 );
- m_program_cpu_label->SetMinSize( wxSize( 80,-1 ) );
+ m_cpu_label = new wxStaticText( this, wxID_ANY, wxT("Program flash"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_cpu_label->Wrap( -1 );
+ m_cpu_label->SetMinSize( wxSize( 80,-1 ) );
- bSizer121->Add( m_program_cpu_label, 0, wxALL, 5 );
+ bSizer121->Add( m_cpu_label, 0, wxALL, 5 );
- m_program_cpu_gauge = new wxGauge( this, wxID_ANY, 100, wxDefaultPosition, wxSize( -1,12 ), wxGA_HORIZONTAL );
- bSizer121->Add( m_program_cpu_gauge, 1, wxALL|wxALIGN_CENTER_VERTICAL, 0 );
+ m_cpu_gauge = new wxGauge( this, wxID_ANY, 100, wxDefaultPosition, wxSize( -1,12 ), wxGA_HORIZONTAL );
+ bSizer121->Add( m_cpu_gauge, 1, wxALL|wxALIGN_CENTER_VERTICAL, 0 );
bSizer91->Add( bSizer121, 1, wxEXPAND, 5 );
wxBoxSizer* bSizer141;
bSizer141 = new wxBoxSizer( wxHORIZONTAL );
- wxArrayString m_program_cpu_deviceChoices;
- m_program_cpu_device = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_program_cpu_deviceChoices, 0 );
- m_program_cpu_device->SetSelection( 0 );
- m_program_cpu_device->SetMinSize( wxSize( 100,-1 ) );
+ wxArrayString m_cpu_deviceChoices;
+ m_cpu_device = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_cpu_deviceChoices, 0 );
+ m_cpu_device->SetSelection( 0 );
+ m_cpu_device->SetMinSize( wxSize( 100,-1 ) );
- bSizer141->Add( m_program_cpu_device, 0, wxALL, 5 );
+ bSizer141->Add( m_cpu_device, 0, wxALL, 5 );
- wxArrayString m_program_cpu_paddingChoices;
- m_program_cpu_padding = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_program_cpu_paddingChoices, 0 );
- m_program_cpu_padding->SetSelection( 0 );
- m_program_cpu_padding->SetMinSize( wxSize( 60,-1 ) );
+ wxArrayString m_cpu_paddingChoices;
+ m_cpu_padding = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_cpu_paddingChoices, 0 );
+ m_cpu_padding->SetSelection( 0 );
+ m_cpu_padding->SetMinSize( wxSize( 60,-1 ) );
- bSizer141->Add( m_program_cpu_padding, 0, wxALL, 5 );
+ bSizer141->Add( m_cpu_padding, 0, wxALL, 5 );
- m_program_cpu_value = new wxStaticText( this, wxID_ANY, wxT("0x000000/0x000000"), wxDefaultPosition, wxDefaultSize, 0 );
- m_program_cpu_value->Wrap( -1 );
- m_program_cpu_value->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 76, 90, 90, false, wxEmptyString ) );
+ m_cpu_value = new wxStaticText( this, wxID_ANY, wxT("0x000000/0x000000"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_cpu_value->Wrap( -1 );
+ m_cpu_value->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 76, 90, 90, false, wxEmptyString ) );
- bSizer141->Add( m_program_cpu_value, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+ bSizer141->Add( m_cpu_value, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
bSizer91->Add( bSizer141, 1, wxALIGN_RIGHT, 5 );
wxBoxSizer* bSizer131;
bSizer131 = new wxBoxSizer( wxHORIZONTAL );
- m_program_ppu_label = new wxStaticText( this, wxID_ANY, wxT("Charcter flash"), wxDefaultPosition, wxDefaultSize, 0 );
- m_program_ppu_label->Wrap( -1 );
- m_program_ppu_label->SetMinSize( wxSize( 80,-1 ) );
+ m_ppu_label = new wxStaticText( this, wxID_ANY, wxT("Charcter flash"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_ppu_label->Wrap( -1 );
+ m_ppu_label->SetMinSize( wxSize( 80,-1 ) );
- bSizer131->Add( m_program_ppu_label, 0, wxALL, 5 );
+ bSizer131->Add( m_ppu_label, 0, wxALL, 5 );
- m_program_ppu_gauge = new wxGauge( this, wxID_ANY, 100, wxDefaultPosition, wxSize( -1,12 ), wxGA_HORIZONTAL );
- bSizer131->Add( m_program_ppu_gauge, 1, wxALL|wxALIGN_CENTER_VERTICAL, 0 );
+ m_ppu_gauge = new wxGauge( this, wxID_ANY, 100, wxDefaultPosition, wxSize( -1,12 ), wxGA_HORIZONTAL );
+ bSizer131->Add( m_ppu_gauge, 1, wxALL|wxALIGN_CENTER_VERTICAL, 0 );
bSizer91->Add( bSizer131, 1, wxEXPAND, 5 );
wxBoxSizer* bSizer1321;
bSizer1321 = new wxBoxSizer( wxHORIZONTAL );
- wxArrayString m_program_ppu_deviceChoices;
- m_program_ppu_device = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_program_ppu_deviceChoices, 0 );
- m_program_ppu_device->SetSelection( 0 );
- m_program_ppu_device->SetMinSize( wxSize( 100,-1 ) );
+ wxArrayString m_ppu_deviceChoices;
+ m_ppu_device = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_ppu_deviceChoices, 0 );
+ m_ppu_device->SetSelection( 0 );
+ m_ppu_device->SetMinSize( wxSize( 100,-1 ) );
- bSizer1321->Add( m_program_ppu_device, 0, wxALL, 5 );
+ bSizer1321->Add( m_ppu_device, 0, wxALL, 5 );
- wxArrayString m_program_ppu_paddingChoices;
- m_program_ppu_padding = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_program_ppu_paddingChoices, 0 );
- m_program_ppu_padding->SetSelection( 0 );
- m_program_ppu_padding->SetMinSize( wxSize( 60,-1 ) );
+ wxArrayString m_ppu_paddingChoices;
+ m_ppu_padding = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_ppu_paddingChoices, 0 );
+ m_ppu_padding->SetSelection( 0 );
+ m_ppu_padding->SetMinSize( wxSize( 60,-1 ) );
- bSizer1321->Add( m_program_ppu_padding, 0, wxALL, 5 );
+ bSizer1321->Add( m_ppu_padding, 0, wxALL, 5 );
- m_program_ppu_value = new wxStaticText( this, wxID_ANY, wxT("0x000000/0x000000"), wxDefaultPosition, wxDefaultSize, 0 );
- m_program_ppu_value->Wrap( -1 );
- m_program_ppu_value->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 76, 90, 90, false, wxEmptyString ) );
+ m_ppu_value = new wxStaticText( this, wxID_ANY, wxT("0x000000/0x000000"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_ppu_value->Wrap( -1 );
+ m_ppu_value->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 76, 90, 90, false, wxEmptyString ) );
- bSizer1321->Add( m_program_ppu_value, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+ bSizer1321->Add( m_ppu_value, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
bSizer91->Add( bSizer1321, 1, wxALIGN_RIGHT, 5 );
wxBoxSizer* bSizer611;
bSizer611 = new wxBoxSizer( wxHORIZONTAL );
- m_program_compare = new wxCheckBox( this, wxID_ANY, wxT("&compare"), wxDefaultPosition, wxDefaultSize, 0 );
- bSizer611->Add( m_program_compare, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+ m_compare = new wxCheckBox( this, wxID_ANY, wxT("&compare"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer611->Add( m_compare, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
- m_program_button = new wxButton( this, wxID_ANY, wxT("&program"), wxDefaultPosition, wxDefaultSize, 0 );
- bSizer611->Add( m_program_button, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+ m_button = new wxButton( this, wxID_ANY, wxT("&program"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer611->Add( m_button, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
bSizer91->Add( bSizer611, 0, wxALIGN_RIGHT, 5 );
bSizer91->Fit( this );
// Connect Events
- m_program_button->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( panel_program::program_button_click ), NULL, this );
+ m_button->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( panel_program::button_click ), NULL, this );
}
panel_program::~panel_program()
{
// Disconnect Events
- m_program_button->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( panel_program::program_button_click ), NULL, this );
+ m_button->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( panel_program::button_click ), NULL, this );
}
</object>\r
</object>\r
</object>\r
- <object class="Panel" expanded="0">\r
+ <object class="Panel" expanded="1">\r
<property name="bg"></property>\r
<property name="context_help"></property>\r
<property name="context_menu">1</property>\r
<event name="OnSetFocus"></event>\r
<event name="OnSize"></event>\r
<event name="OnUpdateUI"></event>\r
- <object class="wxBoxSizer" expanded="0">\r
+ <object class="wxBoxSizer" expanded="1">\r
<property name="minimum_size"></property>\r
<property name="name">bSizer17</property>\r
<property name="orient">wxVERTICAL</property>\r
<property name="permission">none</property>\r
- <object class="sizeritem" expanded="0">\r
+ <object class="sizeritem" expanded="1">\r
<property name="border">2</property>\r
<property name="flag">wxEXPAND</property>\r
<property name="proportion">1</property>\r
</object>\r
</object>\r
</object>\r
- <object class="sizeritem" expanded="0">\r
+ <object class="sizeritem" expanded="1">\r
<property name="border">2</property>\r
<property name="flag">wxEXPAND</property>\r
<property name="proportion">0</property>\r
<property name="id">wxID_ANY</property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size"></property>\r
- <property name="name">m_ram_read_script</property>\r
+ <property name="name">m_read_script</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="selection">0</property>\r
<property name="maximum_size"></property>\r
<property name="message">Select a file</property>\r
<property name="minimum_size"></property>\r
- <property name="name">m_ram_read_picker</property>\r
+ <property name="name">m_read_picker</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="size"></property>\r
<property name="id">wxID_ANY</property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size">-1,12</property>\r
- <property name="name">m_ram_read_gauge</property>\r
+ <property name="name">m_read_gauge</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="range">100</property>\r
<property name="label">&read</property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size"></property>\r
- <property name="name">m_ram_read_button</property>\r
+ <property name="name">m_read_button</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="size"></property>\r
</object>\r
</object>\r
</object>\r
- <object class="sizeritem" expanded="0">\r
+ <object class="sizeritem" expanded="1">\r
<property name="border">2</property>\r
<property name="flag">wxEXPAND</property>\r
<property name="proportion">0</property>\r
- <object class="wxFlexGridSizer" expanded="0">\r
+ <object class="wxFlexGridSizer" expanded="1">\r
<property name="cols">2</property>\r
<property name="flexible_direction">wxBOTH</property>\r
<property name="growablecols">1</property>\r
<property name="id">wxID_ANY</property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size"></property>\r
- <property name="name">m_ram_write_script</property>\r
+ <property name="name">m_write_script</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="selection">0</property>\r
<property name="maximum_size"></property>\r
<property name="message">Select a file</property>\r
<property name="minimum_size"></property>\r
- <property name="name">m_ram_write_picker</property>\r
+ <property name="name">m_write_picker</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="size"></property>\r
<property name="id">wxID_ANY</property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size">-1,12</property>\r
- <property name="name">m_ram_write_gauge</property>\r
+ <property name="name">m_write_gauge</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="range">100</property>\r
<property name="label">&write</property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size"></property>\r
- <property name="name">m_ram_write_button</property>\r
+ <property name="name">m_write_button</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="size"></property>\r
<property name="label">&script</property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size"></property>\r
- <property name="name">m_dump_script_label</property>\r
+ <property name="name">m_script_label</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="size"></property>\r
<property name="id">wxID_ANY</property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size"></property>\r
- <property name="name">m_dump_script_choice</property>\r
+ <property name="name">m_script_choice</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="selection">0</property>\r
<property name="label">&ROM image</property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size"></property>\r
- <property name="name">m_dump_romimage_label</property>\r
+ <property name="name">m_romimage_label</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="size"></property>\r
<property name="maximum_size"></property>\r
<property name="message">Select a file</property>\r
<property name="minimum_size"></property>\r
- <property name="name">m_dump_romimage_picker</property>\r
+ <property name="name">m_romimage_picker</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="size"></property>\r
<property name="label">Program ROM</property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size">80,-1</property>\r
- <property name="name">m_dump_cpu_label</property>\r
+ <property name="name">m_cpu_label</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="size"></property>\r
<property name="id">wxID_ANY</property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size"></property>\r
- <property name="name">m_dump_cpu_gauge</property>\r
+ <property name="name">m_cpu_gauge</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="range">100</property>\r
<property name="id">wxID_ANY</property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size">60,-1</property>\r
- <property name="name">m_dump_cpu_increase</property>\r
+ <property name="name">m_cpu_increase</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="selection">0</property>\r
<property name="label">0x000000/0x000000</property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size">-1,-1</property>\r
- <property name="name">m_dump_cpu_value</property>\r
+ <property name="name">m_cpu_value</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="size"></property>\r
<property name="label">Charcter ROM</property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size">80,-1</property>\r
- <property name="name">m_dump_ppu_label</property>\r
+ <property name="name">m_ppu_label</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="size"></property>\r
<property name="id">wxID_ANY</property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size"></property>\r
- <property name="name">m_dump_ppu_gauge</property>\r
+ <property name="name">m_ppu_gauge</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="range">100</property>\r
<property name="id">wxID_ANY</property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size">60,-1</property>\r
- <property name="name">m_dump_ppu_increase</property>\r
+ <property name="name">m_ppu_increase</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="selection">0</property>\r
<property name="label">0x000000/0x000000</property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size">-1,-1</property>\r
- <property name="name">m_dump_ppu_value</property>\r
+ <property name="name">m_ppu_value</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="size"></property>\r
<property name="label">&battery</property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size"></property>\r
- <property name="name">m_dump_check_battery</property>\r
+ <property name="name">m_check_battery</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="size"></property>\r
<property name="label">&change mapper</property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size"></property>\r
- <property name="name">m_dump_check_forcemapper</property>\r
+ <property name="name">m_check_forcemapper</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="size"></property>\r
<property name="maximum_size"></property>\r
<property name="maxlength">0</property>\r
<property name="minimum_size">40,-1</property>\r
- <property name="name">m_dump_text_forcemapper</property>\r
+ <property name="name">m_text_forcemapper</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="size"></property>\r
<property name="label">&dump</property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size"></property>\r
- <property name="name">m_dump_button</property>\r
+ <property name="name">m_button</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="size"></property>\r
<property name="window_extra_style"></property>\r
<property name="window_name"></property>\r
<property name="window_style"></property>\r
- <event name="OnButtonClick">dump_button_click</event>\r
+ <event name="OnButtonClick">button_click</event>\r
<event name="OnChar"></event>\r
<event name="OnEnterWindow"></event>\r
<event name="OnEraseBackground"></event>\r
</object>\r
</object>\r
</object>\r
- <object class="Panel" expanded="1">\r
+ <object class="Panel" expanded="0">\r
<property name="bg"></property>\r
<property name="context_help"></property>\r
<property name="context_menu">1</property>\r
<property name="label">&script</property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size"></property>\r
- <property name="name">m_program_script_label</property>\r
+ <property name="name">m_script_label</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="size"></property>\r
<property name="id">wxID_ANY</property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size"></property>\r
- <property name="name">m_program_script_choice</property>\r
+ <property name="name">m_script_choice</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="selection">0</property>\r
<property name="label">&ROM image</property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size"></property>\r
- <property name="name">m_program_label</property>\r
+ <property name="name">m_romimage_label</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="size"></property>\r
<property name="maximum_size"></property>\r
<property name="message">Select a file</property>\r
<property name="minimum_size"></property>\r
- <property name="name">m_program_romimage_picker</property>\r
+ <property name="name">m_romimage_picker</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="size"></property>\r
<property name="label">Program flash</property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size">80,-1</property>\r
- <property name="name">m_program_cpu_label</property>\r
+ <property name="name">m_cpu_label</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="size"></property>\r
<property name="id">wxID_ANY</property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size"></property>\r
- <property name="name">m_program_cpu_gauge</property>\r
+ <property name="name">m_cpu_gauge</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="range">100</property>\r
<property name="id">wxID_ANY</property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size">100,-1</property>\r
- <property name="name">m_program_cpu_device</property>\r
+ <property name="name">m_cpu_device</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="selection">0</property>\r
<property name="id">wxID_ANY</property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size">60,-1</property>\r
- <property name="name">m_program_cpu_padding</property>\r
+ <property name="name">m_cpu_padding</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="selection">0</property>\r
<property name="label">0x000000/0x000000</property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size">-1,-1</property>\r
- <property name="name">m_program_cpu_value</property>\r
+ <property name="name">m_cpu_value</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="size"></property>\r
<property name="label">Charcter flash</property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size">80,-1</property>\r
- <property name="name">m_program_ppu_label</property>\r
+ <property name="name">m_ppu_label</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="size"></property>\r
<property name="id">wxID_ANY</property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size"></property>\r
- <property name="name">m_program_ppu_gauge</property>\r
+ <property name="name">m_ppu_gauge</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="range">100</property>\r
<property name="id">wxID_ANY</property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size">100,-1</property>\r
- <property name="name">m_program_ppu_device</property>\r
+ <property name="name">m_ppu_device</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="selection">0</property>\r
<property name="id">wxID_ANY</property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size">60,-1</property>\r
- <property name="name">m_program_ppu_padding</property>\r
+ <property name="name">m_ppu_padding</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="selection">0</property>\r
<property name="label">0x000000/0x000000</property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size">-1,-1</property>\r
- <property name="name">m_program_ppu_value</property>\r
+ <property name="name">m_ppu_value</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="size"></property>\r
<property name="label">&compare</property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size"></property>\r
- <property name="name">m_program_compare</property>\r
+ <property name="name">m_compare</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="size"></property>\r
<property name="label">&program</property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size"></property>\r
- <property name="name">m_program_button</property>\r
+ <property name="name">m_button</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="size"></property>\r
<property name="window_extra_style"></property>\r
<property name="window_name"></property>\r
<property name="window_style"></property>\r
- <event name="OnButtonClick">program_button_click</event>\r
+ <event name="OnButtonClick">button_click</event>\r
<event name="OnChar"></event>\r
<event name="OnEnterWindow"></event>\r
<event name="OnEraseBackground"></event>\r
wxStaticText* m_staticText221;
wxStaticLine* m_staticline71;
wxStaticText* m_staticText16;
- wxChoice* m_ram_read_script;
+ wxChoice* m_read_script;
wxStaticText* m_staticText17;
- wxFilePickerCtrl* m_ram_read_picker;
- wxGauge* m_ram_read_gauge;
- wxButton* m_ram_read_button;
+ wxFilePickerCtrl* m_read_picker;
+ wxGauge* m_read_gauge;
+ wxButton* m_read_button;
wxStaticLine* m_staticline12;
wxStaticText* m_staticText22;
wxStaticLine* m_staticline7;
wxStaticText* m_staticText161;
- wxChoice* m_ram_write_script;
+ wxChoice* m_write_script;
wxStaticText* m_staticText171;
- wxFilePickerCtrl* m_ram_write_picker;
- wxGauge* m_ram_write_gauge;
- wxButton* m_ram_write_button;
+ wxFilePickerCtrl* m_write_picker;
+ wxGauge* m_write_gauge;
+ wxButton* m_write_button;
// Virtual event handlers, overide them in your derived class
virtual void read_button_click( wxCommandEvent& event ) { event.Skip(); }
private:
protected:
- wxStaticText* m_dump_script_label;
- wxChoice* m_dump_script_choice;
- wxStaticText* m_dump_romimage_label;
- wxFilePickerCtrl* m_dump_romimage_picker;
+ wxStaticText* m_script_label;
+ wxChoice* m_script_choice;
+ wxStaticText* m_romimage_label;
+ wxFilePickerCtrl* m_romimage_picker;
wxStaticLine* m_staticline1;
- wxStaticText* m_dump_cpu_label;
- wxGauge* m_dump_cpu_gauge;
- wxChoice* m_dump_cpu_increase;
- wxStaticText* m_dump_cpu_value;
+ wxStaticText* m_cpu_label;
+ wxGauge* m_cpu_gauge;
+ wxChoice* m_cpu_increase;
+ wxStaticText* m_cpu_value;
wxStaticLine* m_staticline2;
- wxStaticText* m_dump_ppu_label;
- wxGauge* m_dump_ppu_gauge;
- wxChoice* m_dump_ppu_increase;
- wxStaticText* m_dump_ppu_value;
+ wxStaticText* m_ppu_label;
+ wxGauge* m_ppu_gauge;
+ wxChoice* m_ppu_increase;
+ wxStaticText* m_ppu_value;
wxStaticLine* m_staticline3;
- wxCheckBox* m_dump_check_battery;
- wxCheckBox* m_dump_check_forcemapper;
- wxTextCtrl* m_dump_text_forcemapper;
- wxButton* m_dump_button;
+ wxCheckBox* m_check_battery;
+ wxCheckBox* m_check_forcemapper;
+ wxTextCtrl* m_text_forcemapper;
+ wxButton* m_button;
// Virtual event handlers, overide them in your derived class
virtual void mapper_change_check( wxCommandEvent& event ) { event.Skip(); }
- virtual void dump_button_click( wxCommandEvent& event ) { event.Skip(); }
+ virtual void button_click( wxCommandEvent& event ) { event.Skip(); }
public:
private:
protected:
- wxStaticText* m_program_script_label;
- wxChoice* m_program_script_choice;
- wxStaticText* m_program_label;
- wxFilePickerCtrl* m_program_romimage_picker;
+ wxStaticText* m_script_label;
+ wxChoice* m_script_choice;
+ wxStaticText* m_romimage_label;
+ wxFilePickerCtrl* m_romimage_picker;
wxStaticLine* m_staticline11;
- wxStaticText* m_program_cpu_label;
- wxGauge* m_program_cpu_gauge;
- wxChoice* m_program_cpu_device;
- wxChoice* m_program_cpu_padding;
- wxStaticText* m_program_cpu_value;
+ wxStaticText* m_cpu_label;
+ wxGauge* m_cpu_gauge;
+ wxChoice* m_cpu_device;
+ wxChoice* m_cpu_padding;
+ wxStaticText* m_cpu_value;
wxStaticLine* m_staticline21;
- wxStaticText* m_program_ppu_label;
- wxGauge* m_program_ppu_gauge;
- wxChoice* m_program_ppu_device;
- wxChoice* m_program_ppu_padding;
- wxStaticText* m_program_ppu_value;
+ wxStaticText* m_ppu_label;
+ wxGauge* m_ppu_gauge;
+ wxChoice* m_ppu_device;
+ wxChoice* m_ppu_padding;
+ wxStaticText* m_ppu_value;
wxStaticLine* m_staticline31;
- wxCheckBox* m_program_compare;
- wxButton* m_program_button;
+ wxCheckBox* m_compare;
+ wxButton* m_button;
// Virtual event handlers, overide them in your derived class
- virtual void program_button_click( wxCommandEvent& event ) { event.Skip(); }
+ virtual void button_click( wxCommandEvent& event ) { event.Skip(); }
public:
+function dumpsize_get(m, increase)
+{
+ local dumpsize = m.size_base * increase;
+ if(dumpsize > m.size_max){
+ dumpsize = m.size_max;
+ }
+ return dumpsize;
+}
+
function dump(d, script, mappernum, increase_cpu, increase_ppu)
{
const mega = 0x20000;
+ const INCREASE_AUTO = 11;
+ enum memory_type{ROM, RAM};
dofile(script);
+
local vram = board.vram_mirrorfind == true ? 1 : 0;
+ local ppuarea_memory;
if(mappernum == -1){
mappernum = board.mappernum;
}
- memory_new(d, board.cpu_romsize * increase_cpu, board.ppu_romsize * increase_ppu);
- cpu_dump(d, board.cpu_romsize * increase_cpu / board.cpu_banksize, board.cpu_banksize);
- if(board.ppu_ramfind == true){
- if(ppu_ramfind(d) == true){
- nesfile_save(d, mappernum, vram);
- return;
+ if(board.ppu_rom.size_base == 0){
+ ppuarea_memory = memory_type.RAM;
+ }else if(board.ppu_ramfind == true){
+ ppuarea_memory = ppu_ramfind(d) == true ? memory_type.RAM : memory_type.ROM;
+ if(ppuarea_memory == memory_type.RAM){
+ increase_ppu = 0;
+ }
+ }else{
+ ppuarea_memory = memory_type.ROM;
+ }
+ if(increase_cpu == INCREASE_AUTO){
+ if(ppuarea_memory == memory_type.RAM && board.ppu_ramfind == true){
+ increase_cpu = 2;
+ }else{
+ increase_cpu = 1;
}
}
- if(board.ppu_romsize != 0){
- ppu_dump(d, board.ppu_romsize * increase_ppu / board.ppu_banksize, board.ppu_banksize);
+ local cpu_dumpsize = dumpsize_get(board.cpu_rom, increase_cpu);
+ local ppu_dumpsize = dumpsize_get(board.ppu_rom, increase_ppu);
+
+ memory_new(d, cpu_dumpsize, ppu_dumpsize);
+ cpu_dump(d, cpu_dumpsize / board.cpu_rom.banksize, board.cpu_rom.banksize);
+ if(ppuarea_memory == memory_type.ROM){
+ ppu_dump(d, ppu_dumpsize / board.ppu_rom.banksize, board.ppu_rom.banksize);
}
nesfile_save(d, mappernum, vram);
- return;
}
function workram_rw(d, script, increase_cpu)
{
dofile(script);
- memory_new(d, board.cpu_ramsize * increase_cpu, 0);
- cpu_ram_access(d, board.cpu_ramsize / board.cpu_banksize, board.cpu_ramsize);
+ local cpu_dumpsize = dumpsize_get(board.cpu_ram, increase_cpu);
+ memory_new(d, cpu_dumpsize, 0);
+ cpu_ram_access(d, cpu_dumpsize / board.cpu_ram.banksize, cpu_dumpsize);
memory_finalize(d);
}
RomDb::RomDb(wxString file)
{
m_hash = new CartridgeHash(2200);
+ m_document = new wxXmlDocument(file);
+}
+
+RomDb::RomDb(void)
+{
+ m_hash = new CartridgeHash(20);
m_document = new wxXmlDocument();
- m_document->Load(file);
}
RomDb::~RomDb(void)
bool RomDb::Generate(void)
{
- wxXmlNode *game = m_document->GetRoot()->GetChildren();
+ wxXmlNode *root = m_document->GetRoot();
+ if(root == NULL){
+ return false;
+ }
+ wxXmlNode *game = root->GetChildren();
if(game == NULL){
return false;
}
return true;
}
-void RomDb::Search(unsigned long crc, wxTextCtrl *log)
+void RomDb::Search(unsigned long crc, wxTextCtrl *log) const
{
wxXmlNode *cartridge = (*m_hash)[crc];
if(cartridge == NULL){
CartridgeHash *m_hash;\r
public:\r
RomDb(wxString file);\r
+ RomDb(void);\r
bool Generate(void);\r
- void Search(unsigned long crc, wxTextCtrl *log);\r
+ void Search(unsigned long crc, wxTextCtrl *log) const;\r
~RomDb();\r
};\r
return 1;
}
+static SQInteger return_true(HSQUIRRELVM v)
+{
+ sq_pushbool(v, SQFalse);
+ return 1;
+}
+
static void memory_new_init(struct dump_memory_driver *d)
{
d->memory.offset = 0;
}
memory_new_init(&d->cpu);
- memory_new_init(&d->ppu);
+ if(d->mode == MODE_ROM_DUMP){
+ memory_new_init(&d->ppu);
+ }
return 0;
}
if(d->battery == true){
image.backupram = 1;
}
- nesfile_create(&d->log, &image, d->target);
+ d->crc = nesfile_create(&d->log, &image, d->target);
nesbuffer_free(&image, 0); //0 is MODE_xxx_xxxx
d->cpu.memory.data = NULL;
{
HSQUIRRELVM v = qr_open(&d->log);
- qr_function_register_global(v, wgT("ppu_ramfind"), script_nop);
qr_function_register_global(v, wgT("cpu_write"), cpu_write_check);
qr_function_register_global(v, wgT("memory_new"), memory_size_set);
qr_function_register_global(v, wgT("nesfile_save"), length_check);
qr_function_register_global(v, wgT("cpu_read"), cpu_read_count);
qr_function_register_global(v, wgT("ppu_read"), ppu_read_count);
+ qr_function_register_global(v, wgT("ppu_ramfind"), return_true);
if(script_execute(v, d) == false){
qr_close(v);
return false;
if(SQ_FAILED(r)){
ret = false;
Free(d->cpu.memory.data);
- Free(d->ppu.memory.data);
d->cpu.memory.data = NULL;
- d->ppu.memory.data = NULL;
+// Free(d->ppu.memory.data);
+// d->ppu.memory.data = NULL;
}
}
return ret;
buf_save(d->cpu.memory.data, d->target, d->cpu.memory.size);
}
Free(d->cpu.memory.data);
- Free(d->ppu.memory.data);
d->cpu.memory.data = NULL;
- d->ppu.memory.data = NULL;
+// Free(d->ppu.memory.data);
+// d->ppu.memory.data = NULL;
return 0;
}
enum dump_mode{
MODE_ROM_DUMP, MODE_RAM_READ, MODE_RAM_WRITE
};
+enum {
+ INCREASE_AUTO = 11
+};
struct dump_config{
enum dump_mode mode;
const wgChar *script;
long mappernum;
bool progress;
bool battery;
+ unsigned long crc;
struct textcontrol log;
void (*except)(const wgChar *str);
};
if(t->programming.length == 0){
if(t->programming.offset != 0 && compare == true){
if(program_compare(h, t) == false){
- log->append(log->object, wgT("%s memory compare error\n"), t->memory.name);
+ log->append(log->object, wgT("%s memory compare error, offset 0x%06x\n"), t->memory.name, t->programming.offset);
return false;
}
}
}
if (crc != original_crc) error();
*/
-static uint32_t update_crc(uint32_t crc, const uint8_t *buf, int len)
+uint32_t crc32_update(uint32_t crc, const uint8_t *buf, int len)
{
uint32_t c = crc ^ 0xffffffffUL;
int n;
//uint32_t crc(uint8_t *buf, int len) //ÊÑ¿ô̾¤È¤«¤Ö¤ë¤Î¤Ç¤«¤¨¤ë
uint32_t crc32_get(const uint8_t *buf, int len)
{
- return update_crc(0UL, buf, len);
+ return crc32_update(0UL, buf, len);
}
#ifndef _CRC32_H_
#define _CRC32_H_
+uint32_t crc32_update(uint32_t crc, const uint8_t *buf, int len);
uint32_t crc32_get(const uint8_t *buf, int len);
#endif
}
}
-void nesfile_create(const struct textcontrol *l, struct romimage *r, const wgChar *romfilename)
+uint32_t nesfile_create(const struct textcontrol *l, struct romimage *r, const wgChar *romfilename)
{
int error = 0;
//RAM adapter bios size 0x2000 は変更しない
error += mirroring_fix(l, &(r->ppu_rom), CHARCTER_ROM_MIN);
}
if((DEBUG == 0) && (error != 0)){
- return;
+ return 0;
}
//修正済み ROM 情報表示
l->append(l->object, wgT("%s, mapper %d\n"), romfilename, (int) r->mappernum);
if(r->cpu_rom.size >= PROGRAM_ROM_MIN){
fwrite(header, sizeof(uint8_t), NES_HEADER_SIZE, f);
}
+ uint32_t crc = crc32_get(r->cpu_rom.data, r->cpu_rom.size);
fwrite(r->cpu_rom.data, sizeof(uint8_t), r->cpu_rom.size, f);
if(r->ppu_rom.size != 0){
fwrite(r->ppu_rom.data, sizeof(uint8_t), r->ppu_rom.size, f);
+ crc = crc32_update(crc, r->ppu_rom.data, r->ppu_rom.size);
}
fclose(f);
+ return crc;
}
/*
};
bool nesbuffer_malloc(struct romimage *r, int mode);
-void nesfile_create(const struct textcontrol *l, struct romimage *r, const wgChar *romfilename);
+uint32_t nesfile_create(const struct textcontrol *l, struct romimage *r, const wgChar *romfilename);
void nesbuffer_free(struct romimage *r, int mode);
void backupram_create(const struct memory *r, const wgChar *ramfilename);
int memorysize_check(const long size, int region);