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