-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMAKILOW.ASM
270 lines (237 loc) · 4.28 KB
/
MAKILOW.ASM
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
MODEL TPASCAL
IDEAL
JUMPS
P386
EXTRN SegA000:Word, Graffa:Word, SiirtoOsoite:dWord, SivuKoko:Word, \
Video:Word, LinjanPituus:Word, X:dWord, Y:dWord
PUBLIC KopioiKirjoitusSivu, LueTavu, KirjoitaTavu, \
KopioiMaki, KopioiRuutu, Sprite
rivinvaihto equ 704
ruudunloppu equ 64000
; ==========================================================================
MACRO Siirra label
label:
Mov EAX,[ESI]
Mov [ES:DI],EAX
Add ESI,4
Add DI, 4
Loop label
ENDM
MACRO SiirraB label
label:
Mov al,[ESI]
Mov [ES:DI],al
Inc ESI
Inc DI
Loop label
ENDM
CODESEG ;-------------------------------------------------------------------
PROC KopioiKirjoitusSivu
Push DS
Mov ESI,[SiirtoOsoite]
Mov CX, [SivuKoko]
Mov ES, [Video]
Xor DI, DI
Mov DS, [Graffa]
Shr CX, 2
@kks_loop1:
Mov EAX,[ES:DI]
Mov [ESI],EAX
Add ESI,4
Add DI, 4
Loop @kks_loop1
Pop DS
RET
ENDP
PROC LueTavu Osoite:dWord
Mov ES, [Graffa]
Mov EDI,[Osoite]
Mov AL, [ES:EDI]
RET
ENDP
PROC KirjoitaTavu Osoite:dWord, Arvo:Byte
Mov ES, [Graffa]
Mov EDI,[Osoite]
Mov AL, [Arvo]
Mov [ES:EDI],AL
RET
ENDP
PROC KopioiMaki AlkuOsoite:dWord, Delta:dWord
Mov AX, DS
Mov GS, AX
Mov ES, [Video]
Xor DI, DI
Lea BX, [LinjanPituus]
Mov AX, [word Y]
Add BX, AX
Add BX, AX
Mov DS, [Graffa]
Mov ESI,[AlkuOsoite]
@km_seuraavalinja:
Mov DX, [GS:BX]
Mov EAX,[GS:X]
Add ESI,EAX
Sub DX, AX
Jle @km_SkyOnly
Cmp DX, 320
Jae @km_GroundOnly
@km_skip0:
Mov CX, DX
Shr CX, 2
Jz short @km_skip1
Siirra @km_loop1
@km_skip1:
Mov AX, DX
And AX, 3
Cmp AX, 1
Jl short @km_tapaus1
Je short @km_tapaus2
Ja short @km_tapaus3
@km_tapaus4:
Mov AX,[ESI]
Mov cl,[ESI+2]
Mov [ES:DI],AX
Mov [ES:DI+2],cl
Add ESI,[Delta]
Mov al,[ESI+3]
Mov [ES:DI+3],al
Jmp short @km_jatka
@km_tapaus3:
Cmp AX,3
Je short @km_tapaus4
Mov AX,[ESI]
Mov [ES:DI],AX
Add ESI,[Delta]
Mov AX,[ESI+2]
Mov [ES:DI+2],AX
jmp short @km_jatka
@km_tapaus2:
Mov al,[ESI]
Mov [ES:DI],al
Add ESI,[Delta]
Mov cl,[ESI+1]
Mov AX,[ESI+2]
Mov [ES:DI+1],cl
Mov [ES:DI+2],AX
jmp short @km_jatka
@km_tapaus1:
Add ESI,[Delta]
Mov EAX,[ESI]
Mov [ES:DI],EAX
@km_jatka:
Add ESI,4
Add DI, 4
Mov CX, DX
Shr CX, 2
Neg CX
Add CX, 79
Jle short @km_skip2
Siirra @km_loop2
@km_skip2:
Sub ESI,[GS:X]
Sub ESI,[Delta]
Add BX,2
Add ESI,RivinVaihto
cmp DI,ruudunloppu
Jb @km_seuraavalinja
jmp short @km_loppu
@km_skyonly:
Add ESI,[Delta]
Mov CX, 80
Siirra @km_loop3
jmp short @km_skip2
@km_groundonly:
Mov CX, 80
Siirra @km_loop4
Add ESI,[Delta]
jmp short @km_skip2
@km_loppu:
Mov AX, GS
Mov DS, AX
RET
ENDP
PROC KopioiRuutu
Push DS
Mov ES, [SegA000]
Xor DI, DI
Mov DS, [Video]
Xor ESI,ESI
Mov CX, 16000
Siirra @dkm_loop1
Pop DS
RET
ENDP
PROC Sprite SpriteData:Word, _X_:Word, _Y_:Word
local Height:word
Push DS
Mov ES,[Video]
Mov AX,[_Y_]
Mov DI,AX
Shl AX,8 ;DI=Y*320
Shl DI,6 ;
Add DI,AX
Add DI,[_X_] ;DI+X
Mov DS,[SpriteData]
Mov SI,4
Mov DX,[DS:0]
Mov BX,DX ;BX=skip
Add BX,[_X_]
Sub BX,320
Ja @s_skip2
Xor BX,BX ;BX=0
@s_skip2:
Sub DX,BX
Jle short @s_quit
Mov AX,[DS:2]
Mov [Height],AX
@s_loop1:
Mov CX,DX
@s_loop2:
LodSB
Cmp al,0
Jz short @s_skip1
Mov [ES:DI],al
@s_skip1:
Inc DI
loop @s_loop2
Add DI,320
Add SI,BX
Sub DI,DX
Dec [Height]
Jnz short @s_loop1
@s_quit:
Pop DS
RET
ENDP
PROC OldSprite SpriteData:Word, _X_:Word, _Y_:Word
Push DS
Mov ES,[Video]
Mov AX,[_Y_]
Mov DI,AX
Shl AX,8 ;DI=Y*320
Shl DI,6 ;
Add DI,AX
Add DI,[_X_] ;DI+X
Mov DS,[SpriteData]
Mov SI,4
Mov DX,[DS:0]
Mov BX,[DS:2]
@os_loop1:
Mov CX,DX
@os_loop2:
LodSB
Cmp al,0
Jz short @os_skip1
Mov [ES:DI],al
@os_skip1:
Inc DI
loop @os_loop2
Add DI,320
Sub DI,DX
Dec BX
Jnz short @os_loop1
Pop DS
RET
ENDP
ENDS
END ;-----------------------------------------------------------------------