smashtv/ROBOPAL.ASM

405 lines
7.2 KiB
NASM
Raw Permalink Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

.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 "\VIDEO\SYS\SYS.INC" ;Z UNIT SYSTEM EQUATES
.INCLUDE "\VIDEO\SYS\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 >7C00,A4 ;A4 - PRE MULT MASK FOR 5 BITS OF RED
MOVI >03E0,A6 ;A6 - PRE MULT MASK FOR 5 BITS OF GREEN
MOVI >001F,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