forked from historicalsource/smashtv
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathROBOPAL.ASM
405 lines (371 loc) · 7.16 KB
/
ROBOPAL.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
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
.TITLE "ROBO-RAMA"
.FILE "PALETTE FADER CONTROL"
.WIDTH 132
.OPTION B,D,L,T
.MNOLIST
;
; INITIATED: APRIL 13,1989
; MODIFIED: !
; SOFTWARE: MARK TURMELL
;
; COPYRIGHT (C) 1989 WILLIAMS ELECTRONICS GAMES, INC.
;
;
; GET THE SYSTEM STUFF
.INCLUDE "MPROC.EQU" ;MPROC EQUATES
.INCLUDE "DISP.EQU" ;DISPLAY PROC. EQUATES
.include "sys.inc" ;z unit system equates
.include "macros.hdr" ;macros definitions
.INCLUDE "IMGTBL.GLO"
.INCLUDE "ROBO.EQU"
;
;SYMBOLS EXTERNALLY DEFINED
;
.REF GETFPAL,PALSET,UNGETPAL,DELPAL,FINDPAL
.REF IRQSKYE
;
;SYMBOLS DEFINED IN THIS FILE
;
.DEF FADEOUT,FADEIN
.DEF BLAKOUT
.DEF AUTOPAL,AUTOPAL2,AUTOPAL3
;
;EQUATES FIRST ORIGINATED IN THIS FILE
;
;
;UNINITIALIZED RAM DEFINITIONS
;
.BSS FADERAM1,16*257,1 ;FADE RAM FOR PAL # 1
.BSS FADERAM2,16*257 ;DITTO 2
.BSS FADERAM3,16*257 ; 3
.BSS FADERAM4,16*257 ; 4
.BSS FADERAM5,16*2 ;AUTOERASE
;BLAKOUT - BLACK OUT SELECTED PALETTE
;PARAMS:
; A0 = NAME OF PALETTE TO BLACK OUT
BLAKOUT:
CALLA FINDPAL
SLL 8,A0
MOVE A0,A1
JRZ NOTALLOC
MOVI FADERAM1,A0
MOVI 128,A3
CLR A2
CLRBLP:
MOVE A2,*A0+,L
DSJS A3,CLRBLP
;NOW BLACK OUT PALETTE
MOVI FADERAM1,A0
MOVI 256,A2
CALLA PALSET ;ERASE PALETTE SLOT
NOTALLOC:
RETS
;FADEIN - FADE IN ALL SELECTED PALETTES FROM BLACK
; IF PALETTE 'AUTOPAL' IS SPECIFIED AS THE FIRST PALETTE IN THE LIST
; THEN AUTOERASE WILL BE FADED WITH RESPECT TO THAT FIXED PALETTE.
;PARAMS:
; A0 = PTR TO LIST OF PALETTES TO FADE IN (AUTOERASE + 4 AT ONCE)
; A1 = FADE SPEED IN TIKS
FADEIN:
MOVE A1,A10
MOVE A0,A11
MOVE A0,A9
MOVE *A11,A0,L
;
CMPI AUTOPAL3,A0
JRZ CRN2A
CMPI AUTOPAL2,A0
JRZ CRN2A
CMPI AUTOPAL,A0
JRNZ CRN2
CRN2A ADDI 32,A11
CRN2:
CREATE FDPID,FADEIN2
RETS
FADEIN2:
MOVE *A11+,A0,L ;PAL #1
CALLA FINDPAL
JRZ PALERR
SLL 8,A0
MOVE A0,*A13(PDATA),W
MOVE *A11+,A0,L ;PAL #2
JRZ DOFDE
CALLA FINDPAL
JRZ PALERR
SLL 8,A0
MOVE A0,*A13(PDATA+16),W
MOVE *A11+,A0,L ;PAL #3
JRZ DOFDE
CALLA FINDPAL
JRZ PALERR
SLL 8,A0
MOVE A0,*A13(PDATA+32),W
MOVE *A11+,A0,L ;PAL #4
JRZ DOFDE
CALLA FINDPAL
JRZ PALERR
SLL 8,A0
MOVE A0,*A13(PDATA+48),W
DOFDE:
CLR A8
FDEINLUP:
PUSHP A9
ADDK 8,A8
MOVE A8,A2
MOVI FADERAM5,A0
MOVE *A9,A1,L
CMPI AUTOPAL3,A1
JRZ NOAUTINA
CMPI AUTOPAL2,A1
JRZ NOAUTINA
CMPI AUTOPAL,A1
JRNZ NOAUTIN
NOAUTINA:
CALLR FADEPAL
ADDI 32,A9
NOAUTIN:
MOVI FADERAM1,A0
MOVE *A9+,A1,L
CALLR FADEPAL
MOVI FADERAM2,A0
MOVE *A9+,A1,L
JRZ UPPAL1
CALLR FADEPAL
MOVI FADERAM3,A0
MOVE *A9+,A1,L
JRZ UPPAL2
CALLR FADEPAL
MOVI FADERAM4,A0
MOVE *A9+,A1,L
JRZ UPPAL3
CALLR FADEPAL
;
*A0= PALSRC = 32 BIT SOURCE ADDRESS OF PALETTE COLOR DATA
*A1= PALDEST = BIT 8-15 DESTINATION PALETTE RAM | BIT 0-7 START COLOR
*A2= PLDCNT = 16 BIT COLOR COUNT
;
UPPAL4:
MOVI FADERAM4,A0
MOVE *A13(PDATA+48),A1,W
MOVE *A0+,A2,W
CALLA PALSET
UPPAL3:
MOVI FADERAM3,A0
MOVE *A13(PDATA+32),A1,W
MOVE *A0+,A2,W
CALLA PALSET
UPPAL2:
MOVI FADERAM2,A0
MOVE *A13(PDATA+16),A1,W
MOVE *A0+,A2,W
CALLA PALSET
UPPAL1:
PULLP A9
MOVE *A9,A1,L
CMPI AUTOPAL3,A1
JRZ NOA1A
CMPI AUTOPAL2,A1
JRZ NOA1A
CMPI AUTOPAL,A1
JRNZ NOA1
NOA1A:
MOVI FADERAM5,A0
ADDI 16,A0
MOVE *A0,A0
MOVE A0,@IRQSKYE,W
NOA1:
MOVI FADERAM1,A0
MOVE *A13(PDATA),A1,W
MOVE *A0+,A2,W
CALLA PALSET
MOVE A10,A0
CALLA PRCSLP
CMPI 128,A8
JRLT FDEINLUP
NOPAL:
DIE
;FADEOUT - FADE OUT ALL SELECTED PALETTES TO BLACK
; IF PALETTE 'AUTOPAL' IS SPECIFIED AS THE FIRST PALETTE IN THE LIST
; THEN AUTOERASE WILL BE FADED WITH RESPECT TO THAT FIXED PALETTE.
;PARAMS:
; A0 = PTR TO LIST OF PALETTES TO FADE OUT (AUTOERASE + 4 AT ONCE)
; A1 = FADE SPEED IN TIKS
FADEOUT:
MOVE A1,A10
MOVE A0,A11
MOVE A0,A9
MOVE *A11,A0,L
CMPI AUTOPAL3,A0
JRZ CRN1A
CMPI AUTOPAL2,A0
JRZ CRN1A
CMPI AUTOPAL,A0
JRNZ CRN1
CRN1A:
ADDI 32,A11
CRN1:
CREATE 0,FADEOUT2
RETS
;
FADEOUT2:
MOVE *A11+,A0,L ;PAL #1
CALLA FINDPAL
JRZ PALERR
SLL 8,A0
MOVE A0,*A13(PDATA),W
MOVE *A11+,A0,L ;PAL #2
JRZ DOFDE2
CALLA FINDPAL
JRZ PALERR
SLL 8,A0
MOVE A0,*A13(PDATA+16),W
MOVE *A11+,A0,L ;PAL #3
JRZ DOFDE2
CALLA FINDPAL
JRZ PALERR
SLL 8,A0
MOVE A0,*A13(PDATA+32),W
MOVE *A11+,A0,L ;PAL #4
JRZ DOFDE2
CALLA FINDPAL
JRZ PALERR
SLL 8,A0
MOVE A0,*A13(PDATA+48),W
DOFDE2:
MOVI 128,A8
FDELUP:
PUSHP A9
SUBK 8,A8
MOVE A8,A2
MOVI FADERAM5,A0
MOVE *A9,A1,L
CMPI AUTOPAL3,A1
JRZ NOAUTUPA
CMPI AUTOPAL2,A1
JRZ NOAUTUPA
CMPI AUTOPAL,A1
JRNZ NOAUTUP
NOAUTUPA:
CALLR FADEPAL
ADDI 32,A9
NOAUTUP:
MOVI FADERAM1,A0
MOVE *A9+,A1,L
CALLR FADEPAL
MOVI FADERAM2,A0
MOVE *A9+,A1,L
JRZ DNPAL1
CALLR FADEPAL
MOVI FADERAM3,A0
MOVE *A9+,A1,L
JRZ DNPAL2
CALLR FADEPAL
MOVI FADERAM4,A0
MOVE *A9+,A1,L
JRZ DNPAL3
CALLR FADEPAL
;
*A0= PALSRC = 32 BIT SOURCE ADDRESS OF PALETTE COLOR DATA
*A1= PALDEST = BIT 8-15 DESTINATION PALETTE RAM | BIT 0-7 START COLOR
*A2= PLDCNT = 16 BIT COLOR COUNT
;
DNPAL4:
MOVI FADERAM4,A0
MOVE *A13(PDATA+48),A1,W
MOVE *A0+,A2,W
CALLA PALSET
DNPAL3:
MOVI FADERAM3,A0
MOVE *A13(PDATA+32),A1,W
MOVE *A0+,A2,W
CALLA PALSET
DNPAL2:
MOVI FADERAM2,A0
MOVE *A13(PDATA+16),A1,W
MOVE *A0+,A2,W
CALLA PALSET
DNPAL1:
PULLP A9
MOVE *A9,A1,L
CMPI AUTOPAL3,A1
JRZ NOA2A
CMPI AUTOPAL2,A1
JRZ NOA2A
CMPI AUTOPAL,A1
JRNZ NOA2
NOA2A:
MOVI FADERAM5,A0
ADDI 16,A0
MOVE *A0,A0
MOVE A0,@IRQSKYE,W
NOA2:
MOVI FADERAM1,A0
MOVE *A13(PDATA),A1,W
MOVE *A0+,A2,W
CALLA PALSET
MOVE A10,A0
CALLA PRCSLP
MOVE A8,A8
JRNZ FDELUP
PALERR:
DIE
;
FADEPAL:
;PARAMS
; A0 - DEST RAM FOR PAL
; A1 - SRC FOR PAL
; A2 - COLOR MULTIPLIER
; EACH COLOR IN PALETTE WILL BE MULTIPLIED BY A2 THEN DIVIDED BY 128
MMTM SP,A0,A1,A3,A4,A5,A6,A7,A8,A9,A10,A11,A14
MOVE *A1+,A14,W
MOVE A14,*A0+,W
SLL 23,A14 ;TOP BITS OF FIELD ARE FLAGS
SRL 23,A14 ;ONLY 9 BITS NEEDED FOR # COLORS
MOVI 07C00H,A4 ;A4 - PRE MULT MASK FOR 5 BITS OF RED
MOVI 003E0H,A6 ;A6 - PRE MULT MASK FOR 5 BITS OF GREEN
MOVI 0001FH,A8 ;A8 - PRE MULT MASK FOR 5 BITS OF BLUE
MOVE A4,A9
MOVE A6,A10
MOVE A8,A11
SLL 7,A9 ; A9 - POST MULT MAX FOR 5 BITS OF RED
SLL 7,A10 ;A10 - POST MULT MAX FOR 5 BITS OF GREEN
SLL 7,A11 ;A11 - POST MULT MAX FOR 5 BITS OF BLUE
FADELP:
MOVE *A1+,A3,W ;A3 - RED
MOVE A3,A5 ;A5 - GREEN
MOVE A3,A7 ;A7 - BLUE
AND A4,A3
AND A6,A5
AND A8,A7
MPYU A2,A3
MPYU A2,A5
MPYU A2,A7
CMP A9,A3
JRLE REDOK
MOVE A9,A3
REDOK:
CMP A10,A5
JRLE GREENOK
MOVE A10,A5
GREENOK:
CMP A11,A7
JRLE BLUEOK
MOVE A11,A7
BLUEOK:
AND A9,A3
AND A10,A5
OR A5,A3
OR A7,A3
SRL 7,A3
MOVE A3,*A0+,W
DSJS A14,FADELP
MMFM SP,A0,A1,A3,A4,A5,A6,A7,A8,A9,A10,A11,A14
RETS
AUTOPAL:
.WORD 1,( 6 *32*32)+( 6 *32)+( 6 ) ;CONSTANT FOR AUTOERASE
AUTOPAL2:
.word 1,( 5 *32*32)+( 5 *32)+( 14 ) ; color 1
AUTOPAL3:
.word 1,( 3 *32*32)+( 4 *32)+( 5 ) ; color 1
.END