smashtv/ROBOPAL.ASM

405 lines
7.2 KiB
NASM
Raw Normal View History

2021-04-06 15:09:56 -07:00
.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