diff options
author | Ludovic Pouzenc <lpouzenc@gmail.com> | 2013-09-07 13:02:00 +0200 |
---|---|---|
committer | Ludovic Pouzenc <lpouzenc@gmail.com> | 2013-09-07 13:02:00 +0200 |
commit | 282edee739b22152ecbe57eb41a8644276b20eaa (patch) | |
tree | 9460aa3cf462242afb44739e26b46cddd19981bf /src | |
parent | c5fea717cde9012c08372cc6987043bc316a736b (diff) | |
download | mplemmings-282edee739b22152ecbe57eb41a8644276b20eaa.tar.gz mplemmings-282edee739b22152ecbe57eb41a8644276b20eaa.tar.bz2 mplemmings-282edee739b22152ecbe57eb41a8644276b20eaa.zip |
Ajout du prog de dump du debut de segment de data (pour identification vars) + disasm
Diffstat (limited to 'src')
-rw-r--r-- | src/dosbox_snif/dos_lemm.h | 55 | ||||
-rw-r--r-- | src/dosbox_snif/main_dump_delta.c | 2 | ||||
-rw-r--r-- | src/dosbox_snif/main_dump_ds0.c | 61 |
3 files changed, 101 insertions, 17 deletions
diff --git a/src/dosbox_snif/dos_lemm.h b/src/dosbox_snif/dos_lemm.h index 2935f8d..4766011 100644 --- a/src/dosbox_snif/dos_lemm.h +++ b/src/dosbox_snif/dos_lemm.h @@ -1,24 +1,46 @@ #ifndef _DOS_LEMM_H #define _DOS_LEMM_H +uint8 lemm_count_to_process; // [0x39] +uint8 lemm_spawned_count; // [0x40] + +uint8 lemm_out_count; // [0x42] + +uint8 lemm_level_count; // [0x44] +uint8 next_spawn_ticks; // [0x45] +uint8 spawn_rate_ticks; // [0x46] + + +struct _avail_skils { + /* ds:si == 0b5b:0067 */ + uint8 sk_climber, sk_climber2, sk_climber_tag; // [0x67] + uint8 sk_floater, sk_floater2, sk_floater_tag; // [0x6a] + uint8 sk_bomber, sk_bomber2, sk_bomber_tag; // [0x6d] + uint8 sk_blocker, sk_blocker2, sk_blocker_tag; // [0x70] + uint8 sk_builder, sk_builder2, sk_builder_tag; // [0x73] + uint8 sk_basher, sk_basher2, sk_basher_tag; // [0x76] + uint8 sk_miner, sk_miner2, sk_miner_tag; // [0x79] + uint8 sk_digger, sk_digger2, sk_digger_tag; // [0x7c] +}; + struct _state { - uint8_t s_splatting:1; //0X1 - uint8_t s_exploding:1; //0X2 combinable - uint8_t s_falling:1; //0X4 - uint8_t s_ascending:1; //0X8 + uint8_t s_splatting:1; //0x01 + uint8_t s_exploding:1; //0x02 combinable + uint8_t s_falling:1; //0x04 + uint8_t s_ascending:1; //0x08 uint8_t s_digging:1; //0x10 uint8_t s_climbing:1; //0x20 uint8_t s_climb_ending:1; //0X40 uint8_t s_building:1; //0X80 - uint8_t s_blocking:1; //0X1 - uint8_t s_bashing:1; //0X2 - uint8_t s_floating:1; //0X4 - uint8_t s_mining:1; //0X8 + uint8_t s_blocking:1; //0x01 + uint8_t s_bashing:1; //0x02 + uint8_t s_floating:1; //0x04 + uint8_t s_mining:1; //0x08 uint8_t s_drawning:1; //0x10 uint8_t s_ending:1; //0x20 uint8_t s_dying:1; //0X40 - uint8_t s_exploding2:1; //0X80 when exploding too ? + uint8_t s_exploding2:1; //0X80 } __attribute__ ((__packed__)); union state { @@ -28,12 +50,12 @@ union state { struct _flags1 { uint8_t cap_climber:1; // 0x1 - uint8_t bit_1:1; - uint8_t bit_2:1; - uint8_t bit_3:1; - uint8_t bit_4:1; - uint8_t bit_5:1; - uint8_t bit_6:1; + uint8_t unused_bit_1:1; + uint8_t unused_bit_2:1; + uint8_t unused_bit_3:1; + uint8_t unused_bit_4:1; + uint8_t unused_bit_5:1; + uint8_t unused_bit_6:1; uint8_t walk_pause_for_shruggling:1; // 0X80 } __attribute__ ((__packed__)); @@ -43,6 +65,7 @@ union flags1 { }; struct _lemm_data { + /* First lemm is at ds:si == 0b55:0085 */ uint16_t x_effective; //0x0 - 0x1 uint16_t y_effective; //0x2 - 0x3 int16_t x_spr_offset; //0x4 - 0x5 @@ -79,7 +102,7 @@ enum draw_hint { enum state_bit { s_splatting=0, s_exploding, s_falling, s_ascending, s_digging, s_climbing, s_climb_ending, s_building, - s_blocking, s_bashing, s_floating, s_mining, s_drawning, s_ending, s_b7, s_exploding2 + s_blocking, s_bashing, s_floating, s_mining, s_drawning, s_ending, s_dying, s_exploding2 }; #endif /*_DOS_LEMM_H*/ diff --git a/src/dosbox_snif/main_dump_delta.c b/src/dosbox_snif/main_dump_delta.c index baaaa0d..8db3671 100644 --- a/src/dosbox_snif/main_dump_delta.c +++ b/src/dosbox_snif/main_dump_delta.c @@ -41,7 +41,7 @@ int main(int argc, char *argv[]) { strcpy(state_str[s_mining],"s_mining"); strcpy(state_str[s_drawning],"s_drawning"); strcpy(state_str[s_ending],"s_ending"); - strcpy(state_str[s_b7],"s_b7"); + strcpy(state_str[s_dying],"s_dying"); strcpy(state_str[s_exploding2],"s_exploding2"); rv=rsp_lemm_init(&rsp, ds_si); diff --git a/src/dosbox_snif/main_dump_ds0.c b/src/dosbox_snif/main_dump_ds0.c new file mode 100644 index 0000000..e54589d --- /dev/null +++ b/src/dosbox_snif/main_dump_ds0.c @@ -0,0 +1,61 @@ +#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=0; + struct rsp_state rsp; + char ds_si[10], command[16]; + unsigned int addr, ds_offset; + + 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"); + + // For the beginning of the ds segment + ds_offset=0; + /* For this chunk of code : + 000052A3 83E307 and bx,byte +0x7 bx = 0x5660 + lemm.x_effective % 8; + 000052A6 81C36056 add bx,0x5660 // + 000052AA 8A27 mov ah,[bx] ah = [bx]; + */ + ds_offset = 0x5660; + /* For understanding pixel collision tests at 00005280 + di = lemm.y_effective - 16; + if ( di >= 0 ) di=0; //WTF ??? + di *= (LEVEL_WIDTH/8); + di += 0x6d60 + lemm.x_effective / 8; + */ + ds_offset = 0x6d60; + + ds_offset = 0x3f; + for (i=0;i<8;i++) { + addr = (0xb55 << 4) + ds_offset + (i * 0x20); + snprintf(command, 15, "m%06x,0x20", addr ); + rsp_query(&rsp, command); + if ( rsp_decode(&rsp) != 0x20 *2) { + printf("%06x : Bug\n", addr); + } else { + printf("%06x : %s\n", addr, rsp.decoded); + } + } + printf("\n"); + } + + + rsp_quit(&rsp); + return 0; +} + + |