mega <- 0x20000;
-trans_empty <- 0;
-function cpu_banksize_get(capacity)
-{
- return capacity * mega / cpu_banksize;
-}
-function ppu_banksize_get(capacity)
-{
- return capacity * mega / ppu_banksize;
-}
-function loopsize_get(flashsize, trans, size)
+function loopsize_get(t, trans, romsize)
{
local trans_full = 3, trans_top = 1, trans_bottom = 2; //header.h enum transtype
- local loop;
+ local loop = {start = 0, end = t.maxsize / t.banksize};
switch(trans){
case trans_full:
- loop = flashsize.full;
break;
case trans_top:
- loop = flashsize.top[size];
+ loop.end = romsize / t.banksize;
break;
case trans_bottom:
- loop = flashsize.bottom[size];
+ loop.start = (t.maxsize - romsize) / t.banksize;
break;
default:
- loop = {start = 0, end = 0};
+ loop.start = 0;
+ loop.end = 0;
break;
}
return loop;
}
function program(d, mapper, cpu_trans, cpu_size, ppu_trans, ppu_size)
{
- if(board.mapper != mapper){
+ local trans_empty = 0;
+ if(board.mappernum != mapper){
print("mapper number not connected");
return;
}
- local cpu_loop = loopsize_get(board.cpu_flashsize, cpu_trans, cpu_size);
- local ppu_loop = loopsize_get(board.ppu_flashsize, ppu_trans, ppu_size);
- local co_cpu = newthread(program_cpu);
- local co_ppu = newthread(program_ppu);
- initalize(d);
+ local cpu_loop = loopsize_get(board.cpu, cpu_trans, cpu_size);
+ local ppu_loop = loopsize_get(board.ppu, ppu_trans, ppu_size);
+ local co_cpu = newthread(cpu_transfer);
+ local co_ppu = newthread(ppu_transfer);
+ initalize(d, board.cpu.banksize, board.ppu.banksize);
if(cpu_trans != trans_empty){
cpu_erase(d);
}
}
erase_wait(d);
if(cpu_trans != trans_empty){
- co_cpu.call(d, cpu_loop);
+ co_cpu.call(d, cpu_loop.start, cpu_loop.end, board.cpu.banksize);
}
if(ppu_trans != trans_empty){
- co_ppu.call(d, ppu_loop);
+ co_ppu.call(d, ppu_loop.start, ppu_loop.end, board.ppu.banksize);
}
program_main(d, co_cpu, co_ppu)
}
}
return range_check(v, "data", data, &range_data);
}
+
+SQInteger script_require(HSQUIRRELVM v)
+{
+ if(sq_gettop(v) != 2){
+ return sq_throwerror(v, "argument number error");
+ }
+ if(sq_gettype(v, 2) != OT_STRING){
+ return sq_throwerror(v, "argument type error");
+ }
+ const SQChar *file;
+ if(SQ_FAILED(sq_getstring(v, 2, &file))){
+ return sq_throwerror(v, "require error");
+ }
+ if(SQ_FAILED(sqstd_dofile(v, _SC(file), SQFalse, SQTrue))){
+ return sq_throwerror(v, "require error");
+ }
+ return 0;
+}
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);
if(script_execute(v, c, &d) == false){
qr_close(v);
return;
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);
script_execute(v, c, &d);
qr_close(v);
}