551 lines
12 KiB
NASM
551 lines
12 KiB
NASM
|
.FILE 'PALL.ASM'
|
|||
|
; SHELL PROGRAM - DO NOT MODIFY!
|
|||
|
; MARK TURMELL - MAY 24, 1989
|
|||
|
;
|
|||
|
.TITLE 'PALETTE ALLOCATOR VER. 1.0'
|
|||
|
.WIDTH 132
|
|||
|
.OPTION B,D,L,T
|
|||
|
.MNOLIST
|
|||
|
|
|||
|
.INCLUDE "\VIDEO\SYS\GSP.INC" ;GSP ASSEMBLER EQUATES
|
|||
|
.INCLUDE "\VIDEO\SYS\SYS.INC" ;ZUNIT SYSTEM EQUATES
|
|||
|
.INCLUDE "MPROC.EQU"
|
|||
|
.INCLUDE "DISP.EQU"
|
|||
|
|
|||
|
*PALETTE SUBROUTINE EQUATES
|
|||
|
.GLOBAL GETFPAL,PALTRANS,CLRBPAL,INITPAL,CLRFPAL,FINDPAL
|
|||
|
.GLOBAL GETBPAL,INITBPAL,CLRPAL,DELPAL,FREEPAL,UNGETPAL
|
|||
|
.GLOBAL PALSET,CLNPAL
|
|||
|
*RAM EQUATES
|
|||
|
.GLOBAL PALRAM,FPALRAM,BPALRAM,PTRRAM
|
|||
|
.REF NUARENAP
|
|||
|
|
|||
|
.TEXT
|
|||
|
*
|
|||
|
*CLEAN UP UNUSED FOREGROUND PALETTES
|
|||
|
*
|
|||
|
CLNPAL
|
|||
|
MMTM SP,A0,A1,A2,A3,A4
|
|||
|
MOVI FPALRAM+PALRSIZ,A1 ;DONT FUCK WITH FIRST ONE!!!!
|
|||
|
MOVK NMFPAL-1,A3 ;CHECK ALL PALETTES
|
|||
|
MOVI >0101,A4 ;INITIAL DMA PALETTE NAME
|
|||
|
CLNPL1:
|
|||
|
MOVE *A1(PALCNT),A2,W
|
|||
|
; JREQ CLNPLP ;PALETTE EMPTY, GO TO NEXT
|
|||
|
|
|||
|
*GOT A PALETTE LOOK FOR IT IN OBJECT LIST
|
|||
|
MOVE @OBJLST,A0,L
|
|||
|
JREQ CLNPLP0 ;NO OBJECTS, CLEAN IT OUT
|
|||
|
CLNPL2L
|
|||
|
MOVE *A0(OPAL),A2,W
|
|||
|
ZEXT A2,W
|
|||
|
CMP A2,A4
|
|||
|
JREQ CLNPLPA ;FOUND USE OF PALETTE, CHECK OUT NEXT PALETTE
|
|||
|
MOVE *A0,A0,L
|
|||
|
JRNE CLNPL2L
|
|||
|
|
|||
|
* LOOK FOR IT IN BACKGROUND LIST
|
|||
|
CLNPLP0
|
|||
|
MOVE @BAKLST,A0,L
|
|||
|
JREQ CLNPLP ;NO OBJECTS, CLEAN IT OUT
|
|||
|
CLNPL3L
|
|||
|
MOVE *A0(OPAL),A2,W
|
|||
|
ZEXT A2,W
|
|||
|
CMP A2,A4
|
|||
|
JREQ CLNPLPA ;FOUND USE OF PALETTE, CHECK OUT NEXT PALETTE
|
|||
|
MOVE *A0,A0,L
|
|||
|
JRNE CLNPL3L
|
|||
|
CLNPLP
|
|||
|
MOVE *A1(PALID),A0,L
|
|||
|
CMPI NUARENAP,A0 ;DO NOT CLEAN UP ARENA SCOREBOARD PAL
|
|||
|
JRZ CLNPLPA
|
|||
|
CLR A0 ;PALETTE NOT USED, FREE IT UP
|
|||
|
MOVE A0,*A1(PALCNT),W
|
|||
|
MOVE A0,*A1(PALID),L
|
|||
|
CLNPLPA
|
|||
|
ADDI >0101,A4
|
|||
|
.IF YUNIT
|
|||
|
BTST 4,A4
|
|||
|
JREQ CLNPLP1
|
|||
|
SUBI >1010,A4
|
|||
|
ADDI >4040,A4
|
|||
|
.ENDIF
|
|||
|
CLNPLP1
|
|||
|
ADDI PALRSIZ,A1
|
|||
|
DSJ A3,CLNPL1
|
|||
|
MMFM SP,A0,A1,A2,A3,A4
|
|||
|
RETS
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* DELPAL - DELETE AN OBJECTS PALETTE *
|
|||
|
* A0 = PTR TO OBJECT *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
DELPAL
|
|||
|
PUSH A0
|
|||
|
MOVE *A0(OPAL),A0,W
|
|||
|
CALLR FREEPAL
|
|||
|
MMFM SP,A0
|
|||
|
RETS
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* FINDPAL - FIND THE COLOR MAP # TO WHICH THE GIVEN PALETTE IS ASSIGNED. *
|
|||
|
* A0 = 32 BIT PALETTE ADDRESS *
|
|||
|
* RETURNS: *
|
|||
|
* Z BIT SET = PALETTE NOT FOUND ---> A0 = 0 *
|
|||
|
* Z BIT CLR = PALETTE FOUND ---> A0 = PALETTE #(CORRECT FORMAT FOR DMA) *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
FINDPAL
|
|||
|
MMTM SP,A1,A2,A3
|
|||
|
MOVK NUMPAL,A3
|
|||
|
MOVI PALRAM,A1
|
|||
|
FINDPAL0
|
|||
|
MOVE *A1,A2,L ;GET PALETTE ID
|
|||
|
CMP A0,A2
|
|||
|
JREQ FINDPAL1 ;FOUND
|
|||
|
ADDI PALRSIZ,A1
|
|||
|
DSJS A3,FINDPAL0
|
|||
|
CLR A0 ;SET Z BIT ---> FAILURE
|
|||
|
JRUC FINDPALX
|
|||
|
FINDPAL1
|
|||
|
SUBK NUMPAL,A3 ;COMPUTE PALETTE #
|
|||
|
NEG A3
|
|||
|
|
|||
|
.IF YUNIT
|
|||
|
MOVE A3,A0 ;MOVE BITS 4,5 TO 6,7 FOR YUNIT
|
|||
|
SLL 28,A3 ;STRIP OFF BITS 4,5
|
|||
|
SRL 28,A3
|
|||
|
SRL 4,A0
|
|||
|
SLL 6,A0
|
|||
|
ADD A0,A3
|
|||
|
.ENDIF
|
|||
|
|
|||
|
MOVE A3,A0 ;RETURN PALETTE #
|
|||
|
SLL 8,A3
|
|||
|
ADD A3,A0 ;DOUBLE IT UP FOR LOFFREDO BRAIN DAMAGE
|
|||
|
INC A3 ;CLR Z BIT ---> SUCCESS
|
|||
|
FINDPALX
|
|||
|
MMFM SP,A1,A2,A3
|
|||
|
RETS
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* INITPAL - GET A PALETTE FOR USE *
|
|||
|
* A14 = POINTER TO OBJECT INITIALIZATION TABLE *
|
|||
|
* RETURNS: *
|
|||
|
* ZBIT SET = FAILURE *
|
|||
|
* ZBIT CLR = SUCCESS --> VAR. CURPAL = PALETTE # JUST CREATED *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
INITPAL
|
|||
|
MMTM SP,A0
|
|||
|
MOVE *A14(INITIMG),A0,L
|
|||
|
MOVE *A0(ICMAP),A0,L ;GET THE PALETTE NAME
|
|||
|
CALLR GETFPAL ;GET A PALETTE
|
|||
|
MOVE A0,@CURPAL,W ;STUFF THIS IN CURRENT PAL
|
|||
|
JRZ INITPALX ;SUCCESSFUL PALETTE CREATION
|
|||
|
INITPALX
|
|||
|
MMFM SP,A0
|
|||
|
RETS
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* INITBPAL - GET A BACKGROUND PALETTE FOR USE *
|
|||
|
* A14 = POINTER TO OBJECT INITIALIZATION TABLE *
|
|||
|
* RETURNS: *
|
|||
|
* ZBIT SET = FAILURE *
|
|||
|
* ZBIT CLR = SUCCESS --> VAR. CURPAL = PALETTE # JUST CREATED *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
INITBPAL
|
|||
|
MMTM SP,A0
|
|||
|
MOVE *A14(INITIMG),A0,L
|
|||
|
MOVE *A0(ICMAP),A0,L ;GET THE PALETTE NAME
|
|||
|
CALLR GETBPAL ;GET A BACKGROUND PALETTE
|
|||
|
JRZ INITBPLX ;SUCCESSFUL PALETTE CREATION
|
|||
|
MOVE A0,@CURPAL,W ;STUFF THIS IN CURRENT PAL
|
|||
|
INITBPLX
|
|||
|
MMFM SP,A0
|
|||
|
RETS
|
|||
|
|
|||
|
*
|
|||
|
*CLEAR OUT PALETTE ALLOCATION RAM
|
|||
|
*
|
|||
|
CLRPAL:
|
|||
|
MMTM SP,A0,A1,A2
|
|||
|
MOVI FPALRAM,A0,L ;GET ADDRESS OF RAM
|
|||
|
MOVI PALRSIZ*NUMPAL/16,A2 ;GET # OF WORDS
|
|||
|
CLR A1
|
|||
|
CLRPALP:
|
|||
|
MOVE A1,*A0+,W
|
|||
|
DSJS A2,CLRPALP
|
|||
|
CLRPTR:
|
|||
|
MOVI PTRRAM,A0,L ;GET ADDRESS OF RAM
|
|||
|
MOVI PTRSIZ*NUMPTR/16,A2 ;GET # OF WORDS
|
|||
|
CLRPLP1:
|
|||
|
MOVE A1,*A0+,W
|
|||
|
DSJS A2,CLRPLP1
|
|||
|
MMFM SP,A0,A1,A2
|
|||
|
RETS
|
|||
|
*
|
|||
|
*CLEAR ONLY FOREGROUND PALETTES
|
|||
|
CLRFPAL:
|
|||
|
MMTM SP,A0,A1,A2
|
|||
|
MOVI FPALRAM,A0,L ;GET ADDRESS OF RAM
|
|||
|
MOVI PALRSIZ*NMFPAL/16,A2 ;GET # OF WORDS
|
|||
|
CLR A1
|
|||
|
JRUC CLRPALP
|
|||
|
*
|
|||
|
*CLEAR ONLY BACKGROUND PALETTES
|
|||
|
CLRBPAL:
|
|||
|
MMTM SP,A0,A1,A2
|
|||
|
MOVI BPALRAM,A0,L ;GET ADDRESS OF RAM
|
|||
|
MOVI PALRSIZ*NMBPAL/16,A2 ;GET # OF WORDS
|
|||
|
CLR A1
|
|||
|
JRUC CLRPALP
|
|||
|
|
|||
|
*
|
|||
|
*GET A FOREGROUND PALETTE
|
|||
|
*CALLING PARAMETERS:
|
|||
|
*A0=PALETTE ID (ADDRESS OF DATA)
|
|||
|
*A0 RETURNED WITH COLOR MAP ALLOCATED (0000-0F0F)
|
|||
|
*RETURNS EQ IF NO PALETTE FREE
|
|||
|
*
|
|||
|
GETFPAL:
|
|||
|
MMTM SP,A1,A2,A3
|
|||
|
*CHECK IF PALETTE ALREADY EXISTS
|
|||
|
MOVK NUMPAL,A3
|
|||
|
MOVI PALRAM,A1
|
|||
|
GETPL0:
|
|||
|
MOVE *A1,A2,L ;GET PALETTE ID
|
|||
|
CMP A0,A2
|
|||
|
JREQ GETPL3 ;ALREADY IN COLOR RAM
|
|||
|
ADDI PALRSIZ,A1
|
|||
|
DSJS A3,GETPL0
|
|||
|
|
|||
|
*CHECK FOR A SPARE PALETTE
|
|||
|
MOVI FPALRAM,A1
|
|||
|
MOVK NMFPAL,A3 ;CHECK ALL PALETTES
|
|||
|
GETPL1:
|
|||
|
MOVE *A1(PALCNT),A2,W
|
|||
|
JREQ GTFPL2 ;PALETTE EMPTY, GRAB IT
|
|||
|
ADDI PALRSIZ,A1
|
|||
|
DSJS A3,GETPL1
|
|||
|
MOVE A3,A3 ;NO PALETTES LEFT SET ZERO BIT
|
|||
|
JRUC GETPLX ;SPLIT
|
|||
|
*
|
|||
|
*GET A BACKGROUND PALETTE
|
|||
|
*CALLING PARAMETERS:
|
|||
|
*A0=PALETTE ID (ADDRESS OF DATA)
|
|||
|
*A0 RETURNED WITH COLOR MAP ALLOCATED (0000-0F0F)
|
|||
|
*RETURNS EQ IF NO PALETTE FREE
|
|||
|
*
|
|||
|
GETBPAL:
|
|||
|
MMTM SP,A1,A2,A3
|
|||
|
*CHECK IF PALETTE ALREADY EXISTS
|
|||
|
MOVK NUMPAL,A3
|
|||
|
MOVI PALRAM,A1
|
|||
|
GTBPL0:
|
|||
|
MOVE *A1,A2,L ;GET PALETTE ID
|
|||
|
CMP A0,A2
|
|||
|
JREQ GETPL3 ;ALREADY IN COLOR RAM
|
|||
|
ADDI PALRSIZ,A1
|
|||
|
DSJS A3,GTBPL0
|
|||
|
|
|||
|
*CHECK FOR A SPARE PALETTE
|
|||
|
MOVI BPALRAM,A1
|
|||
|
MOVK NMBPAL,A3 ;CHECK ALL PALETTES
|
|||
|
GTBPL1:
|
|||
|
MOVE *A1(PALCNT),A2,W
|
|||
|
JREQ GETPL2 ;PALETTE EMPTY, GRAB IT
|
|||
|
ADDI PALRSIZ,A1
|
|||
|
DSJS A3,GTBPL1
|
|||
|
MOVE A3,A3 ;NO PALETTES LEFT SET ZERO BIT
|
|||
|
JRUC GETPLX ;SPLIT
|
|||
|
*SETUP YOUR NEW PALETTE
|
|||
|
GTFPL2:
|
|||
|
ADDK NMBPAL,A3
|
|||
|
GETPL2:
|
|||
|
MMTM SP,A0,A1,A2
|
|||
|
MOVE A3,A1 ;PALETTE #
|
|||
|
SUBK NUMPAL,A1 ;COMPUTE PALETTE #
|
|||
|
NEG A1
|
|||
|
|
|||
|
.IF YUNIT
|
|||
|
MOVE A1,A2 ;MOVE BITS 4,5 TO 6,7 FOR YUNIT
|
|||
|
SLL 28,A1 ;STRIP OFF BITS 4,5
|
|||
|
SRL 28,A1
|
|||
|
SRL 4,A2
|
|||
|
SLL 6,A2
|
|||
|
ADD A2,A1
|
|||
|
.ENDIF
|
|||
|
|
|||
|
SLL 8,A1 ;X 256
|
|||
|
MOVE *A0+,A2,W ;GET # COLORS IN PALETTE
|
|||
|
CALLR PALSET ;SETUP PALETTE TRANSFER
|
|||
|
MMFM SP,A0,A1,A2
|
|||
|
JREQ GETPLX ;FAILED TO GET TRANSFER
|
|||
|
MOVE A0,*A1,L ;STUFF PALETTE I.D.
|
|||
|
GETPL3:
|
|||
|
SUBK NUMPAL,A3 ;COMPUTE PALETTE #
|
|||
|
NEG A3
|
|||
|
|
|||
|
.IF YUNIT
|
|||
|
MOVE A3,A0 ;MOVE BITS 4,5 TO 6,7 FOR YUNIT
|
|||
|
SLL 28,A3 ;STRIP OFF BITS 4,5
|
|||
|
SRL 28,A3
|
|||
|
SRL 4,A0
|
|||
|
SLL 6,A0
|
|||
|
ADD A0,A3
|
|||
|
.ENDIF
|
|||
|
|
|||
|
|
|||
|
MOVE A3,A0 ;RETURN PALETTE #
|
|||
|
SLL 8,A3
|
|||
|
ADD A3,A0 ;DOUBLE IT UP FOR LOFREDO BRAIN DAMAGE
|
|||
|
MOVE *A1(PALCNT),A2,W ;INCREMENT COUNT
|
|||
|
ADDK 1,A2 ;SET NE FOR SUCCESS
|
|||
|
MOVE A2,*A1(PALCNT),W
|
|||
|
GETPLX:
|
|||
|
MMFM SP,A1,A2,A3
|
|||
|
RETS
|
|||
|
*
|
|||
|
*FREE A PALETTE
|
|||
|
*A0=PALETTE # (0-NUMPAL) TO FREE
|
|||
|
*
|
|||
|
FREEPAL:
|
|||
|
MMTM SP,A0,A1
|
|||
|
SLL 24,A0 ;MASK OFF GARBAGE
|
|||
|
SRL 24,A0
|
|||
|
|
|||
|
.IF YUNIT
|
|||
|
MOVE A0,A1 ;MOVE BITS 6,7 INTO 4,5 FOR YUNIT
|
|||
|
SLL 28,A0
|
|||
|
SRL 28,A0
|
|||
|
SRL 6,A1
|
|||
|
SLL 4,A1
|
|||
|
ADD A1,A0
|
|||
|
.ENDIF
|
|||
|
|
|||
|
CMPI NUMPAL,A0 ;ERROR...PALETTE NUMBER ERRONEOUS
|
|||
|
JRLO FREEPAL1
|
|||
|
|
|||
|
.IF DEBUG
|
|||
|
LOCKUP
|
|||
|
EINT
|
|||
|
.ENDIF
|
|||
|
JRUC FREPLX
|
|||
|
|
|||
|
FREEPAL1
|
|||
|
MOVI PALRSIZ,A1
|
|||
|
MPYU A0,A1
|
|||
|
ADDI PALRAM,A1
|
|||
|
MOVE *A1(PALCNT),A0,W
|
|||
|
DEC A0 ;DECREMENT ITS COUNT
|
|||
|
JRNN FREEPAL2
|
|||
|
|
|||
|
; .IF DEBUG
|
|||
|
; LOCKUP
|
|||
|
; .ENDIF
|
|||
|
CLR A0
|
|||
|
|
|||
|
FREEPAL2
|
|||
|
MOVE A0,*A1(PALCNT),W
|
|||
|
FREPLX:
|
|||
|
MMFM SP,A0,A1
|
|||
|
RETS
|
|||
|
|
|||
|
*
|
|||
|
*UNGETPAL - CLEARS OUT A PALETTES ALLOCATION COUNT
|
|||
|
*A0=PALETTE # (0-NUMPAL) TO UNALLOCATE
|
|||
|
*
|
|||
|
UNGETPAL:
|
|||
|
MMTM SP,A0,A1
|
|||
|
SLL 24,A0 ;MASK OFF GARBAGE
|
|||
|
SRL 24,A0
|
|||
|
|
|||
|
.IF YUNIT
|
|||
|
MOVE A0,A1 ;MOVE BITS 6,7 INTO 4,5 FOR YUNIT
|
|||
|
SLL 28,A0
|
|||
|
SRL 28,A0
|
|||
|
SRL 6,A1
|
|||
|
SLL 4,A1
|
|||
|
ADD A1,A0
|
|||
|
.ENDIF
|
|||
|
|
|||
|
CMPI NUMPAL,A0 ;ERROR...PALETTE NUMBER ERRONEOUS
|
|||
|
JRLO UNGPAL1
|
|||
|
|
|||
|
.IF DEBUG
|
|||
|
LOCKUP
|
|||
|
EINT
|
|||
|
.ENDIF
|
|||
|
JRUC UNGPALX
|
|||
|
|
|||
|
UNGPAL1
|
|||
|
MOVI PALRSIZ,A1
|
|||
|
MPYU A0,A1
|
|||
|
ADDI PALRAM,A1
|
|||
|
CLR A0
|
|||
|
MOVE A0,*A1(PALCNT),W
|
|||
|
;TURMELL ADDED 2/10/90
|
|||
|
MOVE A0,*A1(PALID),L
|
|||
|
;
|
|||
|
UNGPALX
|
|||
|
MMFM SP,A0,A1
|
|||
|
RETS
|
|||
|
|
|||
|
*
|
|||
|
*TRANSFER PALETTE DATA
|
|||
|
*CALLED DURING VBLNK
|
|||
|
*LOOKS THROUGH PTRRAM FOR TRANSFERS
|
|||
|
*BOMBS A0-A13
|
|||
|
;*** BIT 13 OF PLDCNT CHECKED FIRST, IF SET BITS 14,15 IGNORED
|
|||
|
*BIT 13 PLDCNT = REPEAT COLORS TO FILL FULL PALETTE - LSBITS ADDRESS COLORS
|
|||
|
*BIT 14 PLDCNT = 16 COLOR PALETTE
|
|||
|
*BIT 15 PLDCNT = PALETTE B4-B7
|
|||
|
PALTRANS:
|
|||
|
MOVI PTRRAM,A0
|
|||
|
MOVK NUMPTR,A3 ;# OF PALETTES
|
|||
|
PLTLP:
|
|||
|
MOVE *A0,A4,W ;XFER TO DO
|
|||
|
JREQ PLTX ;NO, QUIT
|
|||
|
PLTGO:
|
|||
|
CLR A1
|
|||
|
MOVE A1,*A0+,W ;CLEAR OUT TRANFER COUNT
|
|||
|
MOVE *A0+,A1,L ;SOURCE ADDRESS
|
|||
|
MOVE *A0+,A2,W ;DESTINATION PALETTE
|
|||
|
|
|||
|
.IF YUNIT
|
|||
|
*CONVERT TO COLOR RAM ADDRESS
|
|||
|
*MOVE B14,15 TO B6,7
|
|||
|
MOVE A2,A5
|
|||
|
SLL 20,A5
|
|||
|
SRL 20,A5
|
|||
|
SLL 16,A2
|
|||
|
SRL 30,A2
|
|||
|
SLL 6,A2
|
|||
|
ADD A5,A2
|
|||
|
.ENDIF
|
|||
|
SLL 4,A2 ;ADJUST FOR BIT ADDR
|
|||
|
ADDI COLRAM,A2 ;ADD IN COLOR RAM BASE ADDRESS
|
|||
|
BTST 13,A4
|
|||
|
JRNE PLTRPT ;PALETTE REPEATS
|
|||
|
BTST 14,A4
|
|||
|
JRNE PLTSPEC ;SPECIAL PALETTE
|
|||
|
SRL 1,A4 ;ODD DATA COUNT
|
|||
|
JRNC PLTGO1 ;NOPE
|
|||
|
MOVE *A1+,*A2+,W
|
|||
|
PLTGO1:
|
|||
|
SRL 1,A4 ;/2 DATA COUNT
|
|||
|
JRNC PLTGO2 ;NOPE
|
|||
|
MOVE *A1+,*A2+,L
|
|||
|
PLTGO2:
|
|||
|
SRL 1,A4 ;/2 DATA COUNT
|
|||
|
JRNC PLTGO3 ;NOPE
|
|||
|
MOVE *A1+,*A2+,L
|
|||
|
MOVE *A1+,*A2+,L
|
|||
|
PLTGO3:
|
|||
|
JREQ PLTGO4 ;DONE
|
|||
|
MOVE *A1+,*A2+,L
|
|||
|
MOVE *A1+,*A2+,L
|
|||
|
MOVE *A1+,*A2+,L
|
|||
|
MOVE *A1+,*A2+,L
|
|||
|
DSJS A4,PLTGO3
|
|||
|
PLTGO4:
|
|||
|
DSJ A3,PLTLP ;DONE
|
|||
|
PLTX:
|
|||
|
RETS
|
|||
|
|
|||
|
*REPEAT COLORS IN PALETTE
|
|||
|
PLTRPT:
|
|||
|
SLL 24,A4
|
|||
|
SRL 24,A4
|
|||
|
MOVK 1,A6
|
|||
|
MOVI >100,A7 ;A7 # OF TIMES TO REPEAT PLOTTING COLORS
|
|||
|
CMP A4,A6
|
|||
|
JREQ GOTCOLCT
|
|||
|
GETCOLCT:
|
|||
|
SRL 1,A7
|
|||
|
SLL 1,A6 ;A6 # OF COLORS TO COPY
|
|||
|
CMP A4,A6
|
|||
|
JRLT GETCOLCT
|
|||
|
GOTCOLCT:
|
|||
|
|
|||
|
MOVE A6,A4
|
|||
|
MOVE A1,A5
|
|||
|
TRANSLP:
|
|||
|
MOVE *A1+,*A2+,W
|
|||
|
DSJS A4,TRANSLP
|
|||
|
MOVE A6,A4
|
|||
|
MOVE A5,A1
|
|||
|
DSJS A7,TRANSLP
|
|||
|
JRUC PLTGO4
|
|||
|
|
|||
|
*SPECIAL 16 COLOR PALETTE
|
|||
|
*A1=SOURCE
|
|||
|
*A2=DESTINATION
|
|||
|
*BIT 14 PLDCNT = 16 COLOR PALETTE
|
|||
|
*BIT 15 PLDCNT = PALETTE B4-B7
|
|||
|
PLTSPEC:
|
|||
|
BTST 15,A4
|
|||
|
JRNE PLTSPC1
|
|||
|
MMFM A1,A5,A6,A7,A8,A9,A10,A11,A12
|
|||
|
ADDI >1000,A2
|
|||
|
MOVK 16,A4
|
|||
|
PLTSPL:
|
|||
|
MMTM A2,A5,A6,A7,A8,A9,A10,A11,A12
|
|||
|
DSJS A4,PLTSPL
|
|||
|
JRUC PLTGO4
|
|||
|
PLTSPC1:
|
|||
|
MOVK 16,A4
|
|||
|
PLTSPC1L:
|
|||
|
MOVE *A1+,A5,W
|
|||
|
MOVE A5,A6
|
|||
|
SLL 16,A5
|
|||
|
ADD A6,A5
|
|||
|
MOVE A5,*A2+,L
|
|||
|
MOVE A5,*A2+,L
|
|||
|
MOVE A5,*A2+,L
|
|||
|
MOVE A5,*A2+,L
|
|||
|
MOVE A5,*A2+,L
|
|||
|
MOVE A5,*A2+,L
|
|||
|
MOVE A5,*A2+,L
|
|||
|
MOVE A5,*A2+,L
|
|||
|
DSJS A4,PLTSPC1L
|
|||
|
JRUC PLTGO4
|
|||
|
*
|
|||
|
*SETUP PALETTE TRANSFER
|
|||
|
*CALLING PARAMETERS:
|
|||
|
*A0= PALSRC = 32 BIT SOURCE ADDRESS OF PALETTE COLOR DATA
|
|||
|
*A1= PALDEST = BIT 8-15 DESTINATION PALETTE | BIT 0-7 START COLOR
|
|||
|
*A2= PLDCNT = 16 BIT COLOR COUNT
|
|||
|
*RETURNS: EQ IF UNABLE TO SETUP TRANSFER, NE IF TRANSFER O.K.
|
|||
|
*
|
|||
|
PALSET:
|
|||
|
MMTM SP,A3,A4,A5
|
|||
|
MOVI PTRRAM,A4
|
|||
|
MOVK NUMPTR,A3 ;# OF PALETTE TRANSFERS ALLOWED
|
|||
|
PALSTL:
|
|||
|
MOVE *A4,A5,W ;CELL TAKEN ?
|
|||
|
JRNE PALST1 ;YES, KEEP LOOKING
|
|||
|
MOVE A0,*A4(PALSRC),L ;NO, LOAD IT UP
|
|||
|
MOVE A1,*A4(PALDEST),W
|
|||
|
CMPI 64,A2
|
|||
|
JRLS PALST0
|
|||
|
MOVI 64,A2
|
|||
|
PALST0:
|
|||
|
MOVE A2,*A4(PLDCNT),W
|
|||
|
JRUC PALSTX
|
|||
|
PALST1:
|
|||
|
ADDI PTRSIZ,A4
|
|||
|
DSJS A3,PALSTL
|
|||
|
PALSTX:
|
|||
|
MOVE A3,A3 ;RETURN EQ(NOT ABLE TO LOAD) OR NE (OK)
|
|||
|
MMFM SP,A3,A4,A5
|
|||
|
RETS
|
|||
|
|
|||
|
.END
|
|||
|
|