diff options
Diffstat (limited to 'reverse-engineering/dosbox_snif/main_validate_code.c')
-rw-r--r-- | reverse-engineering/dosbox_snif/main_validate_code.c | 42 |
1 files changed, 30 insertions, 12 deletions
diff --git a/reverse-engineering/dosbox_snif/main_validate_code.c b/reverse-engineering/dosbox_snif/main_validate_code.c index 931acfe..44728ce 100644 --- a/reverse-engineering/dosbox_snif/main_validate_code.c +++ b/reverse-engineering/dosbox_snif/main_validate_code.c @@ -12,7 +12,7 @@ inline int imin(int a, int b) { } int main(int argc, char *argv[]) { - int rv, i, end=0, byte; + int rv, i, end=0, byte, loops; struct rsp_state rsp; char ds_si[10], command[16], hex_byte[3]; unsigned int addr, bs, size, offset; @@ -28,38 +28,56 @@ int main(int argc, char *argv[]) { return 1; } + loops=0; while (!end) { + loops++; rsp_query(&rsp, "c"); // Continue - if ( rsp.replied != 1 ) printf("Bug 03\n"); + if ( rsp.replied != 1 ) { + printf("Bug 03\n"); + continue; + } rsp_recv_full(&rsp); - if ( rsp_check_and_clear(&rsp, "S05") != 0 ) printf("Bug 04\n"); + if ( rsp_check_and_clear(&rsp, "S05") != 0 ) { + printf("Bug 04\n"); + continue; + } + + //if ( loops % 10 != 0 ) continue; // From the beginning of the ds segment - bs = 0x20; + bs = 0x100; + //printf("sizeof(struct game_data) == %i\n", sizeof(struct game_data) ); + for (offset=0 ; offset < sizeof(struct game_data) ; offset += size) { size = imin(bs,sizeof(struct game_data)-offset); addr = (0xb55 << 4) + offset; snprintf(command, 15, "m%06x,0x%x", addr, size); + //printf("-> %s\n", command); rsp_query(&rsp, command); - if ( rsp_decode(&rsp) != bs*2) { + if ( rsp_decode(&rsp) != size*2) { printf("%06x : Bug\n", addr); - } else { - printf("%06x : %s\n", addr, rsp.decoded); + break; } - for (i=0;i<bs;i++) { + //printf("%06x : %s\n", addr, rsp.decoded); + for (i=0;i<size;i++) { memcpy(hex_byte, rsp.decoded+(i*2), 2); if ( sscanf(hex_byte, "%x", &byte) != 1 ) { printf("Bug decode\n"); - } else { - ((char *)&g)[offset+i] = byte; + break; } + ((char *)&g)[offset+i] = byte; + //printf("((char *)&g)[0x%02x] = 0x%02x\n", offset+i, byte); } } - printf("\n"); + //printf("\n"); lemm = g.lemmings; - printf("lemm->draw_hint == %x\n", lemm->draw_hint); + //printf("g.paused == %x (off %02x)\n", g.paused, (void *)&g.paused - (void *)&g); + printf("g.lemm_spawned_count == %x (off %02x)\n", g.lemm_spawned_count, (void *)&g.lemm_spawned_count - (void *)&g); + //printf("g.lemm_out_count == %x (off %02x)\n", g.lemm_out_count, (void *)&g.lemm_out_count - (void *)&g); + //printf("g.lemm_level_count == %x (off %02x)\n", g.lemm_level_count, (void *)&g.lemm_level_count - (void *)&g); + //printf("lemm->draw_hint == %x (off %02x)\n", lemm->draw_hint, (void *)&lemm->draw_hint - (void *)&g); } rsp_quit(&rsp); |