diff options
Diffstat (limited to 'src/dosbox_snif/main_poke.c')
-rw-r--r-- | src/dosbox_snif/main_poke.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/src/dosbox_snif/main_poke.c b/src/dosbox_snif/main_poke.c new file mode 100644 index 0000000..e0048fa --- /dev/null +++ b/src/dosbox_snif/main_poke.c @@ -0,0 +1,64 @@ +#include "rsp.h" +#include "rsp_lemm.h" +#include "utils.h" + +#include <string.h> /* memset() */ +#include <stdio.h> /* printf() */ + +int main(int argc, char *argv[]) { + int rv, i, end_input, end_loop; + struct rsp_state rsp; + char ds_si[10], command[16], input[100]; + unsigned int poke_base, poke_off, poke_val; + + rv=rsp_lemm_init(&rsp, ds_si); + if ( rv != 0 ) { + printf("Error rsp_lemm_init() returns %i\n", rv); + return 1; + } + if ( sscanf(ds_si, "%x", &poke_base) != 1 ) printf("Bug 20\n");; + + end_loop=0; + while (!end_loop) { + 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"); + + snprintf(command, 15, "m%s,0x2d", ds_si); + rsp_query(&rsp, command); // Read a lemming record + if ( rsp_decode(&rsp) != 0x2d * 2 ) { + printf("Bug 07\n"); + } else { + for (i=0; rsp.decoded[i]!='\0'; i++) { + putchar(rsp.decoded[i]); + if (i%2==1) putchar(' '); + if (i%16==15) putchar(' '); + } + putchar('\n'); + } + + end_input=0; + do { + printf("address value ? "); fflush(stdout); + if ( fgets(input, 99, stdin) == NULL ) { + //printf("pb fgets\n"); + end_input=1; continue; + } + if ( sscanf(input,"%x %x", &poke_off, &poke_val) != 2 ) { + //printf("pb sscanf\n"); + end_input=1; continue; + } + if ( rsp_poke(&rsp, poke_base + poke_off, poke_val) != 0 ) { + printf("Bug 21\n"); + end_input=1; continue; + } + } while ( !end_input ); + } + + + rsp_quit(&rsp); + return 0; +} + + |