narc/NARC/NARCLEQU.ASM

455 lines
21 KiB
NASM
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.

BLUE_P1 EQU 0
**************************************************************************
* *
* NARC (R) *
* *
* Copyright 1988 Williams Electronics Games Inc. *
* All Rights Reserved *
* *
**************************************************************************
*
.INCLUDE "NARCAUDN.ASM" ;AUDIT NAMES!
*
CHUTES EQU 3 ;MAXIMUM COIN CHUTES IN GAME.
*
ADV_BIT EQU 10H ;BIT OF ADVANCE BUTTON
ADV_HIGH EQU 100000H
STARTS_HIGH EQU 3000000H ;BOTH START BUTTONS
DOOR_BIT EQU 800H ;COIN DOOR MEMORY PROTECT
GERMAN_BIT EQU 8000H ;1 SAYS JUMPER HAS BEEN CUT
FRENCH_BIT EQU 4000H
JUMPERS EQU GERMAN_BIT+FRENCH_BIT
L_COIN_BIT EQU 1H
C_COIN_BIT EQU 4H
R_COIN_BIT EQU 2H
X_COIN_BIT EQU 80H
SLAM_BIT EQU 8H
*
*****************************
***************************** 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 400
SCREEN_PITCH EQU 512
**************************************************************************
* *
* COLOR STUFF *
* *
**************************************************************************
NARCS_GREY EQU 0C0C0H
NARCS_WHITE EQU 0FEFEH
NARCS_RED EQU 0F9F9H
NARCS_ORANGE EQU 0FAFAH
NARCS_YELLOW EQU 0FBFBH
NARCS_GREEN EQU 0FCFCH
NARCS_BLUE EQU 0FDFDH
NARCS_LF EQU 0F5F5H
NARCS_CYAN EQU 02C2CH
NARCS_DECAY EQU 0F1F1H
NARCS_RGOLD EQU 0F3F3H
NARCS_LASER EQU 0F4F4H
NARCS_BLUWH EQU 0F6F6H
NARCS_PINK EQU 0D9D9H
NARCS_SKY EQU 0FFFFH ;LAST COLOR IN NARCS IS "SKY" COLOR
NARCS_PURPLE EQU NARCS_SKY ;PURPLE FOR TEST MODE
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
*
* THESE ARE THE NUMBERS TO INDICATE WHICH COLOR TO
* SPRAY
*
SPRAY_NUM_MASK EQU 7 ;MASK FOR BELOW COLORS
*
SPRAY_BLACK EQU 0
SPRAY_BLUE EQU 1
SPRAY_GREEN EQU 2
SPRAY_CYAN EQU 3
SPRAY_RED EQU 4
SPRAY_VIOLET EQU 5
SPRAY_YELLOW EQU 6
SPRAY_WHITE EQU 7
**************************************************************************
* *
* DISPLAY HIGH SCORE TO DATE PARAMETERS *
* *
**************************************************************************
ALL_TIME_SPRAY_START EQU 0E0H ;USE 1/2 THE SCREEN
* ;(THIS IS BASE OF FIRST ROW)
* 12) <MARGIN_1> LED <MARGIN_2> SCORE
*
MARGIN_1 EQU 40H ;GOOD SIZE SPACE AFTER PAREN
MARGIN_2 EQU 0H ;(missing) ten mil helps this gap
*
LEFT_MARGIN_X EQU 22H ;ALL TIME MARGIN IN PIXELS
X_MARGIN_TODAYS EQU 1AH*STRUCT_X_UNIT ;TODAYS MARGIN IN STRUCTURE UNITS
TODAY_Y_SCALER EQU 48H ;SCALER FOR TODAYS Y SPACING
* ;6 BIT FRACTION
*
* HYPER FROM ALL TIME TO TOP 5 MESSAGES IN Y:
*
TODAYS_Y_HYPER EQU 78H*SCREEN_Y_UNIT
TOP5_Y_HYPER EQU 64H*SCREEN_Y_UNIT
ENTRY_Y_HYPER EQU 50H*SCREEN_Y_UNIT
INITIAL_SCROLL_DELAY EQU 060H
SCROLL_TOP1 EQU 026 ;SCROLL TO GET HIGHEST NARCS OFF SAVE BORDER ONLY
SCROLL_TOP2 EQU 5EH ;KEEP HIGHEST SCORE ON TOP
SCROLL_TOP3 EQU SCROLL_TOP1 ;DON'T PROTECT EXTRA RING
SCROLL_BOT EQU 174H ;
*
SCORE_BOX_Y EQU 7CH ;DETERMINES HEIGHT OF SCORE BOXES.
*
DIST_1_TO_TOP EQU 049H ;NUMBER OF VIDEO FRAMES TO SCORE 1 TO TOP
*
Y_TO_DRAW EQU 366 ;SCROLLED CURSOR MUST GET THIS HIGH
PLOT_MAX EQU Y_TO_DRAW*SCREEN_Y_UNIT
START_FADE EQU 8020H ;STORE THIS AT SCRL_FRC TO START A FADE
FINAL_SCROLL EQU 94H ;THIS GETS TODAY'S TABLE TO FIXED POINT!
**************************************************************************
* *
* 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 45 ;USE 45 AUDITS!
.IF (LAST_AUDIT+1)>N_AUDITS
XXX NOT ENOUGH RAM ALLOCATED FOR AUDITS!
.ENDIF
**************************************************************************
* *
* ADJUSTMENTS *
* *
**************************************************************************
ADJ_SIZE EQU C_LONG_SIZE
N_ADJUSTS EQU 28 ;28 NORMAL ADJUSTMENTS
.IF (LAST_ADJUST+1)>N_ADJUSTS
XXX NOT ENOUGH RAM ALLOCATED FOR ADJUSTMENTS!
.ENDIF
**************************************************************************
* *
* *
* CMOS STUFF FOR HSTD..........MOVE THIS TO SPECIAL EQUATE FILE *
* SOME DAY *
* *
* *
**************************************************************************
*
* 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
*
* PAGE 0 LOW HALF = AUDITS
* HIGH HALF = ADJUSTMENTS
*
* PAGE 1 LOW HALF = HSTD TODAY
*
* 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 20
*TODAYS_ORIGIN EQU ALL_TIME_ORIGIN+(HS_SIZE*37)
TODAYS_ORIGIN EQU CMOS
TODAYS_SELECT EQU CMOS_PAGE_SELECT_UNIT*0
TODAYS_VISIBLE EQU 5
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
*
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 *
* *
**************************************************************************
*
* LETTER COLORS
*
.IF BLUE_P1 ;IF ITS RELEASE BLUE IS PLAYER 1
P1_COLOR EQU 0FDFDH ;BLUE
P2_COLOR EQU 0F9F9H ;RED
*
P1_SCOL EQU SPRAY_BLUE
P2_SCOL EQU SPRAY_RED
.ELSE
P1_COLOR EQU 0F9F9H ;RED
P2_COLOR EQU 0FDFDH ;BLUE
*
P1_SCOL EQU SPRAY_RED
P2_SCOL EQU SPRAY_BLUE
.ENDIF
*
* 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 0BCH ;LINE 1 OF 3
CP_23 EQU 0D4H ;LINE 2 OF 3
CP_33 EQU 0ECH ;LINE 3 OF 3
CP_DELTA3 EQU CP_23-CP_13 ;AMOUNT TO STEP FROM LINE TO LINE
CP_12 EQU 0CCH ;LINE 1 OF 2
CP_22 EQU 0E4H ;LINE 2 OF 2
CP_11 EQU 0DAH ;SINGLE HELP LINE
CP_CX EQU 256 ;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 00000002H
SPACING07 EQU 1
*