1567 lines
45 KiB
NASM
1567 lines
45 KiB
NASM
|
.FILE 'UTIL.ASM'
|
|||
|
; SHELL PROGRAM - DO NOT MODIFY!
|
|||
|
; MARK TURMELL - MAY 24, 1989
|
|||
|
;
|
|||
|
.TITLE " UTILITY - GENERAL PURPOSE SUBROUTINES"
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* COPYRIGHT (C) 1988 WILLIAMS ELECTRONICS GAMES, INC. *
|
|||
|
* ALL RIGHTS RESERVED. *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
|
|||
|
.WIDTH 132
|
|||
|
.OPTION B,D,L
|
|||
|
.MNOLIST
|
|||
|
|
|||
|
* GET THE SYSTEM STUFF
|
|||
|
.INCLUDE "MPROC.EQU" ;MPROC EQUATES
|
|||
|
.INCLUDE "DISP.EQU" ;DISPLAY PROCESSOR EQUATES
|
|||
|
.INCLUDE "\VIDEO\SYS\GSP.INC" ;GSP ASSEMBLER EQUATES
|
|||
|
.INCLUDE "\VIDEO\SYS\SYS.INC" ;ZUNIT SYSTEM EQUATES
|
|||
|
.INCLUDE "\VIDEO\SYS\MACROS.HDR" ;MACROS, YEAH!
|
|||
|
.INCLUDE ROBO.EQU ;FOR TEXTOID!
|
|||
|
|
|||
|
*UTILITY SUBROUTINE EQUATES
|
|||
|
.GLOBAL SCRCLR,MYOINIT,SETPPROC,GPALOBJ,GBPALOBJ
|
|||
|
.GLOBAL SHVELCPY,SHVELFLP,FLP,OBJOFF,OBJON,CLRPDATA
|
|||
|
.GLOBAL ADDSUPP,DELSUPP,STRLNRM,STRCNRM,STRCNRMO,STRLNRMO
|
|||
|
.GLOBAL RANDU,RANDOM,SRAND,RANGRAND,RANDPER,BLNKAREA,DTIME
|
|||
|
.GLOBAL FRANIM,AUTOEOFF,AUTOEON,DMAQWAIT,SYNCHALF
|
|||
|
.GLOBAL STRNGLEN,DMAN,CLRWORLD,CLR_SCRN
|
|||
|
.GLOBAL STRRNRM,FILLAREA,SYNCFULL,SCRFIL,GETCPNT
|
|||
|
*PAL EQUATES
|
|||
|
.GLOBL DELPAL,GETFPAL,INITBPAL,FINDPAL,INITPAL,PALSET
|
|||
|
*RAM EQUATES
|
|||
|
.GLOBL INTSYNC0,INTSYNC1,NOAUTOE,SYSCOPY
|
|||
|
.GLOBL GAMERASE
|
|||
|
|
|||
|
; .REF GOUP ;ROBOATT
|
|||
|
.REF MYID ;WAVES
|
|||
|
|
|||
|
.DEF STRNGRAM,HEXTOASC,GETANIX,DMAHALT,WRLD,PSTOP
|
|||
|
.BSS STRNGRAM,20*16
|
|||
|
.BSS WRLD,16
|
|||
|
|
|||
|
.EVEN
|
|||
|
|
|||
|
.TEXT
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* HEXTOASC - CONVERTS A 32 BIT HEX # TO AN ASCII STRING TERMINATED *
|
|||
|
* BY 0 *
|
|||
|
* A8 = HEX # *
|
|||
|
* RETURNS: *
|
|||
|
* A8 PTR TO THE STRING *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
HEXTOASC
|
|||
|
MMTM SP,A1,A2,A9
|
|||
|
CLR A1
|
|||
|
CLR A2 ;COMMA COUNT
|
|||
|
MOVE A1,-*SP,W ;HERE'S THE NULL TERMINATOR
|
|||
|
MOVK 10,A1 ;DIVISOR FOR DECIMAL
|
|||
|
MOVE A8,A9
|
|||
|
HEXTASC2
|
|||
|
CLR A8
|
|||
|
DIVU A1,A8
|
|||
|
ADDI '0',A9 ;MAKE THE REMAINDER ASCII
|
|||
|
MOVE A9,-*SP,W ;SAVE HERE
|
|||
|
MOVE A8,A9
|
|||
|
JRZ HEXTASC3 ;BR = DONE!
|
|||
|
INC A2
|
|||
|
CMPI 3,A2 ;COMMA CHECK
|
|||
|
JRLO HEXTASC2 ;BR = NO COMMA
|
|||
|
MOVI ',',A2
|
|||
|
MOVE A2,-*SP,W ;STUFF A COMMA
|
|||
|
CLR A2
|
|||
|
JRUC HEXTASC2
|
|||
|
HEXTASC3
|
|||
|
MOVI STRNGRAM,A1 ;STORE HERE FOR BLOW OUT
|
|||
|
MOVE A1,A8
|
|||
|
|
|||
|
HEXTASC4
|
|||
|
MOVE *SP+,A9,W
|
|||
|
MOVB A9,*A1
|
|||
|
ADDK 8,A1
|
|||
|
MOVE A9,A9
|
|||
|
JRNZ HEXTASC4
|
|||
|
MMFM SP,A1,A2,A9
|
|||
|
RETS
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* STRINGER - OUTPUT A TEXT STRING, THIS IS A PROCESS! *
|
|||
|
* A0 = SLEEP TIME BETWEEN CHARACTERS *
|
|||
|
* A4 = DMA CONTROL *
|
|||
|
* A6 = COLOR (16 BITS) *
|
|||
|
* A8 = PTR TO STRING *
|
|||
|
* A9 = [Y,X] SCREEN ADDRESS OF STRING *
|
|||
|
* A10 = [Y,X] SPACING *
|
|||
|
* A11 = POINTER TO FONT TABLE *
|
|||
|
* A14 = FLAGS - INSERT:JUSTIFY *
|
|||
|
* WRLD = ADJUST FOR WORLD COORDINATES
|
|||
|
* BIT 16 = 1 INSERT ON OBJECT LIST, 0 JUST QUEUE THE DMA *
|
|||
|
* JUSTIFY = 0 LEFT JUSTIFY *
|
|||
|
* 1 CENTER JUSTIFY *
|
|||
|
* 2 RIGHT JUSTIFY *
|
|||
|
* RETURNS: *
|
|||
|
* A8 = POINTS TO NEXT BYTE AFTER STRING TERMINATOR *
|
|||
|
* A9 = NEXT CURSOR POSITION AFTER THE STRING *
|
|||
|
* NOTE: CALL WITH JSRP *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
*
|
|||
|
*STRING ENTRYPOINT, LEFT JUSTIFY, NORMAL, NOT PUT ON THE OBJECT LIST
|
|||
|
STRLNRM
|
|||
|
MMTM A12,A1,A4,A6,A14
|
|||
|
MOVI DMACNZ,A4
|
|||
|
CLR A14
|
|||
|
JRUC STRINGR1
|
|||
|
*
|
|||
|
*STRING ENTRYPOINT, CENTER JUSTIFY, NORMAL, NOT ON THE OBJECT LIST
|
|||
|
STRCNRM
|
|||
|
MMTM A12,A1,A4,A6,A14
|
|||
|
MOVI DMACNZ,A4
|
|||
|
MOVK 1,A14
|
|||
|
JRUC STRINGR1
|
|||
|
*
|
|||
|
*STRING ENTRYPOINT, RIGHT JUSTIFY, NORMAL, NOT PUT ON THE OBJECT LIST
|
|||
|
STRRNRM
|
|||
|
MMTM A12,A1,A4,A6,A14
|
|||
|
MOVI DMACNZ,A4
|
|||
|
MOVK 2,A14
|
|||
|
JRUC STRINGR1
|
|||
|
*
|
|||
|
*STRING ENTRYPOINT, LEFT JUSTIFY, INVERTED, NOT ON THE OBJECT LIST
|
|||
|
STRLINV
|
|||
|
MMTM A12,A1,A4,A6,A14
|
|||
|
MOVI DMACZ,A4
|
|||
|
CLR A14
|
|||
|
JRUC STRINGR1
|
|||
|
*
|
|||
|
*STRING ENTRYPOINT, CENTER JUSTIFY, INVERTED, NOT ON THE OBJECT LIST
|
|||
|
STRCINV
|
|||
|
MMTM A12,A1,A4,A6,A14
|
|||
|
MOVI DMACZ,A4
|
|||
|
MOVK 1,A14
|
|||
|
JRUC STRINGR1
|
|||
|
|
|||
|
*
|
|||
|
*STRING ENTRYPOINT, LEFT JUSTIFY, NORMAL, OBJECT LIST
|
|||
|
STRLNRMO
|
|||
|
MMTM A12,A1,A4,A6,A14
|
|||
|
MOVI DMACNZ+M_NOCOLL,A4
|
|||
|
MOVI 10000H,A14
|
|||
|
JRUC STRINGR1
|
|||
|
*
|
|||
|
*STRING ENTRYPOINT, CENTER JUSTIFY, NORMAL, OBJECT LIST
|
|||
|
STRCNRMO
|
|||
|
MMTM A12,A1,A4,A6,A14
|
|||
|
MOVI DMACNZ+M_NOCOLL,A4
|
|||
|
MOVI 10001H,A14
|
|||
|
JRUC STRINGR1
|
|||
|
|
|||
|
STRINGER
|
|||
|
MMTM A12,A1,A4,A6,A14
|
|||
|
STRINGR1
|
|||
|
MOVE A6,A5
|
|||
|
SLL 16,A5 ;SETUP CONSTANT COLOR IN FIXED PALETTE
|
|||
|
|
|||
|
CLR A7
|
|||
|
MOVX A14,A7
|
|||
|
DEC A7
|
|||
|
JRN STRINGR2 ;NORMAL LEFT JUSTIFY
|
|||
|
JREQ STRINGRC
|
|||
|
*RIGHT JUSTIFY
|
|||
|
CALLR STRNGLEN ;GET THE STRING LENGTH
|
|||
|
JRUC STRINGRA
|
|||
|
*CENTER JUSTIFY
|
|||
|
STRINGRC
|
|||
|
CALLR STRNGLEN
|
|||
|
SRL 1,A7 ;STRNGLEN/2
|
|||
|
STRINGRA
|
|||
|
SUBXY A7,A9 ;ADJUST STRING STARTING POSITION
|
|||
|
STRINGR2
|
|||
|
MOVB *A8,A7 ;GET A CHARACTER
|
|||
|
SLL 24,A7
|
|||
|
SRL 24,A7 ;MAKE SURE WE'RE POSITIVE
|
|||
|
JREQ STRINGRX ;BR = STRING BE GONE BROTHA
|
|||
|
|
|||
|
ADDK 8,A8 ;NEXT BYTE
|
|||
|
|
|||
|
PUSH A0
|
|||
|
|
|||
|
CMPI 20H,A7
|
|||
|
JRNE STRNCHAR ;BR = IT'S KOSH BABY
|
|||
|
|
|||
|
MOVK 5,A7 ;HARD CODE A SPACE
|
|||
|
ADDXY A7,A9 ;AND ADD IT IN
|
|||
|
ADDXY A10,A9 ;ADD SPACING
|
|||
|
PULL A0
|
|||
|
JRUC STRINGR2 ;DON'T SLEEP ON A SPACE, IT LOOKS STUPID!!!
|
|||
|
|
|||
|
STRNCHAR
|
|||
|
MMTM SP,A2,A3,A4,A10,A14
|
|||
|
|
|||
|
MOVE A11,A1 ;ESCAPE TO THE OTHER SIDE
|
|||
|
|
|||
|
SUBI 21H,A7 ;GET A BASE
|
|||
|
SLL 5,A7
|
|||
|
ADD A7,A1
|
|||
|
MOVE *A1,A1,L ;LOAD THE ADDRESS OF THE IMAGE HEADER
|
|||
|
CALLA GSAGOF
|
|||
|
CALLA GANIOF
|
|||
|
|
|||
|
BTST 16,A14
|
|||
|
JREQ STRNQDMA ;BR = DO NORMAL DMA OF STRING
|
|||
|
|
|||
|
*CREATE THE CHARACTER AS AN OBJECT, HERE
|
|||
|
CALLA GETOBJ
|
|||
|
JREQ STRNGDUN ;BR = NO OBJECT
|
|||
|
|
|||
|
MOVE A1,*A0(OIMG),L
|
|||
|
MOVE A5,*A0(OPAL),L
|
|||
|
|
|||
|
; MOVE A4,*A0(OFLAGS),W
|
|||
|
; MOVB @GOUP,A14
|
|||
|
; JRZ NOUP
|
|||
|
; MOVI -08000H,A14
|
|||
|
; JRUC UP
|
|||
|
;NOUP
|
|||
|
CLR A14
|
|||
|
;UP
|
|||
|
MOVE A14,*A0(OYVEL),L
|
|||
|
CLR A14
|
|||
|
MOVE A14,*A0(OXVEL),L
|
|||
|
MOVE A0,A14
|
|||
|
ADDI OSIZE+20H,A14
|
|||
|
MMTM A14,A2,A3,A4 ;STUFF VITAL SHIT!!!!
|
|||
|
; CLR A14
|
|||
|
; ADDI OZVEL+20H,A0
|
|||
|
; ADDI OZPOS+20H,A0
|
|||
|
; MOVK 6,A4
|
|||
|
;STRNGOL
|
|||
|
; MOVE A14,-*A0,L
|
|||
|
; DSJS A4,STRNGOL ;ZERO OUT THE VELS & POSITIONS
|
|||
|
; SUBI 64,A0 ;BACK TO NORMAL
|
|||
|
|
|||
|
MOVB @MYID,A14
|
|||
|
; JRZ REG
|
|||
|
; MOVI CLSNEUT|TYPTEXT|SUBSCOR,A14
|
|||
|
JRNZ REG2
|
|||
|
;REG
|
|||
|
MOVI CLSNEUT|TYPTEXT|SUBTXT,A14
|
|||
|
REG2
|
|||
|
MOVE A14,*A0(OID),W ;STUF A FINDABLE I.D.
|
|||
|
|
|||
|
MOVE A9,A14
|
|||
|
MOVE A14,*A0(OXPOS),W
|
|||
|
SRL 16,A14
|
|||
|
MOVE A14,*A0(OYPOS),W ;STUFF POSITIONS
|
|||
|
|
|||
|
MOVI 07FD1H,A14
|
|||
|
; MOVI 07FFEH,A14
|
|||
|
MOVE A14,*A0(OZPOS),W
|
|||
|
|
|||
|
MOVE @WRLD,A2,W
|
|||
|
JRNZ NOADJST
|
|||
|
CALLA ADJSTWTL ;PUT US IN THE WORLD
|
|||
|
NOADJST:
|
|||
|
CALLA INSOBJ ;STUFF THIS SHEEEEEEET
|
|||
|
MMTM SP,A0,A2,A3,A4
|
|||
|
MOVE *A0(OYVAL),A2,L
|
|||
|
MOVE *A0(OXVAL),A3,L
|
|||
|
MOVE *A0(OFLAGS),A4
|
|||
|
CALLA GANISAG
|
|||
|
MOVE A2,*A0(OYVAL),L
|
|||
|
MOVE A3,*A0(OXVAL),L
|
|||
|
;
|
|||
|
;ADJUST ANI POINT
|
|||
|
* GANISAG - ADJUST CURRENT OBJECT IMAGE WITH RESPECT TO IT'S *
|
|||
|
* ANIMATION PNT. AND FLIP FLAGS *
|
|||
|
* NOTE: CALL ONLY AFTER INITIALIZING WITH STFOBJ, OR SOMETHING. *
|
|||
|
* A0 = PTR TO OBJECT BLOCK *
|
|||
|
* A2 = NEW OYVAL *
|
|||
|
* A3 = NEW OXVAL *
|
|||
|
* A4 = NEW FLAGS *
|
|||
|
* RETURNS *
|
|||
|
* A2 = ADJUSTED OYVAL *
|
|||
|
* A3 = ADJUSTED OXVAL *
|
|||
|
MMFM SP,A0,A2,A3,A4
|
|||
|
|
|||
|
|
|||
|
JRUC STRNGDUN
|
|||
|
|
|||
|
*SIMPLY DMA THE SUCKER, HERE
|
|||
|
STRNQDMA
|
|||
|
MOVE A1,A10
|
|||
|
MOVE A5,A1 ;CONSTANT:PALETTE
|
|||
|
MOVE A4,A5 ;OFFSET:CONTROL
|
|||
|
MOVE A3,A4 ;SAG
|
|||
|
|
|||
|
CLR A14
|
|||
|
MOVY A9,A14
|
|||
|
CLR A3
|
|||
|
MOVX A9,A3
|
|||
|
SRL 16,A6
|
|||
|
SUBXY A6,A3
|
|||
|
SUBXY A7,A14 ;MOVE TO CORRECT POSITION
|
|||
|
MOVY A14,A3 ;A3 = DAG
|
|||
|
CALLA DMAN
|
|||
|
MOVE A1,A5
|
|||
|
MOVE A10,A1
|
|||
|
STRNGDUN
|
|||
|
MOVE *A1(ISIZE),A6,W ;GET THE VISIBLE HORIZONTAL SIZE
|
|||
|
MMFM SP,A2,A3,A4,A10,A14
|
|||
|
|
|||
|
ADDXY A6,A9 ;GET TO THE OTHER SIDE
|
|||
|
ADDXY A10,A9
|
|||
|
MOVE *SP+,A0,L
|
|||
|
JREQ STRINGR2 ;BR = NO SLEEP
|
|||
|
MMTM A12,A0,A4,A5,A14
|
|||
|
CALLA PRCSLP
|
|||
|
MMFM A12,A0,A4,A5,A14
|
|||
|
JRUC STRINGR2
|
|||
|
STRINGRX
|
|||
|
ADDK 8,A8 ;GET TO THE NEXT BYTE
|
|||
|
MMFM A12,A1,A4,A6,A14
|
|||
|
RETP
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* STRNGLEN - RETURNS THE LENGTH, IN PIXELS, OF A GIVEN STRING *
|
|||
|
* A8 = PTR TO STRING *
|
|||
|
* A10 = [Y,X] SPACING OF STRING *
|
|||
|
* A11 = PTR TO FONT TABLE *
|
|||
|
* RETURNS: *
|
|||
|
* A7 = LENGTH OF STRING *
|
|||
|
* Z BIT SET IF LENGTH IS ZERO *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
STRNGLEN
|
|||
|
MMTM SP,A8,A14
|
|||
|
CLR A14
|
|||
|
MOVB *A8,A7
|
|||
|
SLL 24,A7
|
|||
|
SRL 24,A7 ;MAKE SURE WE'RE POSITIVE
|
|||
|
JREQ STRNLENX
|
|||
|
STRNLEN
|
|||
|
ADDK 8,A8 ;POINT TO NEXT
|
|||
|
CMPI 20H,A7
|
|||
|
JRNE STRNLEN1 ;BR = IT'S NOT A SPACE
|
|||
|
MOVK 5,A7 ;HARD CODE A SPACE
|
|||
|
JRUC STRNLEN2
|
|||
|
STRNLEN1
|
|||
|
SUBI 21H,A7 ;GET A BASE
|
|||
|
SLL 5,A7
|
|||
|
ADD A11,A7 ;A7 = PTR TO CORRECT CHARACTER HEADER
|
|||
|
MOVE *A7,A7,L
|
|||
|
MOVE *A7(ISIZE),A7,W ;GET THE ACTUAL X LENGTH
|
|||
|
STRNLEN2
|
|||
|
ADDXY A7,A14 ;ADD DIGIT LENGTH
|
|||
|
MOVX A10,A7
|
|||
|
ADDXY A7,A14 ;ADD SPACE LENGTH
|
|||
|
MOVB *A8,A7
|
|||
|
SLL 24,A7
|
|||
|
SRL 24,A7 ;MAKE SURE WE'RE POSITIVE
|
|||
|
JRNE STRNLEN ;NEXT CHARACTER
|
|||
|
STRNLENX
|
|||
|
MOVE A14,A7 ;PASS RETURN VALUE IN A7
|
|||
|
MMFM SP,A8,A14
|
|||
|
RETS
|
|||
|
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* OBJECT BLOCK INITIALIZATION ROUTINES *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* GPALOBJ - GET A PALETTE AND AN OBJECT BLOCK *
|
|||
|
* A14 = PTR TO PLAYER INITIALIZATION TABLE. *
|
|||
|
* RETURNS: *
|
|||
|
* A0 = PTR TO OBJECT *
|
|||
|
* Z BIT SET = FAILURE,A0 = 0 *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
GPALOBJ
|
|||
|
CALLA GETOBJ
|
|||
|
JRZ GPALOBJX ;OBJECT BLOCK FAILURE
|
|||
|
CALLA INITPAL ;GET THE PALETTE
|
|||
|
; JRNZ GPALOBJX
|
|||
|
; CLR A0
|
|||
|
; MOVE A0,@CURPAL,W
|
|||
|
; CALLA FREEOBJ
|
|||
|
; CLR A0
|
|||
|
GPALOBJX
|
|||
|
RETS
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* GBPALOBJ - GET A BACKGROUND PALETTE AND AN OBJECT BLOCK *
|
|||
|
* A14 = PTR TO PLAYER INITIALIZATION TABLE. *
|
|||
|
* RETURNS: *
|
|||
|
* A0 = PTR TO OBJECT *
|
|||
|
* Z BIT SET = FAILURE,A0 = 0 *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
GBPALOBJ
|
|||
|
CALLA GETOBJ
|
|||
|
JRZ GBPALOX ;OBJECT BLOCK FAILURE
|
|||
|
CALLA INITBPAL ;GET THE BACKGROUND PALETTE
|
|||
|
JRNZ GBPALOX
|
|||
|
CALLA FREEOBJ
|
|||
|
CLR A0
|
|||
|
GBPALOX
|
|||
|
RETS
|
|||
|
|
|||
|
*
|
|||
|
*SHVELCPY - COPY VELOCITIES TO SHADOW (IF ANY)
|
|||
|
*A8=OBJECT
|
|||
|
*
|
|||
|
;SHVELCPY:
|
|||
|
; MMTM SP,A0,A1
|
|||
|
; MOVE *A8(OSHAD),A0,L
|
|||
|
; JREQ SHVLCPX
|
|||
|
; MOVE *A8(OXVEL),*A0(OXVEL),L
|
|||
|
;** MOVE *A8(OZVEL),A1,L
|
|||
|
; MOVE *A8(OYVEL),A1,L
|
|||
|
;** MOVE A1,*A0(OZVEL),L
|
|||
|
; MOVE A1,*A0(OYVEL),L
|
|||
|
;SHVLCPX:
|
|||
|
; MMFM SP,A0,A1
|
|||
|
; RETS
|
|||
|
|
|||
|
*
|
|||
|
*SHVELFLP - COPY SHADOW VELOCITY AND FLIP HIM
|
|||
|
*A8=OBJECT
|
|||
|
*A3=OXVEL
|
|||
|
;SHVELFLP:
|
|||
|
; CALLR SHVELCPY
|
|||
|
; MOVE *A8(OXVEL+>10),A14,W ;TEST X VELOCITY
|
|||
|
*FLIPDUDE
|
|||
|
*A8=OBJECT, N=SIGN OF XVEL
|
|||
|
FLP:
|
|||
|
JAN YFLP
|
|||
|
JAUC NOYFLP
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* OBJOFF - TURN AN OBJECT "OFF" I.E. SET DMA OUTPUT TO 0 *
|
|||
|
* A0 = PTR TO OBJECT BLOCK *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
OBJOFF
|
|||
|
PUSH A4
|
|||
|
MOVE *A0(OFLAGS),A4,W
|
|||
|
SRL 4,A4
|
|||
|
SLL 4,A4
|
|||
|
MOVE A4,*A0(OFLAGS),W
|
|||
|
PULL A4
|
|||
|
RETS
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* OBJON - TURN AN OBJECT "ON" I.E. SET DMA OUTPUT TO WRITE <> 0 *
|
|||
|
* A0 = PTR TO OBJECT BLOCK *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
OBJON
|
|||
|
PUSH A4
|
|||
|
MOVE *A0(OFLAGS),A4,W
|
|||
|
SRL 4,A4
|
|||
|
SLL 4,A4
|
|||
|
ADDK 2,A4
|
|||
|
MOVE A4,*A0(OFLAGS),W
|
|||
|
PULL A4
|
|||
|
RETS
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* Z POSITIONING ROUTINES *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
|
|||
|
*
|
|||
|
*XZCHK
|
|||
|
*CALLING PARAMETERS:
|
|||
|
*A8=OBJECT SEEKING
|
|||
|
*A0=OBJECT SEEKED
|
|||
|
*A5=X RANGE
|
|||
|
*A6=Z RANGE
|
|||
|
*RETURNS:
|
|||
|
*CARRY SET IF HE IS CLOSE ENOUGH
|
|||
|
*A1=DELTA X
|
|||
|
*A2=DELTA Z
|
|||
|
*A3=ABS DELTA X
|
|||
|
*A4=ABS DELTA Z
|
|||
|
;XZCHK:
|
|||
|
; MOVE A0,A4
|
|||
|
; CALLR GETANIX ;GET X ANIMATION POINT
|
|||
|
; MOVE A0,A3
|
|||
|
; SWAP A4,A8
|
|||
|
; CALLR GETANIX
|
|||
|
; MOVE A0,A1
|
|||
|
; MOVE A8,A0
|
|||
|
; MOVE A4,A8
|
|||
|
; MOVE *A8(OZPOS),A4,W
|
|||
|
; MOVE *A0(OZPOS),A2,W
|
|||
|
; SUB A4,A2
|
|||
|
; SUB A3,A1
|
|||
|
; MOVE A1,A3
|
|||
|
; MOVE A2,A4
|
|||
|
; ABS A3
|
|||
|
; ABS A4
|
|||
|
; CMP A5,A3
|
|||
|
; JRNC XZCHKX
|
|||
|
; CMP A6,A4
|
|||
|
;XZCHKX:
|
|||
|
; RETS
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* CLRPDATA - CLEAR THE PDATA AREA OF A PROCESS BLOCK *
|
|||
|
* A13 = PTR TO PROCESS BLOCK *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
;CLRPDATA
|
|||
|
; MMTM SP,A1,A6,A14
|
|||
|
; MOVE A13,A14
|
|||
|
; CLR A1
|
|||
|
; ADDI PDATA,A14
|
|||
|
; MOVI (PSDATA-PDATA)/16,A6
|
|||
|
;CLRSHL
|
|||
|
; SRL 1,A6
|
|||
|
; JRNC CLRPDL
|
|||
|
; MOVE A1,*A14+,W ;STUFF THE ODD WORD
|
|||
|
;CLRPDL
|
|||
|
; MOVE A1,*A14+,L
|
|||
|
; DSJS A6,CLRPDL
|
|||
|
; MMFM SP,A1,A6,A14
|
|||
|
; RETS
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* DFRMGRND - RETURNS THE DISTANCE FROM THE BOTTOM OF *
|
|||
|
* AN OBJECT TO THE "GROUND." *
|
|||
|
* A8 = OBJECT BLOCK *
|
|||
|
* RETURN(S) *
|
|||
|
* A1 = DISTANCE FROM GROUND (16 BITS) *
|
|||
|
* STATUS BITS SET ACCORDING TO THE SIGN OF A1 *
|
|||
|
* NOTE: MAX ACCEPTABLE Y = +32K, MIN ACCEPTABLE Y = -32K *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
;ZORIGIN EQU 200 ;Y COORDINATE OF THE Z ORIGIN
|
|||
|
;DFRMGRND
|
|||
|
; PUSH A2
|
|||
|
; MOVE *A8(OYPOS),A1,W
|
|||
|
; MOVE *A8(OSIZEY),A2,W
|
|||
|
; ADD A1,A2 ;A2 = BOTTOM Y
|
|||
|
; MOVE *A8(OZPOS),A1,W
|
|||
|
; SUB A2,A1
|
|||
|
; ADDI ZORIGIN,A1
|
|||
|
; MMFM SP,A2
|
|||
|
; RETS
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* GET BOTTOM Y OF AN OBJECT *
|
|||
|
* A8 = OBJECT BLOCK PTR *
|
|||
|
* RETURN(S) *
|
|||
|
* A1 = 16 BIT BOTTOM Y IN LSW *
|
|||
|
* STATUS SET ACCORDING TO THE BOTTOM Y *
|
|||
|
*NOTE: MAKE SURE OBLOCK IS INIT'D WITH GSAGOF BEFORE CALLING *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
;GETBOTY
|
|||
|
; PUSH A2
|
|||
|
; MOVE *A8(OYPOS),A1,W ;GET Y POSITION
|
|||
|
; MOVE *A8(OSIZEY),A2,W ;GET THE CURRENT SIZE
|
|||
|
; ADD A2,A1 ;A1 = BOTTOM Y
|
|||
|
; MMFM SP,A2
|
|||
|
; RETS
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* GETCPNT - RETURNS THE CENTER XY POSITION OF A GIVEN IMAGE *
|
|||
|
* A8 = IMAGE OBLOCK *
|
|||
|
* RETURN(S) *
|
|||
|
* A1 = CENTER Y:CENTER X *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
GETCPNT MOVE A0,-*SP,L
|
|||
|
MOVE *A8(OYPOS),A0,W
|
|||
|
SLL 16,A0
|
|||
|
MOVE *A8(OXPOS),A1,W
|
|||
|
MOVX A1,A0
|
|||
|
MOVE *A8(OSIZE),A1,L
|
|||
|
CALLR GETCENT
|
|||
|
SLL 16,A0
|
|||
|
MOVY A0,A1
|
|||
|
MOVE *SP+,A0,L
|
|||
|
RETS
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* GETCENT - RETURNS THE CENTER POINT OF A BOX *
|
|||
|
* A0 = UPPER LEFT Y:UPPER LEFT X *
|
|||
|
* A1 = Y_SIZE:X_SIZE *
|
|||
|
* RETURN(S) *
|
|||
|
* A0 = CENTER Y(LSW) *
|
|||
|
* A1 = CENTER X(LSW) *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
GETCENT MOVE A2,-*SP,L
|
|||
|
MOVY A1,A2
|
|||
|
SRL 17,A2 ;YSIZE/2
|
|||
|
SLL 16,A2 ;BACK TO Y HALF
|
|||
|
SLL 16,A1 ;CLEAR Y
|
|||
|
SRL 17,A1 ;XSIZE/2
|
|||
|
MOVY A2,A1
|
|||
|
ADDXY A1,A0 ;OFFSET TO CENTER
|
|||
|
CLR A1
|
|||
|
MOVX A0,A1 ;RETURN THESE IN USEFUL POSITIONS
|
|||
|
SRL 16,A0
|
|||
|
MOVE *SP+,A2,L
|
|||
|
RETS
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* GETSCRRX - THE THE WORLD X COORDINATE OF THE SCREEN RIGHT END *
|
|||
|
* RETURNS *
|
|||
|
* A0 = SCREEN RIGHT X, 32 BITS *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
;GETSCRRX
|
|||
|
; PUSH A2
|
|||
|
; MOVE @SCRNLR,A0,W
|
|||
|
; MOVE @WORLDTL,A2,W
|
|||
|
; ADD A2,A0 ;GET SCREEN LOWER RT.
|
|||
|
; SLL 16,A0
|
|||
|
; PULL A2
|
|||
|
; RETS
|
|||
|
|
|||
|
*
|
|||
|
*GETANIX - GET ANIMATION POINT X COORD
|
|||
|
*CALLING PARMS: A8=OBJECT
|
|||
|
*RETURNS A0=16 BIT WORLD COORD OF UPPER LEFT
|
|||
|
*
|
|||
|
GETANIX:
|
|||
|
MMTM SP,A1,A2
|
|||
|
MOVE *A8(OIMG),A1,L
|
|||
|
MOVE *A1(IANIOFF),A2,W
|
|||
|
MOVE *A8(OFLAGS),A0,W
|
|||
|
BTST B_FLIPH,A0
|
|||
|
JRZ GETAX1
|
|||
|
MOVE *A1(ISIZE),A0,W
|
|||
|
SUB A2,A0
|
|||
|
DEC A0
|
|||
|
MOVE A0,A2
|
|||
|
GETAX1:
|
|||
|
MOVE *A8(OXPOS),A0,W
|
|||
|
ADD A2,A0
|
|||
|
MMFM SP,A1,A2
|
|||
|
RETS
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* CLRWORLD - CLEAR ALL WORLD COORDINATES AND SCROLL VELOCITIES. *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
CLRWORLD
|
|||
|
PUSH A0
|
|||
|
CLR A0
|
|||
|
MOVE A0,@SCROLLX,L ;X SCROLL VALUE
|
|||
|
MOVE A0,@SCROLLY,L ;Y SCROLL VALUE
|
|||
|
MOVE A0,@WORLDTLX,L ;TOP LEFT X SCREEN COORD (WORLD)
|
|||
|
MOVE A0,@WORLDTLY,L ;TOP LEFT Y SCREEN COORD (WORLD)
|
|||
|
MOVE A0,@WORLDTL,L
|
|||
|
; MOVE A0,@BAK2TLY,L ;TOP LFT Y SLOW SCROLL BACKGROUND
|
|||
|
; MOVE A0,@BAK2TLX,L ;TOP LFT X SLOW SCROLL BACKGROUND
|
|||
|
MOVI SCRNST,A0
|
|||
|
MOVE A0,@SCRNTL,L
|
|||
|
MOVI SCRNEND,A0
|
|||
|
MOVE A0,@SCRNLR,L
|
|||
|
PULL A0
|
|||
|
RETS
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* GETSCRBY - THE THE WORLD Y COORDINATE OF THE SCREEN BOTTOM *
|
|||
|
* RETURNS *
|
|||
|
* A0 = SCREEN BOTTOM Y *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
;GETSCRBY
|
|||
|
; PUSH A2
|
|||
|
; MOVE @SCRNLR+16,A0,W
|
|||
|
; MOVE @WORLDTL+16,A2,W
|
|||
|
; ADD A2,A0 ;GET SCREEN BOTTOM Y
|
|||
|
; SLL 16,A0 ;MAKE IT A 32 BIT VALUE
|
|||
|
; PULL A2
|
|||
|
; RETS
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* MYOINIT - INITIALIZE SUPPLEMENTAL OBJECT LIST HEADERS *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
MYOINIT
|
|||
|
MMTM SP,A0,A1,A2,A3,A4,A5
|
|||
|
PUSHST
|
|||
|
|
|||
|
DINT
|
|||
|
MOVE @INTENB,A0,W
|
|||
|
ANDNI X1E,A0 ;NO MORE DMA INTERRUPTS
|
|||
|
MOVE A0,@INTENB,W
|
|||
|
POPST
|
|||
|
CLR A0
|
|||
|
MOVE A0,@GAMERASE
|
|||
|
CALLA AUTOEOFF ;DISABLE AUTOERASE
|
|||
|
CALLR DMAWAIT ;WAIT ON DMA
|
|||
|
MOVI ERASECOL,A1
|
|||
|
SLL 16,A1 ;CONSTANT:PALETTE
|
|||
|
MOVI [2,511],A2 ;HEIGHT:WIDTH
|
|||
|
MOVI [510,0],A3 ;DAG
|
|||
|
MOVI 2000000H,A4 ;SAG
|
|||
|
MOVI DMAREGS,A0
|
|||
|
MMTM A0,A1,A2,A3,A4 ;STORE TO LAST 2 LINES OF BITMAP
|
|||
|
CLR A5 ;STUFF OFFSET
|
|||
|
MOVE A5,-*A0,W
|
|||
|
MOVI DMACAL,A5 ;CONTROL &
|
|||
|
MOVE A5,-*A0,W ;GO!
|
|||
|
MMFM SP,A0,A1,A2,A3,A4,A5
|
|||
|
JAUC OINIT
|
|||
|
*************************************************************************
|
|||
|
* *
|
|||
|
* ADDSUPP - ADD OBJECT TO A SUPPLEMENTAL LIST *
|
|||
|
* A0 = PTR TO OBJECT *
|
|||
|
* A1 = MEMORY LOCATION OF SUPPLEMENTAL LIST HEADER *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
;ADDSUPP
|
|||
|
; MOVE *A1(0),*A0(OSLINK),L ;LINK SLIST TO THIS BLOCK
|
|||
|
; MOVE A0,*A1,L ;NEW HEAD OF THE SLIST
|
|||
|
; RETS
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* DELSBOBJ - DELETE OBJECT FROM SUPPLEMENTAL BACKGROUND LIST *
|
|||
|
* A0 = PTR TO OBJECT *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
;DELSBOBJ
|
|||
|
; PUSH A1
|
|||
|
; MOVI BACKSLST,A1
|
|||
|
; CALLR DELSUPP
|
|||
|
; PULL A1
|
|||
|
; RETS
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* DELSUPP - DELETE OBJECT FROM THE SUPPLEMENTAL LIST *
|
|||
|
* A0 = PTR TO OBJECT *
|
|||
|
* A1 = MEMORY LOCATION OF SUPPLEMENTAL LIST HEADER *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
;DELSUPP
|
|||
|
; MMTM SP,A1,A2
|
|||
|
; MOVE A1,A2
|
|||
|
; MOVE *A1,A1,L ;SPECIAL CASE THE HEADER
|
|||
|
; JRNZ DELSCHK1
|
|||
|
; LOCKUP
|
|||
|
; JRUC DELSX
|
|||
|
;DELSCHK1
|
|||
|
; CMP A1,A0
|
|||
|
; JRNE DELSLUP
|
|||
|
; MOVE *A1(OSLINK),*A2(0),L ;LINK AROUND THIS GUY
|
|||
|
;DELSX
|
|||
|
; MMFM SP,A1,A2
|
|||
|
; RETS
|
|||
|
;
|
|||
|
;DELSLUP ;
|
|||
|
; MOVE A1,A2 ;SAVE PREVIOUS
|
|||
|
; MOVE *A1(OSLINK),A1,L ;SEARCHING FOR THE ELEMENT IN THE LIST
|
|||
|
; JRNZ DELSCHK2
|
|||
|
; LOCKUP
|
|||
|
; JRUC DELSX
|
|||
|
;DELSCHK2
|
|||
|
; CMP A1,A0
|
|||
|
; JRNE DELSLUP ;NOT FOUND KEEP LOOKING
|
|||
|
;
|
|||
|
; MOVE *A1(OSLINK),*A2(OSLINK),L ;LINK AROUND THIS GUY
|
|||
|
;
|
|||
|
; MMFM SP,A1,A2
|
|||
|
; RETS
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* ISSUPP - IS AN OBJECT ON A SUPPLEMENTAL LIST *
|
|||
|
* A0 = PTR TO OBJECT *
|
|||
|
* A1 = MEMORY LOCATION OF SUPPLEMENTAL LIST HEADER *
|
|||
|
* RETURNS: *
|
|||
|
* Z BIT SET = NOT ON *
|
|||
|
* Z BIT CLR = IS ON *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
;ISSUPP
|
|||
|
; PUSH A1
|
|||
|
; MOVE *A1,A1,L ;SPECIAL CASE THE HEADER
|
|||
|
; JREQ ISEND
|
|||
|
; CMP A1,A0
|
|||
|
; JRNE ISSEARCH
|
|||
|
;ISFOUND
|
|||
|
; MOVE A1,A1 ;SET Z BIT
|
|||
|
;ISEND
|
|||
|
; PULL A1
|
|||
|
; RETS
|
|||
|
;ISSEARCH
|
|||
|
; MOVE *A1(OSLINK),A1,L ;SEARCHING FOR THE ELEMENT IN THE LIST
|
|||
|
; JREQ ISEND ;ELEMENT DOES NOT EXIST
|
|||
|
; CMP A1,A0
|
|||
|
; JRNE ISSEARCH ;NOT FOUND KEEP LOOKING
|
|||
|
; JRUC ISFOUND ;FOUND RETURN
|
|||
|
;
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* ISSUPPID - IS AN OBJECT ON A SUPPLEMENTAL LIST(SEARCH BY OBJECT I.D.) *
|
|||
|
* A0 = OBJECT I.D. *
|
|||
|
* A1 = MEMORY LOCATION OF SUPPLEMENTAL LIST HEADER *
|
|||
|
* RETURNS: *
|
|||
|
* Z BIT SET = NOT ON *
|
|||
|
* A1 = ZERO *
|
|||
|
* Z BIT CLR = IS ON *
|
|||
|
* A1 = PTR TO OBJECT *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
;ISSUPPID
|
|||
|
; PUSH A2
|
|||
|
; MOVE *A1,A1,L ;SPECIAL CASE THE HEADER
|
|||
|
; JREQ ISENDID
|
|||
|
; MOVE *A1(OID),A2,W
|
|||
|
; CMP A2,A0
|
|||
|
; JRNE ISSRCHID
|
|||
|
;ISFNDID
|
|||
|
; MOVE A1,A1 ;SET Z BIT
|
|||
|
;ISENDID
|
|||
|
; PULL A2
|
|||
|
; RETS
|
|||
|
;ISSRCHID
|
|||
|
; MOVE *A1(OSLINK),A1,L ;SEARCHING FOR THE ELEMENT IN THE LIST
|
|||
|
; JREQ ISENDID ;ELEMENT DOES NOT EXIST
|
|||
|
; MOVE *A1(OID),A2,W
|
|||
|
; CMP A2,A0
|
|||
|
; JRNE ISSRCHID ;NOT FOUND KEEP LOOKING
|
|||
|
; JRUC ISFNDID ;FOUND RETURN
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* CNTSUPP - COUNT THE NUMBER OF OBJECTS ON GIVEN SUPPLEMENTAL LIST. *
|
|||
|
* A1 = SUPPLEMENTAL LIST *
|
|||
|
* RETURNS: *
|
|||
|
* A0 = OBJECT CNT *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
;CNTSUPP
|
|||
|
; PUSH A1
|
|||
|
; CLR A0
|
|||
|
; MOVE *A1,A1,L
|
|||
|
; JRZ CNTSUPPX
|
|||
|
;CNTSUPPL
|
|||
|
; INC A0
|
|||
|
; CMPI NOBJ,A0
|
|||
|
; JRHS CNTSUPPX ;WE'VE MAXED, SOMETHING IS WRONG
|
|||
|
; MOVE *A1(OSLINK),A1,L
|
|||
|
; JRNZ CNTSUPPL
|
|||
|
;CNTSUPPX
|
|||
|
; PULL A1
|
|||
|
; RETS
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* RANDOM - GENERATE A RANDOM NUMBER *
|
|||
|
* RETURNS: *
|
|||
|
* A0 = 32 BIT RANDOM # *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
RANDOM: PUSH A1
|
|||
|
MOVE @RAND,A0,L
|
|||
|
SLA 1,A0
|
|||
|
JRV RND2
|
|||
|
ORI 2,A0
|
|||
|
RND2: MOVE A0,@RAND,L
|
|||
|
CLR A1
|
|||
|
ADDC A1,A0 ;GET LAST BIT BACK TO MAKE 32
|
|||
|
MOVE @HCOUNT,A1
|
|||
|
RL A1,A0 ;RANDOM ROTATION
|
|||
|
MOVE A0,A0 ;SET STATUS BITS
|
|||
|
MMFM SP,A1
|
|||
|
RETS
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* RANDU - GENERATE A UNIFORMLY DISTRIBUTED RANDOM # BETWEEN 1 AND [A0] *
|
|||
|
* A0 = RANGE INPUT *
|
|||
|
* RETURNS: *
|
|||
|
* A0 = RANDOM # *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
RANDU: PUSH A1
|
|||
|
MOVE A0,A1
|
|||
|
CALLR RANDOM
|
|||
|
MPYU A1,A0
|
|||
|
INC A0
|
|||
|
MMFM SP,A1
|
|||
|
RETS
|
|||
|
*
|
|||
|
*GET SIGNED RANDOM # IN RANGE +/- A0
|
|||
|
*CALLING PARAMETERS: A0
|
|||
|
*RETURNS A0
|
|||
|
*
|
|||
|
SRAND:
|
|||
|
MMTM SP,A1
|
|||
|
MOVE A0,A1
|
|||
|
SLL 1,A0
|
|||
|
CALLA RANDU
|
|||
|
SUB A1,A0
|
|||
|
MMFM SP,A1
|
|||
|
RETS
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* RANGRAND - GENERATE A RANDOM NUMBER IN A GIVEN RANGE. *
|
|||
|
* B0 = LOWER BOUND *
|
|||
|
* B1 = UPPER BOUND *
|
|||
|
* RETURNS *
|
|||
|
* A0 = RANDOM # *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
RANGRAND
|
|||
|
PUSH A1
|
|||
|
PUSH B1
|
|||
|
SUB B0,B1 ;NORMALIZE THE RANGE
|
|||
|
MOVE B1,A0 ;SET RANGE FOR RANDU
|
|||
|
CALLR RANDU
|
|||
|
MOVE B0,A1
|
|||
|
ADD A1,A0
|
|||
|
PULL B1
|
|||
|
PULL A1
|
|||
|
RETS
|
|||
|
|
|||
|
*
|
|||
|
*RANDPER - RANDOM % ROUTINE
|
|||
|
*CALLING PARAMETERS:
|
|||
|
*A0=PROBABILITY OF EVENT (0-1000) P(A0=1000) = 1; P(A0=1) = 1/1000.
|
|||
|
*RETURNS CS IF PROBABILITY IS TRUE, CC FOR FALSE
|
|||
|
*RETURNS A0 = ACTUAL RANDOM # 0-999
|
|||
|
RANDPER:
|
|||
|
MMTM SP,A1,A2
|
|||
|
MOVE A0,A2
|
|||
|
CALLA RANDOM
|
|||
|
MOVI 1000,A1
|
|||
|
MPYU A1,A0
|
|||
|
CMP A2,A0
|
|||
|
MMFM SP,A1,A2
|
|||
|
RETS
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* FILLAREA - FILL A GIVEN SQUARE AREA ON THE SCREEN WITH A COLOR *
|
|||
|
* A1 = [COLOR,PALETTE] *
|
|||
|
* A3 = DAG OF AREA [YPOS,XPOS] *
|
|||
|
* A4 = [Y,X] SIZE OF AREA *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
FILLAREA
|
|||
|
MMTM SP,A1,A2,A4,A5
|
|||
|
JRUC AREACON
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* BLNKAREA - BLANK A GIVEN SQUARE AREA ON THE SCREEN *
|
|||
|
* A3 = DAG OF AREA [YPOS,XPOS] *
|
|||
|
* A4 = [Y,X] SIZE OF AREA *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
BLNKAREA
|
|||
|
MMTM SP,A1,A2,A4,A5
|
|||
|
CLR A1 ;CONSTANT 0:PALETTE 0
|
|||
|
AREACON
|
|||
|
MOVE A4,A2
|
|||
|
MOVI 2000000H,A4 ;SOMEWHERE IN IMAGE ROM
|
|||
|
MOVI DMACAL,A5
|
|||
|
CALLR DMAN
|
|||
|
MMFM SP,A1,A2,A4,A5
|
|||
|
RETS
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* PFRAME - GET NEXT FRAME FROM ANIMATION LIST *
|
|||
|
* A8 = POINTER TO OBJECT BLOCK *
|
|||
|
* A11 = POINTER TO NEXT FRAME IN THE ANIMATION LIST *
|
|||
|
* RETURN(S) *
|
|||
|
* A5 = TICKS FOR THIS FRAME *
|
|||
|
* C BIT SET(JXC) = END OF LIST WAS HIT *
|
|||
|
* N BIT SET(JXN) = SPECIAL FRAME ENCOUNTERED *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
;PFRAME MMTM SP,A1,A4
|
|||
|
; MOVE *A11+,A1,L ;LOAD NEXT FRAME
|
|||
|
; JRNE PFRAME1 ;NOT THE END OF THE LIST
|
|||
|
;
|
|||
|
; SETC ;SET CARRY FLAG
|
|||
|
; JRUC PFRAMEX
|
|||
|
;
|
|||
|
;PFRAME1
|
|||
|
; MOVE *A8(OFLAGS),A4,W
|
|||
|
; CALLA ANI ;SETUP NEW FRAME
|
|||
|
;PFRAME2
|
|||
|
; MOVE *A11+,A5,W ;LOAD SLEEP TICKS PER FRAME
|
|||
|
; CLRC
|
|||
|
;
|
|||
|
;PFRAMEX MMFM SP,A1,A4
|
|||
|
; RETS
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* OBJECT VELOCITY STOP ROUTINES *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
*
|
|||
|
*PSTOP - STOP AN OBJECT, A8:OBJECT BLOCK PTR
|
|||
|
PSTOP CALLR PSTOPX
|
|||
|
JRUC PSTOPY
|
|||
|
*
|
|||
|
*PSTOPX - CLEAR AN OBJECTS X VELOCITY, A8:OBJECT BLOCK PTR
|
|||
|
PSTOPX MMTM SP,A0,A1
|
|||
|
CLR A1
|
|||
|
MOVE A1,*A8(OXVEL),L
|
|||
|
; MOVE *A8(OSHAD),A0,L
|
|||
|
; JREQ PSTOPXX
|
|||
|
; MOVE A1,*A0(OXVEL),L ;STOP THE SHADOW
|
|||
|
;PSTOPXX
|
|||
|
MMFM SP,A0,A1
|
|||
|
RETS
|
|||
|
|
|||
|
*
|
|||
|
*PSTOPY - CLEAR AN OBJECTS Y VELOCITY, A8:OBJECT BLOCK PTR
|
|||
|
PSTOPY MMTM SP,A0,A1
|
|||
|
CLR A1
|
|||
|
MOVE A1,*A8(OYVEL),L
|
|||
|
; MOVE *A8(OSHAD),A0,L
|
|||
|
; JREQ PSTOPYX
|
|||
|
; MOVE A1,*A0(OYVEL),L ;STOP THE SHADOW
|
|||
|
;PSTOPYX
|
|||
|
MMFM SP,A0,A1
|
|||
|
RETS
|
|||
|
|
|||
|
*
|
|||
|
*YFLP - SET OBJECT Y-FLIP, A8:OBJECT BLOCK PTR
|
|||
|
YFLP MMTM SP,A1,A4
|
|||
|
MOVE *A8(OFLAGS),A4
|
|||
|
ORI M_FLIPH,A4
|
|||
|
JRUC STUFLAGS
|
|||
|
*
|
|||
|
*NOYFLP - CLEAR OBJECT Y-FLIP, A8:OBJECT BLOCK PTR
|
|||
|
NOYFLP MMTM SP,A1,A4
|
|||
|
MOVE *A8(OFLAGS),A4
|
|||
|
ANDNI M_FLIPH,A4
|
|||
|
STUFLAGS
|
|||
|
MOVE *A8(OIMG),A1,L ;GET THE CURRENT IMAGE POINTER
|
|||
|
CALLA ANI ;SETUP THE "NEW" IMAGE
|
|||
|
UNFLPD MMFM SP,A1,A4
|
|||
|
RETS
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* SYNCUP - SYNCHRONIZE WITH THE NEXT DISPLAY INTERRUPT, I.E. *
|
|||
|
* WAIT UNTIL THE NEXT INTERRUPT IS FINISHED BEFORE RETURNING *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
SYNCUP MOVE A0,-*SP,L
|
|||
|
CLR A0
|
|||
|
MOVE A0,@INTSYNC0,L ;CLEAR HALF SCREEN SYNC
|
|||
|
|
|||
|
SYNCUP1 MOVE @INTSYNC0,A0,L
|
|||
|
JREQ SYNCUP1 ;END HASN'T HIT YET
|
|||
|
MOVE *SP+,A0,L
|
|||
|
RETS
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* SYNCHALF - SYNCHRONIZE WITH THE HALF SCREEN INTERRUPT *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
SYNCHALF
|
|||
|
MMTM SP,A0,A1
|
|||
|
MOVI INTSYNC0,A1
|
|||
|
JRUC SYNCSD
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* SYNCFULL - SYNCHRONIZE WITH THE FULL SCREEN INTERRUPT *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
SYNCFULL
|
|||
|
MMTM SP,A0,A1
|
|||
|
MOVI INTSYNC1,A1
|
|||
|
|
|||
|
SYNCSD CLR A0
|
|||
|
MOVE A0,*A1,W ;CLEAR HALF SCREEN SYNC
|
|||
|
|
|||
|
SYNCSD1 MOVE *A1,A0,W
|
|||
|
JREQ SYNCSD1 ;END HASN'T HIT YET
|
|||
|
MMFM SP,A0,A1
|
|||
|
RETS
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* DTIME - USED TO DMA AN IMAGE *
|
|||
|
* A1 = [CONSTANT COLOR,PALETTE(STUFFED IN DTIME)] *
|
|||
|
* A3 = DAG [Y,X] *
|
|||
|
* A5 = [OFFSET,CONTROL] *
|
|||
|
* A14 = ADDRESS OF IMAGE HEADER *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
DTIME:
|
|||
|
MMTM SP,A0,A1
|
|||
|
MOVE *A14(ICMAP),A0,L ;GET THE PALETTE
|
|||
|
CALLA FINDPAL ;GET THE CORRECT COLOR MAP #
|
|||
|
JRNZ DTIME1 ;BR = PALETTE WAS FOUND
|
|||
|
CLR A0 ;DEFAULT TO FIXED PALETTE
|
|||
|
DTIME1
|
|||
|
MOVX A0,A1
|
|||
|
CALLA QDMA ;QUEUE THIS SUCKAH
|
|||
|
MMFM SP,A0,A1
|
|||
|
RETS
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* DMAN - MANUAL DMA, ALL REGS MUST BE SETUP UPON CALLING *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
DMAN JAUC QDMAN
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* DMAWAIT - WAIT ON THE DMA BUSY BIT TO CLEAR *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
DMAWAIT
|
|||
|
PUSH A0
|
|||
|
DMAWAITL
|
|||
|
MOVE @DMACTRL,A0,W ;DMA BUSY?
|
|||
|
JRN DMAWAITL ;BR = YES
|
|||
|
PULL A0
|
|||
|
RETS
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* DMAQWAIT - WAIT FOR DMA QUEUES TO EMPTY, THEN WAIT FOR DMA TO FINISH *
|
|||
|
* THE LAST ONE. TURN DISPLAYON OFF. *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
DMAQWAIT
|
|||
|
MMTM SP,A0,A1
|
|||
|
MOVE @DISPLAYON,A1
|
|||
|
CLR A0
|
|||
|
MOVE A0,@DISPLAYON,W ;MAKE SURE DISPLAY IS OFF
|
|||
|
DMAQWT1
|
|||
|
MOVE @TOPQ0CNT,A0,W
|
|||
|
JRNE DMAQWT1
|
|||
|
MOVE @TOPQ1CNT,A0,W
|
|||
|
JRNE DMAQWT1
|
|||
|
MOVE @BOTQ0CNT,A0,W
|
|||
|
JRNE DMAQWT1
|
|||
|
MOVE @BOTQ1CNT,A0,W
|
|||
|
JRNE DMAQWT1
|
|||
|
DMAQWT2
|
|||
|
MOVE B13,B13
|
|||
|
JRNZ DMAQWT2
|
|||
|
CALLR DMAWAIT
|
|||
|
MOVE A1,@DISPLAYON
|
|||
|
MMFM SP,A0,A1
|
|||
|
RETS
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
;* DMAQWAIT - WAIT FOR DMA QUEUES TO EMPTY, THEN WAIT FOR DMA TO FINISH *
|
|||
|
;* THE LAST ONE. *
|
|||
|
;DMAQWAIT
|
|||
|
; mmtm SP,A0,A1
|
|||
|
; movi 25000,A1
|
|||
|
;DMAQWT1
|
|||
|
; dsjs A1,QWTX
|
|||
|
; MOVE @TOPQ0CNT,A0,W
|
|||
|
; JRNE DMAQWT1
|
|||
|
; MOVE @TOPQ1CNT,A0,W
|
|||
|
; JRNE DMAQWT1
|
|||
|
; MOVE @BOTQ0CNT,A0,W
|
|||
|
; JRNE DMAQWT1
|
|||
|
; MOVE @BOTQ1CNT,A0,W
|
|||
|
; JRNE DMAQWT1
|
|||
|
; mmfm SP,A0,A1
|
|||
|
;DMAQWT2
|
|||
|
; MOVE B13,B13
|
|||
|
; JRZ DMAWAIT
|
|||
|
; JRUC DMAQWT2
|
|||
|
;QWTX:
|
|||
|
; mmfm SP,A0,A1
|
|||
|
; clr B13
|
|||
|
; rets
|
|||
|
**************************************************************************
|
|||
|
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* DMAHALT - HALT THE DMA *
|
|||
|
DMAHALT
|
|||
|
PUSH A0
|
|||
|
CLR A0
|
|||
|
MOVE A0,@DMACTRL,W ;HALT THE DMA
|
|||
|
PULL A0
|
|||
|
RETS
|
|||
|
**************************************************************************
|
|||
|
*
|
|||
|
*CMAPRS - RESET THE COLOR MAP SELECT
|
|||
|
CMAPRS CLR A0
|
|||
|
*CMAPSL - SELECT THE COLOR MAP(0-15 IN A0)
|
|||
|
CMAPSL MOVE A1,-*SP,L
|
|||
|
CALLA DMAWAIT
|
|||
|
MOVE A0,@CMAPSEL
|
|||
|
MOVE *SP+,A1,L
|
|||
|
RETS
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* CRINIT - COLOR RAM INITIALIZATION, FIRST CLEAR ALL COLOR RAM, THEN *
|
|||
|
* FILL WITH PALETTES. *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
CRINIT
|
|||
|
MMTM SP,A0,A1,A2,A6
|
|||
|
MOVI COLRAM,A1
|
|||
|
CLR A0
|
|||
|
MOVI 10000H,A6,L
|
|||
|
*CLEAR ALL COLOR PALETTES
|
|||
|
CRINIT1
|
|||
|
MOVE A0,*A1+,L ;STUFF TWO WORDS AT A TIME
|
|||
|
DSJS A6,CRINIT1
|
|||
|
|
|||
|
MMFM SP,A0,A1,A2,A6 ;<----
|
|||
|
RETS ;<----
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* CRLOAD - LOAD COLOR RAM FROM A ROM TABLE *
|
|||
|
* A1 = START OF ROM TABLE *
|
|||
|
* A2 = COLOR RAM START ADDRESS *
|
|||
|
* A6 = PALETTE COUNT *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
CRLOAD
|
|||
|
MMTM SP,A0,A1,A2
|
|||
|
CRLOAD1
|
|||
|
MOVE *A1+,A0,W ;GRAB FIRST COLOR FROM THIS TABLE
|
|||
|
JRN CRLOAD4 ;BR = NULL PALETTE
|
|||
|
CRLOAD3
|
|||
|
MOVE A0,*A2,W ;STUFF COLOR
|
|||
|
MOVE *A1+,A0,W ;GRAB NEXT COLOR FROM THIS TABLE
|
|||
|
JRN CRLOAD4 ;BR = NEXT PALETTE
|
|||
|
ADDK 16,A2 ;INC THIS WAY SO WE DON'T OVERRUN PALETTES
|
|||
|
JRUC CRLOAD3
|
|||
|
|
|||
|
CRLOAD4
|
|||
|
ADDI 1000H,A2 ;NEXT PALETTE
|
|||
|
SRL 12,A2
|
|||
|
SLL 12,A2 ;MASK OFF LOW BULLSHIT
|
|||
|
DSJ A6,CRLOAD1
|
|||
|
|
|||
|
MMFM SP,A0,A1,A2
|
|||
|
RETS
|
|||
|
|
|||
|
*
|
|||
|
*SCRCLR - CLEAR THE SCREEN WITH EUGENE
|
|||
|
*ONLY CALL WITH INTERRUPTS DISABLED AND THE DMA SHUT DOWN, OTHERWISE
|
|||
|
* USE CLR_SCRN
|
|||
|
SCRCLR CLR A0
|
|||
|
*SCRFIL - FILL SCREEN WITH A0
|
|||
|
SCRFIL:
|
|||
|
MMTM SP,A1,A2
|
|||
|
CLR A1
|
|||
|
MOVE A1,@CMAPSEL,W ;SELECT COLOR MAP 0
|
|||
|
MOVI SCREEN,A1,L
|
|||
|
MOVI (SCRNE-SCREEN)/32,A2,L
|
|||
|
SCRLP MOVE A0,*A1+,L
|
|||
|
DSJS A2,SCRLP
|
|||
|
MMFM SP,A1,A2
|
|||
|
RETS
|
|||
|
|
|||
|
*
|
|||
|
*LAST2CLR - CLEAR LAST TWO LINES OF BIT MAP(I.E. SET AUTO ERASE COLOR)
|
|||
|
LAST2CLR
|
|||
|
CLR A0
|
|||
|
*
|
|||
|
*LAST2FIL - FILL LAST TWO LINES OF BIT MAP
|
|||
|
*A0 = FILL COLOR
|
|||
|
LAST2FIL
|
|||
|
MOVE A0,@ERASELOC,W ;STUFF DA COLOR
|
|||
|
RETS
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* SETPPROC - SETUP TI'S PIXEL PROCESSING REGISTER'S (BFILE), TO MATCH *
|
|||
|
* THE ZUNIT SYSTEM. *
|
|||
|
* NOTE: IF YOU WANT TO DO ANY SPECIAL TRICKS, DON'T USE THIS. *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
SETPPROC
|
|||
|
PUSH A0
|
|||
|
MOVI OFFSETVAL,B4 ;SET UP OFFSET REGISTER
|
|||
|
MOVI 0,B8 ;SET BACKGROUND COLOR
|
|||
|
MOVI SCRN_PTCH,A0 ;GET SCREEN PITCH
|
|||
|
MOVE A0,B1
|
|||
|
MOVE A0,B3
|
|||
|
LMO A0,A0 ;CONVERT IN TEMPORARY REGISTER
|
|||
|
MOVE A0,@CONVSP ;MOVE TO CONVSP IO REGISTER
|
|||
|
MOVE A0,@CONVDP ;MOVE TO CONVDP IO REGISTER
|
|||
|
PULL A0
|
|||
|
RETS
|
|||
|
|
|||
|
|
|||
|
************ CLEAR SCREEN ROUTINE *********************
|
|||
|
CLR_SCRN:
|
|||
|
CLR A0
|
|||
|
MMTM SP,A1,A2,A3
|
|||
|
MOVE @DISPLAYON,A3,W
|
|||
|
; CLR A1
|
|||
|
; MOVE A1,@DISPLAYON,W
|
|||
|
CALLR DMAQWAIT ;WAIT ON DMA
|
|||
|
CLR A1
|
|||
|
MOVE A1,@CMAPSEL,W ;SELECT COLOR MAP 0
|
|||
|
MOVI SCREEN,A1,L
|
|||
|
MOVI ((SCRNE-2000H)-SCREEN)/32,A2,L
|
|||
|
CLRLP MOVE A0,*A1+,L
|
|||
|
DSJS A2,CLRLP
|
|||
|
MOVE A3,@DISPLAYON,W
|
|||
|
MMFM SP,A1,A2,A3
|
|||
|
RETS
|
|||
|
|
|||
|
;*COLLISION VECTOR LISTS
|
|||
|
;DUMCOLL .WORD 0
|
|||
|
; .LONG DUMRTSG
|
|||
|
|
|||
|
;DUMRTSG
|
|||
|
; CLR A0 ;DON'T STOP SCAN
|
|||
|
; CLRC ;AND DON'T DELETE
|
|||
|
; RETS
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* FRANIM - ANIMATION SCRIPT PROCESSOR *
|
|||
|
* A1 = COMMAND: 00 = PROCESS CURRENT FRAME. *
|
|||
|
* 01 = PROCESS TO END OF LIST. *
|
|||
|
* 04 = PROCESS CURRENT FRAME, NO SLEEP(TIME RETRN'D IN A0) *
|
|||
|
* A8 = PTR TO OBJECT BLOCK *
|
|||
|
* A9 = PTR TO CURRENT FRAME *
|
|||
|
* RETURN(S) *
|
|||
|
* CARRY SET IF END OF ANIMATION LIST WAS HIT *
|
|||
|
* A9 = POINTING TO NEXT FRAME, IF NOT AT END OF LIST *
|
|||
|
* NOTE: CALL WITH JSRP, IT SLEEPS *
|
|||
|
* *
|
|||
|
* ANIMATION SCRIPT FORMAT *
|
|||
|
* .LONG IMAGE_HEADER<-- IF = 0 END OF SCRIPT *
|
|||
|
* .WORD SLEEP_TIME <-- BITS 0 - 7 ARE THE SLEEP TIME. *
|
|||
|
* <-- BITS 8 -15 ARE THE FLAGS: *
|
|||
|
* BIT # FLAG *
|
|||
|
* ----- ---- *
|
|||
|
* 8 UNUSED *
|
|||
|
* 9 UNUSED *
|
|||
|
* 10 UNUSED *
|
|||
|
*BNEWPAL EQU 13 13 NEW PALETTE ADDRESS IS SPECIFIED *
|
|||
|
*BFLIPBIT EQU 14 14 NEW FLIP BITS ARE SPECIFIED *
|
|||
|
* FLAG HIERARCHY: 15 --> 8 *
|
|||
|
* OPTIONS SHOULD FOLLOW IN THIS ORDER. *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
FRANIM
|
|||
|
MMTM A12,A3,A4
|
|||
|
|
|||
|
*CHECK FOR BOGUS SCRIPT POINTER
|
|||
|
|
|||
|
.IF DEBUG
|
|||
|
CMPI 0FFC00000H,A9 ;FFC
|
|||
|
.ELSE
|
|||
|
CMPI 0FFE00000H,A9 ;FFE
|
|||
|
.ENDIF
|
|||
|
JRHS FRAN1
|
|||
|
|
|||
|
.IF DEBUG
|
|||
|
LOCKUP
|
|||
|
EINT
|
|||
|
.ELSE
|
|||
|
CALLERR 8,3 ;BOGUS IMAGE LOG
|
|||
|
.ENDIF
|
|||
|
JRUC FRANND
|
|||
|
FRAN1
|
|||
|
MOVE A1,A3 ;SAVE A1
|
|||
|
FRANL
|
|||
|
MOVE *A9+,A1,L ;GET THE FRAME
|
|||
|
JREQ FRANND ;BR = END WAS HIT
|
|||
|
|
|||
|
MOVE *A8(OFLAGS),A4,W ;NORMAL FLAGS TO BE USED
|
|||
|
MOVE *A9+,A0,W ;GET SLEEP TIME
|
|||
|
CMPI >100,A0 ;SPECIAL FUNCTION?
|
|||
|
JRLO FRAN2 ;NO, BLOW OUT OF HERE
|
|||
|
|
|||
|
MMTM SP,A2,A7
|
|||
|
|
|||
|
*CHECK FOR NEW FLIP
|
|||
|
BTST BFLIPBIT,A0 ;NEW FLIP?
|
|||
|
JREQ FRANNOBI ;NO DICE
|
|||
|
*ACTIVATE NEW FLIP
|
|||
|
MOVE *A9+,A2,W ;GET THE NEW FLIP FLAGS
|
|||
|
MOVE *A8(OFLAGS),A4,W ;GET THE OLD FLIP FLAGS
|
|||
|
ANDNI (M_FLIPV+M_FLIPH),A4 ;CLEAR THE CURRENT FLIP STATUS
|
|||
|
OR A2,A4 ;SET DESIRED BITS
|
|||
|
|
|||
|
*CHECK FOR NEW PALETTE
|
|||
|
FRANNOBI
|
|||
|
BTST BNEWPAL,A0 ;NEW PALETTE ?
|
|||
|
JREQ FRANNOPA ;NO WAY...
|
|||
|
|
|||
|
*ACTIVATE A NEW PALETTE
|
|||
|
MOVE A0,-*SP,W
|
|||
|
MOVE *A9+,A0,L ;GET THE PALETTE ADDRESS
|
|||
|
CALLA GETFPAL ;GET A COLOR MAP ASSIGNMENT
|
|||
|
JRZ FRANNOB0 ;NO PALETTE AVAILABLE
|
|||
|
MOVE A0,A7 ;SAVE HERE
|
|||
|
MOVE A8,A0
|
|||
|
CALLA DELPAL
|
|||
|
MOVE A7,*A8(OPAL),W ;STORE THE NEW PALETTE
|
|||
|
FRANNOB0
|
|||
|
MOVE *SP+,A0,W
|
|||
|
FRANNOPA
|
|||
|
MMFM SP,A2,A7
|
|||
|
SLL 24,A0
|
|||
|
SRL 24,A0 ;WIPE OFF THE SPECIAL FUNCTION BITS
|
|||
|
FRAN2
|
|||
|
CALLA ANI ;SETUP NEW ANIMATION
|
|||
|
|
|||
|
CMPI 4,A3 ;ONE FRAME, NO SLEEP?
|
|||
|
JREQ FRAN3 ;YES
|
|||
|
|
|||
|
MOVE A3,-*A12,W
|
|||
|
CALLA PRCSLP ;SLEEP THE PROPER TIME
|
|||
|
MOVE *A12+,A3,W
|
|||
|
JRNE FRANL ;BR = LOOP 'TIL END OF LIST
|
|||
|
FRAN3
|
|||
|
MOVE A3,A1 ;RESTORE A1
|
|||
|
CLRC ;CLEAR END FLAG
|
|||
|
MMFM A12,A3,A4
|
|||
|
RETP
|
|||
|
FRANND
|
|||
|
MOVE A3,A1 ;RESTORE A1
|
|||
|
SETC ;OTHERWISE, RETURN WITH END FLAG SET
|
|||
|
MMFM A12,A3,A4
|
|||
|
RETP
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* FRAMSKIP - SKIP TO THE NEXT FRAME OF AN ANIMATION SCRIPT *
|
|||
|
* A9 = SCRIPT PTR *
|
|||
|
* RETURNS: *
|
|||
|
* C CLR = A9 IS POINTING TO NEXT FRAME *
|
|||
|
* C SET = SCRIPT END WAS HIT, A9 POINTS TO NEXT WORD *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
;FRAMSKIP
|
|||
|
; MMTM SP,A1
|
|||
|
; MOVE *A9+,A1,L ;GET THE FRAME
|
|||
|
; JREQ FRAMSSC ;BR = END WAS HIT
|
|||
|
; MOVE *A9+,A1,W
|
|||
|
; SLL 16,A1 ;MOVE FLAGGIES UP HERE
|
|||
|
; SLL 1,A1
|
|||
|
; JRNC FRAMSNSP
|
|||
|
; ADDI 32+16+32,A9 ;PROCESS SPAWN
|
|||
|
;FRAMSNSP
|
|||
|
; SLL 1,A1
|
|||
|
; JRNC FRAMSNF
|
|||
|
; ADDK 16,A9 ;NEW FLAGS
|
|||
|
;FRAMSNF
|
|||
|
; SLL 1,A1
|
|||
|
; JRNC FRAMSNP
|
|||
|
; ADDK 32,A9 ;NEW PALETTE
|
|||
|
;FRAMSNP
|
|||
|
; SLL 1,A1
|
|||
|
; JRNC FRAMSNXZ
|
|||
|
; ADDK 16,A9 ;DELTA X & DELTA Z
|
|||
|
;FRAMSNXZ
|
|||
|
; SLL 1,A1
|
|||
|
; JRNC FRAMSNY
|
|||
|
; ADDK 16,A9 ;DELTA Y
|
|||
|
;FRAMSNY
|
|||
|
; CLRC
|
|||
|
; JRUC FRAMSND
|
|||
|
;FRAMSSC
|
|||
|
; SETC
|
|||
|
;FRAMSND
|
|||
|
; MMFM SP,A1
|
|||
|
; RETS
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* AUTOEOFF - TURN OFF AUTO ERASE *
|
|||
|
* NOTE: BE SURE THE DIRQ IS OFF BEFORE CALLING *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
AUTOEOFF
|
|||
|
PUSH A0
|
|||
|
PUSHST
|
|||
|
DINT
|
|||
|
MOVE @SYSCOPY,A0,W
|
|||
|
ORI AUTOERAS,A0 ;DISABLE AUTO ERASE
|
|||
|
MOVE A0,@SYSCOPY,W ;STORE EVERYWHERE I DID GO
|
|||
|
POPST
|
|||
|
MOVE A0,@SYSCTRL,W
|
|||
|
PULL A0
|
|||
|
RETS
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* AUTOEON - TURN ON AUTO ERASE *
|
|||
|
* NOTE: BE SURE THE DIRQ IS OFF BEFORE CALLING *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
AUTOEON
|
|||
|
PUSH A0
|
|||
|
MOVE @NOAUTOE,A0,W
|
|||
|
JRNE AUTOEON1 ;BR = DEBUGGER MAN SAYS NO AUTOERASE
|
|||
|
PUSHST
|
|||
|
DINT
|
|||
|
MOVE @SYSCOPY,A0,W
|
|||
|
ANDNI AUTOERAS,A0 ;AUTO ERASE IS ENABLED LOW
|
|||
|
MOVE A0,@SYSCOPY,W ;STORE EVERYWHERE I DID GO
|
|||
|
POPST
|
|||
|
MOVE A0,@SYSCTRL,W
|
|||
|
AUTOEON1
|
|||
|
PULL A0
|
|||
|
RETS
|
|||
|
|
|||
|
**************************************************************************
|
|||
|
* *
|
|||
|
* COPYOBJ - COPIES THE CONTENTS OF ONE OBJECT BLOCK TO THE OTHER. *
|
|||
|
* A0 = PTR TO DESTINATION BLOCK *
|
|||
|
* A8 = PTR TO SOURCE BLOCK *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
;COPYOBJ
|
|||
|
; MMTM SP,A0,A6,A8
|
|||
|
; MOVI OBSIZ,A6,W ;GET THE SIZE OF THE BLOCK IN WORDS
|
|||
|
; ADDI 64,A0
|
|||
|
; ADDI 64,A8 ;DON'T COPY THE LINKS
|
|||
|
; SRL 4,A6 ;DIVIDE BY 16
|
|||
|
; SUBK 4,A6 ;SUBTRACT TO ACCOUNT FOR THE 1ST TWO LINKS
|
|||
|
;COPYOBJL
|
|||
|
; MOVE *A8+,*A0+,W ;MOVE A WORD
|
|||
|
; DSJS A6,COPYOBJL
|
|||
|
; MMFM SP,A0,A6,A8
|
|||
|
; PUSH A6 ;KLUDGE TO ZERO MISPLACED LINKS
|
|||
|
; CLR A6
|
|||
|
; MOVE A6,*A0(OSHAD),L
|
|||
|
; PULL A6
|
|||
|
; RETS
|
|||
|
.END
|
|||
|
|
|||
|
|