166 lines
3.8 KiB
NASM
166 lines
3.8 KiB
NASM
|
**************************************************************************
|
|||
|
* *
|
|||
|
* LAVA_CYCLE - START THE LAVA COLOR CYCLER *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
LAVA_CYCLE:
|
|||
|
MOVI LAVA1,A8
|
|||
|
MOVK 3,A9
|
|||
|
MOVK 15,A10
|
|||
|
MOVK 15,A11
|
|||
|
CREATE INDPID,CYCLE16
|
|||
|
DIE
|
|||
|
|
|||
|
.BSS PAL1,16*16*2 ;ALLOCATE 2 X COLOR AREA IN RAM
|
|||
|
|
|||
|
MOVI FACEPAL,A8
|
|||
|
MOVI PAL1,A9
|
|||
|
MOVI [53,61],A10
|
|||
|
MOVK 4,A11
|
|||
|
CREATE 0,COLCYC ;COLOR CYCLER
|
|||
|
*
|
|||
|
*CHEAP COLOR CYCLER
|
|||
|
*CYCLES ANY NUMBER OF COLORS
|
|||
|
*A8=PALETTE NAME
|
|||
|
*A9=RAM STORAGE AREA
|
|||
|
*A10=MSW START COLOR, LSW END COLOR
|
|||
|
*A11=SPEED
|
|||
|
|
|||
|
COLCYC
|
|||
|
SLEEP 4
|
|||
|
MOVE A8,A0
|
|||
|
CALLA FINDPAL ;FIND PALETTE
|
|||
|
JREQ COLCYC ;WAIT TILL IT SHOWS UP FOLKS...
|
|||
|
|
|||
|
*GET THE COLORS INTO RAM
|
|||
|
CLR A1
|
|||
|
MOVX A10,A1 ;GET END COLOR
|
|||
|
SRL 16,A10 ;ADJUST START COLOR
|
|||
|
SUB A10,A1 ;GET COUNT
|
|||
|
MOVE A1,*A13(PDATA),W ;SAVE COUNT
|
|||
|
MOVE A1,A4
|
|||
|
SLL 4,A1 ;COUNT IN WORDS
|
|||
|
MOVE A10,A5
|
|||
|
SLL 4,A5 ;OFFSET INTO PALETTE
|
|||
|
ADD A8,A5
|
|||
|
ADDK 16,A5 ;SKIP PALETTE WORD COUNT
|
|||
|
MOVE A9,A3
|
|||
|
MOVE A9,A6
|
|||
|
ADD A1,A6
|
|||
|
MOVE A6,A8
|
|||
|
COLCYC1
|
|||
|
MOVE *A5+,A7,W ;TRANSFER IT TWICE
|
|||
|
MOVE A7,*A3+,W
|
|||
|
MOVE A7,*A6+,W
|
|||
|
DSJS A4,COLCYC1
|
|||
|
|
|||
|
SRL 8,A0
|
|||
|
SLL 8,A0
|
|||
|
ADD A0,A10 ;COLRAM DESTINATION
|
|||
|
MOVE A9,*A13(PDATA+20),L ;SAVE RAM ADDRESS
|
|||
|
COLCYCP
|
|||
|
MOVE A9,A0 ;GET SOURCE ADDRESS
|
|||
|
MOVE A10,A1 ;GET DESTINATION CONSTANT
|
|||
|
MOVE *A13(PDATA),A2,W ;GET COUNT
|
|||
|
CALLA PALSET
|
|||
|
ADDK 16,A9
|
|||
|
CMP A9,A8
|
|||
|
JRLO CCYCSLP
|
|||
|
MOVE *A13(PDATA+>20),A9,L ;GET SOURCE TABLE START
|
|||
|
CCYCSLP
|
|||
|
MOVE A11,A0 ;GET SLEEP TIME
|
|||
|
CALLA PRCSLP
|
|||
|
JRUC COLCYCP
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* CYCLE16 - PROCESS TO CYCLE UP TO SIXTEEN COLORS OF A GIVEN PALETTE. *
|
|||
|
* A8 = PTR TO PALETTE (PALETTE MUST BE ALLOCATED). *
|
|||
|
* A9 = START COLOR # *
|
|||
|
* A10 = END COLOR # *
|
|||
|
* A11 = SPEED *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
CYCLE16:
|
|||
|
MOVE A11,*A13(PDATA),W ;KEEP THE SLEEP TIME
|
|||
|
MOVE A10,A2
|
|||
|
CLR A11 ;THIS WILL BE THE DIRECTION FLAG
|
|||
|
SUB A9,A2
|
|||
|
JRNN CYCLE16_FOR ;BR = FOWARD CYCLE
|
|||
|
ABS A2
|
|||
|
NOT A11 ;FLAG A REVERSE CYCLE
|
|||
|
SWAP A9,A10 ;SWAP THESE FOR LOAD
|
|||
|
|
|||
|
CYCLE16_FOR:
|
|||
|
MOVE A9,*A13(PDATA+10H),W ;STORE THE START COLOR
|
|||
|
MOVE A9,A3
|
|||
|
MOVE A13,A9
|
|||
|
ADDI PDATA+60H,A9 ;START COLOR ADDRESS
|
|||
|
MOVE A9,A10
|
|||
|
MOVE A2,A4
|
|||
|
SLL 4,A4
|
|||
|
ADD A4,A10 ;END COLOR ADDRESS
|
|||
|
|
|||
|
MOVE A8,A0
|
|||
|
MOVE A9,A1 ;THIS IS THE STARTING COLOR LOCATION
|
|||
|
ADDK 16,A0 ;SKIP THE COLOR COUNT
|
|||
|
SLL 4,A3
|
|||
|
ADD A3,A0 ;AND GET TO THE START COLOR
|
|||
|
INC A2
|
|||
|
MOVE A2,*A13(PDATA+20H),W ;STORE THE COLOR COUNT
|
|||
|
|
|||
|
CYCLE16_LOAD:
|
|||
|
MOVE *A0+,*A1+,W ;TRANSFER THE PALETTE TO RAM
|
|||
|
DSJS A2,CYCLE16_LOAD
|
|||
|
|
|||
|
CYCLE16_WAIT:
|
|||
|
MOVE A8,A0
|
|||
|
CALLA FINDPAL ;DOES THIS PALETTE EXIST?
|
|||
|
JRNZ CYCLE16_FND ;BR = YES, GO AHEAD AND CYCLE
|
|||
|
SLOOP 6,CYCLE16_WAIT ;WAIT FOR IT TO EXIST
|
|||
|
|
|||
|
CYCLE16_FND:
|
|||
|
MOVE A0,A7 ;STORE FOUND PALETTE NUMBER HERE
|
|||
|
MOVE *A13(PDATA+20H),A4,W ;DO IT THIS MANY TIMES
|
|||
|
DEC A4 ;WATCH THE ZERO BASE
|
|||
|
|
|||
|
MOVE A11,A11 ;CHECK DIRECTION
|
|||
|
JRNN CYCLE16_UP ;BR = CYCLE COLORS UP
|
|||
|
MOVE A9,A1 ;GET THE END COLOR
|
|||
|
MOVE *A1,A3,W ;STORE THE COLOR
|
|||
|
MOVE A10,A2
|
|||
|
MOVE A1,A0
|
|||
|
ADDK 16,A1
|
|||
|
CYCLE16_DN_LP:
|
|||
|
MOVE *A1+,*A0+,W
|
|||
|
DSJS A4,CYCLE16_DN_LP
|
|||
|
JRUC CYCLE16_DONE
|
|||
|
|
|||
|
CYCLE16_UP:
|
|||
|
MOVE A10,A1 ;GET THE END COLOR
|
|||
|
MOVE *A1,A3,W ;STORE THE COLOR
|
|||
|
MOVE A9,A2
|
|||
|
MOVE A1,A0
|
|||
|
ADDK 16,A1
|
|||
|
CYCLE16_UP_LP:
|
|||
|
MOVE -*A0,-*A1,W
|
|||
|
DSJS A4,CYCLE16_UP_LP
|
|||
|
CYCLE16_DONE:
|
|||
|
MOVE A3,*A2,W ;WRAP COLOR
|
|||
|
MOVE A9,A0
|
|||
|
MOVE *A13(PDATA+10H),A1,W
|
|||
|
ZEXT A7
|
|||
|
|
|||
|
.IF YUNIT
|
|||
|
SRL 12,A7
|
|||
|
.ELSE
|
|||
|
SRL 8,A7
|
|||
|
.ENDIF
|
|||
|
|
|||
|
SLL 8,A7
|
|||
|
OR A7,A1 ;DESTINATION: 8-15 PALETTE, 0-7 START
|
|||
|
MOVE *A13(PDATA+20H),A2,W ;GET THE COUNT
|
|||
|
CALLA PALSET ;SETUP A TRANSFER
|
|||
|
MOVE *A13(PDATA),A0,W
|
|||
|
SLOOPR A0,CYCLE16_WAIT
|
|||
|
|