From ec8f2c4dff2a6fb2751d7d301416ee1c30979dd2 Mon Sep 17 00:00:00 2001 From: Ludovic Pouzenc Date: Sun, 15 Sep 2013 12:11:06 +0200 Subject: Implementation d'une partie du main pour comparer l'algo original avec un autre. --- .gitignore | 2 +- .../dosbox_snif/main_validate_code.c | 64 ++++++++++++++++++++-- 2 files changed, 61 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 742a6cb..fcaf2b3 100644 --- a/.gitignore +++ b/.gitignore @@ -27,7 +27,7 @@ stamp-h1 /reverse-engineering/dosbox_snif/dump /reverse-engineering/dosbox_snif/dump_delta /reverse-engineering/dosbox_snif/dump_ds0 -/reverse-engineering/dosbox_snif/validate_codeœ +/reverse-engineering/dosbox_snif/validate_code /reverse-engineering/dosbox_snif/int16todec /reverse-engineering/dosbox_snif/poke diff --git a/reverse-engineering/dosbox_snif/main_validate_code.c b/reverse-engineering/dosbox_snif/main_validate_code.c index a016a54..931acfe 100644 --- a/reverse-engineering/dosbox_snif/main_validate_code.c +++ b/reverse-engineering/dosbox_snif/main_validate_code.c @@ -1,12 +1,68 @@ #include "dos_lemm.h" +#include "rsp.h" +#include "rsp_lemm.h" +#include "utils.h" + +#include /* memset() */ +#include /* printf() */ + +inline int imin(int a, int b) { + if ( a < b ) return a; + return b; +} + +int main(int argc, char *argv[]) { + int rv, i, end=0, byte; + struct rsp_state rsp; + char ds_si[10], command[16], hex_byte[3]; + unsigned int addr, bs, size, offset; -int main() { struct game_data g; struct _lemm_data *lemm; - lemm = g.lemmings; - lemm->draw_hint = hint_walking; + hex_byte[2]='\0'; + + rv=rsp_lemm_init(&rsp, ds_si); + if ( rv != 0 ) { + printf("Error rsp_lemm_init() returns %i\n", rv); + return 1; + } + + while (!end) { + rsp_query(&rsp, "c"); // Continue + if ( rsp.replied != 1 ) printf("Bug 03\n"); + rsp_recv_full(&rsp); + if ( rsp_check_and_clear(&rsp, "S05") != 0 ) printf("Bug 04\n"); + + // From the beginning of the ds segment + bs = 0x20; + 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); + rsp_query(&rsp, command); + if ( rsp_decode(&rsp) != bs*2) { + printf("%06x : Bug\n", addr); + } else { + printf("%06x : %s\n", addr, rsp.decoded); + } + + for (i=0;idraw_hint == %x\n", lemm->draw_hint); + } - return lemm->draw_hint; + rsp_quit(&rsp); + return 0; } -- cgit v1.2.3