405 lines
7.2 KiB
NASM
405 lines
7.2 KiB
NASM
.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
|
||
|