smashtv/BACKUP/CYCLER.ASM

166 lines
3.8 KiB
NASM
Raw Permalink Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

**************************************************************************
* *
* 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