nba-hangtime/DOC/UTIL.DOC

436 lines
14 KiB
Plaintext
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.

*
*P R O C E S S R O U T I N E S
*
E X I S T P FIND IF A PROCESS EXISTS,(OTHER THAN CALLING PROCESS)
A0 = PROCID (16 BITS)
A1 = MASK (16 BITS) MASK BITS OF ZERO ARE DONT CARES
RETURNS: Z BIT SET = NO MATCH, A0 = 0
Z BIT CLR = MATCH, A0 = PTR TO PROCESS
USAGE: MOVI PROCID,A0
MOVI MASK,A1
CALLA EXISTP
G E T A 8 - 1 1 GET A PRESERVED REGISTER FROM A SLEEPING PROCESS
GETA8,GETA9,GETA10,GETA11
A0 = PTR TO SLEEPING PROCESS
USAGE: MOVE SLEEPING PROCESS,A0
CALLA GETA8
G E T P R C CREATE A PROCESS
A1 = ID,A7=PC,A8,A9,A10,A11 PASSED PARAMETERS
A13 = CURRENT PROCESS
A0 IS RETURNED POINTING TO CREATED PROCESS
USAGE: MOVI PROCESS ID,A1
MOVI STARTING ADDRESS,A7
CALLA GETPRC
K I L L KILL PROCESS
A0 = POINTS TO PROCESS TO KILL, A13= CURRENT PROCESS
IF PROCESS NOT PRESENT, CAUSES ERROR
TO KILL YOURSELF SUCIDE MUST BE USED,
IF YOU ATTEMPT TO KILL YOURSELF IT WILL JUST RETURN
USAGE: MOVE PROCESS POINTER,A0
CALLA KILL
K I L A L L KILL A CLASS OF PROCESSES
A0 = PROCID (16 BITS)
A1 = MASK (16 BITS)
MASK BITS OF ZERO ARE DONT CARES
WILL NOT KILL CALLING PROCESS (A13)
USAGE: MOVI PROCID,A0
MOVI MASK,A1
CALLA KILALL
P R C S L P PROCESS SLEEP
A0 = SLEEP TIME
TOS IS WAKEUP ADDR
USAGE: MOVI SLEEPTIME X 16 MSEC.,A0
CALLA PRCSLP
S U C I D E PROCESS SUICIDE
A13 = PROCESS
USAGE: CALLA SUCIDE
P I N I T PROCESS LIST INITIALIZE
A13 RETURNED POINTING TO ACTIVE LIST (CRPROC)
USAGE: CALLA PINIT
X F E R P R O C TRANSFER CONTROL OF AN EXISTING PROCESS
A0 = PTR OF PROCESS TO BE XFER'D
A1 = NEW I.D.
A7 = WAKE UP
A8 - A11 = PASSED TO THE XFER'D PROC
USAGE: MOVE PROCESS PTR,A0
MOVI NEW PROCESS ID,A1
MOVI STARTING ADDR,A7
CALLA XFERPROC
P U T A 8 - 1 1 PUT A REGISTER(A8-A11) INTO A SLEEPING PROCESS
PUTA8,PUTA9,PUTA10,PUTA11
A0 = PTR TO SLEEPING PROCESS
USAGE: MOVE SLEEPING PROCESS,A0
CALLA PUTA8
G P A L O B J - GET A PALETTE AND AN OBJECT BLOCK
A14 = PTR TO PLAYER INITIALIZATION TABLE.
RETURNS:
A0 = PTR TO OBJECT
Z BIT SET = FAILURE,A0 = 0
S H V E L C P Y - COPY X, Z VELOCITIES TO SHADOW (IF ANY)
A8=OBJECT
A8(OSHAD)=SHADOW OR ZERO IF NONE
S H V E L F L P - COPY SHADOW VELOCITY AND FLIP HIM ACCORDING TO X VEL
A8 = OBJECT
A3 = OXVEL
F L P - FLIP OBJECT
A8 = OBJECT, N = SIGN OF XVEL
X Z C H K - CHECK X-Z SEEK RANGE
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
G E T B O T Y - GET BOTTOM Y OF AN OBJECT
A8 = OBJECT BLOCK PTR
RETURN(S)
A1 = 16 BIT BOTTOM Y IN LSW (STATUS SET ACCORDINGLY)
S E T Y P O S - SETUP OBJECTS Y POSITION SO HES ON THE GROUND
A0 = OBJECT BLOCK
A D D S U P P - ADD OBJECT TO A SUPPLEMENTAL LIST
A0 = PTR TO OBJECT
A1 = MEMORY LOCATION OF SUPPLEMENTAL LIST HEADER
D E L S U P P - DELETE OBJECT FROM THE SUPPLEMENTAL LIST
A0 = PTR TO OBJECT
A1 = MEMORY LOCATION OF SUPPLEMENTAL LIST HEADER
I S S U P P - 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
I S S U P P I D - 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, A1 = ZERO OBJECT NOT FOUND
Z BIT CLR, A1 = PTR TO OBJECT FOUND
R A N D O M - GET A RANDOM NUMBER
RETURNS: A0 = 32 BIT RANDOM #
R A N D U - GET A UNIFORMLY DISTRIBUTED RANDOM # BETWEEN 1 AND [A0]
A0 = RANGE INPUT
RETURNS: A0 = RANDOM #
S R A N D - GET SIGNED RANDOM # IN RANGE +/- A0
CALLING PARAMETERS: A0
RETURNS: A0 = RANDOM #
R A N G R A N D - GENERATE A RANDOM NUMBER IN A GIVEN RANGE.
B0 = LOWER BOUND
B1 = UPPER BOUND
RETURNS: A0 = RANDOM #
R A N D P E R - RANDOM % ROUTINE
A0=PROBABILITY OF EVENT (0-1000) P(A0=1000) = 1; P(A0=1) = 1/1000.
RETURNS: CS IF PROBABILITY IS TRUE, CC FOR FALSE
A0 = RANDOM # 0-999
F I L L A R E A - FILL A AREA WITH A COLOR
A1 = [COLOR,PALETTE]
A3 = DAG OF AREA [YPOS,XPOS]
A4 = [Y,X] SIZE OF AREA
B L N K A R E A - BLANK A GIVEN SQUARE AREA ON THE SCREEN
A3 = DAG OF AREA [YPOS,XPOS]
A4 = [Y,X] SIZE OF AREA
D E L E T E _ O B J E C T _ P A L L E T E - DELETE OBJECT AND PALETTE
A8 = OBJECT TO DELETE
P S T O P - STOP ALL PLAYER AND SHADOW VELOCITIES
A8 = OBJECT TO STOP
Y F L P - SET OBJECT Y-FLIP,
A8 = OBJECT BLOCK PTR
N O Y F L P - CLEAR OBJECT Y-FLIP
A8 = OBJECT BLOCK PTR
D T I M E - DMA AN IMAGE
A1 = [CONSTANT COLOR,PALETTE(STUFFED IN DTIME)]
A3 = DAG [Y,X]
A5 = [OFFSET,CONTROL]
A14 = ADDRESS OF IMAGE HEADER
D M A W A I T - WAIT ON THE DMA BUSY BIT TO CLEAR
D M A Q W A I T - WAIT FOR DMA QUEUES TO EMPTY, DMA TO FINISH
D M A H A L T - HALT THE DMA
S C R C L R - CLEAR THE SCREEN SLOW
ONLY CALL WITH INTERRUPTS DISABLED AND THE DMA SHUT DOWN
OTHERWISE USE CLR_SCRN
C L R _ S C R N - CLEAR THE SCREEN SLOW WAITING FOR DMA
F R A N I M - ANIMATION SCRIPT PROCESSOR
A1 = COMMAND: 00 = PROCESS CURRENT FRAME.
01 = PROCESS TO END OF LIST.
02 = PROCESS X # OF FRAMES OR TO END. A1 = [# FRMS,CMD]
03 = INFINITELY LOOP ON THE LIST.
04 = PROCESS CURRENT FRAME, NO SLEEP(TIME RETRN'D IN A0)
A8 = PTR TO OBJECT BLOCK
A9 = PTR TO CURRENT FRAME
RETURNS CARRY SET IF END OF ANIMATION LIST WAS HIT
A9 = POINTING TO NEXT FRAME, IF NOT AT END OF LIST
SETS EPARENT OF THE SPAWNED CHILD POINTING TO THIS PROCESS
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
11 DELTA Y WORD IS PRESENT
12 PACKED DELTAS FOR X&Z PRESENT
13 NEW PALETTE ADDRESS IS SPECIFIED
14 NEW FLIP BITS ARE SPECIFIED
15 SPAWN PROCESS W/OFFSETS
.WORD XOFF,YOFF,PROCID
.LONG PROCADDR
FLAG HIERARCHY: 15 --> 8
OPTIONS SHOULD FOLLOW IN THIS ORDER.
F R A M S K I P - SKIP TO THE NEXT FRAME OF AN ANIMATION SCRIPT
A9 = SCRIPT PTR
RETURNS: CARRY CLR = A9 IS POINTING TO NEXT FRAME
CARRY SET = SCRIPT END WAS HIT, A9 POINTS TO NEXT WORD
A U T O E O F F - TURN OFF AUTO ERASE
A U T O E O N - TURN ON AUTO ERASE
C O P Y O B J - COPIES THE CONTENTS OF ONE OBJECT BLOCK TO THE OTHER.
A0 = PTR TO DESTINATION BLOCK
A8 = PTR TO SOURCE BLOCK
*
* P A L E T T E S T U F F
*
D E L P A L - DELETE AN OBJECTS PALETTE
A0 = PTR TO OBJECT
F I N D P A L - 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)
C L R P A L - CLEAR OUT PALETTE ALLOCATION RAM
C L R F P A L - CLEAR ONLY FOREGROUND PALETTES
C L R B P A L - CLEAR ONLY BACKGROUND PALETTES
G E T F P A L - GET A FOREGROUND PALETTE
A0 = PALETTE ID (ADDRESS OF DATA)
RETURNS: A0 = COLOR MAP ALLOCATED (0000-0F0F)
RETURNS: EQ IF NO PALETTE FREE
G E T B P A L - GET A BACKGROUND PALETTE
A0 = PALETTE ID (ADDRESS OF DATA)
RETURNS: A0 = COLOR MAP ALLOCATED (0000-0F0F)
RETURNS: EQ IF NO PALETTE FREE
F R E E P A L - FREE A PALETTE
A0=PALETTE # (0-NUMPAL) TO FREE
U N G E T P A L - Clears out a palettes allocation count
A0=PALETTE # (0-NUMPAL) TO UNALLOCATE
P A L T R A N S - 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
P A L S E T - SETUP PALETTE TRANSFER
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.
*
*O B J E C T S T U F F
*
S H A D S T - START A SHADOW
A8 = OBJECT TO SHADOW
RETURNS: A0 = PTR TO SHADOW, OR 0 IF NO SHADOW WAS CREATED
S H A D U P D - SHADOW UPDATE CALLS SHADCPY IF SHADOW EXISTS
A8 = OBJECT
S H A D C P Y - COPIES OSAG,OIMG,OXVEL,OYVEL,OXVAL
ADJUSTS OSIZE,OFSET,OYVAL,OXCLIP
A0 = PTR TO SHADOW OBJECT
A8 = PTR TO OBJECT BEING SHADOWED
D F R M G R N D - CALC DISTANCE FROM GROUND
A8=OBJECT
A1 RET WITH HT ABOVE GROUND
Y Z S O R T - SORT OBJECT LIST IN Z:Y PRIORITY
S C R T S T - TEST IF OBJECT ON SCREEN
A8 = OBJECT
RETURNS EQ IF ON SCREEN
C L I P O B J - CLIP AN OBJECT
A2 = BOTTOM:RIGHT CLIP (RELATIVE TO CURRENT SIZE)
A3 = TOP:LEFT CLIP (RELATIVE TO CURRENT SIZE)
A8 = OBJECT BLOCK
RETURNS: NEW SAG,H,W,OFFSET,XCLIP IN OBJECT STRUCTURE
ALL REGISTERS PRESERVED
O I N I T - INITIALIZE OBJECT LISTS
G E T O B J - GET A FREE OBJECT BLOCK FOR USE
RETURNS: A0 = PTR TO OBJECT BLOCK
IF NO BLOCKS WERE AVAILABLE THEN THE Z FLAG IS SET
F R E E O B J - PUT AN OBJECT BLOCK BACK ON THE FREE LIST
A0 = POINTER TO OBJECT BLOCK
F R E E S O B J - FREE OBJECT AND SHADOW (IF ANY)
A0= POINTER TO OBJECT
I N S B 2 O B J - INSERT BACKGROUND 2 OBJECT (INTO SORTED LIST)
A0 = OBJECT TO BE INSERTED
I N S B O B J - INSERT BACKGROUND 1 OBJECT (INTO SORTED LIST)
A0 = OBJECT TO BE INSERTED
I N S S O B J - INSERT SHADOWED OBJECT (INTO SORTED OBJECT LIST)
A0 = OBJECT TO BE INSERTED
I N S O B J - INSERT OBJECT (INTO SORTED OBJECT LIST)
A0 = OBJECT TO BE INSERTED
K I L B 2 O B J - KILL OBJECT CLASS ON BAK2LST
K I L B O B J - KILL OBJECT CLASS ON BAKLST
K I L O B J - KILL OBJECT CLASS ON OBJLST
A0 = OID (16 BITS)
A1 = MASK (16 BITS) MASK BITS OF ZERO ARE DONT CARES
E X I S T O B J - DOES AN OBJECT FROM A CERTAIN CLASS EXIST?
A0 = OID
A1 = MASK(0'S DON'T CARE)
RETURNS:
Z BIT SET = NO OBJECT, A0 = 0
Z BIT CLR = NO OBJECT, A0 = PTR TO OBJECT
I S O B J - IS AN OBJECT ON THE OBJECT LIST?
A0 = PTR TO OBJECT
RETURNS:
Z BIT SET = NO OBJECT, A0 = 0
Z BIT CLR = NO OBJECT, A0 = PTR TO OBJECT
I S F R E E - IS AN OBJECT ON THE FREE LIST?
A0 = PTR TO OBJECT
RETURNS:
Z BIT SET = NO OBJECT, A0 = 0
Z BIT CLR = NO OBJECT, A0 = PTR TO OBJECT
M A K O B J - MAKE AN OBJECT CALLS GETOBJ,STFOBJ,INSOBJ
A14 = POINTS TO THE INITIALIZATION TABLE
RETURN(S)
A0 = OBJECT BLOCK PTR
G A N I S A G - ADJUST OBJECT FOR IMAGE ANI PNT. AND FLIP
A0 = PTR TO OBJECT BLOCK
A2 = NEW OYVAL
A3 = NEW OXVAL
A4 = NEW FLAGS
RETURNS
A2 = ADJUSTED OYVAL
A3 = ADJUSTED OXVAL
S T R T O B J - START AN OBJECT USING AN INITIALIZATION TABLE
A0 = PTR TO THE IMAGE
A14 = PTR TO INIT. TABLE
START OBJECT INIT. TABLE FORMAT
.WORD X,Y,Z
.LONG OIMG,OZSIZ,OCVECT
.WORD OFLAGS,OID
RETURNS A14 = POINTING TO WORD AFTER INIT TAB
S T F O B J - START AN OBJECT USING AN INITIALIZATION TABLE
A0 = PTR TO THE IMAGE
A14 = PTR TO INIT. TABLE
INIT. TABLE FORMAT:
.LONG OXVEL,OYVEL,OXVAL,XYVAL
.WORD OZVEL,OZPOS
.LONG OIMG,OZSIZ,OCVECT
.WORD OFLAGS,OID
.LONG OBLIPIMG
RETURNS
A14 = POINTING TO WORD AFTER INIT TAB
G S A G O F - GET SAG FOR OBJECT - ADJUSTS SAG FOR FLIP
A1=PTR TO IMAGE HEADER (OIMG)
A4=OBJECT FLAGS
RETURNS:
A2=RETURNED WITH NEW OSIZE
A3=RETURNED WITH NEW SAG
A4=RETURNED WITH NEW OFFSET:OFLAGS
A N I - ANIMATION SUBROUTINE
A1=NEW IMAGE POINTER
A4=NEW OFLAGS
A8=OBJECT STRUCTURE POINTER TO BE UPDATED
G E T A N I X Y - GET X,Y POSITIONS OF AN OBJECTS ANIMATION PT.
A8 = OBLOCK PTR.
RETURNS
A2 = APOINT OYVAL, 32 BITS
A3 = APOINT OXVAL, 32 BITS
G A N I O F - GET ANIMATION OFFSET
A1=OIMG, A2=H:W, A4=OFLAGS
OUTPUT:
A6=X ANIMATION OFFSET X 64K
A7=Y ANIMATION OFFSET X 64K