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) LED 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 *