OSDN Git Service

dump length = 0 の対応に対する修正
authornaruko <naruko@24ea1065-a21e-4ca1-99c9-f5125deb0858>
Thu, 30 May 2013 05:45:38 +0000 (05:45 +0000)
committernaruko <naruko@24ea1065-a21e-4ca1-99c9-f5125deb0858>
Thu, 30 May 2013 05:45:38 +0000 (05:45 +0000)
git-svn-id: svn+ssh://svn.osdn.net/svnroot/unagi@408 24ea1065-a21e-4ca1-99c9-f5125deb0858

client/trunk/anago/reader_dummy.c
client/trunk/anago/script_dump.c
client/trunk/reader_kazzo.c

index 9e7c90d..8217005 100644 (file)
@@ -39,16 +39,16 @@ static void dummy_close(const struct reader_handle *h)
 static void dummy_read(const struct reader_handle *h, const struct gauge *g, long address, long length, uint8_t *data)
 {
        const int packet = 0x200;
-       while(length >= packet){
-               wait(10);
-               memset(data, 2, packet);
-               data += packet;
-               length -= packet;
-               g->value_add(g->bar, g->label, packet);
+       if(length == 0){
+               return;
        }
-       if(length != 0){
-               memset(data, 33, length);
-               g->value_add(g->bar, g->label, length);
+       while(length > 0){
+               const int l = length < packet ? length : packet;
+               wait(10);
+               memset(data, 2, l);
+               data += l;
+               length -= l;
+               g->value_add(g->bar, g->label, l);
        }
 }
 
index 4a29bc7..fe54466 100644 (file)
@@ -86,7 +86,8 @@ static SQInteger read_memory(HSQUIRRELVM v, const struct reader_handle *h, struc
                return r;
        }
        assert(t->memory.attribute == MEMORY_ATTR_WRITE);
-       t->access->memory_read(h, &t->gauge, address, length == 0 ? 1: length, t->memory.data + t->memory.offset);
+       t->access->memory_read(h, &t->gauge, address, length, t->memory.data + t->memory.offset);
+
        if((length != 0) && (progress == false)){
                buffer_show(&t->memory, length);
        }
@@ -267,9 +268,12 @@ static SQInteger read_count(HSQUIRRELVM v, const struct textcontrol *l, struct d
 }
 static SQInteger cpu_read_count(HSQUIRRELVM v)
 {
+#ifdef DEBUG
+       static const struct range range_address = {0x6000, 0x10000}; //for Sunsoft-5 series test
+#else
        static const struct range range_address = {0x8000, 0x10000};
-       //length == 0 は 対象アドレスを呼んで、バッファにいれない。mmc2, mmc4 で使用する。
-       static const struct range range_length = {0x0000, 0x4000};
+#endif
+       static const struct range range_length = {0x0001, 0x4000};
        USERPOINTER_GET(d, r)
 
        return read_count(v, &d->log, &d->cpu, &range_address, &range_length);
@@ -277,8 +281,13 @@ static SQInteger cpu_read_count(HSQUIRRELVM v)
 
 static SQInteger ppu_read_count(HSQUIRRELVM v)
 {
+#ifdef DEBUG
+       static const struct range range_address = {0x0000, 0x2800};
+#else
        static const struct range range_address = {0x0000, 0x2000};
-       static const struct range range_length = {0x0001, 0x2000};
+#endif
+       //length == 0 は 対象アドレスを呼んで、バッファにいれない。mmc2, mmc4 で使用する。
+       static const struct range range_length = {0x0000, 0x2000};
        USERPOINTER_GET(d, r)
 
        return read_count(v, &d->log, &d->ppu, &range_address, &range_length);
@@ -286,7 +295,7 @@ static SQInteger ppu_read_count(HSQUIRRELVM v)
 
 static SQInteger cpu_read_register_check(HSQUIRRELVM v)
 {
-       static const struct range range_address = {0x4800, 0x7fff};
+       static const struct range range_address = {0x4800, 0x8000};
        static const struct range range_byte = {0, 0xff};
        USERPOINTER_GET(d, r)
 
index a7fdfde..de68808 100644 (file)
@@ -88,23 +88,22 @@ static void device_read(const struct reader_handle *h, enum request r, enum inde
 }
 static void read_main(const struct reader_handle *h, 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(
-                       h, r, index, address, packet, data
-               );
-               data += packet;
-               address += packet;
-               length -= packet;
-               g->value_add(g->bar, g->label, packet);
+       if(length == 0){
+               uint8_t dummy;
+               device_read(h, r, index, address, 1, &dummy);
+               //do not update progress
+               return;
        }
-       if(length != 0){
-               device_read(
-                       h, r, index, address, length, data
-               );
-               g->value_add(g->bar, g->label, packet);
+       while(length > 0){
+               const int l = length < READ_PACKET_SIZE ? length : READ_PACKET_SIZE;
+               device_read(h, r, index, address, l, data);
+               data += l;
+               address += l;
+               length -= l;
+               g->value_add(g->bar, g->label, l);
        }
 }
+
 static void kazzo_cpu_read(const struct reader_handle *h, const struct gauge *g, long address, long length, uint8_t *data)
 {
        read_main(h, g, REQUEST_CPU_READ, INDEX_IMPLIED, address, length, data);