nba-hangtime/DOC/UTIL.DOC

436 lines
14 KiB
Plaintext
Raw Permalink Normal View History

2021-04-06 14:43:14 -07:00
*
*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