total-carnage/LINK.EQU

367 lines
16 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.

.INCLUDE "AUDIT.EQU" ;AUDIT NAMES!
*
CHUTES EQU 4 ;MAXIMUM COIN CHUTES IN GAME.
*
*MISC BUTTON EQUATES
.IF YUNIT
UP_BITS EQU 1111H
DOWN_BITS EQU 2222H
BUTTONS EQU 640000H
.ELSE
UP_BITS EQU 101H
DOWN_BITS EQU 202H
BUTTONS EQU 0F0F0H
.ENDIF
*
*****************************
***************************** GET OFFICIAL PID FROM GEORGE ******************
MENU_PID EQU 0AC1H ;GET_MENU SLAVE
MDUN_PID EQU 0AC2H ;MENU SLAVE CHANGES TO THIS WHEN DONE
OPMES_PID EQU 0AC3H ;OPERATOR ENTER INITIALS
***************************** GET OFFICIAL PID FROM GEORGE ******************
*****************************
LONG_SIZE EQU 32
WORD_SIZE EQU 16
BYTE_SIZE EQU 8
C_LONG_SIZE EQU 64
C_WORD_SIZE EQU 32
C_BYTE_SIZE EQU 16
BYTE_MASK EQU 0FFH
WORD_MASK EQU 0FFFFH
SX_MASK EQU 0FFFFH
SY_MASK EQU 0FFFF0000H
**************************************************************************
* *
* ASCII STUFF *
* *
**************************************************************************
SPACE EQU 20H
EX_PT EQU 21H
LET_0 EQU 30H
LET_A EQU 41H
LET_Z EQU 5AH
UNDERSCORE EQU 5FH
FONT_SPACE EQU 7EH
FONT_RUB EQU FONT_SPACE+1
FONT_END EQU FONT_RUB+1
FONT_RQUOTE EQU FONT_END+1
FONT_EPOUND equ FONT_RQUOTE+1
FONT_CR equ FONT_EPOUND+1
ASCII_COMMA EQU 2CH
RIGHT_PAREN EQU 29H
ASCII_DQ EQU 22H
**************************************************************************
* *
* SCREEN STUFF *
* *
**************************************************************************
*
SCREEN_X_UNIT EQU 8 ;THESE ARE FOR PACKED LINEAR ADDRESS
SCREEN_Y_UNIT EQU 1000H ;FORMAT
*
STRUCT_X_UNIT EQU 1000H ;X UNIT IN SPR DATA STRUCTURE
STRUCT_Y_UNIT EQU 1000H ;Y UNIT IN SPR DATA STRUCTURE
*
TABLE_UNIT EQU 10000H ;16 BIT FRACTION IN HSTD COORDINATES
*
EVEN_X_MASK EQU 0FF8H ;X MASK TO EVEN PIXEL
X_MASK EQU 0FF8H ;MASK TO HOLD JUST X
Y_MASK EQU 1FF000H ;MASK TO HOLD JUST Y
*
Y_MAX EQU 256
SCREEN_PITCH EQU 400
**************************************************************************
* *
* COLOR STUFF *
* *
**************************************************************************
ROBO_GREY EQU 0101H ;[0E0H-223,0E0H-223]
ROBO_WHITE EQU 0202H ;[0E1H-223,0E1H-223]
ROBO_RED EQU 0303H ;[0E2H-223,0E2H-223]
ROBO_ORANGE EQU 0404H ;[0E3H-223,0E3H-223]
ROBO_YELLOW EQU 0505H ;[0E4H-223,0E4H-223]
ROBO_GREEN EQU 0606H ;[0E5H-223,0E5H-223]
ROBO_BLUE EQU 0707H ;[0E6H-223,0E6H-223]
ROBO_LF EQU 03E3EH
ROBO_CYAN EQU 0E0EH ;[0EDH-223,0EDH-223]
ROBO_DECAY EQU 03F3FH
ROBO_RGOLD EQU 0A0AH ;[0E9H-223,0E9H-223]
ROBO_LASER EQU 03E3EH
ROBO_LASER2 EQU 03F3FH
ROBO_BLUWH EQU 0C0CH ;[0EBH-223,0EBH-223]
ROBO_PINK EQU 0303H ;[0E2H-223,0E2H-223]
ROBO_SKY EQU 0D0DH ;[0ECH-223,0ECH-223] ;LAST COLOR IN ROBO IS "SKY" COLOR
ROBO_PURPLE EQU ROBO_SKY ;PURPLE FOR TEST MODE
ROBO_BLACK EQU 1414H ;BLACK AS COAL
LOG_PAL_SIZE EQU 12 ;SHIFT 12 BITS TO TURN NUMBER INTO OFFSET
* ;IN PALETTE MEMORY
*
MAX_PAL_MASK EQU 3FH ;THIS IS MASK FOR NUMBER OF PALETTES.
*
*
ALL_BLUE equ 1fh
ALL_GREEN equ 3e0h
ALL_RED equ 7c00h
ALL_PURPLE EQU ALL_RED+ALL_BLUE
LIGHT_PURPLE EQU 701CH
*
ONE_BLUE EQU 1
ONE_GREEN EQU 20H
ONE_RED EQU 400H
*
THIRD_GREEN EQU 140H ;1/3TH GREEN ON
THIRD_RED EQU 2800H ;1/3 RED ON
**************************************************************************
*
* AUDIT STRUCTURE
*
**************************************************************************
AUD_DATA EQU 0 ;THE COUNTER IS 4 BYTES STARTING AT ZERO
AUD_CKSUM EQU AUD_DATA+(4*C_BYTE_SIZE) ;CHECKSUM = 2 BYTES
AUD_SIZE EQU AUD_CKSUM+C_WORD_SIZE
AUD_BYTES_TO_CHECK EQU (AUD_SIZE/C_BYTE_SIZE)-2 ;# TO ADD FOR CHECKSUM
N_AUDITS EQU 55
.IF (LAST_AUDIT+1)>N_AUDITS
XXX NOT ENOUGH RAM ALLOCATED FOR AUDITS!
.ENDIF
**************************************************************************
*
* ADJUSTMENTS
*
**************************************************************************
ADJ_SIZE EQU C_LONG_SIZE
N_ADJUSTS EQU 24 ;# OF ADJUSTS
.IF (LAST_ADJUST+1)>N_ADJUSTS
XXX NOT ENOUGH RAM ALLOCATED FOR ADJUSTMENTS!
.ENDIF
**************************************************************************
* CMOS STUFF FOR HSTD
**************************************************************************
* High Score table (CMOS) entry data structure
NUM_INITS EQU 3 ;INITIALS IN EACH ENTRY..THIS MUST BE ODD
*
HS_SCORE EQU 0 ;LONG WORD.....8 DIGIT SCORE
HS_INITS EQU HS_SCORE+C_LONG_SIZE ;BYTE FOR FIRST INITIAL
HS_CKBYTE EQU HS_INITS+(NUM_INITS*C_BYTE_SIZE) ;BYTE FOR CHECKSUM
HS_SIZE EQU HS_CKBYTE+C_BYTE_SIZE ;SIZE OF STRUCTURE
HS_BYTES_TO_CHECK EQU (HS_SIZE/C_BYTE_SIZE)-1 ;# TO ADD FOR CHECKSUM
HS_SIZE_IN_WORDS EQU HS_SIZE/C_WORD_SIZE ;SIZE OF ENTRY IN WORDS
HS_SIZE_IN_BYTES EQU HS_SIZE/C_BYTE_SIZE ;SIZE OF ENTRY IN BYTES
HS_ROM_SIZE equ HS_SIZE/2 ;address size of rom entry
*
**************************************************************************
*
* A HIGH SCORE TABLE IS DEFINED IN ROM BY THE FOLLOWING *
* STRUCTURE (THERE ARE AT LEAST 2 TABLES....ALL TIME *
* AND "TODAYS") *
*
**************************************************************************
TB_POINTER EQU 0 ;LONG-POINTER TO BEGINNING OF TABLE
TB_COUNT EQU TB_POINTER+LONG_SIZE ;WORD....# IN THE TABLE.
TB_VISIBLE EQU TB_COUNT+WORD_SIZE ;WORD....NUMBER DISPLAYED
TB_PAGE_BITS EQU TB_VISIBLE+WORD_SIZE ;WORD....STATUS WORD FOR CMOS PAGE
TB_FACTORY EQU TB_PAGE_BITS+WORD_SIZE ;LONG....ROM STARTUP TABLE
TB_ERROR_COUNT EQU TB_FACTORY+LONG_SIZE ;WORD....NUM ERRORS TO RE-INIT
CMOS EQU 1400000H ;BASE OF CMOS
WPCMOS EQU 1404000H ;WRITE PROTECTED CMOS
WP_READ EQU 1C00010H ;PLACE TO READ WRITE PROTECT STATUS
SND_TALK EQU 1C00020H ;SOUND BOARD TALK BACK.
WP_BIT EQU 800H ;BIT WHERE WRITE ENABLE LIVES 0=NO WRITES
CMOS_PAGE_SELECT_BITS EQU 0C0H ;BITS 6 AND 7 OF SYSCTRL SELECT CMOS PAGE
CMOS_PAGE_SELECT_UNIT EQU 040H ;4 PAGES USE MULTIPLES OF THIS
**************************************************************************
* CMOS ALLOCATION
**************************************************************************
*
* 4 PAGES OF 2K
*
* EACH PAGE....LOW 1K = READ/WRITE
* HIGH 1K = WRITE PROTECTED Z-UNIT ONLY
* PROTECTION ON ALL 2K Y-UNIT
*
* PAGE 0 LOW HALF = HSTD TODAY
*
TODAYS_ORIGIN EQU CMOS
TODAYS_SELECT EQU CMOS_PAGE_SELECT_UNIT*0
TODAYS_VISIBLE EQU 10
*
* PAGE 1 LOW HALF = AUDITS
* HIGH HALF = ADJUSTMENTS
AUDIT_SELECT EQU CMOS_PAGE_SELECT_UNIT*1
HSR_SELECT EQU AUDIT_SELECT ;HIGH SCORE RESET COUNTER
COIN_SELECT EQU AUDIT_SELECT ;COINS AND CREDITS
*
ADJUST_SELECT EQU CMOS_PAGE_SELECT_UNIT*1
*
*
* PAGE 2 LOW HALF = HSTD ALL TIME
*
ALL_TIME_ORIGIN EQU CMOS
ALL_TIME_SELECT EQU CMOS_PAGE_SELECT_UNIT*2
ALL_TIME_VISIBLE EQU 10
*
* PAGE 3 DUMPS
*
DUMP_SELECT EQU CMOS_PAGE_SELECT_UNIT*3
DUMP_ORG EQU CMOS
DUMP_PTR EQU DUMP_ORG ;WORD....NUMBER OF ENTRIES!
DUMP_DATA EQU DUMP_PTR+C_WORD_SIZE ;DUMPS GO HERE!
*
* AUDIT PAGE AUDIT DATA AND CREDITS
*
AUDITORG EQU CMOS ;AUDITS LIVE HERE
CREDITS EQU AUDITORG+(N_AUDITS*AUD_SIZE) ;BYTE FOR CREDITS
CUNITS EQU CREDITS+C_BYTE_SIZE ;WORD
BUNITS EQU CUNITS+C_WORD_SIZE ;WORD
MINUNITS EQU BUNITS+C_WORD_SIZE ;WORD
COIN_CKSUM EQU MINUNITS+C_WORD_SIZE ;BYTE
HSR_C EQU COIN_CKSUM+C_BYTE_SIZE ;LONG = HIGH SCORE RESET COUNTER
*
* NEXT TWO ARE ASSUMED TO BE BACK TO BACK
*
HRESET_COUNTER EQU HSR_C+C_LONG_SIZE ;LONG = HIGH SCORE RESET COUNTER
HRESET_VERIFY EQU HRESET_COUNTER+C_LONG_SIZE ;LONG = 2ND COPY INVERTED.
COIN_CKSUM_START EQU CREDITS
COIN_CKSUM_SIZE EQU COIN_CKSUM-COIN_CKSUM_START ;SIZE OF REGION TO CHECK
COIN_CKSUM_BYTES EQU COIN_CKSUM_SIZE/C_BYTE_SIZE ;NUMBER OF BYTES TO ADD
CMESS_CHARS EQU 25 ;25 CHARS/LINE OF CUSTOM MESSAGE
CMESS_LINES EQU 3 ;3 LINES
CMESS_LINE_SIZE EQU CMESS_CHARS*C_BYTE_SIZE
CMESS_SIZE EQU CMESS_LINES*CMESS_LINE_SIZE
VALID_VALUE EQU 0EABCH ;STORED AT "VALID_CUSTOM" IF OK!
NAME_REV_SIZE EQU 30 ;NAME AND REV DATA
ADJUSTORG EQU WPCMOS ;FIRST ADJUSTMENT HERE
CUSTOM_MESSAGE EQU ADJUSTORG+(N_ADJUSTS*ADJ_SIZE)
VALID_CUSTOM EQU CUSTOM_MESSAGE+CMESS_SIZE ;WORD = EABC IF OK.
END_CK_REGION EQU VALID_CUSTOM+C_WORD_SIZE
ADJ_AREA_SIZE EQU END_CK_REGION-ADJUSTORG ;ADJUSTS+CUSTOM MESSAGE
ADJ_CKSUM EQU END_CK_REGION ;WORD CHECK FOR ADJUSTS
ADJ_BYTES_TO_CHECK EQU ADJ_AREA_SIZE/C_BYTE_SIZE ;NUMBER OF BYTES IN CHECKSUM.
NAME_REV EQU ADJ_CKSUM+C_WORD_SIZE
END_ADJ EQU NAME_REV+(NAME_REV_SIZE*C_BYTE_SIZE)
*
PSYCHO_BOX_NUMBER EQU ALL_TIME_VISIBLE-3 ;ON THE WAY TO 17 IF NO BOXES IS TIME FOR BACKGROUND
PSYCHO_FRACTION EQU 11 ;NUMBER OF SCROLLS BETWEEN NUMBERS FOR BACKGROUND
**************************************************************************
* *
* ENTER YOUR INITIALS PROCESS OFFSETS *
* *
**************************************************************************
*
* Y COORDINATE FOR ENTER YOUR INITIALS BLOCK:
*
;PLYR_Y EQU 308*TABLE_UNIT
;OP_Y EQU 307*TABLE_UNIT ;THIS IS FLAG TO INDICATE OPERATOR!
;*
;BUTTON_BITS EQU 0F0H ;4 "FIRE" BUTTONS
;*
;ENT_X_COR EQU PDATA ;LONG-X COORDINATE OF UPPER LEFT
;ENT_Y_COR EQU ENT_X_COR+LONG_SIZE ;LONG-Y COORDINATE OF UPPER LEFT
;ENT_INIT_SIZE EQU ENT_Y_COR+LONG_SIZE ;WORD-DISTANCE BETWEEN INITIALS
;ENT_COUNT EQU ENT_INIT_SIZE+WORD_SIZE ;WORD-NUMBER TO GET
;ENT_COUNTDOWN EQU ENT_COUNT+WORD_SIZE ;WORD-NUMBER LEFT TO GET
;ENT_CONST EQU ENT_COUNTDOWN+WORD_SIZE ;WORD-CONSTANT FOR COLOR
;ENT_FONT EQU ENT_CONST+WORD_SIZE ;LONG CHARACTER FONT SET
;ENT_STICK EQU ENT_FONT+LONG_SIZE ;WORD SHIFT COUNT FOR JOYSTICK
;ENT_STRUCT_END EQU ENT_STICK+WORD_SIZE ;END OF PARAMETER AREA
;*
;ENT_STRUCT_SIZE EQU ENT_STRUCT_END-PDATA ;SIZE OF STRUCTURE
;ENT_STRUCT_IN_WORDS EQU ENT_STRUCT_SIZE/WORD_SIZE
;*
;ENT_OLIST EQU ENT_STRUCT_END ;LONG.....MY OBJECTS
;ENT_INIT_PTR EQU ENT_OLIST+LONG_SIZE ;LONG-PLACE TO PUT NEXT INITIAL
;ENT_FROB_OBJ EQU ENT_INIT_PTR+LONG_SIZE ;LONG-OBJECT OF FROB LETTER
;ENT_FROB_ASCII EQU ENT_FROB_OBJ+LONG_SIZE ;WORD-ASCII FOR WHERE FROB IS
;ENT_HAND_OBJ EQU ENT_FROB_ASCII+WORD_SIZE ;LONG-PART 2 OF HAND
;ENT_SPRAY_PROC EQU ENT_HAND_OBJ+LONG_SIZE ;LONG-OUR SPRAYER PROCESS
;ENT_LAST_BUTTON EQU ENT_SPRAY_PROC+LONG_SIZE ;WORD-IMAGE OF LAST BUTTON
;ENT_Y_OFFSET EQU ENT_LAST_BUTTON+WORD_SIZE ;LONG-Y-OFFSET FOR HAND ANIMATION
;ENT_ANI_TIMER EQU ENT_Y_OFFSET+LONG_SIZE ;WORD - ANIMATION TIMER
;ENT_PRESSED EQU ENT_ANI_TIMER+WORD_SIZE ;WORD - BIT OF BUTTON HE'S HOLDING
;ENT_TIMEOUT EQU ENT_PRESSED+WORD_SIZE ;WORD - PASSED TO US AT TIMEOUT
;ENT_DATA EQU ENT_TIMEOUT+WORD_SIZE ;LONG - POINTER TO ROM DATA
*
*
* THE FOLLOWING VARIABLES ARE DEFINED AT THE
* END OF THE ROM IMAGE FOR THE 2 ROUTINES. THESE
* ARE NOT COPIED INTO THE PROCESS AREA.
*
;LET_PID EQU ENT_STRUCT_END-PDATA ;WORD-THIS IS IN ROM STRUCTURE
;* ;BUT *NOT* STORED IN PROCESS
;LET_HAND_PTR EQU LET_PID+WORD_SIZE ;LONG-POINTER TO STFOBJ FOR HAND
;LET_SCRIPT EQU LET_HAND_PTR+LONG_SIZE ;LONG - SPRAY SCRIPT FOR SETUP
;LET_ERASE EQU LET_SCRIPT+LONG_SIZE ;LONG - SCRIPT TO SET ERASE BRUSH
;LET_WIDTH EQU LET_ERASE+LONG_SIZE ;LONG - X DISTANCE FOR EACH SPRAY
;LET_MESS EQU LET_WIDTH+LONG_SIZE ;LONG - MESSAGE STRING FOR PLAYER
*
* FOR COIN PAGE MESSAGES.....WE HAVE UP TO 3 LINES ABOVE
* THE CREDITS MESSAGE.
*
CP_13 EQU 101-35 ;LINE 1 OF 3
CP_23 EQU 120-35 ;LINE 2 OF 3
CP_33 EQU 139-35 ;LINE 3 OF 3
CP_DELTA3 EQU CP_23-CP_13 ;AMOUNT TO STEP FROM LINE TO LINE
CP_12 EQU 130-35 ;LINE 1 OF 2
CP_22 EQU 150-35 ;LINE 2 OF 2
CP_11 EQU 130-35 ;SINGLE HELP LINE
CP_CX EQU 200 ;CENTER X FOR CREDITS SCREEN STUFF!
**************************************************************************
* *
* MESS_MAC *
* *
* THIS MACRO IS USED TO SETUP AN "L_MESS" MESSAGE. *
* THE MESSAGE FOLLOWS THE MACRO. *
* ZERO TERMINATES THE MESSAGE. *
* ANOTHER ZERO TERMINATES L_MESS. *
* *
* A "1" AFTER THE TERMINATING "0" WILL CAUSE *
* L_MESS TO PRINT OUT ANOTHER MESSAGE. *
* *
**************************************************************************
MESS_MAC $MACRO FONT,SPACING,X,Y,COLOR,ROUTINE,SLEEP
.LONG :FONT:
.LONG :SPACING:
.LONG (:Y:*10000H)+:X:
.LONG :COLOR:
.LONG :ROUTINE:
; .LONG :SLEEP:
$END
SPACING20 EQU 2
SPACING07 EQU 1
****