OSDN Git Service

ram mode, database に対応,
authornaruko <naruko@24ea1065-a21e-4ca1-99c9-f5125deb0858>
Thu, 11 Nov 2010 19:17:49 +0000 (19:17 +0000)
committernaruko <naruko@24ea1065-a21e-4ca1-99c9-f5125deb0858>
Thu, 11 Nov 2010 19:17:49 +0000 (19:17 +0000)
git-svn-id: svn+ssh://svn.osdn.net/svnroot/unagi@389 24ea1065-a21e-4ca1-99c9-f5125deb0858

14 files changed:
client/trunk/anago/anago_frame.cpp
client/trunk/anago/anago_gui.cpp
client/trunk/anago/anago_gui.fbp
client/trunk/anago/anago_gui.h
client/trunk/anago/dumpcore.nut
client/trunk/anago/nescartxml.cpp
client/trunk/anago/nescartxml.hh
client/trunk/anago/script_dump.c
client/trunk/anago/script_dump.h
client/trunk/anago/script_program.c
client/trunk/crc32.c
client/trunk/crc32.h
client/trunk/romimage.c
client/trunk/romimage.h

index ec7ba36..9ea5082 100644 (file)
@@ -4,6 +4,8 @@
 #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"
@@ -43,7 +45,9 @@ static void value_set(void *gauge, void *label, int value)
        
        wxMutexGuiEnter();
        g->SetValue(value);
-       l->SetLabel(str);
+       if(label != NULL){
+               l->SetLabel(str);
+       }
        wxMutexGuiLeave();
 }
 
@@ -123,27 +127,60 @@ static void choice_append(void *choice, const wxChar *str)
 
 //---- 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
        }
 };
@@ -151,42 +188,66 @@ public:
 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++){
@@ -196,7 +257,14 @@ static void script_choice_init(wxControlWithItems *c, wxString filespec, wxTextC
        }
 }
 
-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;
@@ -213,13 +281,14 @@ class anago_panel_dump : public panel_dump
 {
 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"));
@@ -227,7 +296,7 @@ private:
                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;
@@ -237,28 +306,28 @@ private:
                }
                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);
@@ -267,8 +336,8 @@ private:
                {
                        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;
@@ -277,7 +346,7 @@ private:
                }
 
                {
-                       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){
@@ -292,38 +361,30 @@ private:
                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;
@@ -332,85 +393,82 @@ protected:
 
        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"));
@@ -419,7 +477,7 @@ private:
                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){
@@ -444,16 +502,16 @@ private:
                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;
@@ -462,14 +520,14 @@ private:
                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");
@@ -479,19 +537,19 @@ private:
                        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;
@@ -501,27 +559,19 @@ private:
                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;
@@ -534,103 +584,225 @@ private:
                }
        }
 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);
        }
 };
 
@@ -682,6 +854,7 @@ public:
 class anago_frame : public frame_main
 {
 private:
+       enum anago_status m_status; //ここだけ実体, 各パネルはこのポインタ
        const wxString m_config_file;
        anago_panel_program *m_panel_program;
 protected:
@@ -693,7 +866,7 @@ 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
@@ -713,10 +886,12 @@ public:
                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);
        }
 
index 5c8ea97..b9900db 100644 (file)
@@ -117,30 +117,30 @@ panel_workram::panel_workram( wxWindow* parent, wxWindowID id, const wxPoint& po
        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 );
        
@@ -169,30 +169,30 @@ panel_workram::panel_workram( wxWindow* parent, wxWindowID id, const wxPoint& po
        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 );
        
@@ -201,15 +201,15 @@ panel_workram::panel_workram( wxWindow* parent, wxWindowID id, const wxPoint& po
        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 );
        
 }
 
@@ -224,21 +224,21 @@ panel_dump::panel_dump( wxWindow* parent, wxWindowID id, const wxPoint& pos, con
        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 );
        
@@ -248,32 +248,32 @@ panel_dump::panel_dump( wxWindow* parent, wxWindowID id, const wxPoint& pos, con
        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 );
        
@@ -283,32 +283,32 @@ panel_dump::panel_dump( wxWindow* parent, wxWindowID id, const wxPoint& pos, con
        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 );
        
@@ -318,20 +318,20 @@ panel_dump::panel_dump( wxWindow* parent, wxWindowID id, const wxPoint& pos, con
        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 );
        
@@ -340,15 +340,15 @@ panel_dump::panel_dump( wxWindow* parent, wxWindowID id, const wxPoint& pos, con
        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 );
        
 }
 
@@ -363,21 +363,21 @@ panel_program::panel_program( wxWindow* parent, wxWindowID id, const wxPoint& po
        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 );
        
@@ -387,39 +387,39 @@ panel_program::panel_program( wxWindow* parent, wxWindowID id, const wxPoint& po
        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 );
        
@@ -429,39 +429,39 @@ panel_program::panel_program( wxWindow* parent, wxWindowID id, const wxPoint& po
        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 );
        
@@ -471,11 +471,11 @@ panel_program::panel_program( wxWindow* parent, wxWindowID id, const wxPoint& po
        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 );
        
@@ -484,12 +484,12 @@ panel_program::panel_program( wxWindow* parent, wxWindowID id, const wxPoint& po
        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 );
        
 }
index a8d7346..6aef4c2 100644 (file)
                 </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">&amp;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">&amp;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">&amp;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">&amp;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">&amp;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">&amp;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">&amp;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">&amp;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">&amp;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">&amp;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">&amp;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
index 5e10820..e08cebc 100644 (file)
@@ -85,20 +85,20 @@ class panel_workram : public wxPanel
                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(); }
@@ -120,29 +120,29 @@ class panel_dump : public wxPanel
        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:
@@ -160,28 +160,28 @@ class panel_program : public wxPanel
        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:
index 7374ed7..ec3df38 100644 (file)
@@ -1,30 +1,57 @@
+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);
 }
index 64f18ae..73e48db 100644 (file)
@@ -7,8 +7,13 @@ WX_DECLARE_HASH_MAP(unsigned long, wxXmlNode *, wxIntegerHash, wxIntegerEqual, C
 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)
@@ -19,7 +24,11 @@ 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;
        }
@@ -50,7 +59,7 @@ bool RomDb::Generate(void)
        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){
index cbdfe7e..27e7038 100644 (file)
@@ -7,7 +7,8 @@ private:
        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
index cc1d039..d113d36 100644 (file)
@@ -153,6 +153,12 @@ static SQInteger ppu_ramfind(HSQUIRRELVM v)
        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;
@@ -175,7 +181,9 @@ static SQInteger memory_new(HSQUIRRELVM v)
        }
 
        memory_new_init(&d->cpu);
-       memory_new_init(&d->ppu);
+       if(d->mode == MODE_ROM_DUMP){
+               memory_new_init(&d->ppu);
+       }
        return 0;
 }
 
@@ -208,7 +216,7 @@ static SQInteger nesfile_save(HSQUIRRELVM v)
        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;
@@ -340,12 +348,12 @@ bool script_dump_execute(struct dump_config *d)
        
        {
                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;
@@ -393,9 +401,9 @@ static bool workram_execute(HSQUIRRELVM v, struct dump_config *d)
                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;
@@ -437,9 +445,9 @@ static SQInteger memory_finalize(HSQUIRRELVM v)
                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;
 }
index 4f80242..dd14472 100644 (file)
@@ -3,6 +3,9 @@
 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;
@@ -18,6 +21,7 @@ struct dump_config{
        long mappernum;
        bool progress;
        bool battery;
+       unsigned long crc;
        struct textcontrol log;
        void (*except)(const wgChar *str);
 };
index 791196e..a6c680b 100644 (file)
@@ -239,7 +239,7 @@ static bool program_memoryarea(HSQUIRRELVM co, const struct reader_handle *h, st
        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;
                        }
                }
index fa981c4..c1f659f 100644 (file)
@@ -17,7 +17,7 @@ GZIP file format specification version 4.3
    }
    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;
@@ -32,5 +32,5 @@ static uint32_t update_crc(uint32_t crc, const uint8_t *buf, int len)
 //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);
 }
index 629857b..186ae4e 100644 (file)
@@ -1,4 +1,5 @@
 #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
index 52db43a..f1a7f82 100644 (file)
@@ -88,7 +88,7 @@ static void rominfo_print(const struct textcontrol *l, const struct memory *m)
        }
 }
 
-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 は変更しない
@@ -99,7 +99,7 @@ void nesfile_create(const struct textcontrol *l, struct romimage *r, const wgCha
                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);
@@ -119,11 +119,14 @@ void nesfile_create(const struct textcontrol *l, struct romimage *r, const wgCha
        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;
 }
 
 /*
index c2acd79..ef3e6da 100644 (file)
@@ -53,7 +53,7 @@ enum{
 };
 
 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);