;************************************ ;* * ;* PAC-MAN * ;* * ;* Developed for Atari Inc. by * ;* Roklan Corp. This Information * ;* is confidential and is not for * ;* sale or distribution. * ;* * ;* * ;* * ;* 10/03/82 * ;* * ;* DISK VERSION * ;* * ;* REVISION 3.0 * ;* * ;************************************ ; INCLUDE D2:SYSTEXT.ASM ; LIST I ; ;******* ZERO PAGE VARIABLES ****** ; ORG $0018 ; DLICNT DS 1 ;DISPLAY LIST INT. COUNT OPTION DS 1 ;OPTION MODE FLAG NUMPLY DS 1 ;NUMBER OF PLAYERS DIFOPT DS 1 ;DIFFICULTY OPTION RSTRTF DS 1 ;RESTART FLAG ATCLOK DS 1 ;ATTRACT COUNTDOWN CLOCK ATTIMR DS 1 ;ATTRACT MODE TIMER ATSEQU DS 1 ;ATTRACT MODE SEQUENCE # ; GMOVRF DS 1 ;GAME OVER FLAG READYF DS 1 ;READY FLAG INTROF DS 1 ;INTRO FLAG SWAPPF DS 1 ;SWAP PLAYER FLAG RESETF DS 1 ;RESET FLAG RESETT DS 1 ;RESET TIMER RRFLAG DS 1 ;RERACK FLAG RRSEQU DS 1 ;RERACK SEQUENCE # RRTIMR DS 1 ;RERACK TIMER RRFLCT DS 1 ;RERACK FLASH COUNT TEMLOC DS 1 ;TEMPORARY STORAGE PLYNUM DS 1 ;PLAYER # 0=1 1=2 XPACP1 DS 1 ;EXTRA PACMAN PLAYER 1 XPACP2 DS 1 ;EXTRA PACMAN PLAYER 2 BPACP1 DS 1 ;BONUS PACMAN PLAYER 1 BPACP2 DS 1 ;BONUS PACMAN PLAYER 2 MAZCT1 DS 1 ;MAZE COUNT PLAYER 1 MAZCT2 DS 1 ;MAZE COUNT PLAYER 2 BIGDT1 DS 1 ;BIG DOT STATUS #1 BIGDT2 DS 1 ;BIG DOT STATUS #2 DTCTL1 DS 1 ;DOTS EATEN CTR LSB #1 DTCTL2 DS 1 ;DOTS EATEN CTR LSB #2 DTCTM1 DS 1 ;DOTS EATEN CTR MSB #1 DTCTM2 DS 1 ;DOTS EATEN CTR MSB #2 SCNSC1 DS 2 ;SCREEN SCORE 1 ADDRESS SCNSC2 DS 2 ;SCREEN SCORE 2 ADDRESS PIXGET DS 2 ;P/M PIX GET ADDRESS PIXPUT DS 2 ;P/M PIX PUT ADDRESS PACCLR DS 1 ;ATTRACT PACMAN COLOR ; ORG $0043 ; FRUTP1 DS 1 ;FRUIT COUNTER #1 FRUTP2 DS 1 ;FRUIT COUNTER #2 BCOUNT DS 1 ;BOUNCE TIMER COUNT SAVCNS DS 1 ;SAVE CONSOL DATA TUNLOC DS 2 ;USED FOR TUNNEL LOGIC ; ORG $005A M1DELY DS 1 ;MONSTER 1 DELAY M2DELY DS 1 ;MONSTER 2 DELAY M3DELY DS 1 ;MONSTER 3 DELAY M4DELY DS 1 ;MONSTER 4 DELAY ACOLR1 DS 1 ;ATTRACT COLOR 1 - $3A ACOLR2 DS 1 ;ATTRACT COLOR 2 - $44 ACOLR3 DS 1 ;ATTRACT COLOR 3 - $2A ACOLR4 DS 1 ;ATTRACT COLOR 4 - $DA INTCNT DS 1 ;INTERMISSION COUNTER INTCLK DS 1 ;INTERMISSION CLOCK ORG $0080 ; PACSCN DS 2 ;PACMAN SCREEN MEM ADDR PACBYT DS 1 ;PACMAN BYTE COUNTER PVSAVE DS 1 ;PACMAN VPOS SAVE PHSAVE DS 1 ;PACMAN HPOS SAVE M1VPOS DS 1 ;MONSTER 1 VERTICAL POSIT M2VPOS DS 1 ;MONSTER 2 VERTICAL POSIT M3VPOS DS 1 ;MONSTER 3 VERTICAL POSIT M4VPOS DS 1 ;MONSTER 4 VERTICAL POSIT PMVPOS DS 1 ;PACMAN VERTICAL POSITION M1HPOS DS 1 ;MONSTER 1 HORIZ POSITION M2HPOS DS 1 ;MONSTER 2 HORIZ POSITION M3HPOS DS 1 ;MONSTER 3 HORIZ POSITION M4HPOS DS 1 ;MONSTER 4 HORIZ POSITION PMHPOS DS 1 ;PACMAN HORIZONTAL POSIT M1DIRT DS 1 ;MONSTER 1 DIRECTION M2DIRT DS 1 ;MONSTER 2 DIRECTION M3DIRT DS 1 ;MONSTER 3 DIRECTION M4DIRT DS 1 ;MONSTER 4 DIRECTION PMODIR DS 1 ;PACMAN OLD DIRECTION SCOREX DS 6 ;PLAYER SCORE FOR TEXT CARRYB DS 1 ;CARRY BIT FOR ABOVE PAUSEF DS 1 ;PAUSE FLAG WHINEY DS 1 ;CHASE WHINE DELTA FRUTMR DS 2 ;FRUIT TIMER (10 SECS) FRUFLG DS 1 ;FRUIT DISPLAY FLAG FRUCLR DS 1 ;FRUIT COLOR FRSCRF DS 1 ;FRUIT SCORE FLAG FRSCRT DS 1 ;FRUIT SCORE TIMER NOTCNT DS 1 ;NOTE COUNT FOR TUNES VSAVER DS 1 ;VERTICAL POSIT SAVE HSAVER DS 1 ;HORIZONTAL POSIT SAVE PACMAP DS 1 ;PACMAN VERT MAP COUNTER PACCNT DS 1 ;PACMAN MOTION COUNT PACADV DS 1 ;PACMAN ADVANCE-TURNING PACDLY DS 1 ;PACMAN DELAY-EATING DOTS PMSTAT DS 1 ;PACMAN STATUS PMSEQU DS 1 ;PACMAN SEQUENCE (MOUTH) PMNDIR DS 1 ;PACMAN NEW DIRECTION CHASET DS 1 ;CHASE TIMER MSTILL DS 1 ;MONSTERS STILL FLAG MSKIRT DS 1 ;MONSTER SKIRT FLAG M1SPSQ DS 1 ;MONSTER 1 SPEED SEQUENCE M2SPSQ DS 1 ;MONSTER 2 SPEED SEQUENCE M3SPSQ DS 1 ;MONSTER 3 SPEED SEQUENCE M4SPSQ DS 1 ;MONSTER 4 SPEED SEQUENCE PMSPSQ DS 1 ;PACMAN SPEED SEQUENCE M1SPCT DS 1 ;MONSTER 1 SPEED COUNT M2SPCT DS 1 ;MONSTER 2 SPEED COUNT M3SPCT DS 1 ;MONSTER 3 SPEED COUNT M4SPCT DS 1 ;MONSTER 4 SPEED COUNT PMSPCT DS 1 ;PACMAN SPEED COUNT M1PIDX DS 1 ;MONSTER 1 PATTERN INDEX M2PIDX DS 1 ;MONSTER 2 PATTERN INDEX M3PIDX DS 1 ;MONSTER 3 PATTERN INDEX M4PIDX DS 1 ;MONSTER 4 PATTERN INDEX M1PCNT DS 1 ;MONSTER 1 PATTERN COUNT M2PCNT DS 1 ;MONSTER 2 PATTERN COUNT M3PCNT DS 1 ;MONSTER 3 PATTERN COUNT M4PCNT DS 1 ;MONSTER 4 PATTERN COUNT M1THPS DS 1 ;MONSTER 1 TARGET HPOS M2THPS DS 1 ;MONSTER 2 TARGET HPOS M3THPS DS 1 ;MONSTER 3 TARGET HPOS M4THPS DS 1 ;MONSTER 4 TARGET HPOS M1TVPS DS 1 ;MONSTER 1 TARGET VPOS M2TVPS DS 1 ;MONSTER 2 TARGET VPOS M3TVPS DS 1 ;MONSTER 3 TARGET VPOS M4TVPS DS 1 ;MONSTER 4 TARGET VPOS M1TIMR DS 1 ;MONSTER 1 TIMER M2TIMR DS 1 ;MONSTER 2 TIMER M3TIMR DS 1 ;MONSTER 3 TIMER M4TIMR DS 1 ;MONSTER 4 TIMER M1STAT DS 1 ;MONSTER 1 STATUS M2STAT DS 1 ;MONSTER 2 STATUS M3STAT DS 1 ;MONSTER 3 STATUS M4STAT DS 1 ;MONSTER 4 STATUS M1SSEQ DS 1 ;MONSTER 1 START SEQUENCE M2SSEQ DS 1 ;MONSTER 2 START SEQUENCE M3SSEQ DS 1 ;MONSTER 3 START SEQUENCE M4SSEQ DS 1 ;MONSTER 4 START SEQUENCE M1VDIR DS 1 ;MONSTER 1 VERT CHOICE M2VDIR DS 1 ;MONSTER 2 VERT CHOICE M3VDIR DS 1 ;MONSTER 3 VERT CHOICE M4VDIR DS 1 ;MONSTER 4 VERT CHOICE M1HDIR DS 1 ;MONSTER 1 HORZ CHOICE M2HDIR DS 1 ;MONSTER 2 HORZ CHOICE M3HDIR DS 1 ;MONSTER 3 HORZ CHOICE M4HDIR DS 1 ;MONSTER 4 HORZ CHOICE VCHASF DS 1 ;CHASE FREQ VCHASD DS 1 ;DIRECTION 1=INC 2=DEC VCHASS DS 1 ;CHASE SOUND START VFLITF DS 1 ;FLIGHT FREQ VFLITD DS 1 ;DIRECTION SAME VFLITV DS 1 ;FLIGHT VOLUME VFLITS DS 1 ;FLIGHT SOUND START VFREEZ DS 1 ;FREEZE FLAG VGLPC1 DS 1 ;GULP COUNT1 VGLPC2 DS 1 ;GULP COUNT2 GULPED DS 1 ;LAST MONSTER EATEN GLPCNT DS 1 ;GULP COUNT FIZZLE DS 1 ;FIZZLE FLAG 1=FIZL FIZPTR DS 1 ;FIZZLE ADDR POINTER FIZTIM DS 1 ;FIZZLE TIMER VFIZST DS 1 ;FIZZLE STATUS VFIZSQ DS 1 ;FIZZLE SEQUENCE # VFIZBS DS 1 ;FIZZLE FREQ BASE VFIZFQ DS 1 ;FIZZLE CURRENT FREQ VFIZCT DS 1 ;FIZZLE COUNTER TWEETR DS 1 ;TWEET SOUND FLAG TWEETF DS 1 ;TWEET SOUND FREQ EATERF DS 1 ;EAT DOT SOUND FLAG EATERC DS 1 ;EAT DOT SOUND COUNT EATERT DS 1 ;EAT DOT TOGGLE GOBBLD DS 1 ;GOBBLE DIRCTN (FRUITS) GOBBLF DS 1 ;GOBBLE FREQUENCY BLINKT DS 1 ;BLINK TIMER FLSHUP DS 1 ;FLASH 1UP 2UP TIMER FLASHT DS 1 ;FLASH TIMER FLASHC DS 1 ;FLASH COUNT FLITMR DS 1 ;FLIGHT TIMER TUNMSK DS 1 ;TUNNEL BIT MASK TUNCNT DS 1 ;TUNNEL ITERATION COUNT ; EJECT ; ORG $0600 ; PACBUF DS 16 ; PACMAN IMAGE BUFFER MONBUF DS 16 ; MONSTER IMAGE BUFFER ; INTRDL EQU $0680;INTERMISSION DL INTMOD EQU $06C0;INTERMISSION MODE INTSEQ EQU $06C1;INTERMISSION SEQ ; ; ;**** SYSTEM VARIABLES **** ; BDELAY EQU 1 ;BOUNCE DELAY FDELAY EQU $FF;FRUIT TIMER VALUE ADELAY EQU $30;ATTRACT TIMER DELAY ; GAMMEM EQU $0800; GAME MEMORY ; PACMAZ EQU GAMMEM+$0C00 P1SAVE EQU GAMMEM+$1000 P2SAVE EQU GAMMEM+$1400 OPTCHR EQU GAMMEM+$1800 OPTSCN EQU GAMMEM+$1C00 PMADDR EQU GAMMEM+$2000 TEXT EQU GAMMEM+$2000 PATSCN EQU GAMMEM+$2800 AMCSET EQU GAMMEM+$2C00 ; EJECT ; ORG $3FFD ; JMP INIT ; INCLUDE D2:PACDAT1.ASM ; EJECT ; INIT LDX #9 INITL1 LDA HISCTX,X STA TEXT+$0F,X DEX BPL INITL1 LDA #0 LDX #$27 INITL2 STA DLICNT,X DEX BPL INITL2 LDX #$7F INIPZL STA $80,X DEX BPL INIPZL ; INC OPTION LDX RTCLOK+2 DEX STX ATCLOK ; ; RELOCATE OPTION CHAR SET ; LDX #0 OCLOOP LDA PACTTL,X STA OPTCHR+8,X INX BNE OCLOOP ; ; BUILD ATTRACT MODE CHAR SET ; ANCHRL LDA CHRORG,X STA AMCSET,X LDA CHRORG+$100,X STA AMCSET+$100,X INX BNE ANCHRL LDX #$1F ANCDTL LDA ATCHRS,X STA AMCSET+$18,X DEX BPL ANCDTL ; ; ENABLE KEYSCAN & SET VBI VECTOR ; PACINI SEI LDA POKMSK ORA #$40 STA POKMSK STA IRQEN CLI LDY #LOW VBLANK LDX #HIGH VBLANK LDA #7 STA SKCTL JSR SETVBV;GO SET VBLANK VECTOR LDA #$C0;ENABLE DLI AND VBI STA NMIEN LDA #$3E STA SDMCTL;ENABLE P/M GRAPHICS LDA #$3 STA GRACTL LDA #HIGH PMADDR STA PMBASE LDA #LOW INIT STA DOSVEC LDA #HIGH INIT STA DOSVEC+1 LDA #LOW INITAD STA DOSINI LDA #HIGH INITAD STA DOSINI+1 ; REINIT LDA #0;NEW GAME VECTOR LDX #$1F REINLP STA GMOVRF,X DEX BPL REINLP TXS JSR CLRAUD ; ; NOW INITIALIZE PLAYER SCREENS ; JSR P1INIT JSR SAVEP1 JSR SAVEP2 ; LDA OPTION BNE LOOP ; PACGAM LDA RTCLOK+2 PACGML CMP RTCLOK+2 BEQ PACGML LDA #LOW DLIST STA SDLSTL STA DLISTL LDA #HIGH DLIST STA SDLSTH STA DLISTH LDA #LOW DLIV; DLI VECTOR STA VDSLST LDA #HIGH DLIV STA VDSLST+1 LDA #$11 STA GPRIOR;LET MISSILES USE COLPF3 SETPAC JSR SETUP JSR NEWGAM LDA NUMPLY BEQ P1SCIN JSR SET2PL JMP GODOIT P1SCIN JSR SET1PL GODOIT LDA #2 STA RSTRTF ; LOOP LDA RRSEQU CMP #3 BNE GOLOOP JSR INTMIS JSR SETUP INC RRSEQU GOLOOP LDX #3 LOOPLP LDA ACOLOR,X EOR COLRSH;ATTRACT COLORS THAT ARE AND DRKMSK;SWITCHED WITH DLI'S STA ACOLR1,X DEX BPL LOOPLP LDA OPTION BNE PCTRIG LDA KEYDEL BNE IGNORK LDA CH; TEST FOR SPACE BAR PAUSE CMP #$21 BNE IGNORK LDA PAUSEF BEQ FLIPON LDA #0 BEQ STFLIP FLIPON LDA #1 STFLIP STA PAUSEF NOFLIP LDA #$FF STA CH IGNORK LDA GMOVRF BEQ GAMCNS LDA ATTIMR;IF GAME OVER, TIME OUT BNE PCTRIG;AND GO TO OPTION SCREEN LDA #4 BNE PCEXT1 PCTRIG LDA #$FF STA CH LDA STRIG0 BEQ CSTART LDA STRIG1;TEST TRIGGER START BEQ CSTART GAMCNS LDA CONSOL CMP #7; NO BUTTONS PRESSED BEQ LOOP CNSSWT STA SAVCNS LDX #BDELAY STX BCOUNT CLOOP1 ORA CONSOL LDX BCOUNT;DEBOUNCE LOGIC BNE CLOOP1 CMP SAVCNS BNE GAMCNS CLOOP2 CMP CONSOL BEQ CLOOP2 LDA SAVCNS CMP #6 BEQ CSTART LDX ATSEQU BEQ CPROPT LDA #0 STA ATSEQU LDA #4 BNE PCEXT1 CPROPT LDX OPTION;IF OPTION SCREEN CPX #3; THEN CHANGE PARAMS BCC PCEXIT PRESSW CMP #3 BEQ COPTON CMP #5 BEQ CSELEC JMP LOOP CSTART LDA #0 STA GMOVRF;START FUNCTION-NEW GAME STA OPTION STA ATSEQU LDA #1 STA RSTRTF JMP REINIT CSELEC LDA NUMPLY BNE PCNSE1;PROCESS SELECT CHANGES LDA #1 BNE PCNSE2 PCNSE1 LDA #0 PCNSE2 STA NUMPLY PCEXIT LDA #3 PCEXT1 STA OPTION STA ATRACT LDA #7 STA ATCLOK JMP LOOP COPTON LDA DIFOPT CMP #2 BCS PCNOP1;PROCESS OPTION CHANGES INC DIFOPT BNE PCEXIT PCNOP1 CMP #$0C BEQ PCNOP2 INC DIFOPT INC DIFOPT BNE PCEXIT PCNOP2 LDA #0 STA DIFOPT BEQ PCEXIT ; ; DISPLAY LIST INTERRUPT VECTOR ; DLIV PHA TXA PHA LDX DLICNT;DLI COUNT BNE DLI2ND LDA #HIGH PACCHR STA WSYNC STA CHBASE BNE DLIXIT DLI2ND CPX #1 BNE DLI3RD LDA ACOLR4;-$DA PLAYER 1-2 MSG LDX ACOLR1;-$3A LT ORANGE COLOR STA WSYNC STA COLPF1 STX COLPF2 BNE DLIXIT DLI3RD CPX #2 BNE DLI4TH LDA FRUCLR; FRUIT COLOR EOR COLRSH AND DRKMSK STA WSYNC STA COLPF1 BNE DLIXIT DLI4TH CPX #3 BNE DLI5TH LDA ACOLR2 STA WSYNC STA COLPF1 BNE DLIXIT DLI5TH CPX #4 BNE LSTDLI LDA ACOLR3;YELLOW COLOR LDX ACOLR4 STA WSYNC STX COLPF0 STA COLPF3 BNE DLIXIT LSTDLI LDX #3 LDA #0 DLICLP STA COLPM0,X DEX BPL DLICLP STA COLPF3 DLIXIT INC DLICNT PLA TAX PLA RTI ; ; DLI VECTOR FOR OPT & TITLE SCREENS ; OPDLIV PHA TXA PHA TYA PHA LDX DLICNT BNE OPDLI1 LDY ACOLR2 LDA ACOLR1 LDX #HIGH OPTCHR STA WSYNC STX CHBASE STA COLPF2 STY COLPF1 JMP OPDLIX OPDLI1 LDA OCINDX,X STA WSYNC STA CHBASE OPDLIX INC DLICNT PLA TAY PLA TAX PLA RTI ; ; VERTICAL BLANK INTERRUPT VECTOR ; VBLANK LDA #0 STA DLICNT DEC BCOUNT JSR VBSUBS LDA ATSEQU BNE VBEXIT LDA VFREEZ BNE VBEXIT JSR TUNNEL VBEXIT JMP XITVBV; EXIT VECTOR ; OPTTTL LDA #0 LDX #7 CHRDWR STA HPOSP0,X STA AUDF1,X DEX BPL CHRDWR LDA #LOW ODLIST STA SDLSTL STA DLISTL LDA #HIGH ODLIST STA SDLSTH STA DLISTH LDA #LOW OPDLIV STA VDSLST LDA #HIGH OPDLIV STA VDSLST+1 OCOLRS LDY #3 OCLRLP LDA OCOLOR,Y STA COLOR0,Y DEY BPL OCLRLP INITAD RTS ; SET1PL LDX #6 LDA #0 S1PLL1 STA TEXT+$20,X STA TEXT+$47,X STA TEXT+$2A,X DEX BPL S1PLL1 SETXPL JSR FLS1ON LDA #$10 STA TEXT+$2E STA TEXT+$2F RTS ; SET2PL LDX #6 LDA #0 S2PLL1 STA TEXT+$2A,X STA TEXT+$47,X DEX BPL S2PLL1 JSR FLS2ON LDA #$10 STA TEXT+$4B STA TEXT+$4C BNE SETXPL ; EJECT INCLUDE D1:PAC1.ASM EJECT INCLUDE D1:PAC2.ASM EJECT INCLUDE D1:PAC3.ASM EJECT INCLUDE D1:PAC4.ASM EJECT INCLUDE D2:PACDAT2.ASM EJECT ; ORG $7400 ; INCLUDE D2:PACDAT3.ASM ; END INIT ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ