OSDN Git Service

実験的ソースをコミット
authornaruko <naruko@24ea1065-a21e-4ca1-99c9-f5125deb0858>
Mon, 14 Dec 2009 07:14:31 +0000 (07:14 +0000)
committernaruko <naruko@24ea1065-a21e-4ca1-99c9-f5125deb0858>
Mon, 14 Dec 2009 07:14:31 +0000 (07:14 +0000)
git-svn-id: svn+ssh://svn.osdn.net/svnroot/unagi@328 24ea1065-a21e-4ca1-99c9-f5125deb0858

client/trunk/anago/flashcore.nut
client/trunk/anago/script_flash.c
client/trunk/reader_kazzo.c
client/trunk/unagi.c

index c92e6ac..988be95 100644 (file)
@@ -30,7 +30,7 @@ function program(
 {
        local trans_empty = 0;
        if(board.mappernum != mapper){
-               print("mapper number not connected");
+               print("mapper number not connected\n");
                return;
        }
        local cpu_loop = loopsize_get(board.cpu, cpu_trans, cpu_image_size, cpu_device_size);
@@ -49,6 +49,7 @@ function program(
        }
        erase_wait(d);
        if(cpu_trans != trans_empty){
+               //cpu_transfer(d, cpu_loop.start, cpu_loop.end, board.cpu.banksize);
                co_cpu.call(d, cpu_loop.start, cpu_loop.end, board.cpu.banksize);
        }
        if(ppu_trans != trans_empty){
index 7309e82..9b417cd 100644 (file)
@@ -270,7 +270,7 @@ static SQInteger program_main(HSQUIRRELVM v)
        }
        SQInteger state_cpu = sq_getvmstate(co_cpu);
        SQInteger state_ppu = sq_getvmstate(co_ppu);
-       const long sleepms = d->compare == true ? 6 : 2; //W29C040 ¤Ç compare ¤ò¤¹¤ë¤È¡¢error ¤¬½Ð¤ë¤Î¤Ç½Ð¤Ê¤¤ÃͤËÄ´À° (¤ä¤Ã¤Ä¤±Âбþ)
+       const long sleepms = d->compare == true ? 11 : 2; //W29C040 ¤Ç compare ¤ò¤¹¤ë¤È¡¢error ¤¬½Ð¤ë¤Î¤Ç½Ð¤Ê¤¤ÃͤËÄ´À° (¤ä¤Ã¤Ä¤±Âбþ)
        
        progress_init();
        while((state_cpu != SQ_VMSTATE_IDLE) || (state_ppu != SQ_VMSTATE_IDLE)){
@@ -279,10 +279,14 @@ static SQInteger program_main(HSQUIRRELVM v)
                Sleep(sleepms);
                d->flash_status(s);
                if(state_cpu != SQ_VMSTATE_IDLE && s[0] == KAZZO_TASK_FLASH_IDLE){
-                       program_memoryarea(co_cpu, &d->order_cpu, d->compare, "program", &state_cpu, &console_update);
+                       if(program_memoryarea(co_cpu, &d->order_cpu, d->compare, "program", &state_cpu, &console_update) == false){
+                               return 0;
+                       }
                }
                if(state_ppu != SQ_VMSTATE_IDLE && s[1] == KAZZO_TASK_FLASH_IDLE){
-                       program_memoryarea(co_ppu, &d->order_ppu, d->compare, "charcter", &state_ppu, &console_update);
+                       if(program_memoryarea(co_ppu, &d->order_ppu, d->compare, "charcter", &state_ppu, &console_update) == false){
+                               return 0;
+                       }
                }
                if(console_update == true){
                        progress_draw(d->order_cpu.programming.offset, d->order_cpu.programming.count, d->order_ppu.programming.offset, d->order_ppu.programming.count);
index 0b6dd30..4178b75 100644 (file)
@@ -3,6 +3,7 @@
 #include <usb.h>
 #include <kazzo_request.h>
 #include <kazzo_task.h>
+#include "memory_manage.h"
 #include "reader_master.h"
 #include "usb_device.h"
 #include "reader_kazzo.h"
@@ -53,7 +54,8 @@ static void device_read(usb_dev_handle *handle, enum request r, long address, lo
                0, data, length, TIMEOUT
        );
        if(cnt != length){
-               usb_strerror();
+               puts(__FUNCTION__);
+               puts(usb_strerror());
                exit(1);
        }
 }
@@ -83,16 +85,20 @@ static void kazzo_ppu_read(long address, long length, uint8_t *data)
 static void device_write(usb_dev_handle *handle, enum request w, long address, long length, const uint8_t *data)
 {
        //Removing const attribute is not good method....
+       uint8_t *d = Malloc(length);
+       memcpy(d, data, length);
        int cnt = usb_control_msg(
                handle, 
                USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_OUT,
                w, address, 
-               0, (uint8_t *) data, length, TIMEOUT
+               0, d, length, TIMEOUT
        );
        if(cnt != length){
-               usb_strerror();
+               puts(__FUNCTION__);
+               puts(usb_strerror());
                exit(1);
        }
+       Free(d);
 }
 
 static void kazzo_init(void)
@@ -145,7 +151,7 @@ static inline void flash_execute(enum request p, enum request s, long address, c
        device_write(handle, p, address, size, data);
        if(dowait == true){
                do{
-                       wait(1);
+                       wait(10);
                        device_read(handle, s, 0, 1, &status);
                }while(status != KAZZO_TASK_FLASH_IDLE);
        }
@@ -166,13 +172,19 @@ static long flash_program(enum request p, enum request s, long address, long len
                return FLASH_PACKET_SIZE;
        }
        long count = 0;
+       uint8_t *d = Malloc(FLASH_PACKET_SIZE);
        while(length >= FLASH_PACKET_SIZE){
                flash_execute(p, s, address, data, FLASH_PACKET_SIZE, dowait);
+               device_read(handle, REQUEST_PPU_FLASH_BUFFER_GET, 0, FLASH_PACKET_SIZE, d);
+               if(memcmp(d, data, FLASH_PACKET_SIZE) != 0){
+                       puts("packet send error");
+               }
                address += FLASH_PACKET_SIZE;
                data += FLASH_PACKET_SIZE;
                count += FLASH_PACKET_SIZE;
                length -= FLASH_PACKET_SIZE;
        }
+       Free(d);
        return count;
 }
 static long kazzo_cpu_flash_program(long address, long length, const uint8_t *data, bool dowait)
index a8b66de..58fc3b0 100644 (file)
@@ -267,6 +267,10 @@ static int config_init(const int argc, const char **argv, struct st_config *c)
                }
                break;
        case MODE_ROM_PROGRAM:
+               if(c->reader->flash_support == false){
+                       puts("this reader is not supported flash memory programming mode");
+                       return NG;
+               }
                switch(argc){
                case 3:
                case 4: