OSDN Git Service

スクリプトの仕様を追加
authornaruko <naruko@24ea1065-a21e-4ca1-99c9-f5125deb0858>
Tue, 24 Nov 2009 08:45:04 +0000 (08:45 +0000)
committernaruko <naruko@24ea1065-a21e-4ca1-99c9-f5125deb0858>
Tue, 24 Nov 2009 08:45:04 +0000 (08:45 +0000)
git-svn-id: svn+ssh://svn.osdn.net/svnroot/unagi@312 24ea1065-a21e-4ca1-99c9-f5125deb0858

client/trunk/anago/flashcore.nut
client/trunk/anago/script_common.c
client/trunk/anago/script_common.h
client/trunk/anago/script_dump.c
client/trunk/anago/squirrel_wrap.c

index 1e394cc..b003243 100644 (file)
@@ -1,44 +1,36 @@
 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);
        }
@@ -47,10 +39,10 @@ function program(d, mapper, cpu_trans, cpu_size, ppu_trans, ppu_size)
        }
        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)
 }
index 72df829..6df1bbb 100644 (file)
@@ -36,3 +36,21 @@ SQInteger cpu_write_check(HSQUIRRELVM v)
        }
        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;
+}
index a0de34e..69627d2 100644 (file)
@@ -6,4 +6,5 @@ struct range{
 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);
 #endif
index 9806d21..3f25f0f 100644 (file)
@@ -340,6 +340,7 @@ void script_dump_execute(struct config_dump *c)
                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;
@@ -357,6 +358,7 @@ void script_dump_execute(struct config_dump *c)
                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);
        }
index df9213d..413acb3 100644 (file)
@@ -23,6 +23,7 @@ HSQUIRRELVM qr_open(void)
 {
        HSQUIRRELVM v = sq_open(0x400);
        sqstd_seterrorhandlers(v);
+       sqstd_register_iolib(v);
        sq_setprintfunc(v, printfunc);
        sq_pushroottable(v);
        return v;