OSDN Git Service

stdout への printf を排除
authornaruko <naruko@24ea1065-a21e-4ca1-99c9-f5125deb0858>
Mon, 25 Oct 2010 22:34:23 +0000 (22:34 +0000)
committernaruko <naruko@24ea1065-a21e-4ca1-99c9-f5125deb0858>
Mon, 25 Oct 2010 22:34:23 +0000 (22:34 +0000)
git-svn-id: svn+ssh://svn.osdn.net/svnroot/unagi@374 24ea1065-a21e-4ca1-99c9-f5125deb0858

17 files changed:
client/trunk/anago/Makefile.wx
client/trunk/anago/anago.c
client/trunk/anago/anago_frame.cpp
client/trunk/anago/script.lua.c [deleted file]
client/trunk/anago/script_common.c
client/trunk/anago/script_common.h
client/trunk/anago/script_dump.c
client/trunk/anago/script_dump.h
client/trunk/anago/script_program.c [moved from client/trunk/anago/script_flash.c with 81% similarity]
client/trunk/anago/script_program.h [moved from client/trunk/anago/script_flash.h with 74% similarity]
client/trunk/anago/squirrel_wrap.c
client/trunk/header.c
client/trunk/header.h
client/trunk/reader_kazzo.c
client/trunk/reader_master.h
client/trunk/widget.c
client/trunk/widget.h

index bc3fc4c..e9be029 100644 (file)
@@ -27,7 +27,7 @@ CXXFLAGS = -I.. `$(WX_CONFIG) --cppflags`
 #script_flash.o\r
 OBJ = anago_gui.o anago_frame.o\r
 OBJ += header.o crc32.o file.o widget.o \\r
-       script_flash.o script_dump.o script_common.o \\r
+       script_program.o script_dump.o script_common.o \\r
        progress.o flash_device.o \\r
        reader_kazzo.o usb_device.o squirrel_wrap.o memory_manage.o\r
 \r
@@ -36,5 +36,8 @@ clean:
 $(TARGET): $(OBJ) \r
        g++ -o $@ $(OBJ) $(LDFLAG) `$(WX_CONFIG) --libs core`  -lusb -lsqstdlib -lsquirrel\r
 \r
-anago_gui.o: anago_gui.cpp anago_gui.h\r
-anago_frame.o: anago_frame.cpp anago_gui.h\r
+anago.d:\r
+       gcc -MM $(CFLAGS) $(CPPFLAGS) *.c > $@\r
+       g++ -MM $(CFLAGS) $(CXXFLAGS) *.cpp >> $@\r
+\r
+-include anago.d\r
index b0e417e..e396dd3 100644 (file)
@@ -8,7 +8,7 @@
 #include "reader_master.h"
 #include "reader_kazzo.h"
 #include "reader_dummy.h"
-#include "script_flash.h"
+#include "script_program.h"
 #include "script_dump.h"
 
 static bool transtype_flash_set(char mode, struct memory *t)
index d2955d5..350dd08 100644 (file)
@@ -4,6 +4,7 @@
 #include <wx/thread.h>
 #include <wx/app.h>
 #include <cstring>
+#include <cstdarg>
 #include "anago_gui.h"
 #include "widget.h"
 #include "reader_master.h"
@@ -13,7 +14,7 @@ extern "C"{
 #include "header.h"
 #include "flash_device.h"
 #include "script_dump.h"
-#include "script_flash.h"
+#include "script_program.h"
 }
 
 //---- C++ -> C -> C++ wrapping functions ----
@@ -47,17 +48,35 @@ static void range_set(void *gauge, int value)
        g->SetRange(value);
 }
 
-static void text_append(void *log, const char *str)
+static void text_append_va(void *log, const char *format, va_list list)
 {
        wxTextCtrl *l = static_cast<wxTextCtrl *>(log);
+       wxString str;
+       str.PrintfV(format, list);
+
        wxMutexGuiEnter();
        *l << str;
        wxMutexGuiLeave();
 }
 
-static void label_set(void *label, const char *str)
+static void text_append(void *log, const char *format, ...)
+{
+       va_list list;
+       va_start(list, format);
+       text_append_va(log, format, list);
+       va_end(list);
+}
+
+static void label_set(void *label, const char *format, ...)
 {
        wxStaticText *l = static_cast<wxStaticText *>(label);
+       wxString str;
+       va_list list;
+       
+       va_start(list, format);
+       str.PrintfV(format, list);
+       va_end(list);
+
        wxMutexGuiEnter();
        l->SetLabel(str);
        wxMutexGuiLeave();
@@ -77,9 +96,14 @@ private:
        anago_frame *m_frame;
        struct dump_config m_config;
 protected:
-       virtual void *Entry(void);
+       void *Entry(void);
+       void OnExit()
+       {
+               delete [] m_config.script;
+               delete [] m_config.target;
+       }
 public:
-       anago_dumper(anago_frame *f, struct dump_config *d) : wxThread()
+       anago_dumper(anago_frame *f, const struct dump_config *d) : wxThread()
        {
                m_frame = f;
                memcpy(&m_config, d, sizeof(struct dump_config));
@@ -92,9 +116,14 @@ private:
        anago_frame *m_frame;
        struct program_config m_config;
 protected:
-       virtual void *Entry(void);
+       void *Entry(void);
+       void OnExit()
+       {
+               delete [] m_config.script;
+               delete [] m_config.target;
+       }
 public:
-       anago_programmer(anago_frame *f, struct program_config *d) : wxThread()
+       anago_programmer(anago_frame *f, const struct program_config *d) : wxThread()
        {
                m_frame = f;
                memcpy(&m_config, d, sizeof(struct program_config));
@@ -167,11 +196,17 @@ private:
                
                config.log.object = m_log;
                config.log.append = text_append;
+               config.log.append_va = text_append_va;
                config.cpu.increase = dump_increase_get(m_dump_cpu_increase);
                config.ppu.increase = dump_increase_get(m_dump_ppu_increase);
                config.progress = true;
-               wxString str_script = m_dump_script_choice->GetStringSelection();
-               strncpy(config.script, str_script.fn_str(), DUMP_SCRIPT_STR_LENGTH);
+               config.battery = m_dump_check_battery->GetValue();
+               {
+                       wxString str_script = m_dump_script_choice->GetStringSelection();
+                       char *t = new char[str_script.Length() + 1];
+                       config.script = t;
+                       strncpy(t, str_script.fn_str(), str_script.Length() + 1);
+               }
 
                {
                        wxString str;
@@ -185,22 +220,22 @@ private:
                        }
                }
 
-               wxTextCtrl *text = m_dump_romimage_picker->GetTextCtrl();
-               wxString str_rom = text->GetValue();
-               if(text->IsEmpty() == true){
-                       *m_log << "Enter filename to ROM image\n";
-                       return;
+               {
+                       wxTextCtrl *text = m_dump_romimage_picker->GetTextCtrl();
+                       wxString str_rom = text->GetValue();
+                       char *t = new char[str_rom.Length() + 1];
+                       if(text->IsEmpty() == true){
+                               *m_log << "Enter filename to ROM image\n";
+                               return;
+                       }
+                       config.target = t;
+                       strncpy(t, str_rom.fn_str(), str_rom.Length() + 1);
                }
-               strncpy(config.target, str_rom.fn_str(), DUMP_TARGET_STR_LENGTH);
 
                config.control = &DRIVER_KAZZO.control;
                config.cpu.access = &DRIVER_KAZZO.cpu;
                config.ppu.access = &DRIVER_KAZZO.ppu;
-               config.control->open(&config.handle);
-               if(config.handle.handle == NULL){
-                       *m_log << "reader open error\n";
-                       return;
-               }
+
                m_dump_script_choice->Disable();
                m_dump_romimage_picker->Disable();
                m_dump_check_battery->Disable();
@@ -210,7 +245,6 @@ private:
                m_dump_cpu_increase->Disable();
                m_dump_ppu_increase->Disable();
 
-               config.control->init(&config.handle);
 /*             if(m_anago_thread != NULL){ //???
                        delete m_anago_thread;
                }*/
@@ -258,7 +292,7 @@ private:
                }
                return true;
        }
-#if 1
+
        void program_execute(void)
        {
                struct program_config f;
@@ -273,26 +307,29 @@ private:
                
                f.log.object = m_log;
                f.log.append = text_append;
+               f.log.append_va = text_append_va;
                
-               wxString str_script = m_program_script_choice->GetStringSelection();
-               strncpy(f.script, str_script.fn_str(), PROGRAM_SCRIPT_STR_LENGTH);
+               {
+                       wxString str_script = m_program_script_choice->GetStringSelection();
+                       char *t = new char[str_script.Length() + 1];
+                       strncpy(t, str_script.fn_str(), str_script.Length() + 1);
+                       f.script = t;
+               }
 
-               wxTextCtrl *text = m_program_romimage_picker->GetTextCtrl();
-               wxString str_rom = text->GetValue();
-               if(text->IsEmpty() == true){
-                       *m_log << "Enter filename to ROM image\n";
-                       return;
+               {
+                       wxTextCtrl *text = m_program_romimage_picker->GetTextCtrl();
+                       wxString str_rom = text->GetValue();
+                       if(text->IsEmpty() == true){
+                               *m_log << "Enter filename to ROM image\n";
+                               return;
+                       }
+                       char *t = new char[str_rom.Length() + 1];
+                       strncpy(t, str_rom.fn_str(), str_rom.Length() + 1);
+                       f.target = t;
                }
-               strncpy(f.target, str_rom.fn_str(), PROGRAM_TARGET_STR_LENGTH);
                f.compare = m_program_compare->GetValue();
                f.testrun = false;
-#if 0
-//             if(nesfile_load(__FUNCTION__, f.target, &f.rom) == false){
-               if(nesfile_load(__FUNCTION__, str_rom.fn_str(), &f.rom) == false){
-                       *m_log << str_rom << " open error\n";
-                       return;
-               }
-#endif
+
                if(program_rom_set(
                        m_program_cpu_device->GetStringSelection(), 
                        m_program_cpu_padding->GetSelection(),
@@ -311,7 +348,6 @@ private:
                f.control = &DRIVER_KAZZO.control;
                f.cpu.access = &DRIVER_KAZZO.cpu;
                f.ppu.access = &DRIVER_KAZZO.ppu;
-               f.control->open(&f.handle);
 
                m_program_script_choice->Disable();
                m_program_romimage_picker->Disable();
@@ -436,8 +472,6 @@ public:
 void *anago_dumper::Entry(void)
 {
        script_dump_execute(&m_config);
-       m_config.control->close(&m_config.handle);
-       m_config.handle.handle = NULL;
        m_frame->DumpThreadFinish();
        return NULL;
 }
diff --git a/client/trunk/anago/script.lua.c b/client/trunk/anago/script.lua.c
deleted file mode 100644 (file)
index 62e7259..0000000
+++ /dev/null
@@ -1,198 +0,0 @@
-#include <stdio.h>
-#include <stdbool.h>
-#include "lua.h"
-#include "lualib.h"
-#include "lauxlib.h"
-#include "type.h"
-#include "header.h"
-#include "reader_master.h"
-#include "script.h"
-
-static struct anago_flash_order{
-       int program_count, command_change;
-       long address, length;
-       long c2aaa, c5555, unit;
-       struct memory *memory;
-       void (*config)(long c2aaa, long c5555, long unit);
-       void (*write)(long address, long length, const uint8_t *data);
-       void (*read)(long address, long length, u8 *data);
-       void (*erase)(long address, bool dowait);
-       long (*program)(long address, long length, u8 *data, bool dowait);
-}order_cpu, order_ppu;
-static inline long long_get(lua_State *t, int index)
-{
-       lua_Number d = lua_tonumber(t, index);
-       return (long) d;
-}
-static void command_set(lua_State *l, struct anago_flash_order *t)
-{
-       long command = long_get(l, 1);
-       long address = long_get(l, 2);
-       long mask = long_get(l, 3);
-       long d = command & (mask - 1);
-       d |= address;
-       switch(command){
-       case 0x02aa: case 0x2aaa:
-               t->c2aaa = d;
-               break;
-       case 0x0555: case 0x5555:
-               t->c5555 = d;
-               break;
-       default:
-               puts("unknown command address");
-               return;
-       }
-       t->command_change += 1;
-}
-static int cpu_command(lua_State *l)
-{
-       command_set(l, &order_cpu);
-       return 0;
-}
-static int ppu_command(lua_State *l)
-{
-       command_set(l, &order_ppu);
-       return 0;
-}
-static int write(lua_State *l, struct anago_flash_order *t)
-{
-       long address = long_get(l, 1);
-       long data = long_get(l, 2);
-       uint8_t d8 = (uint8_t) data;
-       t->write(address, 1, &d8);
-       return 0;
-}
-static int cpu_write(lua_State *l)
-{
-       return write(l, &order_cpu);
-}
-static int program_regist(lua_State *l, const char *name, struct anago_flash_order *t)
-{
-       t->address = long_get(l, 1);
-       t->length = long_get(l, 2);
-       if(t->command_change != 0){
-               t->config(t->c2aaa, t->c5555, t->unit);
-               t->command_change = 0;
-       }
-       
-       printf("programming %s area 0x%06x...\n", name, t->memory->offset);
-       fflush(stdout);
-       return lua_yield(l, 0);
-}
-static void program_execute(struct anago_flash_order *t)
-{
-       if(t->program_count == 0){
-               t->erase(t->c2aaa, false);
-               t->program_count += 1;
-               printf("erase...\n");
-               fflush(stdout);
-               return;
-       }
-       t->program_count += 1;
-//     printf("writing %06x\n", t->memory->offset);
-//     fflush(stdout);
-       const long w = t->program(t->address, t->length, t->memory->data + t->memory->offset, false);
-       t->address += w;
-       t->length -= w;
-       t->memory->offset += w;
-}
-static int cpu_program(lua_State *l)
-{
-       return program_regist(l, "program ROM", &order_cpu);
-}
-static int ppu_program(lua_State *l)
-{
-       return program_regist(l, "charcter ROM", &order_ppu);
-}
-static int mmc1_write(lua_State *l)
-{
-       long address = long_get(l, 1);
-       uint8_t data = (uint8_t) long_get(l, 2);
-       int i = 5;
-       while(i != 0){
-               order_cpu.write(address, 1, &data);
-               data >>= 1;
-               i--;
-       }
-       return 0;
-}
-
-void script_execute(struct config *c)
-{
-       order_cpu.command_change = 0;
-       order_cpu.program_count = 0;
-       order_cpu.unit = c->flash_cpu->pagesize;
-       order_cpu.memory = &c->rom.cpu_rom;
-       order_cpu.config = c->reader->cpu_flash_config;
-       order_cpu.write = c->reader->cpu_write_6502;
-       order_cpu.read = c->reader->cpu_read;
-       order_cpu.erase = c->reader->cpu_flash_erase;
-       order_cpu.program = c->reader->cpu_flash_program;
-       
-       order_ppu.command_change = 0;
-       order_ppu.program_count = 0;
-       order_ppu.unit = c->flash_ppu->pagesize;
-       order_ppu.memory = &c->rom.ppu_rom;
-       order_ppu.config = c->reader->ppu_flash_config;
-       order_ppu.write = c->reader->ppu_write; //warning ¤Ï̵»ë
-       order_ppu.read = c->reader->ppu_read;
-       order_ppu.erase = c->reader->ppu_flash_erase;
-       order_ppu.program = c->reader->ppu_flash_program;
-       
-       lua_State *const l = lua_open();
-       luaL_openlibs(l);
-       lua_register(l, "cpu_write", cpu_write);
-       lua_register(l, "cpu_program", cpu_program);
-       lua_register(l, "cpu_command", cpu_command);
-       lua_register(l, "ppu_program", ppu_program);
-       lua_register(l, "ppu_command", ppu_command);
-       lua_register(l, "mmc1_write", mmc1_write);
-       if(luaL_loadfile(l, c->script) == LUA_ERRFILE){
-               lua_close(l);
-               return;
-       }
-       if(lua_pcall(l, 0, 0, 0) != 0){
-               puts(lua_tostring(l, -1));
-               return;
-       }
-       lua_getfield(l, LUA_GLOBALSINDEX, "initalize");
-       lua_getglobal(l, "initalize");
-       lua_call(l, 0, 0);
-       lua_State *const co_cpu = lua_newthread(l);
-       lua_State *const co_ppu = lua_newthread(l);
-       lua_getglobal(co_cpu, "program_cpu");
-       lua_getglobal(co_ppu, "program_ppu");
-       int state_cpu = LUA_YIELD, state_ppu = LUA_YIELD;
-       if(order_cpu.memory->size == 0 || c->flash_cpu->id_device == FLASH_ID_DEVICE_DUMMY){
-               state_cpu = 0;
-       }
-       if(order_ppu.memory->size == 0 || c->flash_ppu->id_device == FLASH_ID_DEVICE_DUMMY){
-               state_ppu = 0;
-       }
-       if(state_cpu != 0){
-               state_cpu = lua_resume(co_cpu, 0);
-       }
-       if(state_ppu != 0){
-               state_ppu = lua_resume(co_ppu, 0);
-       }
-       do{
-               uint8_t s[2];
-               Sleep(2);
-               c->reader->flash_status(s);
-               if(state_cpu != 0 && s[0] == 0){
-                       if(order_cpu.length == 0){
-                               state_cpu = lua_resume(co_cpu, 0);
-                       }else{
-                               program_execute(&order_cpu);
-                       }
-               }
-               if(state_ppu != 0 && s[1] == 0){
-                       if(order_ppu.length == 0){
-                               state_ppu = lua_resume(co_ppu, 0);
-                       }else{
-                               program_execute(&order_ppu);
-                       }
-               }
-       }while(state_cpu != 0 || state_ppu != 0);
-       lua_close(l);
-}
index 6df1bbb..eaf4f6e 100644 (file)
@@ -1,10 +1,11 @@
 #include <assert.h>
-#include <stdio.h>
 #include <squirrel.h>
 #include <sqstdio.h>
 #include <sqstdaux.h>
 #include "type.h"
 #include "squirrel_wrap.h"
+#include "reader_master.h"
+#include "widget.h"
 #include "script_common.h"
 
 SQInteger script_nop(HSQUIRRELVM v)
@@ -15,7 +16,8 @@ SQInteger script_nop(HSQUIRRELVM v)
 SQInteger range_check(HSQUIRRELVM v, const char *name, long target, const struct range *range)
 {
        if((target < range->start) || (target > range->end)){
-               printf("%s range must be 0x%06x to 0x%06x", name, (int) range->start, (int) range->end);
+               SQPRINTFUNCTION f = sq_getprintfunc(v);
+               f(v, "%s range must be 0x%06x to 0x%06x", name, (int) range->start, (int) range->end);
                return sq_throwerror(v, "script logical error");
        }
        return 0;
@@ -54,3 +56,30 @@ SQInteger script_require(HSQUIRRELVM v)
        }
        return 0;
 }
+
+static bool connection_check_main(const int *h, const struct textcontrol *text, const struct reader_memory_access *m, long address)
+{
+       const int size = 0x10;
+       uint8_t test1[size], test_m[size];
+       int i;
+       
+       m->memory_read(h, &GAUGE_DUMMY, address, size, test1);
+       for(i = 0; i < 3; i++){
+               m->memory_read(h, &GAUGE_DUMMY, address, size, test_m);
+               if(memcmp(test1, test_m, size) != 0){
+                       text->append(text->object, "maybe cartridge connection error\n");
+                       return false;
+               }
+       }
+       return true;
+}
+bool connection_check(const int *h, const struct textcontrol *text, const struct reader_memory_access *cpu, const struct reader_memory_access *ppu)
+{
+       if(connection_check_main(h, text, cpu, 0xf000) == false){
+               return false;
+       }
+       if(connection_check_main(h, text, ppu, 0x0000) == false){
+               return false;
+       }
+       return true;
+}
index 69627d2..e1c6960 100644 (file)
@@ -7,4 +7,8 @@ SQInteger script_nop(HSQUIRRELVM v);
 SQInteger range_check(HSQUIRRELVM v, const char *name, long target, const struct range *range);
 SQInteger cpu_write_check(HSQUIRRELVM v);
 SQInteger script_require(HSQUIRRELVM v);
+
+struct reader_handle;
+struct reader_memory_access;
+bool connection_check(const int *h, const struct textcontrol *text, const struct reader_memory_access *cpu, const struct reader_memory_access *ppu);
 #endif
index 6920be1..970eac4 100644 (file)
@@ -14,7 +14,7 @@
 #include "script_common.h"
 #include "script_dump.h"
 
-static SQInteger write_memory(HSQUIRRELVM v, const struct reader_handle *h, struct dump_memory_driver *t)
+static SQInteger write_memory(HSQUIRRELVM v, const int *h, struct dump_memory_driver *t)
 {
        long address, data;
        SQRESULT r = qr_argument_get(v, 2, &address, &data);
@@ -32,7 +32,7 @@ static SQInteger cpu_write(HSQUIRRELVM v)
        if(SQ_FAILED(r)){
                return r;
        }
-       return write_memory(v, &d->handle, &d->cpu);
+       return write_memory(v, d->handle, &d->cpu);
 }
 
 //¤³¤³¤Î printf ¤Ï debug ÍѤ˻Ĥ·¤Æ¤ª¤¯
@@ -68,7 +68,7 @@ static void buffer_show(struct memory *t, long length)
        fflush(stdout);
 }
 
-static SQInteger read_memory(HSQUIRRELVM v, const struct reader_handle *h, struct dump_memory_driver *t, bool progress)
+static SQInteger read_memory(HSQUIRRELVM v, const int *h, struct dump_memory_driver *t, bool progress)
 {
        long address, length;
        SQRESULT r = qr_argument_get(v, 2, &address, &length);
@@ -80,7 +80,6 @@ static SQInteger read_memory(HSQUIRRELVM v, const struct reader_handle *h, struc
                buffer_show(&t->memory, length);
        }
        t->memory.offset += length;
-       //progress_show(t);
 
        return 0;
 }
@@ -92,7 +91,7 @@ static SQInteger cpu_read(HSQUIRRELVM v)
        if(SQ_FAILED(r)){
                return r;
        }
-       r = read_memory(v, &d->handle, &d->cpu, d->progress);
+       r = read_memory(v, d->handle, &d->cpu, d->progress);
        return r;
 }
 
@@ -103,7 +102,7 @@ static SQInteger ppu_read(HSQUIRRELVM v)
        if(SQ_FAILED(r)){
                return r;
        }
-       r = read_memory(v, &d->handle, &d->ppu, d->progress);
+       r = read_memory(v, d->handle, &d->ppu, d->progress);
        return r;
 }
 
@@ -123,14 +122,14 @@ static SQInteger ppu_ramfind(HSQUIRRELVM v)
        if(SQ_FAILED(r)){
                return r;
        }
-       p->access->memory_write(&d->handle, testaddress, testsize, test_val);
-       p->access->memory_read(&d->handle, &GAUGE_DUMMY, testaddress, testsize, test_result);
+       p->access->memory_write(d->handle, testaddress, testsize, test_val);
+       p->access->memory_read(d->handle, &GAUGE_DUMMY, testaddress, testsize, test_result);
        if(memcmp(test_val, test_result, testsize) != 0){
                sq_pushbool(v, SQFalse);
                return 1;
        }
-       p->access->memory_write(&d->handle, testaddress, testsize, test_str);
-       p->access->memory_read(&d->handle, &GAUGE_DUMMY, testaddress, testsize, test_result);
+       p->access->memory_write(d->handle, testaddress, testsize, test_str);
+       p->access->memory_read(d->handle, &GAUGE_DUMMY, testaddress, testsize, test_result);
        if(memcmp(test_str, test_result, testsize) != 0){
                sq_pushbool(v, SQFalse);
                return 1;
@@ -145,9 +144,8 @@ static void memory_new_init(struct dump_memory_driver *d)
 {
        d->memory.offset = 0;
        d->memory.data = Malloc(d->memory.size);
-       d->gauge.value_set(d->gauge.bar, d->gauge.label, 0);
        d->gauge.range_set(d->gauge.bar, d->memory.size);
-//     d->gauge.label_set(d->gauge.label, d->memory.name);
+       d->gauge.value_set(d->gauge.bar, d->gauge.label, 0);
 }
 
 //test »þ/1ÅÙÌܤΠcall ¤Ç»ÈÍÑ
@@ -162,14 +160,7 @@ static SQInteger memory_new(HSQUIRRELVM v)
        if(SQ_FAILED(r)){
                return r;
        }
-/*     d->cpu.memory.offset = 0;
-       d->cpu.memory.data = Malloc(d->cpu.memory.size);
-       d->cpu.gauge->value_set(0);
-       d->cpu.gauge->range_set(d->cpu.gauge->object, d->cpu.memory.size);
-       d->ppu.memory.offset = 0;
-       d->ppu.memory.data = Malloc(d->ppu.memory.size);
-       d->cpu.gauge->value_set(0);
-       d->ppu.gauge->range_set(d->ppu.gauge->object, d->ppu.memory.size);*/
+
        memory_new_init(&d->cpu);
        memory_new_init(&d->ppu);
        return 0;
@@ -194,13 +185,16 @@ static SQInteger nesfile_save(HSQUIRRELVM v)
        image.ppu_rom = d->ppu.memory;
        image.mirror = MIRROR_PROGRAMABLE;
        if(mirrorfind == 1){
-               if(d->control->vram_connection(&d->handle) == 0x05){
+               if(d->control->vram_connection(d->handle) == 0x05){
                        image.mirror = MIRROR_VERTICAL;
                }else{
                        image.mirror = MIRROR_HORIZONAL;
                }
        }
        image.backupram = 0;
+       if(d->battery == true){
+               image.backupram = 1;
+       }
        nesfile_create(&d->log, &image, d->target);
        nesbuffer_free(&image, 0); //0 is MODE_xxx_xxxx
        
@@ -222,17 +216,14 @@ static SQInteger length_check(HSQUIRRELVM v)
        if(d->cpu.memory.size != d->cpu.read_count){
                cpu = false;
        }
-       char str[80];
        if(cpu == false){
-               snprintf(str, 80, "cpu_romsize is not connected 0x%06x/0x%06x\n", (int) d->cpu.read_count, (int) d->cpu.memory.size);
-               d->log.append(d->log.object, str);
+               d->log.append(d->log.object, "cpu_romsize is not connected 0x%06x/0x%06x\n", (int) d->cpu.read_count, (int) d->cpu.memory.size);
        }
        if(d->ppu.memory.size != d->ppu.read_count){
                ppu = false;
        }
        if(ppu == false){
-               snprintf(str, 80, "ppu_romsize is not connected 0x%06x/0x%06x\n", (int) d->ppu.read_count, (int) d->ppu.memory.size);
-               d->log.append(d->log.object, str);
+               d->log.append(d->log.object, "ppu_romsize is not connected 0x%06x/0x%06x\n", (int) d->ppu.read_count, (int) d->ppu.memory.size);
        }
        if(cpu == false || ppu == false){
                r = sq_throwerror(v, "script logical error");
@@ -240,7 +231,7 @@ static SQInteger length_check(HSQUIRRELVM v)
        return r;
 }
 
-static SQInteger read_count(HSQUIRRELVM v, struct textcontrol *l, struct dump_memory_driver *t, const struct range *range_address, const struct range *range_length)
+static SQInteger read_count(HSQUIRRELVM v, const struct textcontrol *l, struct dump_memory_driver *t, const struct range *range_address, const struct range *range_length)
 {
        long address, length;
        SQRESULT r = qr_argument_get(v, 2, &address, &length);
@@ -252,9 +243,7 @@ static SQInteger read_count(HSQUIRRELVM v, struct textcontrol *l, struct dump_me
                return r;
        }
        if((address < range_address->start) || ((address + length) > range_address->end)){
-               char str[80];
-               snprintf(str, 80, "address range must be 0x%06x to 0x%06x", (int) range_address->start, (int) range_address->end);
-               l->append(l->object, str);
+               l->append(l->object, "address range must be 0x%06x to 0x%06x", (int) range_address->start, (int) range_address->end);
                return sq_throwerror(v, "script logical error");;
        }
        t->read_count += length;
@@ -285,6 +274,17 @@ static SQInteger ppu_read_count(HSQUIRRELVM v)
        return read_count(v, &d->log, &d->ppu, &range_address, &range_length);
 }
 
+static SQInteger memory_size_set(HSQUIRRELVM v)
+{
+       struct dump_config *d;
+       SQRESULT r =  qr_userpointer_get(v, (SQUserPointer) &d);
+       if(SQ_FAILED(r)){
+               return r;
+       }
+       r = qr_argument_get(v, 2, &d->cpu.memory.size, &d->ppu.memory.size);
+       return r;
+}
+
 static bool script_execute(HSQUIRRELVM v, struct dump_config *d)
 {
        bool ret = true;
@@ -292,9 +292,7 @@ static bool script_execute(HSQUIRRELVM v, struct dump_config *d)
                d->log.append(d->log.object, "dump core script error\n");
                ret = false;
        }else if(SQ_FAILED(sqstd_dofile(v, _SC(d->script), SQFalse, SQTrue))){
-               char str[80];
-               snprintf(str, 80, "%s open error\n", d->script);
-               d->log.append(d->log.object, str);
+               d->log.append(d->log.object, "%s open error\n", d->script);
                ret = false;
        }else{
                SQRESULT r = qr_call(
@@ -311,31 +309,30 @@ static bool script_execute(HSQUIRRELVM v, struct dump_config *d)
        }
        return ret;
 }
-void script_dump_execute(struct dump_config *d)
+
+static void dump_memory_driver_init(struct dump_memory_driver *dd)
 {
-       struct dump_memory_driver *dd = &d->cpu;
-       dd->memory.name = "Program";
        dd->memory.size = 0;
        dd->memory.offset = 0;
        dd->memory.attribute = MEMORY_ATTR_WRITE;
        dd->memory.transtype = TRANSTYPE_FULL;
        dd->memory.data = NULL;
        dd->read_count = 0;
+}
+
+void script_dump_execute(struct dump_config *d)
+{
+       dump_memory_driver_init(&d->cpu);
+       d->cpu.memory.name = "Program";
        
-       dd = &d->ppu;
-       dd->memory.name = "Charcter";
-       dd->memory.size = 0;
-       dd->memory.offset = 0;
-       dd->memory.attribute = MEMORY_ATTR_WRITE;
-       dd->memory.transtype = TRANSTYPE_FULL;
-       dd->memory.data = NULL;
-       dd->read_count = 0;
+       dump_memory_driver_init(&d->ppu);
+       d->ppu.memory.name = "Charcter";
        
        {
                HSQUIRRELVM v = qr_open(&d->log); 
                qr_function_register_global(v, "ppu_ramfind", script_nop);
                qr_function_register_global(v, "cpu_write", cpu_write_check);
-               qr_function_register_global(v, "memory_new", memory_new);
+               qr_function_register_global(v, "memory_new", memory_size_set);
                qr_function_register_global(v, "nesfile_save", length_check);
                qr_function_register_global(v, "cpu_read", cpu_read_count);
                qr_function_register_global(v, "ppu_read", ppu_read_count);
@@ -346,12 +343,21 @@ void script_dump_execute(struct dump_config *d)
                }
                qr_close(v);
        }
-       if(d->progress == true){
+/*     if(d->progress == true){
                progress_init();
+       }*/
+       d->handle = d->control->open();
+       if(d->handle == NULL){
+               d->log.append(d->log.object, "reader open error\n");
+               return;
+       }
+       d->control->init(d->handle);
+       if(connection_check(d->handle, &d->log, d->cpu.access, d->ppu.access) == false){
+               return;
        }
        {
                HSQUIRRELVM v = qr_open(&d->log); 
-               qr_function_register_global(v, "memory_new", script_nop);
+               qr_function_register_global(v, "memory_new", memory_new);
                qr_function_register_global(v, "nesfile_save", nesfile_save);
                qr_function_register_global(v, "cpu_write", cpu_write);
                qr_function_register_global(v, "cpu_read", cpu_read);
@@ -361,4 +367,6 @@ void script_dump_execute(struct dump_config *d)
                script_execute(v, d);
                qr_close(v);
        }
+       d->control->close(d->handle);
+       d->handle = NULL;
 }
index 9b7687f..761089a 100644 (file)
@@ -1,13 +1,9 @@
 #ifndef _SCRIPT_DUMP_H_
 #define _SCRIPT_DUMP_H_
-enum{
-       DUMP_SCRIPT_STR_LENGTH = 20,
-       DUMP_TARGET_STR_LENGTH = 50
-};
 struct dump_config{
-       char script[DUMP_SCRIPT_STR_LENGTH];
-       char target[DUMP_TARGET_STR_LENGTH];
-       struct reader_handle handle;
+       const char *script;
+       const char *target;
+       const int *handle;
        const struct reader_control *control;
        struct dump_memory_driver{
                const struct reader_memory_access *access;
@@ -16,8 +12,8 @@ struct dump_config{
                struct gauge gauge;
        }cpu, ppu;
        long mappernum;
-       //struct romimage rom;
        bool progress;
+       bool battery;
        struct textcontrol log;
 };
 void script_dump_execute(struct dump_config *c);
similarity index 81%
rename from client/trunk/anago/script_flash.c
rename to client/trunk/anago/script_program.c
index 7eb0c69..5a4c0d8 100644 (file)
@@ -1,5 +1,4 @@
 #include <assert.h>
-#include <stdio.h>
 #include <string.h>
 #include <squirrel.h>
 #include <sqstdio.h>
@@ -14,7 +13,7 @@
 #include "flash_device.h"
 #include "progress.h"
 #include "script_common.h"
-#include "script_flash.h"
+#include "script_program.h"
 
 static SQInteger vram_mirrorfind(HSQUIRRELVM v)
 {
@@ -68,7 +67,7 @@ static SQInteger ppu_command(HSQUIRRELVM v)
        }
        return command_set(v, &d->ppu);
 }
-static SQInteger write_memory(HSQUIRRELVM v, const struct reader_handle *h, struct flash_memory_driver *t)
+static SQInteger write_memory(HSQUIRRELVM v, const int *h, struct flash_memory_driver *t)
 {
        long address, data;
        SQRESULT r = qr_argument_get(v, 2, &address, &data);
@@ -86,16 +85,15 @@ static SQInteger cpu_write(HSQUIRRELVM v)
        if(SQ_FAILED(r)){
                return r;
        }
-       return write_memory(v, &d->handle, &d->cpu);
+       return write_memory(v, d->handle, &d->cpu);
 }
-static SQInteger erase_set(HSQUIRRELVM v, const struct reader_handle *h, struct flash_memory_driver *t, struct textcontrol *log)
+static SQInteger erase_set(HSQUIRRELVM v, const int *h, struct flash_memory_driver *t, struct textcontrol *log)
 {
        t->access->flash_config(h, t->c000x, t->c2aaa, t->c5555, t->flash.pagesize, t->flash.retry);
        t->command_change = false;
        if(t->flash.erase_require == true){
                t->access->flash_erase(h, t->c2aaa, false);
                t->gauge.label_set(t->gauge.label, "erasing...");
-               fflush(stdout);
        }
        return 0;
 }
@@ -106,7 +104,7 @@ static SQInteger cpu_erase(HSQUIRRELVM v)
        if(SQ_FAILED(r)){
                return r;
        }
-       return erase_set(v, &d->handle, &d->cpu, &d->log);
+       return erase_set(v, d->handle, &d->cpu, &d->log);
 }
 static SQInteger ppu_erase(HSQUIRRELVM v)
 {
@@ -115,9 +113,9 @@ static SQInteger ppu_erase(HSQUIRRELVM v)
        if(SQ_FAILED(r)){
                return r;
        }
-       return erase_set(v, &d->handle, &d->ppu, &d->log);
+       return erase_set(v, d->handle, &d->ppu, &d->log);
 }
-static SQInteger program_regist(HSQUIRRELVM v, const struct reader_handle *h, struct flash_memory_driver *t)
+static SQInteger program_regist(HSQUIRRELVM v, const int *h, struct flash_memory_driver *t)
 {
        SQRESULT r = qr_argument_get(v, 2, &t->programming.address, &t->programming.length);
        if(SQ_FAILED(r)){
@@ -137,7 +135,7 @@ static SQInteger program_regist(HSQUIRRELVM v, const struct reader_handle *h, st
        fflush(stdout);*/
        return sq_suspendvm(v);
 }
-static void program_execute(const struct reader_handle *h, struct flash_memory_driver *t)
+static void program_execute(const int *h, struct flash_memory_driver *t)
 {
        const long w = t->access->flash_program(
                h, &t->gauge, 
@@ -152,7 +150,7 @@ static void program_execute(const struct reader_handle *h, struct flash_memory_d
        t->programming.offset += w;
 }
 
-static bool program_compare(const struct reader_handle *h, struct flash_memory_driver *t)
+static bool program_compare(const int *h, struct flash_memory_driver *t)
 {
        uint8_t *comparea = Malloc(t->compare.length);
        bool ret = false;
@@ -183,7 +181,7 @@ static SQInteger cpu_program_memory(HSQUIRRELVM v)
        if(SQ_FAILED(r)){
                return r;
        }
-       return program_regist(v, &d->handle, &d->cpu);
+       return program_regist(v, d->handle, &d->cpu);
 }
 static SQInteger ppu_program_memory(HSQUIRRELVM v)
 {
@@ -192,10 +190,10 @@ static SQInteger ppu_program_memory(HSQUIRRELVM v)
        if(SQ_FAILED(r)){
                return r;
        }
-       return program_regist(v, &d->handle, &d->ppu);
+       return program_regist(v, d->handle, &d->ppu);
 }
 
-static long erase_timer_get(const struct reader_handle *h, struct flash_memory_driver *t)
+static long erase_timer_get(const int *h, struct flash_memory_driver *t)
 {
        if(
                (t->memory.transtype != TRANSTYPE_EMPTY) && 
@@ -214,8 +212,8 @@ static SQInteger erase_wait(HSQUIRRELVM v)
                return r;
        }
        if(0){
-               long timer_wait = erase_timer_get(&d->handle, &d->cpu);
-               long timer_ppu = erase_timer_get(&d->handle, &d->ppu);
+               long timer_wait = erase_timer_get(d->handle, &d->cpu);
+               long timer_ppu = erase_timer_get(d->handle, &d->ppu);
                if(timer_wait < timer_ppu){
                        timer_wait = timer_ppu;
                }
@@ -224,7 +222,7 @@ static SQInteger erase_wait(HSQUIRRELVM v)
                uint8_t s[2];
                do{
                        wait(2);
-                       d->control->flash_status(&d->handle, s);
+                       d->control->flash_status(d->handle, s);
                //ËÜÍè¤Î°Õ¿Þ¤«¤é¤Ç¤Ï¤³¤³¤Î¾ò·ï¼°¤Ï && ¤Ç¤Ï¤Ê¤¯ || ¤À¤¬¡¢Àè¤Ë erase ¤¬½ª¤ï¤Ã¤¿¥Ç¥Ð¥¤¥¹¤¬Æ°¤«¤»¤ë¤Î¤Ç»Ä¤·¤Æ¤ª¤¯
                }while((s[0] != KAZZO_TASK_FLASH_IDLE) && (s[1] != KAZZO_TASK_FLASH_IDLE));
        }
@@ -240,14 +238,12 @@ static void gauge_init(struct flash_memory_driver *t)
        }
 }
 
-static bool program_memoryarea(HSQUIRRELVM co, const struct reader_handle *h, struct flash_memory_driver *t, bool compare, SQInteger *state, struct textcontrol *log)
+static bool program_memoryarea(HSQUIRRELVM co, const int *h, struct flash_memory_driver *t, bool compare, SQInteger *state, struct textcontrol *log)
 {
        if(t->programming.length == 0){
                if(t->programming.offset != 0 && compare == true){
                        if(program_compare(h, t) == false){
-                               char str[80];
-                               snprintf(str, 80, "%s memory compare error\n", t->memory.name);
-                               log->append(log->object, str);
+                               log->append(log->object, "%s memory compare error\n", t->memory.name);
                                return false;
                        }
                }
@@ -281,28 +277,23 @@ static SQInteger program_main(HSQUIRRELVM v)
        SQInteger state_ppu = sq_getvmstate(co_ppu);
        const long sleepms = d->compare == true ? 6 : 2; //W29C040 ¤Ç compare ¤ò¤¹¤ë¤È¡¢error ¤¬½Ð¤ë¤Î¤Ç½Ð¤Ê¤¤ÃͤËÄ´À° (¤ä¤Ã¤Ä¤±Âбþ)
        
-       //progress_init();
        gauge_init(&d->cpu);
        gauge_init(&d->ppu);
        while((state_cpu != SQ_VMSTATE_IDLE) || (state_ppu != SQ_VMSTATE_IDLE)){
                uint8_t s[2];
 //             bool console_update = false;
                wait(sleepms);
-               d->control->flash_status(&d->handle, s);
+               d->control->flash_status(d->handle, s);
                if(state_cpu != SQ_VMSTATE_IDLE && s[0] == KAZZO_TASK_FLASH_IDLE){
-                       if(program_memoryarea(co_cpu, &d->handle, &d->cpu, d->compare, &state_cpu, &d->log) == false){
+                       if(program_memoryarea(co_cpu, d->handle, &d->cpu, d->compare, &state_cpu, &d->log) == false){
                                return 0;
                        }
                }
                if(state_ppu != SQ_VMSTATE_IDLE && s[1] == KAZZO_TASK_FLASH_IDLE){
-                       if(program_memoryarea(co_ppu, &d->handle, &d->ppu, d->compare, &state_ppu, &d->log) == false){
+                       if(program_memoryarea(co_ppu, d->handle, &d->ppu, d->compare, &state_ppu, &d->log) == false){
                                return 0;
                        }
                }
-/*             if((console_update == true) && (d->testrun == false)){
-                       gauge_update("CPU", &d->order_cpu);
-                       gauge_update("PPU", &d->order_ppu);
-               }*/
        }
        return 0;
 }
@@ -318,9 +309,7 @@ static SQInteger program_count(HSQUIRRELVM v, struct flash_memory_driver *t, con
                return r;
        }
        if((t->programming.address < range_address->start) || ((t->programming.address + t->programming.length) > range_address->end)){
-               char str[80];
-               snprintf(str, 80, "address range must be 0x%06x to 0x%06x", (int) range_address->start, (int) range_address->end - 1);
-               log->append(log->object, str);
+               log->append(log->object, "address range must be 0x%06x to 0x%06x", (int) range_address->start, (int) range_address->end - 1);
                return sq_throwerror(v, "script logical error");;
        }
        t->programming.count += t->programming.length;
@@ -357,10 +346,7 @@ static bool script_execute(HSQUIRRELVM v, const char *function, struct program_c
                c->log.append(c->log.object, "flash core script error\n");
                ret = false;
        }else if(SQ_FAILED(sqstd_dofile(v, _SC(c->script), SQFalse, SQTrue))){
-               char str[80];
-               
-               snprintf(str, 80, "%s open error\n", c->script);
-               c->log.append(c->log.object, str);
+               c->log.append(c->log.object, "%s open error\n", c->script);
                ret = false;
        }else{
                SQRESULT r = qr_call(
@@ -403,16 +389,14 @@ static void zendan(struct program_config *c)
                }
                qr_close(v);
                assert(c->cpu.memory.size != 0);
-               char str[80];
+
                if(c->cpu.programming.count % c->cpu.memory.size  != 0){
-                       snprintf(str, 80, "logical error: cpu_programsize is not connected 0x%06x/0x%06x\n", (int) c->cpu.programming.count, (int) c->cpu.memory.size);
-                       c->log.append(c->log.object, str);
+                       c->log.append(c->log.object, "logical error: cpu_programsize is not connected 0x%06x/0x%06x\n", (int) c->cpu.programming.count, (int) c->cpu.memory.size);
                        return;
                }
                if(c->ppu.memory.size != 0){
                        if(c->ppu.programming.count % c->ppu.memory.size != 0){
-                               snprintf(str, 80, "logical error: ppu_programsize is not connected 0x%06x/0x%06x\n", (int) c->ppu.programming.count, (int) c->ppu.memory.size);
-                               c->log.append(c->log.object, str);
+                               c->log.append(c->log.object, "logical error: ppu_programsize is not connected 0x%06x/0x%06x\n", (int) c->ppu.programming.count, (int) c->ppu.memory.size);
                                return;
                        }
                }
@@ -461,7 +445,7 @@ void script_program_execute(struct program_config *c)
 {
 //rom image load
        struct romimage rom;
-       if(nesfile_load(__FUNCTION__, c->target, &rom) == false){
+       if(nesfile_load(&c->log, c->target, &rom) == false){
                c->log.append(c->log.object, "ROM image open error");
                return;
        }
@@ -478,14 +462,19 @@ void script_program_execute(struct program_config *c)
                return;
        }
 //reader initalize
-       c->control->open(&c->handle);
-       if(c->handle.handle == NULL){
+       c->handle = c->control->open();
+       if(c->handle == NULL){
                c->log.append(c->log.object, "reader open error\n");
-       }else{
+               nesbuffer_free(&rom, 0);
+               return;
+       }
 //program start, reader finalize
-               zendan(c);
-               c->control->close(&c->handle);
-               c->handle.handle = NULL;
+       if(connection_check(c->handle, &c->log, c->cpu.access, c->ppu.access) == false){
+               nesbuffer_free(&rom, 0);
+               return;
        }
+       zendan(c);
+       c->control->close(c->handle);
+       c->handle = NULL;
        nesbuffer_free(&rom, 0);
 }
similarity index 74%
rename from client/trunk/anago/script_flash.h
rename to client/trunk/anago/script_program.h
index 37dab8b..1103191 100644 (file)
@@ -1,13 +1,9 @@
 #ifndef _SCRIPT_PROGRAM_H_
 #define _SCRIPT_PROGRAM_H_
-enum{
-       PROGRAM_SCRIPT_STR_LENGTH = 20,
-       PROGRAM_TARGET_STR_LENGTH = 80
-};
 struct program_config{
-       char script[PROGRAM_SCRIPT_STR_LENGTH];
-       char target[PROGRAM_TARGET_STR_LENGTH];
-       struct reader_handle handle;
+       const char *script;
+       const char *target;
+       const int *handle;
        const struct reader_control *control;
        struct flash_memory_driver{
                const struct reader_memory_access *access;
index e5e69a6..f103f4c 100644 (file)
@@ -23,17 +23,14 @@ static void print_stdout(HSQUIRRELVM v, const SQChar *s, ...)
 static void print_other(HSQUIRRELVM v, const SQChar *s, ...)
 {
        va_list arglist;
+       const struct textcontrol *p = (const struct textcontrol *) sq_getforeignptr(v);
        va_start(arglist, s);
-       char str[80];
-
-       vsnprintf(str, 80, s, arglist);
-       struct textcontrol *p = (struct textcontrol *) sq_getforeignptr(v);
-       p->append(p->object, str);
 
+       p->append_va(p->object, s, arglist);
        va_end(arglist);
 }
 
-HSQUIRRELVM qr_open(struct textcontrol *p)
+HSQUIRRELVM qr_open(const struct textcontrol *p)
 {
        HSQUIRRELVM v = sq_open(0x400);
        sqstd_seterrorhandlers(v);
index 1e306d7..5b9a503 100644 (file)
@@ -35,7 +35,7 @@ void nesheader_set(const struct romimage *r, u8 *header)
        if(r->mirror == MIRROR_VERTICAL){
                header[6] |= 0x01;
        }
-       if((r->cpu_ram.size != 0) || (r->backupram != 0)){
+       if((r->cpu_ram.size != 0) || (r->backupram == true)){
                header[6] |= 0x02;
        }
        //4 screen ¤Ï̵»ë
@@ -47,9 +47,8 @@ void nesheader_set(const struct romimage *r, u8 *header)
 /*
 returnÃÍ: error count
 */
-static int mirroring_fix(struct textcontrol *l, struct memory *m, long min)
+static int mirroring_fix(const struct textcontrol *l, struct memory *m, long min)
 {
-       char str[80];
        long mirror_size = m->size / 2;
        while(mirror_size >= min){
                const u8 *halfbuf;
@@ -58,8 +57,7 @@ static int mirroring_fix(struct textcontrol *l, struct memory *m, long min)
                if(memcmp(m->data, halfbuf, mirror_size) != 0){
                        const long ret = mirror_size * 2;
                        if(m->size != ret){
-                               snprintf(str, 80, "mirroring %s rom fixed\n", m->name);
-                               l->append(l->object, str);
+                               l->append(l->object, "mirroring %s ROM fixed\n", m->name);
                                m->size = ret;
                        }
                        return 0;
@@ -75,8 +73,7 @@ static int mirroring_fix(struct textcontrol *l, struct memory *m, long min)
                l->append(l->object, "error: data is all 0xff\n");
                ret = 1;
        }else if(m->size != min){
-               snprintf(str, 80, "mirroring %s rom fixed\n", m->name);
-               l->append(l->object, str);
+               l->append(l->object, "mirroring %s ROM fixed\n", m->name);
                m->size = min;
        }
        Free(ffdata);
@@ -85,19 +82,17 @@ static int mirroring_fix(struct textcontrol *l, struct memory *m, long min)
 }
 
 //hash ¤Ï sha1 ¤Ë¤·¤¿¤¤¤¬Â¾¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë¤¢¤ï¤»¤Æ crc32 ¤Ë¤·¤È¤¯
-static void rominfo_print(struct textcontrol *l, const struct memory *m)
+static void rominfo_print(const struct textcontrol *l, const struct memory *m)
 {
-       char str[80];
        if(m->size != 0){
                const uint32_t crc = crc32_get(m->data, m->size);
-               snprintf(str, 80, "%s ROM: size 0x%06x, crc32 0x%08x\n", m->name, m->size, (const int) crc);
+               l->append(l->object, "%s ROM: size 0x%06x, crc32 0x%08x\n", m->name, m->size, (const int) crc);
        }else{
-               snprintf(str, 80, "%s RAM\n", m->name);
+               l->append(l->object, "%s RAM\n", m->name);
        }
-       l->append(l->object, str);
 }
 
-void nesfile_create(struct textcontrol *l, struct romimage *r, const char *romfilename)
+void nesfile_create(const struct textcontrol *l, struct romimage *r, const char *romfilename)
 {
        int error = 0;
        //RAM adapter bios size 0x2000 ¤ÏÊѹ¹¤·¤Ê¤¤
@@ -111,11 +106,7 @@ void nesfile_create(struct textcontrol *l, struct romimage *r, const char *romfi
                return;
        }
        //½¤ÀµºÑ¤ß ROM ¾ðÊóɽ¼¨
-       {
-               char str[80];
-               snprintf(str, 80, "%s, mapper %d\n", romfilename, (int) r->mappernum);
-               l->append(l->object, str);
-       }
+       l->append(l->object, "%s, mapper %d\n", romfilename, (int) r->mappernum);
        rominfo_print(l, &(r->cpu_rom));
        rominfo_print(l, &(r->ppu_rom));
 
@@ -236,19 +227,19 @@ static void nesfile_datapointer_set(const u8 *buf, struct memory *m, long size)
 }
 
 //flashmemory device capacity check ¤¬È´¤±¤Æ¤ë¤±¤É¤É¤³¤Ç¤ä¤ë¤«Ì¤Äê
-bool nesfile_load(const char *errorprefix, const char *file, struct romimage *r)
+bool nesfile_load(const struct textcontrol *l, const char *file, struct romimage *r)
 {
        int imagesize;
        u8 *buf;
        
        buf = buf_load_full(file, &imagesize);
        if(buf == NULL || imagesize < (NES_HEADER_SIZE + PROGRAM_ROM_MIN)){
-               printf("%s ROM image open error\n", errorprefix);
+//             printf("%s ROM image open error\n", errorprefix);
                return false;
        }
        //nes header check
        if(memcmp(buf, NES_HEADER_INIT, 4) != 0){
-               printf("%s NES header identify error\n", errorprefix);
+               l->append(l->object, "NES header identify error\n");
                Free(buf);
                return false;
        }
@@ -262,15 +253,7 @@ bool nesfile_load(const char *errorprefix, const char *file, struct romimage *r)
        {
                long mapper = (buf[6] >> 4) & 0x0f;
                mapper |= buf[7] & 0xf0;
-#if ANAGO == 1
                r->mappernum = mapper;
-#else
-               if(r->mappernum != mapper){
-                       printf("%s NES header mapper error\n", errorprefix);
-                       Free(buf);
-                       return false;
-               }
-#endif
        }
        //NES/CPU/PPU imagesize check
        long cpusize, ppusize;
@@ -286,7 +269,7 @@ bool nesfile_load(const char *errorprefix, const char *file, struct romimage *r)
                r->ppu_rom.size = ppusize;
                //NESfilesize
                if(offset != imagesize){
-                       printf("%s NES header filesize error\n", errorprefix);
+                       l->append(l->object, "NES header filesize error\n");
                        Free(buf);
                        return false;
                }
index a792fe0..10a91bb 100644 (file)
@@ -61,9 +61,9 @@ enum{
 void nesheader_set(const struct romimage *r, uint8_t *header);
 #endif
 bool nesbuffer_malloc(struct romimage *r, int mode);
-void nesfile_create(struct textcontrol *l, struct romimage *r, const char *romfilename);
+void nesfile_create(const struct textcontrol *l, struct romimage *r, const char *romfilename);
 void nesbuffer_free(struct romimage *r, int mode);
 void backupram_create(const struct memory *r, const char *ramfilename);
 int memorysize_check(const long size, int region);
-bool nesfile_load(const char *errorprefix, const char *file, struct romimage *r);
+bool nesfile_load(const struct textcontrol *l, const char *file, struct romimage *r);
 #endif
index 6e72cef..a136ea0 100644 (file)
@@ -29,14 +29,14 @@ static inline usb_dev_handle *device_open(void)
        return NULL;
 }
 
-static void kazzo_open(struct reader_handle *h)
+static const int *kazzo_open(void)
 {
-       h->handle = device_open();
+       return (const int *) device_open();
 }
 
-static void kazzo_close(struct reader_handle *h)
+static void kazzo_close(const int *h)
 {
-       usb_close(h->handle);
+       usb_close((usb_dev_handle *) h);
 }
 enum{
        TIMEOUT = 4000
@@ -56,12 +56,12 @@ static void device_read(usb_dev_handle *handle, enum request r, enum index index
                exit(1);
        }
 }
-static void read_main(const struct reader_handle *d, const struct gauge *g, const enum request r, enum index index, long address, long length, uint8_t *data)
+static void read_main(const int *d, const struct gauge *g, const enum request r, enum index index, long address, long length, uint8_t *data)
 {
        const int packet = READ_PACKET_SIZE;
        while(length >= packet){
                device_read(
-                       (usb_dev_handle *) d->handle,
+                       (usb_dev_handle *) d,
                        r, index, address, packet, data
                );
                data += packet;
@@ -71,18 +71,18 @@ static void read_main(const struct reader_handle *d, const struct gauge *g, cons
        }
        if(length != 0){
                device_read(
-                       (usb_dev_handle *) d->handle
+                       (usb_dev_handle *) d, 
                        r, index, address, length, data
                );
                g->value_add(g->bar, g->label, packet);
        }
 }
-static void kazzo_cpu_read(const struct reader_handle *d, const struct gauge *g, long address, long length, uint8_t *data)
+static void kazzo_cpu_read(const int *d, const struct gauge *g, long address, long length, uint8_t *data)
 {
        read_main(d, g, REQUEST_CPU_READ, INDEX_IMPLIED, address, length, data);
 //     read_main(REQUEST_CPU_READ_6502, address, length, data);
 }
-static void kazzo_ppu_read(const struct reader_handle *d, const struct gauge *g, long address, long length, uint8_t *data)
+static void kazzo_ppu_read(const int *d, const struct gauge *g, long address, long length, uint8_t *data)
 {
        read_main(d, g, REQUEST_PPU_READ, INDEX_IMPLIED, address, length, data);
 }
@@ -113,27 +113,27 @@ static void device_write(usb_dev_handle *handle, enum request w, enum index inde
        Free(d);
 }
 
-static void kazzo_init(const struct reader_handle *d)
+static void kazzo_init(const int *d)
 {
-       device_write((usb_dev_handle *) d->handle, REQUEST_PHI2_INIT, INDEX_IMPLIED, 0, 0, NULL);
+       device_write((usb_dev_handle *) d, REQUEST_PHI2_INIT, INDEX_IMPLIED, 0, 0, NULL);
 }
 
-static void write_memory(const struct reader_handle *d, enum request r, long address, long length, const uint8_t *data)
+static void write_memory(const int *d, enum request r, long address, long length, const uint8_t *data)
 {
        while(length != 0){
                long l = length >= FLASH_PACKET_SIZE ? FLASH_PACKET_SIZE : length;
-               device_write((usb_dev_handle *) d->handle, r, INDEX_IMPLIED, address, l, data);
+               device_write((usb_dev_handle *) d, r, INDEX_IMPLIED, address, l, data);
                address += l;
                data += l;
                length -= l;
        }
 }
-static void kazzo_cpu_write_6502(const struct reader_handle *d, long address, long length, const uint8_t *data)
+static void kazzo_cpu_write_6502(const int *d, long address, long length, const uint8_t *data)
 {
        write_memory(d, REQUEST_CPU_WRITE_6502, address, length, data);
 }
 
-static void kazzo_ppu_write(const struct reader_handle *d, long address, long length, const uint8_t *data)
+static void kazzo_ppu_write(const int *d, long address, long length, const uint8_t *data)
 {
        write_memory(d, REQUEST_PPU_WRITE, address, length, data);
 }
@@ -143,7 +143,7 @@ static inline void pack_short_le(long l, uint8_t *t)
        t[0] = l & 0xff;
        t[1] = (l >> 8) & 0xff;
 }
-static void flash_config(const struct reader_handle *d, enum request r, enum index index, long c000x, long c2aaa, long c5555, long unit, bool retry)
+static void flash_config(const int *d, enum request r, enum index index, long c000x, long c2aaa, long c5555, long unit, bool retry)
 {
        const int size = 2 * 4 + 1;
        uint8_t buf[size];
@@ -158,18 +158,18 @@ static void flash_config(const struct reader_handle *d, enum request r, enum ind
        pack_short_le(unit, t);
        t += sizeof(uint16_t);
        *t = retry == true ? 1 : 0;
-       device_write((usb_dev_handle *) d->handle, r, index, 0, size, buf);
+       device_write((usb_dev_handle *) d, r, index, 0, size, buf);
 }
-static void kazzo_cpu_flash_config(const struct reader_handle *d, long c000x, long c2aaa, long c5555, long unit, bool retry)
+static void kazzo_cpu_flash_config(const int *d, long c000x, long c2aaa, long c5555, long unit, bool retry)
 {
        flash_config(d, REQUEST_FLASH_CONFIG_SET, INDEX_CPU, c000x, c2aaa, c5555, unit, retry);
 }
-static void kazzo_ppu_flash_config(const struct reader_handle *d, long c000x, long c2aaa, long c5555, long unit, bool retry)
+static void kazzo_ppu_flash_config(const int *d, long c000x, long c2aaa, long c5555, long unit, bool retry)
 {
        flash_config(d, REQUEST_FLASH_CONFIG_SET, INDEX_PPU, c000x, c2aaa, c5555, unit, retry);
 }
 
-static inline void flash_execute(const struct reader_handle *d, enum request p, enum request s, enum index index, long address, const uint8_t *data, int size, bool dowait, bool skip)
+static inline void flash_execute(const int *d, enum request p, enum request s, enum index index, long address, const uint8_t *data, int size, bool dowait, bool skip)
 {
        uint8_t status;
        int filled = 1;
@@ -184,20 +184,20 @@ static inline void flash_execute(const struct reader_handle *d, enum request p,
                Free(filldata);
        }
        if(filled != 0){
-               device_write((usb_dev_handle *) d->handle, p, index, address, size, data);
+               device_write((usb_dev_handle *) d, p, index, address, size, data);
        }
        if(dowait == true){
                do{
                        wait(10);
-                       device_read((usb_dev_handle *) d->handle, s, index, 0, 1, &status);
+                       device_read((usb_dev_handle *) d, s, index, 0, 1, &status);
                }while(status != KAZZO_TASK_FLASH_IDLE);
        }
 }
-static void kazzo_cpu_flash_erase(const struct reader_handle *d, long address, bool dowait)
+static void kazzo_cpu_flash_erase(const int *d, long address, bool dowait)
 {
        flash_execute(d, REQUEST_FLASH_ERASE, REQUEST_FLASH_STATUS, INDEX_CPU, address, NULL, 0, dowait, false);
 }
-static void kazzo_ppu_flash_erase(const struct reader_handle *d, long address, bool dowait)
+static void kazzo_ppu_flash_erase(const int *d, long address, bool dowait)
 {
        flash_execute(d, REQUEST_FLASH_ERASE, REQUEST_FLASH_STATUS, INDEX_PPU, address, NULL, 0, dowait, false);
 }
@@ -223,7 +223,7 @@ static void dump(const uint8_t *w, const uint8_t *r, long length)
                length -= 0x10;
        }
 }
-static long flash_program(const struct reader_handle *h, const struct gauge *g, enum index index, long address, long length, const uint8_t *data, bool dowait, bool skip)
+static long flash_program(const int *h, const struct gauge *g, enum index index, long address, long length, const uint8_t *data, bool dowait, bool skip)
 {
        enum request p = REQUEST_FLASH_PROGRAM;
        enum request s = REQUEST_FLASH_STATUS;
@@ -252,28 +252,28 @@ static long flash_program(const struct reader_handle *h, const struct gauge *g,
        Free(d);
        return count;
 }
-static long kazzo_cpu_flash_program(const struct reader_handle *d, const struct gauge *g, long address, long length, const uint8_t *data, bool dowait, bool skip)
+static long kazzo_cpu_flash_program(const int *d, const struct gauge *g, long address, long length, const uint8_t *data, bool dowait, bool skip)
 {
        return flash_program(d, g, INDEX_CPU, address, length, data, dowait, skip);
 }
-static long kazzo_ppu_flash_program(const struct reader_handle *d, const struct gauge *g, long address, long length, const uint8_t *data, bool dowait, bool skip)
+static long kazzo_ppu_flash_program(const int *d, const struct gauge *g, long address, long length, const uint8_t *data, bool dowait, bool skip)
 {
        return flash_program(d, g, INDEX_PPU, address, length, data, dowait, skip);
 }
 
-static void kazzo_flash_status(const struct reader_handle *d, uint8_t s[2])
+static void kazzo_flash_status(const int *d, uint8_t s[2])
 {
        read_main(d, &GAUGE_DUMMY, REQUEST_FLASH_STATUS, INDEX_BOTH, 0, 2, s);
 }
-static void kazzo_cpu_flash_device_get(const struct reader_handle *d, uint8_t s[2])
+static void kazzo_cpu_flash_device_get(const int *d, uint8_t s[2])
 {
        read_main(d, &GAUGE_DUMMY, REQUEST_FLASH_DEVICE, INDEX_CPU, 0, 2, s);
 }
-static void kazzo_ppu_flash_device_get(const struct reader_handle *d, uint8_t s[2])
+static void kazzo_ppu_flash_device_get(const int *d, uint8_t s[2])
 {
        read_main(d, &GAUGE_DUMMY, REQUEST_FLASH_DEVICE, INDEX_PPU, 0, 2, s);
 }
-static uint8_t kazzo_vram_connection(const struct reader_handle *d)
+static uint8_t kazzo_vram_connection(const int *d)
 {
        uint8_t s;
        read_main(d, &GAUGE_DUMMY, REQUEST_VRAM_CONNECTION, INDEX_IMPLIED, 0, 1, &s);
index 44787a9..199ac33 100644 (file)
@@ -9,57 +9,28 @@
 
 struct textcontrol;
 struct gauge;
-struct reader_handle{
-       void *handle;
-       struct textcontrol *text;
-};
 
 struct reader_memory_access{
-       void (*memory_read)(const struct reader_handle *d, const struct gauge *g, long address, long length, uint8_t *data);
-       void (*memory_write)(const struct reader_handle *d, long address, long length, const uint8_t *data);
-       void (*flash_config)(const struct reader_handle *d, long c000x, long c2aaa, long c5555, long unit, bool retry);
-       void (*flash_erase)(const struct reader_handle *d, long address, bool wait);
-       long (*flash_program)(const struct reader_handle *d, const struct gauge *g, long address, long length, const uint8_t *data, bool wait, bool skip);
-       void (*flash_device_get)(const struct reader_handle *d, uint8_t s[2]);
+       void (*memory_read)(const int *d, const struct gauge *g, long address, long length, uint8_t *data);
+       void (*memory_write)(const int *d, long address, long length, const uint8_t *data);
+       void (*flash_config)(const int *d, long c000x, long c2aaa, long c5555, long unit, bool retry);
+       void (*flash_erase)(const int *d, long address, bool wait);
+       long (*flash_program)(const int *d, const struct gauge *g, long address, long length, const uint8_t *data, bool wait, bool skip);
+       void (*flash_device_get)(const int *d, uint8_t s[2]);
 };
 struct reader_control{
        const char *name;
-       void (*open)(struct reader_handle *h);
-       void (*close)(struct reader_handle *h);
-       void (*init)(const struct reader_handle *d);
-       void (*flash_status)(const struct reader_handle *d, uint8_t s[2]);
-       uint8_t (*vram_connection)(const struct reader_handle *d);
+       const int *(*open)(void);
+       void (*close)(const int *h);
+       void (*init)(const int *d);
+       void (*flash_status)(const int *d, uint8_t s[2]);
+       uint8_t (*vram_connection)(const int *d);
 };
 struct reader_driver{
        const struct reader_control control;
        const struct reader_memory_access cpu, ppu;
 };
 
-#if 0
-bool reader_driver_get(const char *name, struct reader_driver);
-enum{
-       ADDRESS_MASK_A0toA12 = 0x1fff,
-       ADDRESS_MASK_A0toA14 = 0x7fff,
-       ADDRESS_MASK_A15 = 0x8000
-};
-enum{ 
-       M2_CONTROL_TRUE, M2_CONTROL_FALSE
-};
-/*
-static inline は共有マクロ扱い
-*/
-static inline int bit_set(int data, const int bit)
-{
-       data |= 1 << bit;
-       return data;
-}
-
-static inline int bit_clear(int data, const int bit)
-{
-       data &= ~(1 << bit);
-       return data;
-}
-#endif
 static inline void wait(long msec)
 {
        if(msec == 0){
index 00d028d..cdbad58 100644 (file)
@@ -7,7 +7,7 @@ static void gauge_range_nothing(void *a, int b)
 static void gauge_value_nothing(void *a, void *b, int c)
 {
 }
-static void label_nothing(void *a, const char *str)
+static void label_nothing(void *a, const char *str, ...)
 {
 }
 const struct gauge GAUGE_DUMMY = {
index 137e76a..0ec23b8 100644 (file)
@@ -1,15 +1,22 @@
 #ifndef _WIDGET_H_
 #define _WIDGET_H_
+#ifndef __cplusplus 
+  #include <stdarg.h>
+#else
+  #include <cstdarg>
+#endif
+
 struct gauge{
        void *bar, *label;
        void (*range_set)(void *, int range);
        void (*value_set)(void *, void *, int value);
        void (*value_add)(void *, void *, int value);
-       void (*label_set)(void *, const char *str);
+       void (*label_set)(void *, const char *str, ...);
 };
 struct textcontrol{
        void *object;
-       void (*append)(void *, const char *);
+       void (*append)(void *, const char *, ...);
+       void (*append_va)(void *, const char *, va_list);
 };
 extern const struct gauge GAUGE_DUMMY;
 #endif