SQUIRREL = ../SQUIRREL2\r
KAZZO = ../../kazzo/firmware\r
WX_CONFIG = wx-config\r
-\r
+CPPFLAGS =\r
+CXXFLAGS = \r
include anago.mk\r
LIBUSB = d:/dev/LibUSB-Win32\r
SQUIRREL = ../SQUIRREL2\r
KAZZO = ../../kazzo/firmware\r
-WX_CONFIG = /d/dev/wxWidgets/build_release/wx-config\r
-CXXFLAGS = -finput-charset=utf-8 -fexec-charset=cp932\r
+WX_CONFIG = /d/dev/wxWidgets/build_unicode_sound3/wx-config\r
+CPPFLAGS = -D_UNICODE\r
+CXXFLAGS = #-finput-charset=utf-8 -fexec-charset=cp932\r
include anago.mk\r
all: $(APP_GUI) $(APP_CUI)
VPATH = ..
ifeq ($(RELEASE),1)
- CPPFLAGS = -O2 -DNDEBUG
+ CPPFLAGS += -O2 -DNDEBUG
else
- CPPFLAGS = -g -O0
+ CPPFLAGS += -g -O0
endif
-CPPFLAGS += -Wall -Werror -DDEBUG=1 -DANAGO=1
+CPPFLAGS += -Wall -Werror -DDEBUG=1
CFLAGS = -I.. -I$(SQUIRREL)/include -I$(KAZZO)
ifneq ($(strip $(LIBUSB)),)
CFLAGS += -I$(LIBUSB)/include
#include "flash_device.h"
#include "script_program.h"
-static void text_append_va(void *obj, const char *format, va_list list)
+static void text_append_va(void *obj, const wgChar *format, va_list list)
{
- vprintf(format, list);
+ vwprintf(format, list);
}
-static void text_append(void *obj, const char *format, ...)
+static void text_append(void *obj, const wgChar *format, ...)
{
va_list list;
va_start(list, format);
log->append_va = text_append_va;
}
-static void except(const char *str)
+#ifdef _UNICODE
+ #define PUTS _putws
+#else
+ #define PUTS puts
+#endif
+
+static void except(const wgChar *str)
{
- puts(str);
+ PUTS(str);
exit(0);
}
-static bool program_rom_set(const char *device, char trans, struct memory *m, struct flash_device *f)
+static bool program_rom_set(const wgChar *device, wgChar trans, struct memory *m, struct flash_device *f)
{
m->offset = 0;
if(flash_device_get(device, f) == false){
+#ifdef _UNICODE
+ wprintf(L"unknown flash memory device %s\n", device);
+#else
printf("unknown flash memory device %s\n", device);
+#endif
return false;
}
switch(trans){
return true;
}
-static void program(int c, char **v)
+static void program(int c, wgChar **v)
{
struct program_config config;
config.cpu.memory.data = NULL;
switch(c){
case 5: {//mode script target cpu_flash_device
- char trans = 'f';
- if(v[1][1] != '\0'){
+ wgChar trans = wgT('f');
+ if(v[1][1] != wgT('\0')){
trans = v[1][1];
}
if(program_rom_set(v[4], trans, &config.cpu.memory, &config.cpu.flash) == false){
return;
}
- if(program_rom_set("dummy", 'e', &config.ppu.memory, &config.ppu.flash) == false){
+ if(program_rom_set(wgT("dummy"), wgT('e'), &config.ppu.memory, &config.ppu.flash) == false){
assert(0);
return;
}
}break;
case 6: { //mode script target cpu_flash_device ppu_flash_device
- char trans = 'f';
- if(v[1][1] != '\0'){
+ wgChar trans = wgT('f');
+ if(v[1][1] != wgT('\0')){
trans = v[1][1];
}
if(program_rom_set(v[4], trans, &config.cpu.memory, &config.cpu.flash) == false){
return;
}
- trans = 'f';
- if(v[1][1] != '\0' && v[1][2] != '\0'){
+ trans = wgT('f');
+ if(v[1][1] != wgT('\0') && v[1][2] != wgT('\0')){
trans = v[1][2];
}
if(program_rom_set(v[5], trans, &config.ppu.memory, &config.ppu.flash) == false){
}
}break;
default:
- puts("mode script target cpu_flash_device ppu_flash_device");
+ PUTS(wgT("mode script target cpu_flash_device ppu_flash_device"));
return;
}
log_set(&config.log);
- cui_gauge_new(&config.cpu.gauge, "Program Flash", 2, -2);
- cui_gauge_new(&config.ppu.gauge, "Charcter Flash", 1, -1);
+ cui_gauge_new(&config.cpu.gauge, wgT("Program Flash"), 2, -2);
+ cui_gauge_new(&config.ppu.gauge, wgT("Charcter Flash"), 1, -1);
config.except = except;
script_program_execute(&config);
cui_gauge_destory(&config.cpu.gauge);
cui_gauge_destory(&config.ppu.gauge);
}
-static void dump(int c, char **v)
+static void dump(int c, wgChar **v)
{
struct dump_config config;
if(c < 4){
- puts("argument error");
+ PUTS(wgT("argument error"));
return;
}
config.cpu.increase = 1;
config.ppu.increase = 1;
config.progress = true;
switch(v[1][0]){
- case 'D':
+ case wgT('D'):
config.progress = false;
break;
}
switch(v[1][1]){
- case '2':
+ case wgT('2'):
config.cpu.increase = 2;
break;
- case '4':
+ case wgT('4'):
config.cpu.increase = 4;
break;
}
- if(v[1][1] != '\0'){
+ if(v[1][1] != wgT('\0')){
switch(v[1][2]){
- case '2':
+ case wgT('2'):
config.ppu.increase = 2;
break;
- case '4':
+ case wgT('4'):
config.ppu.increase = 4;
break;
}
config.control = &DRIVER_KAZZO.control;
config.cpu.access = &DRIVER_KAZZO.cpu;
config.ppu.access = &DRIVER_KAZZO.ppu;
- cui_gauge_new(&config.cpu.gauge, "Program ROM", 2, -2);
- cui_gauge_new(&config.ppu.gauge, "Charcter ROM", 1, -1);
+ cui_gauge_new(&config.cpu.gauge, wgT("Program ROM"), 2, -2);
+ cui_gauge_new(&config.ppu.gauge, wgT("Charcter ROM"), 1, -1);
config.except = except;
config.mappernum = -1;
if(c == 5){
+#ifdef _UNICODE
+ config.mappernum = _wtoi(v[4]);
+#else
config.mappernum = atoi(v[4]);
+#endif
}
config.battery = false;
log_set(&config.log);
cui_gauge_destory(&config.ppu.gauge);
}
-static void usage(const char *v)
+static void usage(const wgChar *v)
{
- puts("famicom bus simluator 'anago'");
+ PUTS(wgT("famicom bus simluator 'anago'"));
+#ifdef _UNICODE
+ wprintf(L"%s [mode] [script] [target] ....\n", v);
+#else
printf("%s [mode] [script] [target] ....\n", v);
+#endif
}
#ifdef WIN32
-int main(int c, char **v)
+int main(int c, char **vv)
#else
-int anago_cui(int c, char **v)
+int anago_cui(int c, wgChar **v)
#endif
{
mm_init();
if(c >= 2){
+#ifdef _UNICODE
+ int i;
+ wchar_t **v;
+ v = Malloc(sizeof(wchar_t *) * c);
+ for(i = 0; i < c; i++){
+ size_t len = strlen(vv[i]);
+ v[i] = Malloc(sizeof(wchar_t) * (len + 1));
+ mbstowcs(v[i], vv[i], len + 1);
+ }
+#endif
switch(v[1][0]){
- case 'a': case 'f': case 'F':
+ case wgT('a'): case wgT('f'): case wgT('F'):
program(c, v);
break;
- case 'd': case 'D':
+ case wgT('d'): case wgT('D'):
dump(c,v);
break;
default:
usage(v[0]);
- puts("mode are d, D, f, g");
+ PUTS(wgT("mode are d, D, f, g"));
break;
}
+#ifdef _UNICODE
+ for(i = 0; i < c; i++){
+ Free(v[i]);
+ }
+ Free(v);
+#endif
}else{
- usage(v[0]);
+ //usage(v[0]);
}
mm_end();
return 0;
#include <wx/dir.h>
#include <wx/sound.h>
#include <cstdarg>
+#include "type.h"
#include "anago_gui.h"
#include "widget.h"
#include "reader_master.h"
#include "script_program.h"
void qr_version_print(const struct textcontrol *l);
}
-
+#ifdef _UNICODE
+ #define STRNCPY wcsncpy
+#else
+ #define STRNCPY strncpy
+#endif
//---- C++ -> C -> C++ wrapping functions ----
-static void throw_error(const char *t)
+static void throw_error(const wxChar *t)
{
throw t;
}
g->SetRange(value);
}
-static void text_append_va(void *log, const char *format, va_list list)
+static void text_append_va(void *log, const wxChar *format, va_list list)
{
wxTextCtrl *l = static_cast<wxTextCtrl *>(log);
wxString str;
wxMutexGuiLeave();
}
-static void text_append(void *log, const char *format, ...)
+static void text_append(void *log, const wxChar *format, ...)
{
va_list list;
va_start(list, format);
va_end(list);
}
-static void version_append_va(void *log, const char *format, va_list list)
+static void version_append_va(void *log, const wxChar *format, va_list list)
{
wxTextCtrl *l = static_cast<wxTextCtrl *>(log);
wxString str;
*l << str;
}
-static void version_append(void *log, const char *format, ...)
+static void version_append(void *log, const wxChar *format, ...)
{
va_list list;
va_start(list, format);
va_end(list);
}
-static void label_set(void *label, const char *format, ...)
+static void label_set(void *label, const wxChar *format, ...)
{
wxStaticText *l = static_cast<wxStaticText *>(label);
wxString str;
wxMutexGuiLeave();
}
-void choice_append(void *choice, const char *str)
+void choice_append(void *choice, const wxChar *str)
{
wxChoice *c = static_cast<wxChoice *>(choice);
c->Append(wxString(str));
config.battery = m_dump_check_battery->GetValue();
{
wxString str_script = m_dump_script_choice->GetStringSelection();
- char *t = new char[str_script.Length() + 1];
+ wxChar *t = new wxChar[str_script.Length() + 1];
config.script = t;
- strncpy(t, str_script.fn_str(), str_script.Length() + 1);
+ STRNCPY(t, str_script.fn_str(), str_script.Length() + 1);
}
{
{
wxTextCtrl *text = m_dump_romimage_picker->GetTextCtrl();
wxString str_rom = text->GetValue();
- char *t = new char[str_rom.Length() + 1];
+ wxChar *t = new wxChar[str_rom.Length() + 1];
if(text->IsEmpty() == true){
*m_log << wxT("Enter filename to ROM image\n");
return;
}
config.target = t;
- strncpy(t, str_rom.fn_str(), str_rom.Length() + 1);
+ STRNCPY(t, str_rom.fn_str(), str_rom.Length() + 1);
}
config.control = &DRIVER_KAZZO.control;
{
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);
+ wxChar *t = new wxChar[str_script.Length() + 1];
+ STRNCPY(t, str_script.fn_str(), str_script.Length() + 1);
f.script = t;
}
*m_log << wxT("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);
+ wxChar *t = new wxChar[str_rom.Length() + 1];
+ STRNCPY(t, str_rom.fn_str(), str_rom.Length() + 1);
f.target = t;
}
f.compare = m_program_compare->GetValue();
//version infomation
struct textcontrol detail;
- *m_version_detail << wxT("anago build at ") << __DATE__ << wxT("\n\n");
+ *m_version_detail << wxT("anago build at ") << wxT(__DATE__) << wxT("\n\n");
detail.object = m_version_detail;
detail.append = version_append;
detail.append_va = version_append_va;
void DumpThreadFinish(void)
{
-/* wxSound sound(wxT("tinkalink2.wav"), false);
- if(sound.IsOk() == true){
- sound.Play();
- }*/
-
m_dump_script_choice->Enable();
m_dump_romimage_picker->Enable();
m_dump_check_battery->Enable();
m_program_ppu_device->Enable();
m_status = STATUS_IDLE;
}
- void LogAppend(const char *t)
+ void LogAppend(const wxChar *t)
{
*m_log << t;
}
{
try{
script_dump_execute(&m_config);
- }catch(const char *t){
+
+ wxSound sound(wxT("tinkalink2.wav"), false);
+ if(sound.IsOk() == true){
+ sound.Play();
+ }
+ }catch(const wxChar *t){
+ wxSound sound(wxT("doggrowl.wav"), false);
+ if(sound.IsOk() == true){
+ sound.Play();
+ }
m_frame->LogAppend(t);
}
m_frame->DumpThreadFinish();
{
try{
script_program_execute(&m_config);
- }catch(const char *t){
+
+ wxSound sound(wxT("cuckoo.wav"), false);
+ if(sound.IsOk() == true){
+ sound.Play();
+ }
+ }catch(const wxChar *t){
+ wxSound sound(wxT("doggrowl.wav"), false);
+ if(sound.IsOk() == true){
+ sound.Play();
+ }
m_frame->LogAppend(t);
}
m_frame->ProgramThreadFinish();
#ifndef WIN32
extern "C"{
- int anago_cui(int c, char **v);
+ int anago_cui(int c, wxChar **v);
}
-int main(int c, char **v)
+int main(int c, wxChar **v)
{
if(c < 2){
return wxEntry(c, v);
#ifdef WIN32
#include <windows.h>
#endif
+#include "type.h"
#include "memory_manage.h"
#include "widget.h"
struct cui_gauge{
- const char *name;
+ const wgChar *name;
int value, range;
int lineback, lineforward;
};
t->range = value;
}
+#ifdef _UNICODE
+ #define PRINTF wprintf
+ #define VPRINTF vwprintf
+#else
+ #define PRINTF printf
+ #define VPRINTF vprintf
+#endif
static void console_move(int line)
{
if(line == 0){
if(GetConsoleScreenBufferInfo(c, &info) == 0){
//command.com, cygwin shell, mingw shell
if(line < 0){
- printf("\x1b[%dA", -line);
+ PRINTF(wgT("\x1b[%dA"), -line);
}else if(line == 1){
- printf("\n");
+ PRINTF(wgT("\n"));
fflush(stdout);
}else{
- printf("\n");
+ PRINTF(wgT("\n"));
fflush(stdout);
- printf("\x1b[%dB", line - 1);
-// printf("\x1b[%dB", line - 1);
+ PRINTF(wgT("\x1b[%dB"), line - 1);
+// PRINTF(wgT("\x1b[%dB"), line - 1);
// fflush(stdout);
}
}else{
}
#else
if(line < 0){
- printf("\x1b[%dA\x1b[35D", -line);
+ PRINTF(wgT("\x1b[%dA\x1b[35D"), -line);
}else{
- printf("\x1b[%dB\x1b[35D", line);
+ PRINTF(wgT("\x1b[%dB\x1b[35D"), line);
}
#endif
// fflush(stdout);
const int barnum = 16;
const int unit = t->range / barnum;
int igeta = t->value / unit;
- char bar[barnum + 3 + 1];
- char *text = bar;
+ wgChar bar[barnum + 3 + 1];
+ wgChar *text = bar;
int i;
assert(igeta <= barnum);
- printf("%s 0x%06x/0x%06x ", t->name, (int) t->value, (int) t->range);
- *text++ = '|';
+ PRINTF(wgT("%s 0x%06x/0x%06x "), t->name, (int) t->value, (int) t->range);
+ *text++ = wgT('|');
for(i = 0; i < igeta; i++){
if(i == barnum / 2){
- *text++ = '|';
+ *text++ = wgT('|');
}
- *text++ = '#';
+ *text++ = wgT('#');
}
for(; i < barnum; i++){
if(i == barnum / 2){
- *text++ = '|';
+ *text++ = wgT('|');
}
- *text++ = ' ';
+ *text++ = wgT(' ');
}
- *text++ = '|';
- *text = '\0';
- printf(bar);
+ *text++ = wgT('|');
+ *text = wgT('\0');
+ PRINTF(bar);
// fflush(stdout);
}
console_move(t->lineforward);
}
-static void name_set(void *obj, const char *name, int lineforward, int lineback)
+static void name_set(void *obj, const wgChar *name, int lineforward, int lineback)
{
struct cui_gauge *t = (struct cui_gauge *) obj;
t->name = name;
t->lineback = lineback;
}
-static void label_set(void *obj, const char *format, ...)
+static void label_set(void *obj, const wgChar *format, ...)
{
va_list list;
const struct cui_gauge *t = (const struct cui_gauge *) obj;
va_start(list, format);
console_move(t->lineback);
- printf("%s ", t->name);
- vprintf(format, list);
+ PRINTF(wgT("%s "), t->name);
+ VPRINTF(format, list);
console_move(t->lineforward);
va_end(list);
}
-void cui_gauge_new(struct gauge *t, const char *name, int lineforward, int lineback)
+void cui_gauge_new(struct gauge *t, const wgChar *name, int lineforward, int lineback)
{
t->bar = Malloc(sizeof(struct cui_gauge));
t->label = t->bar;
#ifndef _CUI_GAUGE_H_
#define _CUI_GAUGE_H_
struct gauge;
-void cui_gauge_new(struct gauge *t, const char *name, int lineforward, int lineback);
+void cui_gauge_new(struct gauge *t, const wgChar *name, int lineforward, int lineback);
void cui_gauge_destory(struct gauge *t);
#endif
#include "squirrel_wrap.h"
#include "flash_device.h"
-static void call(HSQUIRRELVM v, const char *devicename)
+static void call(HSQUIRRELVM v, const wgChar *devicename)
{
sq_pushroottable(v);
sq_pushstring(v, _SC("flash_device_get"), -1);
if(SQ_SUCCEEDED(sq_get(v,-2))){
sq_pushroottable(v);
- sq_pushstring(v, _SC(devicename), -1);
+ sq_pushstring(v, devicename, -1);
sq_call(v, 2, SQTrue, SQTrue);
}
}
-static bool long_get(HSQUIRRELVM v, const char *field, long *ret)
+static bool long_get(HSQUIRRELVM v, const wgChar *field, long *ret)
{
- sq_pushstring(v, _SC(field), -1);
+ sq_pushstring(v, field, -1);
SQRESULT r = sq_get(v, -2);
if(r != SQ_OK){
return false;
sq_pop(v, 1);
return true;
}
-static bool bool_get(HSQUIRRELVM v, const char *field, bool *ret)
+static bool bool_get(HSQUIRRELVM v, const wgChar *field, bool *ret)
{
- sq_pushstring(v, _SC(field), -1);
+ sq_pushstring(v, field, -1);
SQRESULT r = sq_get(v, -2);
if(r != SQ_OK){
return false;
sq_pop(v, 1);
return true;
}
-bool flash_device_get(const char *name, struct flash_device *t)
+bool flash_device_get(const wgChar *name, struct flash_device *t)
{
HSQUIRRELVM v = qr_open(NULL);
if(SQ_FAILED(sqstd_dofile(v, _SC("flashdevice.nut"), SQFalse, SQTrue))){
- puts("flash device script error");
qr_close(v);
return false;
}
goto field_error;
}
t->name = name;
- if(long_get(v, "capacity", &t->capacity) == false){
+ if(long_get(v, _SC("capacity"), &t->capacity) == false){
goto field_error;
}
- if(long_get(v, "pagesize", &t->pagesize) == false){
+ if(long_get(v, _SC("pagesize"), &t->pagesize) == false){
goto field_error;
}
- if(long_get(v, "erase_wait", &t->erase_wait) == false){
+ if(long_get(v, _SC("erase_wait"), &t->erase_wait) == false){
goto field_error;
}
- if(bool_get(v, "erase_require", &t->erase_require) == false){
+ if(bool_get(v, _SC("erase_require"), &t->erase_require) == false){
goto field_error;
}
- if(bool_get(v, "retry", &t->retry) == false){
+ if(bool_get(v, _SC("retry"), &t->retry) == false){
goto field_error;
}
- if(long_get(v, "command_mask", &t->command_mask) == false){
+ if(long_get(v, _SC("command_mask"), &t->command_mask) == false){
goto field_error;
}
long dd;
- if(long_get(v, "id_manufacurer", &dd) == false){
+ if(long_get(v, _SC("id_manufacurer"), &dd) == false){
goto field_error;
}
t->id_manufacurer = dd;
- if(long_get(v, "id_device", &dd) == false){
+ if(long_get(v, _SC("id_device"), &dd) == false){
goto field_error;
}
t->id_device = dd;
return true;
field_error:
- puts("script field error");
+// puts("script field error");
qr_close(v);
return false;
}
return i;
}
-static int flash_device_name_get(HSQUIRRELVM v, int index, const char **str)
+static int flash_device_name_get(HSQUIRRELVM v, int index, const wgChar **str)
{
sq_pushroottable(v);
sq_pushstring(v, _SC("flash_device_name_get"), -1);
return 1;
}
+#ifdef _UNICODE
+ #define STRNCMP wcsncmp
+#else
+ #define STRNCMP strncmp
+#endif
void flash_device_listup(struct flash_listup *t)
{
- const char *str;
+ const wgChar *str;
HSQUIRRELVM v = qr_open(NULL);
SQInteger top = sq_gettop(v);
for(i = 0; i < device_num; i++){
flash_device_name_get(v, i, &str);
- if(strncmp(str, "dummy", 6) != 0){
+ if(STRNCMP(str, _SC("dummy"), 6) != 0){
t->append(t->obj_cpu, str);
t->append(t->obj_ppu, str);
}
#ifndef _FLASH_DEVICE_H_
#define _FLASH_DEVICE_H_
struct flash_device{
- const char *name;
+ const wgChar *name;
long capacity, pagesize;
long erase_wait; //unit is msec
bool erase_require, retry;
long command_mask;
};
-bool flash_device_get(const char *name, struct flash_device *t);
+bool flash_device_get(const wgChar *name, struct flash_device *t);
//0x80 °Ê¹ß¤ÏËÜÅö¤Î¥Ç¥Ð¥¤¥¹½ÅÊ£¤·¤Ê¤¤¤È»×¤¦. 狼 JEDEC ¤Î¤È¤³¤ò¤·¤é¤Ù¤Æ.
enum{
FLASH_ID_DEVICE_SRAM = 0xf0,
//for GUI device listup
struct flash_listup{
void *obj_cpu, *obj_ppu;
- void (*append)(void *obj, const char *str);
+ void (*append)(void *obj, const wgChar *str);
};
void flash_device_listup(struct flash_listup *t);
#endif
return 0;
}
-SQInteger range_check(HSQUIRRELVM v, const char *name, long target, const struct range *range)
+SQInteger range_check(HSQUIRRELVM v, const wgChar *name, long target, const struct range *range)
{
if((target < range->start) || (target > 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");
+ f(v, wgT("%s range must be 0x%06x to 0x%06x"), name, (int) range->start, (int) range->end);
+ return sq_throwerror(v, wgT("script logical error"));
}
return 0;
}
if(SQ_FAILED(r)){
return r;
}
- r = range_check(v, "address", address, &range_address);
+ r = range_check(v, wgT("address"), address, &range_address);
if(SQ_FAILED(r)){
return r;
}
- return range_check(v, "data", data, &range_data);
+ return range_check(v, wgT("data"), data, &range_data);
}
SQInteger script_require(HSQUIRRELVM v)
{
if(sq_gettop(v) != 2){
- return sq_throwerror(v, "argument number error");
+ return sq_throwerror(v, wgT("argument number error"));
}
if(sq_gettype(v, 2) != OT_STRING){
- return sq_throwerror(v, "argument type error");
+ return sq_throwerror(v, wgT("argument type error"));
}
const SQChar *file;
if(SQ_FAILED(sq_getstring(v, 2, &file))){
- return sq_throwerror(v, "require error");
+ return sq_throwerror(v, wgT("require error"));
}
- if(SQ_FAILED(sqstd_dofile(v, _SC(file), SQFalse, SQTrue))){
- return sq_throwerror(v, "require error");
+ if(SQ_FAILED(sqstd_dofile(v, file, SQFalse, SQTrue))){
+ return sq_throwerror(v, wgT("require error"));
}
return 0;
}
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");
+ text->append(text->object, wgT("maybe cartridge connection error\n"));
return false;
}
}
long start, end;
};
SQInteger script_nop(HSQUIRRELVM v);
-SQInteger range_check(HSQUIRRELVM v, const char *name, long target, const struct range *range);
+SQInteger range_check(HSQUIRRELVM v, const wgChar *name, long target, const struct range *range);
SQInteger cpu_write_check(HSQUIRRELVM v);
SQInteger script_require(HSQUIRRELVM v);
{
int i;
const uint8_t *buf = t->data + t->offset;
+#ifdef _UNICODE
+ wprintf(L"%s 0x%06x:", t->name, t->offset);
+#else
printf("%s 0x%06x:", t->name, t->offset);
+#endif
for(i = 0; i < 0x10; i++){
- char dump[3+1];
+ wgChar dump[3+1];
+#ifdef _UNICODE
+ //wsprintf(dump, L"%02x", buf[i]);
+#else
sprintf(dump, "%02x", buf[i]);
+#endif
switch(i){
case 7:
- dump[2] = '-';
+ dump[2] = wgT('-');
break;
case 0x0f:
- dump[2] = '\0';
+ dump[2] = wgT('\0');
break;
default:
- dump[2] = ' ';
+ dump[2] = wgT(' ');
break;
}
- dump[3] = '\0';
+ dump[3] = wgT('\0');
+#ifdef _UNICODE
+ wprintf(L"%s", dump);
+#else
printf("%s", dump);
+#endif
}
int sum = 0;
while(length != 0){
buf++;
length--;
}
+#ifdef _UNICODE
+ wprintf(L":0x%06x\n", sum);
+#else
printf(":0x%06x\n", sum);
+#endif
fflush(stdout);
}
cpu = false;
}
if(cpu == false){
- 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);
+ d->log.append(d->log.object, wgT("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){
- 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);
+ d->log.append(d->log.object, wgT("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");
+ r = sq_throwerror(v, wgT("script logical error"));
}
return r;
}
if(SQ_FAILED(r)){
return r;
}
- r = range_check(v, "length", length, range_length);
+ r = range_check(v, wgT("length"), length, range_length);
if(SQ_FAILED(r)){
return r;
}
if((address < range_address->start) || ((address + length) > range_address->end)){
- 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");;
+ l->append(l->object, wgT("address range must be 0x%06x to 0x%06x"), (int) range_address->start, (int) range_address->end);
+ return sq_throwerror(v, wgT("script logical error"));;
}
t->read_count += length;
return 0;
{
bool ret = true;
if(SQ_FAILED(sqstd_dofile(v, _SC("dumpcore.nut"), SQFalse, SQTrue))){
- d->log.append(d->log.object, "dump core script error\n");
+ d->log.append(d->log.object, wgT("dump core script error\n"));
ret = false;
- }else if(SQ_FAILED(sqstd_dofile(v, _SC(d->script), SQFalse, SQTrue))){
- d->log.append(d->log.object, "%s open error\n", d->script);
+ }else if(SQ_FAILED(sqstd_dofile(v, d->script, SQFalse, SQTrue))){
+ d->log.append(d->log.object, wgT("%s open error\n"), d->script);
ret = false;
}else{
SQRESULT r = qr_call(
- v, "dump", (SQUserPointer) d, true,
+ v, wgT("dump"), (SQUserPointer) d, true,
3, d->mappernum, d->cpu.increase, d->ppu.increase
);
if(SQ_FAILED(r)){
void script_dump_execute(struct dump_config *d)
{
dump_memory_driver_init(&d->cpu);
- d->cpu.memory.name = "Program";
+ d->cpu.memory.name = wgT("Program");
dump_memory_driver_init(&d->ppu);
- d->ppu.memory.name = "Charcter";
+ d->ppu.memory.name = wgT("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_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);
- qr_function_register_global(v, "require", script_require);
+ 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("require"), script_require);
if(script_execute(v, d) == false){
qr_close(v);
return;
}*/
d->handle = d->control->open(d->except);
if(d->handle == NULL){
- d->log.append(d->log.object, "reader open error\n");
+ d->log.append(d->log.object, wgT("reader open error\n"));
return;
}
d->control->init(d->handle);
}
{
HSQUIRRELVM v = qr_open(&d->log);
- 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);
- qr_function_register_global(v, "ppu_read", ppu_read);
- qr_function_register_global(v, "ppu_ramfind", ppu_ramfind);
- qr_function_register_global(v, "require", script_require);
+ qr_function_register_global(v, wgT("memory_new"), memory_new);
+ qr_function_register_global(v, wgT("nesfile_save"), nesfile_save);
+ qr_function_register_global(v, wgT("cpu_write"), cpu_write);
+ qr_function_register_global(v, wgT("cpu_read"), cpu_read);
+ qr_function_register_global(v, wgT("ppu_read"), ppu_read);
+ qr_function_register_global(v, wgT("ppu_ramfind"), ppu_ramfind);
+ qr_function_register_global(v, wgT("require"), script_require);
script_execute(v, d);
qr_close(v);
}
#ifndef _SCRIPT_DUMP_H_
#define _SCRIPT_DUMP_H_
struct dump_config{
- const char *script;
- const char *target;
+ const wgChar *script;
+ const wgChar *target;
const struct reader_handle *handle;
const struct reader_control *control;
struct dump_memory_driver{
bool progress;
bool battery;
struct textcontrol log;
- void (*except)(const char *str);
+ void (*except)(const wgChar *str);
};
void script_dump_execute(struct dump_config *c);
#endif
t->c5555 = d;
break;
default:
- return sq_throwerror(v, "unknown command address");
+ return sq_throwerror(v, wgT("unknown command address"));
}
t->command_change = true;
return 0;
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 ");
+ t->gauge.label_set(t->gauge.label, wgT("erasing "));
}
return 0;
}
t->gauge.range_set(t->gauge.bar, t->programming.count);
t->gauge.value_set(t->gauge.bar, t->gauge.label, t->programming.offset);
if(t->programming.count == 0){
- t->gauge.label_set(t->gauge.label, "skip");
+ t->gauge.label_set(t->gauge.label, wgT("skip"));
}
}
if(t->programming.length == 0){
if(t->programming.offset != 0 && compare == true){
if(program_compare(h, t) == false){
- log->append(log->object, "%s memory compare error\n", t->memory.name);
+ log->append(log->object, wgT("%s memory compare error\n"), t->memory.name);
return false;
}
}
static SQInteger program_main(HSQUIRRELVM v)
{
if(sq_gettop(v) != (1 + 3)){ //roottable, userpointer, co_cpu, co_ppu
- return sq_throwerror(v, "argument number error");
+ return sq_throwerror(v, wgT("argument number error"));
}
struct program_config *d;
SQRESULT r = qr_userpointer_get(v, (SQUserPointer) &d);
}
HSQUIRRELVM co_cpu, co_ppu;
if(SQ_FAILED(sq_getthread(v, 3, &co_cpu))){
- return sq_throwerror(v, "thread error");
+ return sq_throwerror(v, wgT("thread error"));
}
if(SQ_FAILED(sq_getthread(v, 4, &co_ppu))){
- return sq_throwerror(v, "thread error");
+ return sq_throwerror(v, wgT("thread error"));
}
SQInteger state_cpu = sq_getvmstate(co_cpu);
SQInteger state_ppu = sq_getvmstate(co_ppu);
if(SQ_FAILED(r)){
return r;
}
- r = range_check(v, "length", t->programming.length, range_length);
+ r = range_check(v, wgT("length"), t->programming.length, range_length);
if(SQ_FAILED(r)){
return r;
}
if((t->programming.address < range_address->start) || ((t->programming.address + t->programming.length) > range_address->end)){
- 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");;
+ log->append(log->object, wgT("address range must be 0x%06x to 0x%06x"), (int) range_address->start, (int) range_address->end - 1);
+ return sq_throwerror(v, wgT("script logical error"));
}
t->programming.count += t->programming.length;
return 0;
return program_count(v, &d->ppu, &range_address, &range_length, &d->log);
}
-static bool script_execute(HSQUIRRELVM v, const char *function, struct program_config *c)
+static bool script_execute(HSQUIRRELVM v, const wgChar *function, struct program_config *c)
{
bool ret = true;
if(SQ_FAILED(sqstd_dofile(v, _SC("flashcore.nut"), SQFalse, SQTrue))){
- c->log.append(c->log.object, "flash core script error\n");
+ c->log.append(c->log.object, wgT("flash core script error\n"));
ret = false;
- }else if(SQ_FAILED(sqstd_dofile(v, _SC(c->script), SQFalse, SQTrue))){
- c->log.append(c->log.object, "%s open error\n", c->script);
+ }else if(SQ_FAILED(sqstd_dofile(v, c->script, SQFalse, SQTrue))){
+ c->log.append(c->log.object, wgT("%s open error\n"), c->script);
ret = false;
}else{
SQRESULT r = qr_call(
{
//script test run
{
- static const char *functionname[] = {
- "cpu_erase", "ppu_erase",
- "erase_wait", "program_main"
+ static const wgChar *functionname[] = {
+ wgT("cpu_erase"), wgT("ppu_erase"),
+ wgT("erase_wait"), wgT("program_main")
};
HSQUIRRELVM v = qr_open(&c->log);
int i;
- for(i = 0; i < sizeof(functionname)/sizeof(char *); i++){
+ for(i = 0; i < sizeof(functionname)/sizeof(wgChar *); i++){
qr_function_register_global(v, functionname[i], script_nop);
}
- qr_function_register_global(v, "cpu_write", cpu_write_check);
- qr_function_register_global(v, "cpu_command", cpu_command);
- qr_function_register_global(v, "cpu_program", cpu_program_count);
+ qr_function_register_global(v, _SC("cpu_write"), cpu_write_check);
+ qr_function_register_global(v, _SC("cpu_command"), cpu_command);
+ qr_function_register_global(v, _SC("cpu_program"), cpu_program_count);
- qr_function_register_global(v, "ppu_program", ppu_program_count);
- qr_function_register_global(v, "ppu_command", ppu_command);
- qr_function_register_global(v, "vram_mirrorfind", vram_mirrorfind);
+ qr_function_register_global(v, _SC("ppu_program"), ppu_program_count);
+ qr_function_register_global(v, _SC("ppu_command"), ppu_command);
+ qr_function_register_global(v, _SC("vram_mirrorfind"), vram_mirrorfind);
- if(script_execute(v, "testrun", c) == false){
+ if(script_execute(v, wgT("testrun"), c) == false){
qr_close(v);
return;
}
assert(c->cpu.memory.size != 0);
if(c->cpu.programming.count % c->cpu.memory.size != 0){
- 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);
+ c->log.append(c->log.object, wgT("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){
- 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);
+ c->log.append(c->log.object, wgT("logical error: ppu_programsize is not connected 0x%06x/0x%06x\n"), (int) c->ppu.programming.count, (int) c->ppu.memory.size);
return;
}
}
gauge_init(&c->ppu);
{
HSQUIRRELVM v = qr_open(&c->log);
- qr_function_register_global(v, "cpu_write", cpu_write);
- qr_function_register_global(v, "cpu_erase", cpu_erase);
- qr_function_register_global(v, "cpu_program", cpu_program_memory);
- qr_function_register_global(v, "cpu_command", cpu_command);
- qr_function_register_global(v, "ppu_erase", ppu_erase);
- qr_function_register_global(v, "ppu_program", ppu_program_memory);
- qr_function_register_global(v, "ppu_command", ppu_command);
- qr_function_register_global(v, "program_main", program_main);
- qr_function_register_global(v, "erase_wait", erase_wait);
- qr_function_register_global(v, "vram_mirrorfind", script_nop);
- script_execute(v, "program", c);
+ qr_function_register_global(v, _SC("cpu_write"), cpu_write);
+ qr_function_register_global(v, _SC("cpu_erase"), cpu_erase);
+ qr_function_register_global(v, _SC("cpu_program"), cpu_program_memory);
+ qr_function_register_global(v, _SC("cpu_command"), cpu_command);
+ qr_function_register_global(v, _SC("ppu_erase"), ppu_erase);
+ qr_function_register_global(v, _SC("ppu_program"), ppu_program_memory);
+ qr_function_register_global(v, _SC("ppu_command"), ppu_command);
+ qr_function_register_global(v, _SC("program_main"), program_main);
+ qr_function_register_global(v, _SC("erase_wait"), erase_wait);
+ qr_function_register_global(v, _SC("vram_mirrorfind"), script_nop);
+ script_execute(v, wgT("program"), c);
qr_close(v);
}
}
if(t->flash.capacity < from->size){
log->append(log->object, t->memory.name);
- log->append(log->object, " image size is larger than target device");
+ log->append(log->object, wgT(" image size is larger than target device"));
return false;
}
return true;
//rom image load
struct romimage rom;
if(nesfile_load(&c->log, c->target, &rom) == false){
- c->log.append(c->log.object, "ROM image open error");
+ c->log.append(c->log.object, wgT("ROM image open error"));
return;
}
//variable init
c->mappernum = rom.mappernum;
- c->cpu.memory.name = "Program Flash";
+ c->cpu.memory.name = wgT("Program Flash");
if(memory_image_init(&rom.cpu_rom, &c->cpu, &c->log) == false){
nesbuffer_free(&rom, 0);
return;
}
- c->ppu.memory.name = "Charcter Flash";
+ c->ppu.memory.name = wgT("Charcter Flash");
if(memory_image_init(&rom.ppu_rom, &c->ppu, &c->log) == false){
nesbuffer_free(&rom, 0);
return;
//reader initalize
c->handle = c->control->open(c->except);
if(c->handle == NULL){
- c->log.append(c->log.object, "reader open error\n");
+ c->log.append(c->log.object, wgT("reader open error\n"));
nesbuffer_free(&rom, 0);
return;
}
#ifndef _SCRIPT_PROGRAM_H_
#define _SCRIPT_PROGRAM_H_
struct program_config{
- const char *script;
- const char *target;
+ const wgChar *script;
+ const wgChar *target;
const struct reader_handle *handle;
const struct reader_control *control;
struct flash_memory_driver{
long mappernum;
bool compare, testrun;
struct textcontrol log;
- void (*except)(const char *str);
+ void (*except)(const wgChar *str);
};
void script_program_execute(struct program_config *c);
#endif
#include <squirrel.h>
#include <sqstdio.h>
#include <sqstdaux.h>
+#include "type.h"
#include "widget.h"
#ifdef SQUNICODE
}
//SQInteger
-void qr_function_register_global(HSQUIRRELVM v, const char *name, SQFUNCTION f)
+void qr_function_register_global(HSQUIRRELVM v, const SQChar *name, SQFUNCTION f)
{
sq_pushroottable(v);
sq_pushstring(v, name, -1);
SQRESULT r = SQ_ERROR;
SQInteger top = sq_gettop(v);
sq_pushroottable(v);
- sq_pushstring(v, _SC(functionname), -1);
+ sq_pushstring(v, functionname, -1);
if(SQ_SUCCEEDED(sq_get(v,-2))){
int i;
va_list ap;
{
va_list ap;
if(sq_gettop(v) != (num + 2)){ //roottable, up, arguments...
- return sq_throwerror(v, "argument number error");
+ return sq_throwerror(v, _SC("argument number error"));
}
va_start(ap, num);
SQInteger i;
for(i = 0; i < num; i++){
if(long_get(v, i + 3, va_arg(ap, long *)) == false){
- return sq_throwerror(v, "argument type error");
+ return sq_throwerror(v, _SC("argument type error"));
}
}
return SQ_OK;
assert(sq_gettype(v, 2) == OT_USERPOINTER);
r = sq_getuserpointer(v, 2, up);
if(SQ_FAILED(r)){
- return sq_throwerror(v, "1st argument must be d (userpointer)");
+ return sq_throwerror(v, _SC("1st argument must be d (userpointer)"));
}
return r;
}
void qr_version_print(const struct textcontrol *l)
{
- l->append(l->object, SQUIRREL_VERSION " ");
- l->append(l->object, SQUIRREL_COPYRIGHT "\n");
+ l->append(l->object, SQUIRREL_VERSION _SC(" "));
+ l->append(l->object, SQUIRREL_COPYRIGHT _SC("\n"));
}
#define _SQUIRREL_WRAP_H_
struct textcontrol;
HSQUIRRELVM qr_open(struct textcontrol *p);
-void qr_function_register_global(HSQUIRRELVM v, const char *name, SQFUNCTION f);
+void qr_function_register_global(HSQUIRRELVM v, const wgChar *name, SQFUNCTION f);
SQRESULT qr_call(HSQUIRRELVM v, const SQChar *functionname, SQUserPointer up, bool settop, int argnum, ...);
void qr_close(HSQUIRRELVM v);
SQRESULT qr_argument_get(HSQUIRRELVM v, SQInteger num, ...);
#include <stdio.h>
+#include "type.h"
#include "memory_manage.h"
#include "file.h"
-int buf_load(u8 *buf, const char *file, int size)
+#ifdef _UNICODE
+ #define FOPEN(name, mode) _wfopen(name, L##mode)
+#else
+ #define FOPEN(name, mode) _fopen(name, mode)
+#endif
+
+int buf_load(uint8_t *buf, const wgChar *file, int size)
{
FILE *fp;
- fp = fopen(file, "rb");
+ fp = FOPEN(file, "rb");
if(fp == NULL){
return NG;
}
fseek(fp, 0, SEEK_SET);
- fread(buf, sizeof(u8), size, fp);
+ fread(buf, sizeof(uint8_t), size, fp);
fclose(fp);
return OK;
}
-void* buf_load_full(const char *file, int *size)
+void* buf_load_full(const wgChar *file, int *size)
{
FILE *fp;
- u8 *buf;
+ uint8_t *buf;
*size = 0;
- fp = fopen(file, "rb");
+ fp = FOPEN(file, "rb");
if(fp == NULL){
return NULL;
}
}
fseek(fp, 0, SEEK_SET);
buf = Malloc(*size);
- fread(buf, sizeof(u8), *size, fp);
+ fread(buf, sizeof(uint8_t), *size, fp);
fclose(fp);
return buf;
}
-void buf_save(const void *buf, const char *file, int size)
+void buf_save(const void *buf, const wgChar *file, int size)
{
FILE *fp;
- fp = fopen(file, "wb");
+ fp = FOPEN(file, "wb");
fseek(fp, 0, SEEK_SET);
- fwrite(buf, sizeof(u8), size, fp);
+ fwrite(buf, sizeof(uint8_t), size, fp);
fclose(fp);
}
#ifndef _FILE_H_
#define _FILE_H_
#include "type.h"
-int buf_load(u8 *buf, const char *file, int size);
-void* buf_load_full(const char *file, int *size);
-void buf_save(const void *buf, const char *file, int size);
+int buf_load(uint8_t *buf, const wgChar *file, int size);
+void* buf_load_full(const wgChar *file, int *size);
+void buf_save(const void *buf, const wgChar *file, int size);
#endif
PROGRAM_ROM_MIN = 0x4000,
CHARCTER_ROM_MIN = 0x2000
};
-static const u8 NES_HEADER_INIT[NES_HEADER_SIZE] = {
+static const uint8_t NES_HEADER_INIT[NES_HEADER_SIZE] = {
'N', 'E', 'S', 0x1a, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0
};
#ifndef HEADEROUT
static
#endif
-void nesheader_set(const struct romimage *r, u8 *header)
+void nesheader_set(const struct romimage *r, uint8_t *header)
{
memcpy(header, NES_HEADER_INIT, NES_HEADER_SIZE);
header[4] = r->cpu_rom.size / PROGRAM_ROM_MIN;
{
long mirror_size = m->size / 2;
while(mirror_size >= min){
- const u8 *halfbuf;
+ const uint8_t *halfbuf;
halfbuf = m->data;
halfbuf += mirror_size;
if(memcmp(m->data, halfbuf, mirror_size) != 0){
const long ret = mirror_size * 2;
if(m->size != ret){
- l->append(l->object, "mirroring %s ROM fixed\n", m->name);
+ l->append(l->object, wgT("mirroring %s ROM fixed\n"), m->name);
m->size = ret;
}
return 0;
mirror_size /= 2;
}
- u8 *ffdata;
+ uint8_t *ffdata;
int ret = 0;
ffdata = Malloc(min);
memset(ffdata, 0xff, min);
if(memcmp(ffdata, m->data, min) == 0){
- l->append(l->object, "error: data is all 0xff\n");
+ l->append(l->object, wgT("error: data is all 0xff\n"));
ret = 1;
}else if(m->size != min){
- l->append(l->object, "mirroring %s ROM fixed\n", m->name);
+ l->append(l->object, wgT("mirroring %s ROM fixed\n"), m->name);
m->size = min;
}
Free(ffdata);
{
if(m->size != 0){
const uint32_t crc = crc32_get(m->data, m->size);
- l->append(l->object, "%s ROM: size 0x%06x, crc32 0x%08x\n", m->name, m->size, (const int) crc);
+ l->append(l->object, wgT("%s ROM: size 0x%06x, crc32 0x%08x\n"), m->name, m->size, (const int) crc);
}else{
- l->append(l->object, "%s RAM\n", m->name);
+ l->append(l->object, wgT("%s RAM\n"), m->name);
}
}
-void nesfile_create(const struct textcontrol *l, struct romimage *r, const char *romfilename)
+void nesfile_create(const struct textcontrol *l, struct romimage *r, const wgChar *romfilename)
{
int error = 0;
//RAM adapter bios size 0x2000 ¤ÏÊѹ¹¤·¤Ê¤¤
return;
}
//½¤ÀµºÑ¤ß ROM ¾ðÊóɽ¼¨
- l->append(l->object, "%s, mapper %d\n", romfilename, (int) r->mappernum);
+ l->append(l->object, wgT("%s, mapper %d\n"), romfilename, (int) r->mappernum);
rominfo_print(l, &(r->cpu_rom));
rominfo_print(l, &(r->ppu_rom));
FILE *f;
- u8 header[NES_HEADER_SIZE];
+ uint8_t header[NES_HEADER_SIZE];
nesheader_set(r, header);
+#ifdef _UNICODE
+ f = _wfopen(romfilename, L"wb");
+#else
f = fopen(romfilename, "wb");
+#endif
fseek(f, 0, SEEK_SET);
//RAM adapter bios ¤Ë¤Ï NES ¥Ø¥Ã¥À¤òºî¤é¤Ê¤¤
if(r->cpu_rom.size >= PROGRAM_ROM_MIN){
- fwrite(header, sizeof(u8), NES_HEADER_SIZE, f);
+ fwrite(header, sizeof(uint8_t), NES_HEADER_SIZE, f);
}
- fwrite(r->cpu_rom.data, sizeof(u8), r->cpu_rom.size, f);
+ 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(u8), r->ppu_rom.size, f);
+ fwrite(r->ppu_rom.data, sizeof(uint8_t), r->ppu_rom.size, f);
}
fclose(f);
}
}
}
-void backupram_create(const struct memory *r, const char *ramfilename)
+void backupram_create(const struct memory *r, const wgChar *ramfilename)
{
buf_save(r->data, ramfilename, r->size);
}
romimage ¤¬ bank ¤ÎÄêµÁÃͤè¤ê¾®¤µ¤¤¾ì¹ç¤Ï romarea ¤ÎËöÈø¤ËÄ¥¤ë¡£
Ʊ¤¸¥Ç¡¼¥¿¤ò memcpy ¤·¤¿¤Û¤¦¤¬°ÂÁ´¤À¤¬¡¢¤È¤ê¤¢¤¨¤º¤Ç¡£
*/
-static void nesfile_datapointer_set(const u8 *buf, struct memory *m, long size)
+static void nesfile_datapointer_set(const uint8_t *buf, struct memory *m, long size)
{
- u8 *data;
+ uint8_t *data;
assert((size % CHARCTER_ROM_MIN) == 0);
assert((m->size % CHARCTER_ROM_MIN) == 0);
data = Malloc(size);
}
//flashmemory device capacity check ¤¬È´¤±¤Æ¤ë¤±¤É¤É¤³¤Ç¤ä¤ë¤«Ì¤Äê
-bool nesfile_load(const struct textcontrol *l, const char *file, struct romimage *r)
+bool nesfile_load(const struct textcontrol *l, const wgChar *file, struct romimage *r)
{
int imagesize;
- u8 *buf;
+ uint8_t *buf;
buf = buf_load_full(file, &imagesize);
if(buf == NULL || imagesize < (NES_HEADER_SIZE + PROGRAM_ROM_MIN)){
}
//nes header check
if(memcmp(buf, NES_HEADER_INIT, 4) != 0){
- l->append(l->object, "NES header identify error\n");
+ l->append(l->object, wgT("NES header identify error\n"));
Free(buf);
return false;
}
r->ppu_rom.size = ppusize;
//NESfilesize
if(offset != imagesize){
- l->append(l->object, "NES header filesize error\n");
+ l->append(l->object, wgT("NES header filesize error\n"));
Free(buf);
return false;
}
image pointer set/ memcpy
*/
{
- u8 *d;
+ uint8_t *d;
d = buf;
d += NES_HEADER_SIZE;
nesfile_datapointer_set(d, &r->cpu_rom, cpusize);
#ifndef _HEADER_H_
#define _HEADER_H_
-#if ANAGO==0
-#include "flashmemory.h"
-#endif
-
enum trastype{
TRANSTYPE_EMPTY,
TRANSTYPE_TOP,
MEMORY_ATTR_READ, MEMORY_ATTR_WRITE, MEMORY_ATTR_NOTUSE
};
struct memory{
- const char *name;
+ const wgChar *name;
int size, offset;
enum memory_attribute attribute;
enum trastype transtype;
};
struct romimage{
struct memory cpu_rom, ppu_rom, cpu_ram;
-#if ANAGO==0
- struct flash_order cpu_flash, ppu_flash;
-#endif
long mappernum;
enum vram_mirroring mirror;
int backupram;
void nesheader_set(const struct romimage *r, uint8_t *header);
#endif
bool nesbuffer_malloc(struct romimage *r, int mode);
-void nesfile_create(const struct textcontrol *l, struct romimage *r, const char *romfilename);
+void 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 char *ramfilename);
+void backupram_create(const struct memory *r, const wgChar *ramfilename);
int memorysize_check(const long size, int region);
-bool nesfile_load(const struct textcontrol *l, const char *file, struct romimage *r);
+bool nesfile_load(const struct textcontrol *l, const wgChar *file, struct romimage *r);
#endif
#include <usb.h>
#include <kazzo_request.h>
#include <kazzo_task.h>
+#include "type.h"
#include "memory_manage.h"
#include "reader_master.h"
#include "usb_device.h"
struct reader_handle{
usb_dev_handle *handle;
- void (*except)(const char *str);
+ void (*except)(const wgChar *str);
};
-static const struct reader_handle *kazzo_open(void (*except)(const char *str))
+static const struct reader_handle *kazzo_open(void (*except)(const wgChar *str))
{
struct reader_handle *h;
usb_dev_handle *usb = device_open();
usb_close(h->handle);
Free((void *) h);
}
+
+static void throw(const struct reader_handle *h)
+{
+#ifdef _UNICODE
+ size_t length = strlen(usb_strerror());
+ wchar_t *mm = Malloc(sizeof(wchar_t) * (length + 1));
+ mbstowcs(mm, usb_strerror(), length + 1);
+ h->except(mm);
+ Free(mm);
+#else
+ h->except(usb_strerror());
+#endif
+}
+
enum{
TIMEOUT = 4000
};
index, (char *) data, length, TIMEOUT
);
if(cnt != length){
- h->except(usb_strerror());
+ throw(h);
// puts(__FUNCTION__);
// puts(usb_strerror());
// exit(1);
index, (char *) d, length, TIMEOUT
);
if(cnt != length){
+ throw(h);
// puts(__FUNCTION__);
// puts(usb_strerror());
// exit(1);
- h->except(usb_strerror());
}
Free(d);
}
.flash_program = kazzo_ppu_flash_program,
.flash_device_get = kazzo_ppu_flash_device_get
}, .control = {
- .name = "kazzo",
+ .name = wgT("kazzo"),
.open = kazzo_open, .close = kazzo_close,
.init = kazzo_init,
.flash_status = kazzo_flash_status,
void (*flash_device_get)(const struct reader_handle *h, uint8_t s[2]);
};
struct reader_control{
- const char *name;
- const struct reader_handle *(*open)(void (*except)(const char *str));
+ const wgChar *name;
+ const struct reader_handle *(*open)(void (*except)(const wgChar *str));
void (*close)(const struct reader_handle *h);
void (*init)(const struct reader_handle *h);
void (*flash_status)(const struct reader_handle *h, uint8_t s[2]);
#ifndef _TYPE_H_
#define _TYPE_H_
#include <stdint.h>
-#include <stdbool.h>
-typedef uint8_t u8;
+#ifndef __cplusplus
+ #include <stdbool.h>
+#endif
+
enum{
OK = 0, NG
};
+#ifdef _UNICODE
+ #include <wchar.h>
+ typedef wchar_t wgChar;
+ #define wgT(x) L##x
+#else
+ typedef char wgChar;
+ #define wgT(x) x
+#endif
#endif
#include <stddef.h>
+#include "type.h"
#include "widget.h"
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 wgChar *str, ...)
{
}
const struct gauge GAUGE_DUMMY = {
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 wgChar *str, ...);
};
struct textcontrol{
void *object;
- void (*append)(void *, const char *, ...);
- void (*append_va)(void *, const char *, va_list);
+ void (*append)(void *, const wgChar *, ...);
+ void (*append_va)(void *, const wgChar *, va_list);
};
extern const struct gauge GAUGE_DUMMY;
#endif