smashtv/BACKUP/CYCLER.ASM

166 lines
3.8 KiB
NASM
Raw Normal View History

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