summaryrefslogtreecommitdiff
path: root/reverse-engineering/work/notes.txt
blob: 825c8896eec1a6f18179b6be2f30a7c3b76c1e9d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
// Interrupts
http://spike.scu.edu.au/~barry/interrupts.html#ah25

// IO ports
http://wiki.osdev.org/I/O_Ports
http://bochs.sourceforge.net/techspec/PORTS.LST

// General Memory Map
http://webpages.charter.net/danrollins/techhelp/0094.HTM

// Dosbox debug code
http://code.google.com/p/dosbox-wii/source/browse/trunk/src/debug/debug.cpp?spec=svn115&r=115

HELP
F5 : Continue
F9 : Toggle BP
F10 : Step over
F11 : Step into

MEMDUMPBIN 0000:0000 FFFFFF
BPLIST
IV [seg]:[off] [name]     - Create var name for memory address.
SV [filename]
LV [filename]

0208:10D9 video_update() {

0208:1108 } (bp here!)

0208:0EC8 mainloop_skip1



Tentative à 0EC8 :
SR IP 0ECB	Jump to :0ECB code adress (current seg)
Le lemming a bougé quand même

Tentative à 0ED7 :
SR IP 0EDA
Le lemming a bougé quand même

Tentative à 0EDA :
SR IP 0EE8
Le lemming a bougé quand même


Tentative à 0EEC :
SR IP 0F0A
Le lemming a bougé quand même

Tentative à 0F0A
SR IP 0F17
Le lemming a changé de sprite mais ne s'est pas déplacé !


Tentative d'injection de nop pour trouver la procedure qui fait bouger les lemmings

SM 0274:0EEC 90 90 90

Les lemmings se multiplient (tout est dessiné, les sprites se MAJ mais on voit un effet ghost)

// Restauration du call
SM 0274:0EEC E8 BF 66


SM 0208:0EEF 90 90 90
SM 0208:0EEF E8 BD 5E


OK, la fonction qui update les lemmings va de 0208:182F à 0208:26F8

Extraction du code bourine :
echo -n "MZ" > move_lemmings.com
dd if=MEMDUMP.BIN bs=1 skip=$(h2d 0X38AF) count=3785 seek=256 of=move_lemmings.com

Décompileur vers du C n'aime pas trop ca... bon, faudrait faire mieux.

Remarque, il y a bcp d'accès a une structure (celle d'un lemming probablement) à divers endroits du code, ce grep le montre :

!grep 'si+0x12' -A3 -B3 seg_code_0208.txt


La structure de donnée du tout premier lemming se situe en 0B55:0085 (ds:si)
La structure du second commence 0x2d octets plus loin

struct lemm_data {
/* +0x00 */ uint16 x; /* L'origine est a gauche */
/* +0x02 */ uint16 y; /* L'origine est en haut  */
/* +0x04 */ uint8 unk1, unk2;
/* +0x06 */ uint8 lemmtype;
//...
/* +0x2c */ uint8 lastbyte;
}


enum lemmtype { WALKER=0xF6, CLIMBER=0XF4, ... }