3518 lines
93 KiB
NASM
3518 lines
93 KiB
NASM
.MLIB "TROGMACS.LIB"
|
||
.FILE 'TROG.ASM'
|
||
.TITLE " <<< T R O G -- V1.0 GEORGE N. PETRO 6/5/89 >>>"
|
||
.WIDTH 132
|
||
.OPTION B,D,L,T
|
||
.MNOLIST
|
||
|
||
**************************************************************************
|
||
* *
|
||
* T R O G *
|
||
* ------- *
|
||
* *
|
||
* STARTED: 6/5/89 (INTERNATIONAL DUX DAY) *
|
||
* RELEASED: *
|
||
* 1.00 6/20/90 FINAL VERSION OF ORIGINAL TROG *
|
||
* 2.00 6/27/90 FIXED NASTY DINO SPACE BUG *
|
||
* 3.00 7/9/90 A FEW CORRECTIONS *
|
||
* *
|
||
*------------------------------------------------------------------------*
|
||
* *
|
||
* P A C - T R O G *
|
||
* ------- ------- *
|
||
* *
|
||
* STARTED: 7/10/90 *
|
||
* RELEASED: *
|
||
* PA6 9/27/90 PROTO PAC-TROG 10 DOMESTIC 10 ABROAD. *
|
||
* LA1 1/14/91 MANY CHANGES BEFORE PRODUCTION *
|
||
* LA2 2/6/91 FIRST TO BE MASS PRODUCED *
|
||
* LA3 2/14/91 HAPPY VALENTINES DAY! *
|
||
* *
|
||
*------------------------------------------------------------------------*
|
||
* *
|
||
* DESIGN: GEORGE N. PETRO & JACK E. HAEGER *
|
||
* *
|
||
* ARTWORK, *
|
||
* ANIMATIONS, *
|
||
* CLAY SCULPTING: JACK E. HAEGER *
|
||
* *
|
||
* GAME PROGRAM: GEORGE N. PETRO *
|
||
* J. KURT MAHAN *
|
||
* *
|
||
* HARDWARE: MARK LOFFREDO *
|
||
* GLENN SHIPP *
|
||
* CARY MEDNICK *
|
||
* *
|
||
* *
|
||
* COPYRIGHT (C) 1990 MIDWAY MANUFACTURING COMPANY, *
|
||
* MANUFACTURERS OF BALLY/MIDWAY AMUSEMENT GAMES. *
|
||
* ALL RIGHTS RESERVED. *
|
||
* *
|
||
**************************************************************************
|
||
|
||
|
||
* GET THE SYSTEM STUFF
|
||
.INCLUDE "MPROCEQU.ASM" ;MPROC equates
|
||
.INCLUDE "DISPEQU.ASM" ;Display processor equates
|
||
.INCLUDE "GSPINC.ASM" ;GSP assembler equates
|
||
.INCLUDE "SYSINC.ASM" ;Zunit system equates
|
||
.INCLUDE "TROGEQU.ASM"
|
||
.INCLUDE "TROGSEQU.ASM"
|
||
.INCLUDE "IMGTBL.GLO"
|
||
.INCLUDE "STRING.H"
|
||
.INCLUDE "TROGAUDN.ASM"
|
||
.INCLUDE "TROGDIP.ASM"
|
||
|
||
.DEF POWERUP, MAIN_INIT
|
||
.DEF SETUP, GPLAYD, GPLAYNUM, WIPEOUT, PLAYER_DELETE, PLAYER
|
||
.DEF GAME_OVER, WAVE_END, PNAME_TAB, SWITCH_ESCAPE
|
||
.DEF PNAME15_TAB, CHAMPM_SND, SUFFIX_S, SUFFIX_NULL
|
||
.DEF INC_PLAYER_TIMERS, CLR_PDINOCNT, ATSTRT, CLR_PEXTRAS
|
||
.DEF POWERRET, WARMSET, PCMOSRET, CLSCRACH, EXEC_LP
|
||
.DEF CLRALLPD, EXECLED, IRQLED, SINTRAM, HSINTRAM, WDOGRAM
|
||
.DEF DIPINIT, WAVE_PLAYERS, WDOGDIS, WDISTAB, WAIT_WAVE_END
|
||
.DEF INC_PCONSECUTIVE, STUFF_PLASTWIN, PLAYER_RESTART
|
||
.DEF WAVE_START, GAME_INTRO, GRAMINIT, GAME_DIFFICULTY
|
||
.DEF SLEEP_SWITCHX, INITDATA, IDATAEND, IDATALEN, PLAYER_CLR
|
||
.DEF ALLOW_CONTINUE
|
||
|
||
.REF STORY_MODE, INIT_HSHOLD, EMPTY_HSHOLD, ADD_HSHOLD
|
||
.REF TOMOVE, CONSMOVE, GETMOVE, PJOY
|
||
.REF PDRAW, COLL_START, ATTRACT_MODE, COLOR_START
|
||
.REF DINO_START, EGG_START, ATT_MODE_GAME_OVER
|
||
.REF UPDSL, OUTSCR, WIPE_FROM_MID
|
||
.REF CWINDOW, SCOREHILITE, CLR_DRONE
|
||
.REF CLRBGND, BGND_UD1, BGND_UD2, BAKMODS, BAK2MODS
|
||
.REF MASTERDP, DISPATCH_TABLE, FGND_OUT
|
||
.REF WAVE_DIFF_TAB, GAME_DIFF_TAB, WAVE_TABLE
|
||
.REF WAVE_MUSIC, WAVE_WATER
|
||
.REF COLRTEMP, SKYCOLOR, SKYUP, SKYDOWN
|
||
.REF WDIFF_RAM_ST, WDIFF_RAM_END
|
||
.REF GDIFF_RAM_ST, GDIFF_RAM_END
|
||
.REF SCORPROC, HOUSE_SEL
|
||
.REF LCOIN, RCOIN, CCOIN, SCOIN, SLAM, COININT, TARBAITER
|
||
.REF XCOIN, CKHSTD
|
||
.REF POWERTST, DIAG, WAVEEGGS, MAXBOZO, SECURITY, SEC_FLAG
|
||
.REF CMOS_VAL, FAC_SET, GET_AUD, STORE_AUDIT, ISLAND_NUM
|
||
.REF P_START, P_CONT, CR_STRTP, CR_CONTP, G_CRED, GET_CSTR
|
||
.REF INIT_TAB, HIGHSCORECHECK, WAVETIME, SCIDONE, FOREGROUND
|
||
.REF POWERCMOS, BORDER_MARQUEE, TUNNEL, BCDADD, TUNNEL_SCORE
|
||
.REF BGND_TYPE, FADEIN, PCYCLE_RAM, LOOKSTICK
|
||
.REF LOOKFIRE, BEEP_1, TRSTP0, TRSTCLP0, START_SCORE
|
||
.REF WIN_SND, SPLAYER_NUM, SPLAYER_COL, WAVE_PSTUFF
|
||
.REF ALIGNTAB, BAITER_TIME, START_WAVE, TUTOR
|
||
.REF STAT_WORKS, FAST_TIME, EGG_LIST, LAY_EGGS, OUTEGGS
|
||
.REF GAME_ENDER, REXINIT, BLOOPINIT, ELVISINIT, SPIKEINIT
|
||
.REF BONE_LIST, LAY_BONES, NUM_TROGS, VIRTUAL_TROGS, BONUS_WAVE
|
||
.REF COCKTAIL, TROGSPEED, MAX_TROGSPEED, ALLOT_EGGS, LAY_MAN
|
||
.REF EGG_SCHEME
|
||
**** .REF TSHIRT_START, GAME_TSHIRT
|
||
|
||
.REF CKDIAG
|
||
.REF READ_DIP
|
||
.REF TIMEINIT
|
||
.REF COINFLAG ; TRUE IF ON COIN PAGE
|
||
.IF PRINTER
|
||
.REF PRINTP,TROGALIVE
|
||
.REF DOGGYPRINT
|
||
.REF PGAMESTART, PGAMEEND, PGAMEBUYIN, PGAMECONT, PIDIED
|
||
.REF LASTSTACK,LASTA0
|
||
.REF PGAMELEVEL
|
||
.ENDIF
|
||
.REF CLEAR_HSCOLORS, DRONE_DELETE
|
||
.REF WAVE_SHOW, WAVE_INSTRUCT, WAVE_BGND1, WAVE_BGND2
|
||
.REF ON_HSTD ; TRUE IF ON HSTD PAGE
|
||
.REF ON_CRED ; TRUE IF ON CREDIT PAGE
|
||
.REF SET_AVGWAVE
|
||
.REF GAMEUNITS ; CREDITS PER GAME
|
||
|
||
.BSS EXECLED,16
|
||
.BSS IRQLED,16
|
||
.BSS SINTRAM,16 ;TEMP FOR LAST SCORE AREA INTERRUPT LINE
|
||
.BSS HSINTRAM,16 ;LAST HALF SCREEN INTERRUPT LINE
|
||
.BSS WDOGRAM,32 ;INITIALIZED LONG FOR WATCH DOG DETECT
|
||
.BSS DIPSW,16 ;RAM FAKE FOR NON-EXISTANT DIP SWITCHES
|
||
.BSS SWITCH_ESCAPE,16 ;SWITCH ESCAPE FLAG USED BY SLEEP_SWITCHX
|
||
|
||
DIPFAKE .SET 0C000H ;THIS IS HOW YOU SET THE DIP SWITCHES
|
||
NUMBARS1 .SET 12 ;MAKE NUMBER OF ACTIVE BARS ALLOWED/PLAYER
|
||
|
||
.TEXT
|
||
|
||
.STRING "CCOOPPYYRRIIGGHHTT ((CC)) 11999900 MMIIDDWWAAYY "
|
||
.STRING "MMAANNUUFFAACCTTUURRIINNGG CCOOMMPPAANNYY,, "
|
||
.STRING "MMAANNUUFFAACCTTUURREERRSS OOFF BBAALLLLYY//MMIIDDWWAAYY "
|
||
.STRING "AAMMUUSSEEMMEENNTT GGAAMMEESS.. AALLLL RRIIGGHHTTSS "
|
||
.STRING "RREESSEERRVVEEDD.."
|
||
.STRING "DDEESSIIGGNNEEDD BBYY GGEEOORRGGEE NN.. PPEETTRROO "
|
||
.STRING "AANNDD JJAACCKK EE.. HHAAEEGGEERR.. "
|
||
.STRING "YYAAHH MMOONN,, DDIISS BBEE FFIIEERRCCEE!!"
|
||
.EVEN
|
||
.WORD 0,0,0,0
|
||
|
||
*CHECK OUT AUDIT PAGE
|
||
POWERUP
|
||
DINT
|
||
SETF 16,1,0 ;WORD SIGN EXTEND
|
||
SETF 32,1,1 ;LONG WORD
|
||
.IF PRINTER
|
||
MOVE SP,@LASTSTACK,L ; PRESERVE VALUE OF THIS SUCKER
|
||
MOVE A0,@LASTA0,L ; A0 GONNA GET WASTED, TOO
|
||
.ENDIF
|
||
MOVI STCKST,SP,L
|
||
MOVI SYSCINIT,A0
|
||
MOVE A0,@SYSCTRL,W
|
||
MOVE A0,@SYSCOPY,W ;KEEP A COPY IN RAM
|
||
*MANUAL SOUND BOARD RESET
|
||
MOVI 0FE00H,A0 ;HIT RESET BIT
|
||
MOVE A0,@SOUND
|
||
MOVI 100,A0 ;WAIT FOR IT TO CATCH
|
||
DSJS A0,$
|
||
MOVI 0FFFFh,A0 ;LET IT GO
|
||
MOVE A0,@SOUND
|
||
*CHECK FOR A WATCH DOG SITUATION
|
||
MOVE @WDOGRAM,A0,L ;GET THE DOG INITIALIZATION
|
||
CMPI WDOGNUM,A0 ;BEEN HERE BEFORE?
|
||
JRNE NEWSETUP ;NO
|
||
MOVE @SWITCH+32,A0,L ; CHECK TO SEE IF WOOF WAS REAL
|
||
BTST 6,A0 ; BIT SHOULD BE LOW IF DOG FIRED
|
||
JRNZ NEWSETUP ; BR = POWER ON/OFF
|
||
AUDIT AUDDOGGY ;CLICK A WATCH DOG RESET
|
||
.IF PRINTER
|
||
CALLA DOGGYPRINT ;LOG THE WATCH DOG TO THE PRINTER
|
||
.ENDIF
|
||
NEWSETUP
|
||
JAUC POWERTST ;DO THE PATENTED POWER UP TEST
|
||
*
|
||
*NOW THAT THE POWER ON TESTS ARE DONE, WE CAN INITIALIZE AGAIN, FOR REAL!
|
||
SETUP
|
||
POWERRET:
|
||
WARMSET:
|
||
DINT
|
||
SETF 16,1,0 ;WORD SIGN EXTEND
|
||
SETF 32,1,1 ;LONG WORD
|
||
MOVI STCKST,SP,L
|
||
*CLEAR SCRATCHPAD
|
||
CALLR CLSCRACH
|
||
MOVI SYSCINIT,A0 ;
|
||
MOVE A0,@SYSCOPY,W
|
||
MOVE A0,@SYSCTRL,W ; GET EVERYBODY HAPPY
|
||
.IF DEBUG
|
||
.ELSE
|
||
JAUC POWERCMOS ;VERIFY CMOS AND PRINT OPENING MESSAGE
|
||
.ENDIF
|
||
PCMOSRET
|
||
CALLR MAIN_INIT ;DO NORMAL INITIALIZATIONS
|
||
|
||
CALLA TIMEINIT ;WHY MUST WE DO THIS?
|
||
|
||
EINT ;ENABLE INTERRUPTS AND WE'RE OFF
|
||
DISPON ;ENABLE THE DISPLAY SYSTEM
|
||
CALLA CKDIAG ;ARE ANY OF THE DIAG SWITCHES CLOSED?
|
||
JRZ MAINGO ;BR = NO, THE GAME MAY PROCEED AS PLANNED
|
||
CREATE DIAG_PID,DIAG ;FIRE OFF THE DIAG PROCESS
|
||
JRUC EXEC_LP ;AND THEN DISPATCH IT.
|
||
MAINGO:
|
||
CLR A0
|
||
MOVE A0,@COINFLAG,W ; NOT ON COIN PAGE YET
|
||
.IF PRINTER
|
||
CALLA TROGALIVE ; PRINT OUT "ALIVE" MESSAGE
|
||
.ENDIF
|
||
CALLA ATSTRT ;START ATTRACT MODE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* START OF EXECUTIVE LOOP *
|
||
* *
|
||
**************************************************************************
|
||
EXEC_LP:
|
||
CALLA PRCDSP ;DISPATCH PROCESSES
|
||
MOVE A13,A13 ;DID PROCESS EXECUTE CORRECTLY?
|
||
JRZ EXEC_POK ;BR = YES
|
||
LOCKUP ;REPORT THE SITUATION
|
||
EXEC_POK:
|
||
CALLA SNDPRC ;DISPATCH AND TIME THE SOUND CALLS
|
||
*
|
||
*UNSTACK THE VALID SWITCH CLOSURES AND ACTIVATE PROCESSES
|
||
*
|
||
MOVI ACTIVE,A13,L
|
||
MOVE @SWSTACK,A3,L
|
||
EXEC_UNSTKLP:
|
||
CMPI SWSTST,A3,L ;STACK AT START?
|
||
JREQ EXEC_UNSTKX ;YES, EXIT
|
||
MOVE @FREE,A0,L
|
||
JRZ EXEC_UNSTKX ;NO PROCESSES LEFT, TRY NEXT TIME AROUND
|
||
MOVE *A3+,A0,W ;GET ENTRY
|
||
MOVE A3,@SWSTACK,L ;UPDATE STACK
|
||
MOVE A0,A2
|
||
ADD A0,A2
|
||
ADD A0,A2 ;MULT BY 3
|
||
SLL 4,A2 ;ADJUST FOR WORD SIZE (16)
|
||
ADDI SWTAB,A2
|
||
MOVE *A2+,A1 ;GET PID
|
||
MOVE *A2+,A7,L ;GET STARTING ADDR
|
||
JREQ EXEC_UNSTKLP ;NULL ENTRY
|
||
MOVE @PAUSE_GAME,A0,W ;IS THE GAME IN PAUSE MODE?
|
||
JRZ EXEC_SWITCH_CREATE ;BR = NO, CONTINUE AS NORMAL
|
||
MOVE A1,A0 ;ANY DESTRUCTIBLE PROCESSES WILL
|
||
ZEXT A0 ;BE PAUSED BY THIS FLAG
|
||
SRL 13,A0
|
||
JRZ EXEC_UNSTKLP
|
||
EXEC_SWITCH_CREATE:
|
||
CALLA GETPRC
|
||
JRUC EXEC_UNSTKLP
|
||
EXEC_UNSTKX:
|
||
CALLA RANDOM ;RESEED THE RANDOM NUMBER GENERATOR
|
||
|
||
MOVE @EXECLED,A0,W
|
||
INC A0
|
||
MOVE A0,@EXECLED,W
|
||
CMPI 5,A0
|
||
JRLT EXEC_LP ;BR = NOT TIME TO BLINK THE EXEC LED
|
||
|
||
CLR A0
|
||
MOVE A0,@EXECLED,W
|
||
|
||
PUSHST
|
||
DINT
|
||
*
|
||
*DO SOME SYSCTRL STUFF WHILE INTERRUPTS ARE OFF
|
||
*
|
||
MOVE @SYSCOPY,A0,W ;BLINK L.E.D. TO ACK OPERATION
|
||
.IF YUNIT
|
||
XORI 0004H,A0
|
||
.ELSE
|
||
XORI 9000H,A0
|
||
.ENDIF
|
||
MOVE A0,@SYSCOPY,W
|
||
MOVE A0,@SYSCTRL,W
|
||
*HONEY! WOULD YOU FEED THE DOG?
|
||
MOVI WDOGBONE,A1 ;THROW ROVER A BONE
|
||
MOVK 1,A3
|
||
MOVE @SYSCOPY,A2,W
|
||
MOVE *A1+,A0,W
|
||
ROVERL
|
||
OR A2,A0
|
||
MOVE A0,@SYSCTRL,W
|
||
XOR A3,A0
|
||
MOVE A0,@SYSCTRL,W
|
||
MOVE *A1+,A0,W
|
||
JRNN ROVERL
|
||
MOVE A2,@SYSCTRL,W
|
||
|
||
POPST
|
||
|
||
JRUC EXEC_LP
|
||
|
||
**************************************************************************
|
||
* *
|
||
* END OF EXECUTIVE LOOP *
|
||
* *
|
||
**************************************************************************
|
||
|
||
**************************************************************************
|
||
* *
|
||
* MAIN_INIT - CUMBERSOME SYSTEM INITIALIZATION STUFF, USED TO BRING *
|
||
* UP THE SYSTEM COLD. *
|
||
* RAM MUST BE O.K., STACK POINTER VALID AND FIELDS SET. *
|
||
* RETURNS *
|
||
* A13 = PROCESS ACTIVE LIST *
|
||
* *
|
||
**************************************************************************
|
||
MAIN_INIT
|
||
PUSH A0
|
||
MOVI INAMODE,A0
|
||
MOVE A0,@GAME_STATE,W
|
||
MOVI WDOGNUM,A0
|
||
MOVE A0,@WDOGRAM,L ;MARK SYSTEM AS INITIALIZED
|
||
*RESET THE SOUND BOARD
|
||
CALLA SNDRES
|
||
CALLR INITIO ;INITIALIZE THE I/O REGS
|
||
*SET UP TI PIXEL PROCESSING REGS
|
||
CALLA SETPPROC
|
||
*INIT COLOR RAM
|
||
CLR A0
|
||
MOVE A0,@DMACTRL ;OFF DMA
|
||
MOVE A0,@CMAPSEL ;CLEAR COLOR MAP SELECT
|
||
MOVE A0,@IRQLED
|
||
MOVE A0,@EXECLED
|
||
*CLEAR THE SCREEN
|
||
CALLA SCRCLR
|
||
*INITIALIZE RANDOM SEED
|
||
MOVI 81261A8CH,A0
|
||
MOVE A0,@RAND,L
|
||
*ENABLE DISPLAY, EXT1 INTERRUPT
|
||
MOVI DIE,A0
|
||
MOVE A0,@intenb ;enable display interrupts
|
||
*INITIALIZE SWITCH STACK
|
||
MOVI SWSTST,A0
|
||
MOVE A0,@SWSTACK,L
|
||
*INITIALIZE SYSTEM CONTROL REGISTER
|
||
MOVI SYSCINIT,A0
|
||
MOVE A0,@SYSCTRL,W
|
||
MOVE A0,@SYSCOPY,W ;KEEP A COPY IN RAM
|
||
*INITIALIZE INTERRUPT RAM
|
||
MOVI SCOREINT,A0
|
||
MOVE A0,@SINTRAM,W ;SCORE AREA INTERRUPT
|
||
MOVI HSINT,A0
|
||
MOVE A0,@HSINTRAM,W ;HALF SCREEN INTERRUPT
|
||
*INITIALIZE DIP SWITCH OPTIONS
|
||
CALLR DIPINIT
|
||
*CLEAR ALL PLAYER DATA AREAS
|
||
CALLR CLRALLPD
|
||
*INITIALIZE PROCESS AND DISPLAY LISTS AND START THE SYSTEM
|
||
CALLA PINIT ;INIT PROCESS LIST
|
||
CALLA MYOINIT ;INITIALIZE THE OBJECT LIST
|
||
PULL A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DIPINIT - INITIALIZE OPTIONS VIA DIP SWITCH SETTINGS *
|
||
* *
|
||
**************************************************************************
|
||
DIPINIT:
|
||
MMTM SP,A0,A1
|
||
CLR A0
|
||
MOVE A0,@STICKTYP,W
|
||
|
||
CALLA READ_DIP ;LOAD UP THE CURRENT DIP SWITCH BITS
|
||
MOVE A0,A1 ;STORE FOR MULTIPLE USES
|
||
|
||
ANDI DPPLAYERS,A0 ;AQUIRE THE NUMBER OF PLAYERS
|
||
SRL 9,A0
|
||
ADDI PLNUM,A0
|
||
MOVB *A0,A0
|
||
MOVE A0,@NPLAYERS,W
|
||
|
||
MOVE A1,A0
|
||
ANDI DPCOCKTAIL,A0 ;CHECK FOR "MIDWAY" COCKTAIL SETTING
|
||
JRZ DI_COCKNOT
|
||
MOVK 1,A0
|
||
DI_COCKNOT
|
||
MOVE A0,@COCKTAIL,W
|
||
|
||
MMFM SP,A0,A1
|
||
RETS
|
||
|
||
PLNUM .BYTE 3,2,1,0
|
||
.EVEN
|
||
|
||
**************************************************************************
|
||
* *
|
||
* ATSTRT - START THE ATTRACT MODE PROCESS *
|
||
* *
|
||
**************************************************************************
|
||
ATSTRT
|
||
MMTM SP,A0,A1,A7
|
||
MOVI INAMODE,A1
|
||
MOVE A1,@GAME_STATE,W
|
||
SOUNDOFF ;NO SOUNDS DURING A-MODE
|
||
CREATE INDPIDW,ATTRACT_MODE
|
||
MMFM SP,A0,A1,A7
|
||
DUMRETS:
|
||
DUMCOL:
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PLAYER_START - PROCESS TO START A PLAYER INTO THE GAME. IF THE GAME *
|
||
* IS IN ATTRACT MODE, OR GAME OVER, THEN WE WILL START *
|
||
* A FRESH GAME. OTHERWISE, THE PLAYER WILL BE ADDED TO *
|
||
* THE CURRENT GAME. *
|
||
* *
|
||
**************************************************************************
|
||
PLAYER_START:
|
||
MOVE @GAME_STATE,A3,W
|
||
CMPI INDIAG,A3
|
||
JREQ PLAYER_X ;TEST MODE, NO DICE, CLAY.
|
||
CMPI INEPILOG,A3
|
||
JREQ PLAYER_X ;NO STARTS DURING EPILOG
|
||
|
||
MOVE *A13(PROCID),A4,W
|
||
MOVE A4,A0
|
||
CLR A1
|
||
NOT A1
|
||
CALLA EXISTP ;CHECK FOR THE SAME PROCESS
|
||
JRNE PLAYER_X ;BR = PROCESS ALREADY HERE, BYE
|
||
|
||
MOVE A4,A0
|
||
SLL 20,A0
|
||
SRL 28,A0
|
||
DEC A0
|
||
|
||
MOVE @NPLAYERS,A1,W
|
||
CMP A1,A0 ; CHECK FOR GAME CONFIG PLAYERS
|
||
JRHI PLAYER_X ; CAN'T START, DUDE!
|
||
|
||
MOVE A0,A9
|
||
CALLA GPLAYD ;GET THE PLAYER'S DATA AREA
|
||
|
||
CMPI INAMODE,A3 ;IN ATTRACT MODE?
|
||
JREQ PLAYER_INSTANT ;GO RIGHT FOR THE THROAT
|
||
|
||
CMPI INGAMEOV,A3 ;IN GAME OVER
|
||
JREQ PLAYER_INSTANT ;GO RIGHT FOR THE THROAT
|
||
|
||
MOVE *A2(PDRONEFLG),A8,W ;DRONE AT WORK?
|
||
JRNZ PLAYER_OBJ_SKIP ;DON'T GIVE A SHIT ABOUT EXISTING OBJ
|
||
|
||
MOVE *A2(POBJ),A8,L ;DOES HE ALREADY EXIST?
|
||
JRNE PLAYER_FLAG_X ;BR = YES, AND FLAG THE ESCAPE
|
||
|
||
PLAYER_OBJ_SKIP:
|
||
MOVE *A2(PSCORE),A1,L ; GET HIS SCORE
|
||
JRNZ PLAYER_CONT ; BR = TRYING TO CONTINUE
|
||
|
||
PLAYER_INSTANT:
|
||
CALLA CR_STRTP
|
||
JRLO PLAYER_X ; NOT ENOUGH CREDITS, DUDE!
|
||
CALLA P_START ; TAKE A CREDIT
|
||
|
||
.IF PRINTER
|
||
MOVE @GAME_STATE,A0,W
|
||
CMPI INGAMEOV,A0
|
||
JREQ PLAYER_START_PRINT
|
||
CMPI INAMODE,A0
|
||
JRNE PLAYER_1ST_BUYIN
|
||
PLAYER_START_PRINT:
|
||
CALLA PGAMESTART
|
||
JRUC PLAYER_COOL
|
||
PLAYER_1ST_BUYIN:
|
||
CALLA PGAMEBUYIN
|
||
.ENDIF
|
||
JRUC PLAYER_COOL
|
||
*
|
||
*PLAYER CONTINUE CREDIT DECREMENT
|
||
PLAYER_CONT:
|
||
CALLA ALLOW_CONTINUE ;IS CONTINUE ALLOWED?
|
||
JRZ PLAYER_X ;BR = NO
|
||
CALLA CR_CONTP ;DOES HE HAVE ENOUGH TO CONTINUE?
|
||
JRLO PLAYER_X ;BR = NO
|
||
CALLA P_CONT ;DECREMENT COST OF CONTINUE
|
||
.IF PRINTER
|
||
CALLA PGAMECONT
|
||
.ENDIF
|
||
*
|
||
*A2 = PLAYER DATA
|
||
*A3 = GAME STATE
|
||
*A9 = PLAYER NUMBER
|
||
PLAYER_COOL:
|
||
CMPI INPLAY,A3 ;ARE WE IN ACTION?
|
||
JRNE PLAYER_FRESH ;BR = NO, DON'T EVEN WORRY ABOUT DRONE
|
||
|
||
ORI HOUSEPID,A9
|
||
PLAYER_UNDRONE_LP:
|
||
MOVE *A2(PDRONEFLG),A8,W ;DRONE AT WORK?
|
||
JRZ PLAYER_FRESH ;BR = NO, CONTINUE AS NORMAL
|
||
MOVE A9,A0
|
||
CLR A1
|
||
NOT A1
|
||
CALLA EXISTP ;DRONE HOUSE BEING BUILT?
|
||
JRZ PLAYER_UNDRONE ;BR = NO
|
||
MOVE A2,A11
|
||
SLEEPK 1
|
||
MOVE A11,A2
|
||
JRUC PLAYER_UNDRONE_LP ;WAIT ON THE HOUSE BUILD BEFORE START
|
||
PLAYER_UNDRONE:
|
||
CALLA DRONE_DELETE ;DELETE IF WE ARE A DRONE
|
||
|
||
PLAYER_FRESH:
|
||
ADJUST ADJLIVES ;GET # OF LIVES FROM CMOS
|
||
MOVE A0,*A2(PLIVES),W ;GIVE THIS DUDE HIS LIFE
|
||
|
||
MOVE *A2(PPID),A0,W
|
||
ORI PINITIALPID,A0
|
||
MOVE A0,A3
|
||
CLR A1
|
||
NOT A1
|
||
CALLA EXISTP
|
||
JRZ PLAYER_NOT_ENTERING
|
||
CALLA GETA8
|
||
CALLA GETA9
|
||
CALLA GETA10
|
||
CALLA GETA11
|
||
MOVE A3,A1
|
||
MOVI SCIDONE,A7
|
||
CALLA XFERPROC ;LET THE GUY ENTER WHAT HE'S GOT
|
||
|
||
PLAYER_NOT_ENTERING:
|
||
MOVK 1,A0
|
||
MOVE A0,*A2(PENTER),W ;MARK THIS DUDE READY TO ENTER
|
||
|
||
MOVE @GAME_STATE,A0,W
|
||
CMPI INAMODE,A0
|
||
JREQ PLAYER_1ST ;AHHH THE FIRST TO PLAY, WELCOME
|
||
CMPI INGAMEOV,A0
|
||
JREQ PLAYER_1ST ;RESTART THE GAME, HOW INTERESTING
|
||
|
||
CLRM *A2(PDEAD),W
|
||
|
||
CMPI ININTRO,A0
|
||
JREQ PLAYER_HILITE ;HILITE THE SCORE AREA FOR FEEDBACK
|
||
|
||
CMPI INGAME,A0
|
||
JRNE PLAYER_SOUND
|
||
|
||
PLAYER_HILITE:
|
||
**** CLR A0
|
||
**** MOVE A0,*A2(PDEAD),W
|
||
**** MOVK 1,A0
|
||
**** MOVE A0,*A2(PENTER),W ;MARK THIS DUDE READY TO ENTER
|
||
CALLA UPDSL
|
||
**** JRUC PLAYER_STARTLP ;NO SOUNDS TO RUIN THE INTRO
|
||
|
||
PLAYER_SOUND:
|
||
**** CLR A0
|
||
**** MOVE A0,*A2(PDEAD),W
|
||
CALLR GPLAYNUM ;GET THE PLAYERS NUMBER
|
||
SLL 5,A0
|
||
ADDI START_SND_TAB,A0
|
||
MOVE *A0,A0,L
|
||
CALLA ONESND ;BLOW YOUR HORN
|
||
|
||
PLAYER_STARTLP:
|
||
MOVE @GAME_STATE,A0,W ;WAIT FOR GAME PLAY TO COMMENCE
|
||
CMPI INPLAY,A0
|
||
JREQ PLAYER_ADD
|
||
CMPI INGAMEOV,A0 ;HAVE WE SOMEHOW GOTTEN INTO GAMEOVER
|
||
JREQ PLAYER_CLRLIFE_X ;BR = YES
|
||
MOVE A2,A8 ;WAIT FOR GAME TO START OR END
|
||
SLEEPK 4
|
||
MOVE A8,A2
|
||
JRUC PLAYER_STARTLP
|
||
|
||
PLAYER_1ST:
|
||
PUSHP A2 ;STARTING FROM AMODE OR GAME OVER
|
||
FCALL SECURITY,B0
|
||
MOVE @SEC_FLAG,A14,W
|
||
JRZ P1ST_SEC_OK
|
||
AUDIT AUDSECURITY ;SHOW THE SECURITY BREECH
|
||
CALLR ATSTRT
|
||
DIE
|
||
P1ST_SEC_OK
|
||
MOVE *A12,A2,L ;RETRIEVE PLAYER DATA PTR
|
||
JSRP GAME_START
|
||
PULLP A2
|
||
PLAYER_ADD:
|
||
CALLR PLAYER ;MUST CALL THIS BEFORE YOU INC PWAVEST
|
||
JRZ PLAYER_CLRLIFE_X ;COULDN'T CREATE THE DUDE
|
||
|
||
INCM *A2(PSTARTS),W ;INCREMENT THE STARTS
|
||
|
||
**** CALLA DINO_START
|
||
**** MOVE *A2(PWAVEST),A0,W ;PLAYER STARTED THIS WAVE?
|
||
**** JRNE PLAYER_BUYIN ;BR = ALREADY STARTED THIS WAVE ONCE.
|
||
*DO THIS STUFF ONCE PER WAVE, MAX
|
||
**** CALLA EGG_START
|
||
|
||
MOVE *A2(PSCORE),A0,L
|
||
JRNZ PLAYER_BUYIN ;NON-VIRGIN
|
||
|
||
*DO THIS STUFF ON INITIAL PLAYER START ONLY
|
||
**** MOVK 1,A0
|
||
MOVE @START_WAVE,A0,W ;BASE THIS ON THE SELECTED START
|
||
MOVE A0,*A2(PWAVES),W ;COUNT ONE FOR WAVES PLAYED
|
||
DEC A0 ;DO THIS SO THAT THE PLAYER DOES'NT
|
||
MOVE A0,*A2(PLASTWIN),W ;GO INTO BOZO MODE RIGHT AWAY!
|
||
|
||
MOVE @CURPLYRS,A0,W
|
||
ADDI AUD1START,A0
|
||
CALLA AUD1
|
||
|
||
**** MOVE @START_SCORE,A1,L
|
||
**** CALLA SCORE ;AWARD START AHEAD BONUS, IF ANY
|
||
JRUC PLAYER_INIT
|
||
|
||
*DO THIS STUFF ON BUY-IN ONLY
|
||
PLAYER_BUYIN:
|
||
MOVE @CURPLYRS,A0,W
|
||
ADDI AUD1CONTS,A0 ;CLICK THE CORRECT AUDIT
|
||
CALLA AUD1
|
||
AUDIT AUDCONTTAKEN ;CLICK A CONTINUE TAKEN
|
||
*THINGS TO RE-INITIALIZE EVERY TIME SOMEONE STARTS OR BUYS IN
|
||
PLAYER_INIT:
|
||
INCM @CURPLYRS,W ;INCREMENT THE PLAYER COUNT
|
||
INCM *A2(PWAVEST),W ;INCREMENT THE STARTS THIS WAVE
|
||
ADJUST ADJLIVES ;GET # OF LIVES FROM CMOS
|
||
MOVE A0,*A2(PLIVES),W ;GIVE THIS DUDE HIS LIFE, AGAIN
|
||
CLR A0
|
||
MOVE A0,*A2(PJOYSTCK),W
|
||
MOVE A0,*A2(PTRUEJOY),W ;STORE THE LAST JOYSTICK STATUS
|
||
*EXTRA MAN BULLSHIT
|
||
ADJUST ADJNUMEXTRA ;SOCIALIST OPERATOR?
|
||
JRNZ PLAYER_FIXED_EXTRA ;BR = YES
|
||
MOVI 7FFFH,A0 ;A MILLION!
|
||
PLAYER_FIXED_EXTRA
|
||
MOVE A0,*A2(PEXTRAS),W ;NO EXTRA MEN SO FAR
|
||
ADJUST ADJEXTRA
|
||
|
||
MOVE *A2(PSCORE),A1,L
|
||
MOVE @START_SCORE,A4,L
|
||
JRZ PF_SETREP
|
||
|
||
CMP A4,A1
|
||
JRHS PF_SETREP
|
||
MOVE A4,A1
|
||
PF_SETREP
|
||
CALLA BCDADD ;CALCULATE NEXT REPLAY
|
||
MOVE A0,*A2(PNEXTREP),L ;AND STORE IT
|
||
**** MOVE A2,A11
|
||
**** SLEEP 5 ;INSURE THAT INITIAL ENTRY IS DEAD
|
||
**** MOVE A11,A2
|
||
CALLA UPDSL ;UPDATE THE STATUS AREA OF THIS PLAYER
|
||
PLAYER_X:
|
||
DIE
|
||
*EXIT HERE IF START FAILURE AFTER LIFE HAS BEEN GIVEN
|
||
*A2 = PTR TO PLAYER DATA AREA
|
||
PLAYER_CLRLIFE_X:
|
||
CLR A0
|
||
MOVE A0,*A2(PLIVES),W
|
||
JRUC PLAYER_X
|
||
*
|
||
*EXIT HERE IF YOU WISH TO MAKE IT KNOWN THAT THE START BUTTON WAS PRESSED
|
||
*A2 = PTR TO PLAYER DATA AREA
|
||
PLAYER_FLAG_X
|
||
MOVK 1,A0
|
||
MOVE A0,*A2(PSTARTESC),W
|
||
JRUC PLAYER_X
|
||
|
||
*
|
||
*PLAYER START SOUND TABLE
|
||
*
|
||
START_SND_TAB:
|
||
.LONG P1ST_SND,P2ST_SND,P3ST_SND,P4ST_SND
|
||
|
||
P1ST_SND .WORD >F3F0,30,>8093,0 ;PLAYER ONE START SOUND
|
||
P2ST_SND .WORD >F3F0,30,>8093,0 ;PLAYER TWO START SOUND
|
||
P3ST_SND .WORD >F3F0,30,>8093,0 ;PLAYER THREE START SOUND
|
||
P4ST_SND .WORD >F3F0,30,>8093,0 ;PLAYER FOUR START SOUND
|
||
|
||
*
|
||
*PLAYER NAME STRING TABLE, TO BE PROCESSED WITH STRINGF
|
||
*
|
||
PNAME_TAB:
|
||
.LONG P1NAME,P2NAME,P3NAME,P4NAME,0
|
||
P1NAME:
|
||
.STRING "\bREX",0
|
||
.WORD 0101H
|
||
.EVEN
|
||
P2NAME:
|
||
.STRING "\bBLoOP",0
|
||
.WORD 0303H
|
||
.EVEN
|
||
P3NAME:
|
||
.STRING "\bSPIKE",0
|
||
.WORD 0505H
|
||
.EVEN
|
||
P4NAME:
|
||
.STRING "\bGWEN",0
|
||
.WORD 0606H
|
||
.EVEN
|
||
|
||
*
|
||
*PLAYER NAME STRING TABLE, TO BE PROCESSED WITH STRINGF
|
||
*AND TO BE USED WITH THE 15 POINT FONT.
|
||
*
|
||
PNAME15_TAB:
|
||
.LONG P1NAME,P2NAME15,P3NAME,P4NAME,0
|
||
P2NAME15:
|
||
.STRING "\bBLOOP",0
|
||
.WORD 0303H
|
||
.EVEN
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PLAYER - ROUTINE TO START A PLAYER OBJECT AN ADD IT TO THE DISPLAY. *
|
||
* A2 = INDEX TO PLAYER DATA AREA UPON CREATION. *
|
||
* RETURNS: *
|
||
* Z = FAILURE TO CREATE, NO PLAYER ADDED *
|
||
* NZ = SUCCESS *
|
||
* A0 = PLAYER OBJECT *
|
||
* A8 = PLAYER OBJECT *
|
||
* NOTE: TRASHES A14 *
|
||
* *
|
||
**************************************************************************
|
||
PLAYER:
|
||
MMTM SP,A1,A7,A11
|
||
MOVE *A2(PINITAB),A14,L ;GET THE INITIALIZATION TABLE
|
||
CALLA GPALOBJSTF
|
||
JRZ PLAYERX ;BR = WE FAILED TO GET AN OBJECT
|
||
MOVE A0,*A2(POBJ),L
|
||
MOVE A0,A8
|
||
CALLA OBJ_OFF ;KEEP THAT OBJECT TURNED OFF
|
||
|
||
CLR A0
|
||
MOVE A0,*A2(PDEAD),W
|
||
MOVE A0,*A2(PBOZO),W ;CLEAR THE BOZO LEVEL
|
||
MOVE A0,*A2(PJOYSTCK),W
|
||
MOVE A0,*A2(PTRUEJOY),W ;STORE THE LAST JOYSTICK STATUS
|
||
MOVE A0,*A2(PDRONEFLG),W
|
||
MOVE A0,*A2(PNOMOVE),W
|
||
MOVE A0,*A2(PDINOSTOP),W
|
||
MOVE A0,*A2(PINSTRUCT),W
|
||
CALLA DINO_START
|
||
CALLA EGG_START
|
||
CLR A0
|
||
MOVE A0,*A2(PENTER),W
|
||
MOVE A8,A0
|
||
CALLA INSOBJ
|
||
MOVE A0,A0 ;CLEAR ZERO FLAG UPON SUCCESS
|
||
PLAYERX
|
||
MMFM SP,A1,A7,A11
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PLAYER_DELETE - DELETE THIS PLAYER'S OBJECT AND REMOVE HIM FROM THE *
|
||
* GAME, YEAH BOY! *
|
||
* A2 = PTR TO PLAYER DATA AREA *
|
||
* *
|
||
**************************************************************************
|
||
PLAYER_DELETE
|
||
MMTM SP,A0,A1,A11
|
||
|
||
MOVE *A2(PPID),A0,W
|
||
MOVI 08700H,A1
|
||
CALLA KILALL ;KILL THE PLAYER PROCESSES
|
||
|
||
MOVE *A2(POBJ),A0,L
|
||
CALLA DELPAL
|
||
CALLA DELOBJ ;REMOVE THE SHIT
|
||
|
||
CALLR PLAYER_CLR ;CLEAR OUT PLAYER GAME DATA
|
||
|
||
CALLA HIGHSCORECHECK ;DO A VERY SMALL HIGH SCORE CHECK
|
||
|
||
CALLR ALLOW_CONTINUE
|
||
JRZ PD_NOBUYIN
|
||
|
||
AUDIT AUDCONTOFFER ;CLICK A CONTINUE OFFERED
|
||
|
||
PD_NOBUYIN
|
||
MOVE @CURPLYRS,A0,W
|
||
DEC A0 ;KNOCK DOWN THE PLAYER COUNT
|
||
MOVE A0,@CURPLYRS,W
|
||
|
||
MMFM SP,A0,A1,A11
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* ALLOW_CONTINUE - ROUTINE TO DETERMINE IF WE SHOULD ALLOW THIS GUY TO *
|
||
* CONTINUE. *
|
||
* A2 = PTR TO PLAYER DATA AREA *
|
||
* RETURNS *
|
||
* Z = NOT ALLOWED *
|
||
* NZ = ALLOWED *
|
||
* NOTE: TRASHES A14 *
|
||
* *
|
||
**************************************************************************
|
||
ALLOW_CONTINUE
|
||
PUSH A0
|
||
ADJUST ADJBUYIN ;ARE GAME CONTINUES ALLOWED?
|
||
JRZ AC_X ;BR = NEVER
|
||
CMPI 2,A0
|
||
JREQ AC_YES ;BR = ALWAYS
|
||
MOVE *A2(PCONSECUTIVE),A0,W
|
||
CMPI 1,A0
|
||
JRLS AC_YES ;BR = SOMETIMES
|
||
SETZ ;HE DID NOT QUALIFY TO CONTINUE
|
||
JRUC AC_X
|
||
AC_YES
|
||
CLRZ
|
||
AC_X
|
||
PULL A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PLAYER_CLR - ROUTINE TO CLEAR THE PLAYER ACTIVE FIELDS. *
|
||
* A2 = PTR TO THE PLAYER *
|
||
* *
|
||
**************************************************************************
|
||
PLAYER_CLR
|
||
PUSH A0
|
||
CLR A0
|
||
MOVE A0,*A2(POBJ),L ;CLEAR THIS OUT
|
||
MOVE A0,*A2(PENTER),W ;CLEAR THE GAME ENTRANCE WAITING FLAG
|
||
MOVE A0,*A2(PLIVES),W ;JUST TO MAKE SURE HE IS DEAD
|
||
MOVE *A2(PSCORE),A0,L
|
||
CALLA UPDSL ;TURN IT DOWN MANG!
|
||
PULL A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PLAYER_RESTART - RESTART A PLAYER IF HE EXISTED BEFORE. THIS IS *
|
||
* USED FOR STARTING A NEW WAVE. *
|
||
* A2 = PLAYER INDEX *
|
||
* NOTE: CALL ONLY AFTER RE-INITIALIZING THE DISPLAY SYSTEM *
|
||
* *
|
||
**************************************************************************
|
||
PLAYER_RESTART:
|
||
PUSH A0
|
||
CLR A0
|
||
MOVE A0,*A2(PBARS),W
|
||
MOVE A0,*A2(PJOYSTCK),W
|
||
MOVE A0,*A2(PTRUEJOY),W ;STORE THE LAST JOYSTICK STATUS
|
||
MOVE A0,*A2(PEGGS),W
|
||
MOVE A0,*A2(PWAVEDEATHS),W
|
||
MOVE A0,*A2(PBOZO),W ;CLEAR BOZO LEVEL
|
||
MOVE A0,*A2(PTROGKILLS),W ;CLEAR THE TROG KILLS
|
||
MOVE A0,*A2(PWAVETIME),L ;START FROM ZERO
|
||
MOVE A0,*A2(PEXTRAEARN),W
|
||
MOVE A0,*A2(PDRONEFLG),W ;CLEAR HIS DRONE FLAG FOR GOOD LUCK
|
||
MOVE A0,*A2(PEGGOUT),W
|
||
MOVE A0,*A2(PEGGLAY),W
|
||
MOVE A0,*A2(PEGGINIT),W
|
||
MOVE A0,*A2(PEGGACTIVE),W
|
||
MOVE A0,*A2(PNOMOVE),W
|
||
MOVE A0,*A2(PDINOSTOP),W
|
||
MOVE A0,*A2(PINSTRUCT),W
|
||
MOVE *A2(POBJ),A0,L
|
||
JREQ PLAYER_RSX ;BR = THIS GUY WAS NOT AROUND
|
||
CALLR PLAYER ;MUST CALL THIS BEFORE YOU INC PWAVEST
|
||
**** CALLA DINO_START
|
||
**** CALLA EGG_START
|
||
INCM *A2(PWAVEST),W ;INCREMENT THE START COUNT
|
||
PLAYER_RSX:
|
||
PULL A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* GAME_START - START OF GAME ROUTINE, THIS WILL HANDLE ALL THINGS THAT *
|
||
* MUST BE DONE. *
|
||
* A2 = PLAYER DATA AREA OF PLAYER STARTING THE GAME *
|
||
* NOTE: CALL WITH JSRP *
|
||
* *
|
||
**************************************************************************
|
||
GAME_START:
|
||
MMTM A12,A8,A9,A10,A11
|
||
CALLA QSNDRST
|
||
CALLR WIPEOUT ;WIPE OUT THE WORLD
|
||
CALLR GRAMINIT ;INITIALIZE GAME RAM
|
||
CALLR GAME_DIFFICULTY ;INITIALIZE GAME DIFFICULTY PARAMS
|
||
CALLR CLRALLPD ;INITIALIZE PLAYER DATA AREAS
|
||
CALLA CLEAR_HSCOLORS ; CLEAR HIGHSCORE COLORS
|
||
CALLA INIT_HSHOLD ; HS HOLDING AREA
|
||
MOVK 1,A0 ;THESE 2 INSTRUCTIONS AFTER CLRALLPD
|
||
MOVE A0,*A2(PENTER),W ;YEAH! YEAH! DUDE IS READY TO PLAY!
|
||
*** MOVI ILIVES,A0 ;AND THESE TWO
|
||
ADJUST ADJLIVES ;GET # OF LIVES FROM CMOS
|
||
MOVE A0,*A2(PLIVES),W
|
||
ADJUST ADJEGGS
|
||
MOVE A0,@EGG_SCHEME,W
|
||
|
||
CREATE INDPIDW,SCORPROC ;START UP THE PUSH PLAYER START PROCESS
|
||
|
||
DISPON ;DISPLAY SYSTEM BACKON
|
||
|
||
MOVI ININTRO,A0
|
||
MOVE A0,@GAME_STATE,W ;SECRETARY OF STATE
|
||
|
||
JSRP GAME_INTRO
|
||
|
||
MOVI INGAME,A0
|
||
MOVE A0,@GAME_STATE,W
|
||
|
||
**** MOVK 1,A0
|
||
**** MOVE A0,@WAVE
|
||
|
||
JSRP WAVE_START ;DO THE WAVE INITIALIZATION
|
||
|
||
MMFM A12,A8,A9,A10,A11
|
||
RETP
|
||
|
||
**************************************************************************
|
||
* *
|
||
* GAME_DIFFICULTY - SETUP GAME DIFFICULTY PARAMETERS *
|
||
* USES THE THE GAME ADJUSTMENT ADJDIFF AS THE CURRENT DIFFICULTY *
|
||
* *
|
||
**************************************************************************
|
||
GAME_DIFFICULTY:
|
||
MMTM SP,A0,A1,A2,A3,A4,A6,A7,A8
|
||
ADJUST ADJDIFF ;GET MASTER DIFFICULTY
|
||
CMPI MAXDIFF,A0
|
||
JRLS GDIFF_OK ;BR = DIFFICULTY SETTING IS O.K.
|
||
MOVI MAXDIFF,A0 ;INSERT MAXIMUM ALLOWED DIFFICULTY
|
||
GDIFF_OK:
|
||
SUBK 5,A0
|
||
MOVI GDIFF_RAM_ST,A2
|
||
MOVI GAME_DIFF_TAB,A3
|
||
GDIFF_LP:
|
||
MOVE *A3+,A7,W ;GET DIFFICULTY DELTA
|
||
MOVE *A3+,A6,W ;GET MIN
|
||
MOVE *A3+,A4,W ;GET MAX
|
||
MOVE *A3+,A8,W ;GET GAME VALUE
|
||
MPYS A0,A7
|
||
ADD A7,A8 ;ADD IN DELTA
|
||
CMP A8,A6
|
||
JRLS GDIFF_MIN ;CHECK FOR MIN
|
||
MOVE A6,A8
|
||
JRUC GDIFF_MAX
|
||
GDIFF_MIN:
|
||
CMP A8,A4 ;CHECK FOR MAX
|
||
JRHS GDIFF_MAX
|
||
MOVE A4,A8
|
||
GDIFF_MAX:
|
||
MOVE A8,*A2+,W ;STORE IT AWAY
|
||
CMPI GDIFF_RAM_END,A2
|
||
JRLO GDIFF_LP ;NOT DONE
|
||
MMFM SP,A0,A1,A2,A3,A4,A6,A7,A8
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* GAME_INTRO - INTRODUCTION AT GAME START *
|
||
* A2 = PTR TO PLAYER THAT STARTED THIS GAME. *
|
||
* EXPECTATIONS: *
|
||
* - DISPLAY SYSTEM ON *
|
||
* - ALL DISPLAY LISTS CLEAR *
|
||
* - ALL DISPLAY PAGES CLEAR *
|
||
* - AUTO ERASE OFF *
|
||
* NOTE: A8,A9,A10,A11 ARE DESTROYED *
|
||
* ALSO TRASHES PTEMP1 & PTEMP2. *
|
||
* CALL WITH JSRP *
|
||
* *
|
||
**************************************************************************
|
||
*SELECTION TIMER POSITIONS
|
||
SELECTX .EQU 197
|
||
SELECTY .EQU 200+SKYTOPOF
|
||
|
||
GAME_INTRO:
|
||
CALLA SCORAREA
|
||
CALLA GET_CSTR
|
||
CALLA G_CRED ;UPDATE THE WAVE DISPLAY
|
||
CALLA ISLAND_NUM ;PLOP OUT THE ISLAND NUMBER
|
||
MOVE A2,*A13(PTEMP1),L
|
||
SLEEPK 4
|
||
*INTIALIZE GLOBAL START PLAYER VARIABLES
|
||
MOVE *A13(PTEMP1),A2,L
|
||
CALLR GPLAYNUM
|
||
MOVE A0,@SPLAYER_NUM,W ;STORE FOR THE REST OF THE WORLD
|
||
MOVE A0,A5
|
||
SLL 4,A5
|
||
ADDI HBOX_COLORS,A5
|
||
MOVE *A5,A5,W
|
||
MOVE A5,@SPLAYER_COL,W
|
||
SLL 5,A0
|
||
ADDI SELECTCOL_TAB,A0
|
||
MOVE *A0,A0,L
|
||
MOVE A0,@SELECTCOL,L
|
||
|
||
MOVE @STORY_MODE,A0,W ;IS IT THAT BLASTED ATTRACT MODE?
|
||
JRZ GAME_INTRO_GAME ;BR = NO, THANK GOD
|
||
|
||
MOVK 1,A0
|
||
MOVE A0,@TUTOR,W ;SETUP TUTORIAL FOR ATTRACT MODE
|
||
JRUC GAME_INTRO_X
|
||
|
||
GAME_INTRO_GAME
|
||
SOUND1 GAME_INTRO_SND
|
||
|
||
MOVI SELECT_MESS,A8
|
||
CALLA LM_SETUP
|
||
MOVE @SPLAYER_COL,A5,W
|
||
SLL 16,A5
|
||
JSRP PRINTF ;PRINT ISLAND SELECT HEADER
|
||
|
||
*PUT OUT SOME IMAGES TO MAKE THIS LOOK PRETTY
|
||
MOVI DMAWNZ,A5 ;USE THESE FLAGS
|
||
|
||
MOVI [RBOXY+21,RBOXX+33],A3
|
||
MOVE @SPLAYER_NUM,A14,W
|
||
SLL 5,A14
|
||
ADDI ALIGNTAB,A14
|
||
MOVE *A14,A14,L
|
||
MOVE *A14(INITIMG),A14,L ;GET INITIAL PLAYER IMAGE
|
||
CALLA DMAWPAL
|
||
|
||
MOVI [RBOXY+18,RBOXX+RBOXSPC+20],A3
|
||
MOVI TRSTP0,A14
|
||
CALLA DMAWPAL
|
||
|
||
MOVI [RBOXY+18,RBOXX+(RBOXSPC*2)+21],A3
|
||
MOVI TRSTCLP0,A14
|
||
CALLA DMAWPAL
|
||
|
||
CLR A0
|
||
CALLR BOX_ON ;DEFAULT ON CURRENT BOX
|
||
MOVE A1,@WAVE,W ;DEFAULT WAVE SELECT
|
||
MOVE A1,@START_WAVE,W ;DEFAULT GLOBAL INFORMER
|
||
MOVE A2,@START_SCORE,L ;DEFAULT SCORE
|
||
MOVE A3,@TUTOR,W ;DEFAULT MODUS
|
||
|
||
CLR A8 ;THIS IS OUR CURRENT BOX
|
||
INC A0
|
||
SELECT_BOXES:
|
||
CALLR BOX_OFF ;SHOW OTHER BOXES OFF
|
||
INC A0
|
||
CMPI NUMBOXS,A0
|
||
JRLO SELECT_BOXES ;MORE TO COME
|
||
|
||
SLEEPK 20 ;GIVE IT TIME TO SINK IN
|
||
MOVK 11,A9 ;SECONDS LEFT
|
||
CLR A10 ;TIME 'TIL NEXT SECOND
|
||
SELECT_LP:
|
||
MOVE *A13(PTEMP1),A2,L
|
||
CALLA LOOKFIRE ;DID HE PUSH HIS FIRE BUTTON?
|
||
JRNZ A_SELECTION ;BR = YES, THEN CRUISE WITH THIS ISLE
|
||
|
||
CALLA LOOKSTICK ;STICK ACTION?
|
||
JRZ SELECT_TICK ;BR = NO
|
||
CMPI 4,A0 ;RIGHT STICK?
|
||
JREQ SELECT_ADD ;BR = YES
|
||
CMPI 3,A0 ;LEFT STICK?
|
||
JRNE SELECT_TICK ;BR = NUTHIN' TIMER DOWN JACKSON!
|
||
*ONE BOX TO THE LEFT
|
||
MOVE A8,A8 ;ARE WE ALL THE WAY LEFT?
|
||
JRZ SELECT_TICK ;BR = YES, NO SELECT
|
||
MOVE A8,A6
|
||
DEC A6
|
||
JRUC SELECT_NEXT
|
||
*ONE BOX TO THE RIGHT
|
||
SELECT_ADD:
|
||
CMPI NUMBOXS-1,A8 ;ARE WE ALL THE WAY RIGHT?
|
||
JRHS SELECT_TICK ;BR = YES, NO SELECT
|
||
MOVE A8,A6
|
||
INC A6
|
||
|
||
SELECT_NEXT:
|
||
MOVE A8,A0
|
||
CALLR BOX_OFF ;TURN OFF THE OLD
|
||
MOVE A6,A8
|
||
MOVE A6,A0
|
||
CALLR BOX_ON ;TURN ON THE NEW
|
||
MOVE A1,@WAVE,W ;TAKE ITS INFO
|
||
MOVE A1,@START_WAVE,W ;HOLD ON TO THIS FOR POSTERITY
|
||
MOVE A2,@START_SCORE,L ;STARTING SCORE
|
||
MOVE A3,@TUTOR,W ;SET MODE
|
||
SOUND1 BEEP_1
|
||
SLEEPK 15 ;THE PAUSE THAT REFRESHES
|
||
SUBK 15,A10
|
||
JRUC SELECT_TICK2
|
||
SELECT_TICK:
|
||
SUBK 3,A10
|
||
SELECT_TICK2:
|
||
JRGT SELECT_SLEEP
|
||
DEC A9
|
||
JRN A_SELECTION ;BR = TIME OUT
|
||
MOVE A9,@SELECTCOL,L ;STORE TIME
|
||
|
||
CALLR BLANK_TIME ;BLANK OLD TIME
|
||
|
||
MMTM A12,A8,A9
|
||
MOVI SELECT_TIME,A8
|
||
JSRP LM_PRINTF
|
||
MMFM A12,A8,A9
|
||
MOVI 62,A10 ;TICKS 'TIL SECOND
|
||
SELECT_SLEEP:
|
||
SLOOP 3,SELECT_LP
|
||
*YOU HAVE MADE A SELECTION, A SELEH-EH-EH-EHCTION!
|
||
A_SELECTION:
|
||
SOUND1 WIN_SND
|
||
SOUND1 MUSICOFF
|
||
MOVI AUDSTLV1,A0 ; ADD 1 TO APPROPRIATE START LEVEL
|
||
ADD A8,A0
|
||
CALLA AUD1
|
||
.IF PRINTER
|
||
CALLA PGAMELEVEL
|
||
.ENDIF
|
||
*CLEAR THE OTHER BOXES
|
||
MOVI NUMBOXS-1,A0
|
||
SELECT_CLEAR_LP:
|
||
CMP A0,A8
|
||
JREQ SELECT_CLEAR_NXT
|
||
CALLR CLR_BOX
|
||
SELECT_CLEAR_NXT:
|
||
DEC A0
|
||
JRNN SELECT_CLEAR_LP
|
||
|
||
CALLR BLANK_TIME ;BLANK THE TIME
|
||
|
||
MOVI [165+SKYTOPOF,97],A3
|
||
MOVI [20,200],A4
|
||
CALLA BLNKAREA ;CLEAR SELECT TEXT
|
||
|
||
SLEEP 62
|
||
|
||
GAME_INTRO_X:
|
||
CALLA MYOINIT
|
||
RETP
|
||
|
||
**************************************************************************
|
||
* *
|
||
* BOX_IT - DRAW ONE OF THE BOXES *
|
||
* A0 = BOX NUMBER *
|
||
* A1 = [COLOR,PALETTE] *
|
||
* RETURNS: *
|
||
* A1 = WAVE SELECTED BY BOX *
|
||
* A2 = START SCORE *
|
||
* A3 = MODE 0 = NORMAL / 1 = TUTOR *
|
||
* NOTE: TRASHES A2,A3,A4,A5,A7 *
|
||
* *
|
||
**************************************************************************
|
||
BOX_ON:
|
||
**** MOVI [0D0DH,0],A1 ;BOX ON COLOR
|
||
MOVE @SPLAYER_COL,A1,W
|
||
SLL 16,A1
|
||
MOVI 0F0F0101H,A5 ;TEXT ON COLOR
|
||
JRUC BOX_IT
|
||
BOX_OFF:
|
||
MOVI [0101H,0101H],A1 ;BOX OFF COLOR
|
||
MOVI 01010101H,A5 ;TEXT OFF COLOR
|
||
BOX_IT:
|
||
MMTM SP,A0,A8
|
||
MOVE A5,@SELECTCOL,L
|
||
MOVI BOXENTSIZ,A5
|
||
MPYU A0,A5
|
||
ADDI BOX_TAB,A5
|
||
MOVK 3,A2 ;BOX WIDTH
|
||
MOVE *A5+,A3,L ;BOX POSITION
|
||
MOVE *A5+,A0,L ;BOX SIZE
|
||
CALLA DRAWBOX
|
||
|
||
MOVE *A5+,A8,L
|
||
|
||
MMTM SP,A5,A6,A9,A10,A11
|
||
CALLA LM_SETUP
|
||
MOVE @SELECTCOL,A5,L ;BRING ON THE CORRECT COLOR
|
||
JSRP PRINTF
|
||
MMFM SP,A5,A6,A9,A10,A11
|
||
|
||
MOVE *A5+,A1,W ;SEND THE WAVE BACK
|
||
MOVE *A5+,A3,W ;SEND BACK THE MODE
|
||
MOVE *A5+,A2,L ;SEND THE STARTING SCORE
|
||
|
||
MMFM SP,A0,A8
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CLR_BOX - CLEAR AN ENTIRE BOX AREA *
|
||
* A0 = BOX NUMBER *
|
||
* NOTE: TRASHES A3,A4,A5 *
|
||
* *
|
||
**************************************************************************
|
||
CLR_BOX:
|
||
MOVI BOXENTSIZ,A5
|
||
MPYU A0,A5
|
||
ADDI BOX_TAB,A5
|
||
MOVE *A5+,A3,L
|
||
MOVE *A5+,A4,L
|
||
JAUC BLNKAREA
|
||
|
||
**************************************************************************
|
||
* *
|
||
* BLANK_TIME - BLANK THE SELECTION TIMER *
|
||
* NOTE: DESTROYS A3,A4 *
|
||
* *
|
||
**************************************************************************
|
||
BLANK_TIME:
|
||
MOVI [SELECTY-3,SELECTX-20],A3
|
||
MOVI [20,40],A4
|
||
JAUC BLNKAREA ;
|
||
|
||
RBOXX .EQU 65
|
||
RBOXY .EQU 60+SKYTOPOF
|
||
RBOXSPC .EQU 100
|
||
RBOXXSIZ .EQU 80
|
||
RBOXYSIZ .EQU 89
|
||
NUMBOXS .EQU 3
|
||
BOXENTSIZ .EQU 160
|
||
*
|
||
*SELECTION BOX TABLE
|
||
BOX_TAB:
|
||
.LONG [RBOXY,RBOXX],[RBOXYSIZ,RBOXXSIZ] ;[Y,X] POS, [Y,X] SIZE
|
||
.LONG BOX1TEXT ;TEXT TO PRINT IN BOX
|
||
.WORD 1,0 ;WAVE, TUTOR_MODE
|
||
.LONG 0 ;GIVE THIS MANY POINTS
|
||
|
||
.LONG [RBOXY,RBOXX+RBOXSPC],[RBOXYSIZ,RBOXXSIZ]
|
||
.LONG BOX2TEXT
|
||
.WORD 2,0
|
||
.LONG 200000H
|
||
|
||
.LONG [RBOXY,RBOXX+(2*RBOXSPC)],[RBOXYSIZ,RBOXXSIZ]
|
||
.LONG BOX3TEXT
|
||
.WORD 4,0
|
||
.LONG 400000H
|
||
|
||
|
||
SELECTCOL_TAB:
|
||
.LONG P1SELECTCOL,P2SELECTCOL,P3SELECTCOL,P4SELECTCOL
|
||
|
||
P1SELECTCOL:
|
||
.STRING "RED",0
|
||
.EVEN
|
||
P2SELECTCOL:
|
||
.STRING "BLUE",0
|
||
.EVEN
|
||
P3SELECTCOL:
|
||
.STRING "YELLOW",0
|
||
.EVEN
|
||
P4SELECTCOL:
|
||
.STRING "PURPLE",0
|
||
.EVEN
|
||
|
||
.BSS SELECTCOL,32
|
||
|
||
SELECT_TIME:
|
||
MESS_MAC RD15FONT,1,SELECTX,SELECTY,0F0F0101H,STRCNRM,0
|
||
.STRING "%d",0
|
||
.LONG SELECTCOL
|
||
.EVEN
|
||
|
||
SELECT_MESS:
|
||
MESS_MAC RD5FONT,2,197,165+SKYTOPOF,0D0D0000H,STRCNRM,0
|
||
.STRING "USE %p JOYSTICK TO SELECT\n\n"
|
||
.STRING "%p PUNCH BUTTON TO ENTER.\n"
|
||
.STRING "\d\f\p\bSELECT YOUR LEVEL!",0
|
||
.LONG SELECTCOL
|
||
.LONG SELECTCOL
|
||
.LONG RD20FONT
|
||
.LONG [-168,-128]
|
||
.LONG RED16
|
||
.WORD 0F0FH
|
||
.EVEN
|
||
|
||
BOX1TEXT:
|
||
MESS_MAC RD7FONT,1,RBOXX+(RBOXXSIZ/2),RBOXY+6,0,STRCNRM,0
|
||
.STRING "ISLAND 1\n\n\n\n"
|
||
.STRING "EASY\n"
|
||
.STRING "0\n\d\fLEVEL BONUS",0
|
||
.LONG RD5FONT
|
||
.LONG [0,12]
|
||
|
||
BOX2TEXT:
|
||
MESS_MAC RD7FONT,1,(RBOXX+(RBOXXSIZ/2))+RBOXSPC,RBOXY+6,0,STRCNRM,0
|
||
.STRING "ISLAND 2\n\n\n\n"
|
||
.STRING "ADVANCED\n"
|
||
.STRING "200,000\n\d\fLEVEL BONUS",0
|
||
.LONG RD5FONT
|
||
.LONG [0,12]
|
||
|
||
BOX3TEXT:
|
||
MESS_MAC RD7FONT,1,((RBOXX+(RBOXXSIZ/2))+(2*RBOXSPC)),RBOXY+6,0,STRCNRM,0
|
||
.STRING "ISLAND 4\n\n\n\n"
|
||
.STRING "EXPERT\n"
|
||
.STRING "400,000\n\d\fLEVEL BONUS",0
|
||
.LONG RD5FONT
|
||
.LONG [0,12]
|
||
|
||
GAME_INTRO_SND:
|
||
.WORD >F2FD,>1,>800A,0 ;GAME INTRO SOUND
|
||
|
||
*
|
||
*HELP BOX DUXPAL COLOR ASSIGNMENTS FOR EACH PLAYER
|
||
HBOX_COLORS:
|
||
.WORD TROG_RED, TROG_BLUE, TROG_YELLOW, TROG_PURPLE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* WAVE_START - ROUTINE TO CALL AT THE BEGINNING OF EACH WAVE. *
|
||
* THIS WILL LEAD THE GAME INTO PLAY (GAME_STATE = INPLAY). *
|
||
* EXPECTATIONS: *
|
||
* - DISPLAY SYSTEM ON *
|
||
* - ALL DISPLAY LISTS CLEAR *
|
||
* - ALL DISPLAY PAGES CLEAR *
|
||
* - AUTO ERASE OFF *
|
||
* @WAVE = WAVE # JUST STARTING *
|
||
* NOTE: CALL WITH JSRP *
|
||
* *
|
||
**************************************************************************
|
||
WAVE_START:
|
||
CALLA WRAMINIT
|
||
CALLR WAVE_DIFFICULTY
|
||
|
||
MOVE @VIRTUAL_TROGS,@NUM_TROGS,W
|
||
|
||
MOVE @TROGSPEED,A0,W
|
||
ADDI 400H,A0
|
||
MOVE A0,@MAX_TROGSPEED,W
|
||
|
||
CALLA CLRBGND
|
||
MOVE @WAVE,A0,W
|
||
CMPI LAST_WAVE,A0
|
||
JRLE WAVE_START_NORM
|
||
MOVI LAST_WAVE,A0 ;STICK AT THE TOP WAVE
|
||
WAVE_START_NORM:
|
||
DEC A0
|
||
SLL 5,A0
|
||
ADDI WAVE_TABLE,A0
|
||
MOVE *A0,A0,L
|
||
|
||
*DO ALL LONG WORD INITS FIRST
|
||
MOVE *A0+,A1,L
|
||
MOVE A1,@POSTMAP,L
|
||
MOVE *A0+,A1,L
|
||
MOVE A1,@BOUNDRIES,L
|
||
MOVE *A0+,A1,L
|
||
MOVE A1,@WAVE_BGND1,L
|
||
MOVE *A0+,A1,L
|
||
MOVE A1,@WAVE_BGND2,L
|
||
MOVE *A0+,A1,L
|
||
MOVE A1,@FOREGROUND,L
|
||
MOVE *A0+,A1,L
|
||
MOVE A1,@DISPATCH_TABLE,L
|
||
MOVE *A0+,A1,L
|
||
MOVE A1,@WAVE_MUSIC,L
|
||
MOVE *A0+,A1,L
|
||
MOVE A1,@WAVE_WATER,L
|
||
|
||
MOVE *A0+,A1,L
|
||
MOVE A1,@P1DATA+PDINO,L
|
||
MOVE *A0+,A1,L
|
||
MOVE A1,@P2DATA+PDINO,L
|
||
MOVE *A0+,A1,L
|
||
MOVE A1,@P3DATA+PDINO,L
|
||
MOVE *A0+,A1,L
|
||
MOVE A1,@P4DATA+PDINO,L
|
||
|
||
*NOW DO WORD INITS
|
||
MOVE *A0+,A1,W
|
||
MOVE A1,@SKYCOLOR,W ;STUFF THE SKY COLOR
|
||
CLR A1
|
||
MOVE A1,@IRQSKYE,W ;CLEAR TO BLACK
|
||
|
||
MOVE *A0+,A1,W
|
||
MOVE A1,@BGND_TYPE,W ;STORE BACKGROUND TYPE
|
||
|
||
MOVE *A0+,A1,W
|
||
MOVE A1,@TUNNEL,W ;STORE TUNNEL WAVE
|
||
|
||
MOVE *A0+,A1,W
|
||
MOVE A1,@FAST_TIME,W ;GET THE "FAST FINISH" TIME
|
||
|
||
MOVE *A0+,A1,L
|
||
MOVE A1,@TUNNEL_SCORE,L ;SCORE FOR TUNNELING
|
||
|
||
MOVE *A0+,A1,L
|
||
MOVE A1,@WAVE_SHOW,L ;TROG SHOW TO DO THIS WAVE
|
||
|
||
MOVE *A0+,A1,L
|
||
MOVE A1,@WAVE_INSTRUCT,L ;INSTRUCTIONS TO POST THIS WAVE
|
||
|
||
MOVE *A0+,A1,L
|
||
MOVE A1,@WAVE_PSTUFF,L ;HELP SHIT
|
||
|
||
MOVE *A0+,A1,L
|
||
MOVE A1,@EGG_LIST,L ;WHERE TO PUT THE EGGS
|
||
|
||
MOVE *A0+,A1,L
|
||
MOVE A1,@BONE_LIST,L ;WHERE TO PUT THE EGGS
|
||
|
||
*DON'T SLEEP 'TIL AFTER THE CALL
|
||
CALLA GET_CSTR
|
||
CALLA G_CRED ;UPDATE THE WAVE DISPLAY
|
||
CALLA ISLAND_NUM ;PLOP OUT THE ISLAND NUMBER
|
||
|
||
MOVE @STORY_MODE,A0,W
|
||
JRNZ NO_CLEAR
|
||
CALLA CLRP_P0
|
||
CALLA CLRP_P1
|
||
|
||
MOVE @WAVE_SHOW,A8,L ;NO SHOW THIS WAVE
|
||
JRZ NO_CLEAR
|
||
MOVE @WAVE,A0,W
|
||
MOVE @START_WAVE,A1,W
|
||
CMP A0,A1 ;DID HE JUST SELECT HIS WAY HERE
|
||
JREQ NO_CLEAR ;BR = YES, GIVE NO SHOW
|
||
CALLA IAUTOE ;INITIALIZE THE AUTO ERASE AREA
|
||
SLEEPK 5
|
||
JSRPR A8
|
||
NO_CLEAR:
|
||
CALLA IAUTOE ;INITIALIZE THE AUTO ERASE AREA
|
||
SLEEPK 5
|
||
CALLA PAGE0
|
||
|
||
DISPOFF
|
||
|
||
CALLA CONSMOVE ;CONSTRUCT THE MOVE TABLES
|
||
|
||
***** CALLA HOUSE_SEL
|
||
|
||
MOVE @WAVE_BGND1,@BAKMODS,L
|
||
MOVE @WAVE_BGND2,@BAK2MODS,L
|
||
|
||
CALLA BGND_UD1 ;UPDATE THE BACKGROUNDS
|
||
CALLA BGND_UD2
|
||
CALLA FGND_OUT
|
||
|
||
MOVE @GAME_STATE,A0,W
|
||
CMPI INAMODE,A0 ;ARE WE IN AMODE?
|
||
JREQ WS_NODISP ;BR = YES, NO MASTER DISPATCH
|
||
|
||
CREATE MASTERID,MASTERDP ;CREATE MASTER DISPATCH LAST THING
|
||
|
||
WS_NODISP
|
||
SLEEPK 3 ;WATCH THE SHIT!
|
||
|
||
MOVI DUXNOFADE,A0
|
||
CALLA FADEIN
|
||
SLEEPK 1
|
||
|
||
DISPON
|
||
|
||
MOVK 1,A0
|
||
MOVE A0,@GAMERASE,W ;AUTO ERASE ON
|
||
|
||
ALLPLYR CLR_PWAVEST ;CLEAR WAVE START FLAG
|
||
ALLPLYR CLR_PDINOCNT ;CLEAR THE DINOSAUR COUNTS
|
||
ALLPLYR CLR_PDTHPOS ;CLEAR THE LAST DEATH POSITION
|
||
ALLPLYR CLR_PBOZO ;NO BOZOS
|
||
|
||
MOVE @WAVE_WATER,A7,L ;START THE "WATER" CYCLER FOR THIS WAVE
|
||
JRZ NO_WATER_CYCLE ;BR = NONE TO START
|
||
MOVI INDPID,A1
|
||
CALLA GETPRC
|
||
NO_WATER_CYCLE:
|
||
MOVI 800H,A9
|
||
CREATE SKYPID,SKYUP
|
||
|
||
SOUND1 ALLOFF
|
||
SLEEPK 3
|
||
SOUND1 VOLUMEF ;MAKE SURE THE VOLUME IS FULL
|
||
SLEEPK 3
|
||
|
||
CALLA HOUSE_SEL ;SELECT A HOUSE
|
||
|
||
MOVE @WAVE_MUSIC,A0,L ;GET THE MUSIC FOR THIS WAVE
|
||
JRZ WAVE_START_NO_M ;BR = NO MUSIC THIS WAVE
|
||
CALLA ONESND
|
||
|
||
WAVE_START_NO_M:
|
||
MOVE @GAME_STATE,A0,W ; CHECK IF IN ATTMODE
|
||
CMPI INAMODE,A0
|
||
JREQ WAVE_START_AMODE
|
||
|
||
*DO THIS STUFF ONLY WHEN STARTING A WAVE DURING A REAL GAME
|
||
|
||
MOVE @WAVE_INSTRUCT,A0,L
|
||
JRZ WAVE_START_NO_INS
|
||
|
||
JSRPR A0
|
||
|
||
WAVE_START_NO_INS:
|
||
MOVI INPLAY,A0 ;CAUTION: DO NOT SLEEP AFTER THIS
|
||
MOVE A0,@GAME_STATE,W
|
||
|
||
MOVE @EGG_LIST,A1,L
|
||
JRZ WS_EGGRAND
|
||
CALLA LAY_EGGS
|
||
WS_EGGRAND
|
||
MOVE @BONE_LIST,A3,L
|
||
CALLA LAY_BONES
|
||
|
||
CREATE INDPID,PLAYER_ADJUST ;PLAYER ADJUSTMENT PROCESS
|
||
CREATE INDPID,TARBAITER ;BAITER WATCH PROCESS
|
||
CALLA ALLOT_EGGS ;MAKE THE EGG ALLOTMENT
|
||
CREATE INDPID,LAY_MAN ;CREATE THE EGG LAYER
|
||
|
||
WAVE_START_AMODE:
|
||
CALLA COLL_START ;START THE COLLISION ROUTINE
|
||
|
||
RETP
|
||
*
|
||
*EXCLUDE THESE PALETTES WHEN FADING UP THE ISLAND
|
||
*
|
||
DUXNOFADE:
|
||
.LONG DUXPAL, RED16, YELLOW16, BLUE16, PINK16, FIXED3, GAMEFIX, 0
|
||
|
||
|
||
MAXDIFF .EQU 10
|
||
**************************************************************************
|
||
* *
|
||
* WAVE_DIFFICULTY - SETUP WAVE DIFFICULTY PARAMETERS *
|
||
* USES THE THE GAME ADJUSTMENT ADJDIFF AS THE CURRENT DIFFICULTY *
|
||
* *
|
||
**************************************************************************
|
||
WAVE_DIFFICULTY:
|
||
MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11
|
||
ADJUST ADJDIFF ;GET MASTER DIFFICULTY
|
||
CMPI MAXDIFF,A0
|
||
JRLS WDIFF_OK ;BR = DIFFICULTY SETTING IS O.K.
|
||
MOVI MAXDIFF,A0 ;INSERT MAXIMUM ALLOWED DIFFICULTY
|
||
WDIFF_OK:
|
||
MOVE @WAVE,A1,W
|
||
MOVE A1,A9
|
||
CMPI NWAVES,A1
|
||
JRLE WDIFF_PARAMS
|
||
**** SUBK NWAVES,A1
|
||
MOVI NWAVES,A1 ;STICK AT TOP WAVE
|
||
WDIFF_PARAMS:
|
||
SLL 4,A1 ;MULTIPLY BY 16
|
||
SUBK 5,A0
|
||
MOVI WDIFF_RAM_ST,A2
|
||
MOVI WAVE_DIFF_TAB,A3
|
||
WDIFF_LP:
|
||
MOVE A3,A5
|
||
MOVE *A5+,A7,W ;GET DIFFICULTY DELTA
|
||
MOVE *A5+,A6,W ;GET MIN
|
||
MOVE *A5+,A4,W ;GET MAX
|
||
|
||
**** MOVE *A5,A10,W ;GET THE SINGLE PLAYER ADDER
|
||
**** CMPI 4,A9
|
||
**** JRHI WDIFF_SPADD
|
||
**** CLR A10
|
||
****WDIFF_SPADD:
|
||
|
||
ADD A1,A5
|
||
MOVE *A5,A8,W ;GET WAVE VALUE
|
||
MPYS A0,A7
|
||
ADD A7,A8 ;ADD IN DELTA
|
||
|
||
**** MOVE @CURPLYRS,A11,W
|
||
**** CMPI 1,A11
|
||
**** JRHI WDIFF_MANY
|
||
**** ADD A10,A8
|
||
****WDIFF_MANY:
|
||
|
||
CMP A8,A6
|
||
JRLS WDIFF_MIN ;CHECK FOR MIN
|
||
MOVE A6,A8
|
||
JRUC WDIFF_MAX
|
||
WDIFF_MIN:
|
||
CMP A8,A4 ;CHECK FOR MAX
|
||
JRHS WDIFF_MAX
|
||
MOVE A4,A8
|
||
WDIFF_MAX:
|
||
MOVE A8,*A2+,W ;STORE IT AWAY
|
||
ADDI (NWAVES + 4)*16,A3 ;OFFSET TO NEXT TABLE ENTRY
|
||
CMPI WDIFF_RAM_END,A2
|
||
JRLO WDIFF_LP ;NOT DONE
|
||
MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* WAVE_END - JUMP HERE TO END THE WAVE. THIS WILL CHANGE THE GAME_STATE *
|
||
* TO INGAME AND HANDLE BONUS STUFF. FINALLY IT WILL INCREMENT *
|
||
* WAVE AND CALL WAVE_START TO START THE NEXT WAVE. *
|
||
* *
|
||
**************************************************************************
|
||
WAVE_END:
|
||
MOVE @GAME_STATE,A0,W
|
||
CMPI INGAMEOV,A0
|
||
JAEQ SUCIDE
|
||
MOVI INGAME,A0
|
||
MOVE A0,@GAME_STATE,W
|
||
|
||
JSRP WAIT_WAVE_END
|
||
|
||
MOVE @GAME_STATE,A0,W
|
||
CMPI INGAMEOV,A0
|
||
JAEQ SUCIDE
|
||
|
||
**** MOVK 1,A11
|
||
**** CREATE FADEPID,FADE_DOWN ;FADE ALL MUSIC DOWN
|
||
|
||
MOVI SCRNMID,A10
|
||
MOVI SCRNMID,A11
|
||
MOVI 20,A0
|
||
JSRP SCREXP32 ;CLOSE THE CURTAIN
|
||
|
||
CLR A0
|
||
MOVI 0A000h,A1
|
||
CALLA KILALL ;KILL ALL BUT THE INDESTRUCTIBLES
|
||
|
||
CLR A0
|
||
MOVE A0,@GAMERASE,W
|
||
CALLA AUTOEOFF
|
||
|
||
DISPOFF
|
||
CALLA DMAQWAIT ;WAIT ON ALL TO FINISH
|
||
CALLA MYOINIT
|
||
DISPON
|
||
|
||
ALLPLYR CLR_PDINOCNT ;CLEAR THE DINOSAUR COUNTS
|
||
ALLPLYR CLR_DRONE ;CLEAR THE DRONE STATUS OF ALL PLAYERS
|
||
|
||
CALLA SCORAREA ;SHOW THE SCORE
|
||
CALLA CLRSNDDB
|
||
CALLA CLRP_P0
|
||
|
||
MOVI PINITIALPID,A0
|
||
MOVI 0F8FFH,A1
|
||
CALLA EXISTP ;ANY INTIAL ENTRIES STILL AROUND?
|
||
JRZ WAVE_END_NORMAL_PRESET ;BR = NO, JUST RESET THE SYSTEM
|
||
|
||
CLR A0
|
||
MOVI 0A000h,A1
|
||
CALLA KILALL ;KILL ALL BUT THE INDESTRUCTIBLES
|
||
JRUC WAVE_NEXT_NO_PRESET
|
||
|
||
WAVE_END_NORMAL_PRESET:
|
||
MOVI 08000h,A1
|
||
MOVE A1,A0
|
||
CALLA EXISTP ;ARE THERE INDESTRUCTIBLES?
|
||
JRZ WAVE_PINIT ;BR = NO, RE-INITIALIZE THE PROCESSES
|
||
CLR A0
|
||
CALLA KILALL ;KILL EVERYTHING WE CAN
|
||
JRUC WAVE_NEXT
|
||
*MAJOR PROCESS SYSTEM RESET HERE
|
||
WAVE_PINIT:
|
||
MOVE *A13(PROCID),A1,W
|
||
CALLA PINIT
|
||
MOVI WAVE_NEXT,A7
|
||
MOVI STCKST,SP,L ;RESET THE SYSTEM STACK
|
||
CALLA GETPRC ;GET THE PROCESS
|
||
JAUC EXEC_LP ;AND DO SOME EXEC LOOP SHIT
|
||
*NOW CONTINUE TO THE NEXT WAVE
|
||
WAVE_NEXT:
|
||
*IF ANY PROCESSES NEED TO BE RE-STARTED, DO IT HERE
|
||
CALLA COLOR_START ;RE-START THE COLORS AFTER BLOW-OUT
|
||
CREATE INDPIDW,SCORPROC ;RE-START UP THE PUSH PLAYER START PROCESS
|
||
*ANY PROCESSES THAT NEED TO BE RE-STARTED SHOULD HAVE DONE SO BY NOW
|
||
WAVE_NEXT_NO_PRESET:
|
||
ALLPLYR CLR_PDEAD ;CLEAR THESE DEAD FLAGS FOR SURE
|
||
ALLPLYR INC_PCONSECUTIVE ;INC OR CLR THE CONSECUTIVE WAVE COUNT
|
||
|
||
MOVI AUDMAXWAVE,A0
|
||
CALLA GET_AUD
|
||
MOVE @WAVE,A2,W
|
||
|
||
CMP A1,A2
|
||
JRLE WAVE_END_NO_AUD
|
||
MOVE A2,A1
|
||
CALLA STORE_AUDIT
|
||
WAVE_END_NO_AUD:
|
||
MOVE @WAVE,A0,W
|
||
CMPI LAST_WAVE,A0
|
||
JRHS WAVE_LAST_DUDE
|
||
|
||
INCM @WAVE,W
|
||
JSRP WAVE_START ;\ DO NOT SLEEP BETWEEN THESE
|
||
ALLPLYR PLAYER_RESTART ;/ TWO CALLS. IT WOULD BE DANGEROUS
|
||
ALLPLYR OUTEGGS ;OUT EGG NUMBERS
|
||
|
||
DIE
|
||
|
||
WAVE_LAST_DUDE
|
||
AUDIT AUDFINISH ;YES WE HAVE FINISHED
|
||
JSRP GAME_ENDER
|
||
JAUC GAME_OVER
|
||
|
||
**************************************************************************
|
||
* *
|
||
* WAIT_WAVE_END - ROUTINE THAT RETURNS WHEN ALL OF THE WAVE END *
|
||
* WAIT PROCESSES ARE GONE. *
|
||
* NOTE: CALL WITH JSRP *
|
||
* *
|
||
**************************************************************************
|
||
WAIT_WAVE_END:
|
||
PUSHP A11
|
||
MOVI 120,A11 ;TIME-OUT FOR BOGUSNESS
|
||
WWE_LP
|
||
SLEEP 1
|
||
MOVI 4000H,A0
|
||
MOVE A0,A1
|
||
CALLA EXISTP ;WAVE END WAIT PROCESSES?
|
||
JRZ WWE_CONT ;BR = NO, THEN START THE PARTY
|
||
DSJ A11,WWE_LP
|
||
.IF DEBUG
|
||
JRUC $
|
||
.ENDIF
|
||
WWE_CONT:
|
||
PULLP A11
|
||
RETP
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PLAYER_ADJUST - PROCESS TO CONTINUALLY ADJUST CERTAIN VARIABLES *
|
||
* ACCORDING TO THE CURRENT NUMBER OF PLAYERS IN THE *
|
||
* GAME. *
|
||
* *
|
||
**************************************************************************
|
||
PLAYER_ADJUST
|
||
SLEEP 10
|
||
MOVE @BONUS_WAVE,A0,W ;ARE WE IN THE BONUS?
|
||
JRZ PA_DIE ;BR = NO
|
||
MOVE @CURPLYRS,A0,W
|
||
MOVE @VIRTUAL_TROGS,A2,W
|
||
ADD A0,A2
|
||
MOVE A2,@NUM_TROGS,W
|
||
JRUC PLAYER_ADJUST
|
||
PA_DIE
|
||
MOVE @VIRTUAL_TROGS,@NUM_TROGS,W
|
||
DIE
|
||
|
||
*BOZO WATCH CODE COMMENTED OUT 11/1/90 GNP
|
||
.IF 0
|
||
**************************************************************************
|
||
* *
|
||
* BOZO_WATCH - PROCESS TO WATCH FOR PLAYERS TO BECOME BOZOS AND *
|
||
* THEN SETTING THE PBOZO LEVEL SO THAT THE *
|
||
* GAME CAN HELP CURE THIS HATED AFFLICTION. *
|
||
* *
|
||
**************************************************************************
|
||
BOZO_WATCH:
|
||
MOVE @WAVETIME,A0,L
|
||
CMPI 2000H,A0
|
||
JRHI BOZO_WATCH_X ;BR = I CAN ONLY TAKE A BOZO FOR SO LONG!
|
||
ALLPLYR BOZO_QUALIFY ;ATTEMPT TO QUALIFY THE PLAYERS
|
||
SLOOP 10,BOZO_WATCH ;WHAT A PROCESS!
|
||
BOZO_WATCH_X:
|
||
ALLPLYR CLR_PBOZO ;NO MORE GIMME'S
|
||
DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* BOZO_QUALIFY - ROUTINE TO DETERMINE IF THE GIVEN PLAYER IS A BOZO. *
|
||
* IT WILL SET HIS PBOZO LEVEL ACCORDINGLY. *
|
||
* A2 = PTR TO PLAYER DATA STRUCTURE. *
|
||
* *
|
||
**************************************************************************
|
||
BOZO_QUALIFY:
|
||
MMTM SP,A0,A1,A3,A4,A5,A6,A7,A8,A9
|
||
CLR A4 ;THIS WILL BE BOZO STATUS
|
||
MOVE *A2(POBJ),A0,L ;IS HE ALIVE?
|
||
JRZ BOZO_QUALIFY_LEVELX ;BR = NO, JUST ZERO BOZO-ISH
|
||
MOVE *A2(PDRONEFLG),A0,W
|
||
JRNZ BOZO_QUALIFY_LEVELX
|
||
|
||
MOVE *A2(PWAVEDEATHS),A5,W
|
||
MOVE *A2(PEXTRAEARN),A0,W
|
||
SUB A0,A5
|
||
JRNN BOZO_Q_LADJ
|
||
CLR A5 ;EFFECTIVELY IT'S ZERO
|
||
BOZO_Q_LADJ:
|
||
MOVE A5,A3 ;ADJUSTED WAVE DEATH COUNT
|
||
|
||
**** MOVI ILIVES,A0
|
||
ADJUST ADJLIVES ;GET # OF LIVES FROM CMOS
|
||
MOVE A0,A9 ;STORE IT HERE
|
||
DIVU A0,A5 ;A5 = NUMBER OF CREDITS THIS WAVE
|
||
MOVE *A2(PEGGS),A0,W
|
||
MOVE @WAVEEGGS,A6,W
|
||
SUB A0,A6 ;A6 = WAVEEGGS - PEGGS
|
||
**** MOVE *A2(PWAVEDEATHS),A3,W
|
||
MOVE *A2(PWAVEST),A0,W
|
||
DIVU A0,A3 ;A3 = PWAVEDEATHS/PWAVEST
|
||
MOVE *A2(PLASTEGG),A7,L ;A7 = ELAPSED TIME SINCE LAST EGG
|
||
|
||
CLR A8 ;BOZO WATCH FLAG
|
||
|
||
MOVE @MAXBOZO,A0,W
|
||
JRZ BOZO_QUALIFY_OFF
|
||
|
||
MOVE *A2(PCONSECUTIVE),A1,W
|
||
CMP A0,A1
|
||
JRLE BOZO_QUALIFY_LEVEL1
|
||
*
|
||
*TIME TO TURN BOZO MODE OFF
|
||
BOZO_QUALIFY_OFF:
|
||
MOVE @WAVE,A0,W
|
||
MOVE *A2(PLASTWIN),A1,W
|
||
SUB A1,A0
|
||
MOVE @CURPLYRS,A1,W
|
||
INC A1
|
||
CMP A1,A0 ;IS THIS GUY A REAL LOSER?
|
||
JRHS BOZO_QUALIFY_LEVEL1 ;BR = YES, DO A NORMAL BOZO CHECK
|
||
|
||
MOVK 1,A8
|
||
|
||
**** ADJUST ADJFREPL ;IF IN FREE PLAY MODE, THEN DON'T
|
||
**** JRNZ BOZO_QUALIFY_LEVELX ;FEEL SORRY IF HE'S SPENDING TOO MUCH.
|
||
*
|
||
*QUALIFY LEVEL 1
|
||
*
|
||
BOZO_QUALIFY_LEVEL1:
|
||
CMPI 1,A5 ;ONE CREDIT SPENT?
|
||
JREQ BOZO_LEVEL1 ;BR = YES, HE IS LEVEL ONE
|
||
MOVE A8,A8
|
||
JRNZ BOZO_QUALIFY_LEVEL2
|
||
MOVE *A2(PLASTDTH),A0,L
|
||
CMP A7,A0
|
||
JRLO BOZO_LEVEL1
|
||
CMPI 300H,A7
|
||
JRLO BOZO_QUALIFY_LEVEL2
|
||
MOVE A6,A6
|
||
JRGT BOZO_LEVEL1
|
||
CMPI 400H,A7
|
||
JRLO BOZO_QUALIFY_LEVEL2
|
||
BOZO_LEVEL1:
|
||
MOVK 1,A4 ;HE IS AT LEAST A LEVEL 1
|
||
*
|
||
*QUALIFY LEVEL 2
|
||
*
|
||
BOZO_QUALIFY_LEVEL2:
|
||
CMPI 2,A5 ;TWO CREDITS SPENT?
|
||
JREQ BOZO_LEVEL2 ;BR = YES, HE IS LEVEL TWO
|
||
MOVE A8,A8
|
||
JRNZ BOZO_QUALIFY_LEVEL3
|
||
|
||
MOVE *A2(PEGGSTHISLIFE),A0,W ;HAS HE PICKED UP ANY EGGS?
|
||
JRZ BOZO_QUALIFY_LEVEL2A ;BR = NO, THEN CONTINUE WITH THIS
|
||
|
||
CMPI 100H,A7
|
||
JRLO BOZO_QUALIFY_LEVEL3
|
||
|
||
BOZO_QUALIFY_LEVEL2A:
|
||
*** CMPI ILIVES-2,A3
|
||
MOVE A9,A0
|
||
SUBK 2,A0
|
||
CMP A0,A3
|
||
JRLO BOZO_QUALIFY_LEVEL3
|
||
|
||
MOVE A6,A6
|
||
JRGT BOZO_LEVEL2
|
||
|
||
CMPI 200H,A7
|
||
JRLO BOZO_QUALIFY_LEVEL3
|
||
|
||
BOZO_LEVEL2:
|
||
MOVK 2,A4 ;AHH, ANOTHER LEVEL MR. BOND
|
||
*
|
||
*QUALIFY LEVEL 3 (THIS IS EASY)
|
||
*A3 = PWAVEDEATHS/PWAVEST
|
||
*
|
||
BOZO_QUALIFY_LEVEL3:
|
||
CMPI 3,A5 ;THREE CREDITS SPENT?
|
||
JREQ BOZO_LEVEL3 ;BR = YES, HE IS LEVEL THREE
|
||
MOVE A8,A8
|
||
JRNZ BOZO_QUALIFY_LEVEL4
|
||
|
||
MOVE *A2(PEGGSTHISLIFE),A0,W ;HAS HE PICKED UP ANY EGGS?
|
||
JRZ BOZO_QUALIFY_LEVEL3A ;BR = NO, THEN CONTINUE WITH THIS
|
||
|
||
CMPI 180H,A7
|
||
JRLO BOZO_QUALIFY_LEVEL4
|
||
|
||
BOZO_QUALIFY_LEVEL3A:
|
||
**** CMPI ILIVES-1,A3
|
||
MOVE A9,A0
|
||
SUBK 1,A0
|
||
CMP A0,A3
|
||
JRLO BOZO_QUALIFY_LEVEL4
|
||
|
||
MOVE A6,A6
|
||
JRGT BOZO_LEVEL3
|
||
|
||
CMPI 300H,A7
|
||
JRLO BOZO_QUALIFY_LEVEL4
|
||
|
||
BOZO_LEVEL3:
|
||
MOVK 3,A4
|
||
*
|
||
*QUALIFY LEVEL 4 - SUPER BOZO
|
||
*
|
||
BOZO_QUALIFY_LEVEL4:
|
||
CMPI 3,A5 ;MORE THAN THREE CREDITS SPENT?
|
||
JRHI BOZO_LEVEL4 ;BR = YES, HE IS LEVEL FOUR
|
||
MOVE @WAVE,A0,W
|
||
MOVE *A2(PLASTWIN),A1,W
|
||
SUB A1,A0
|
||
CMPI 5,A0
|
||
JRLS BOZO_QUALIFY_LEVELX
|
||
MOVE *A2(PCONSECUTIVE),A1,W
|
||
CMPI 5,A1
|
||
JRHI BOZO_QUALIFY_LEVELX
|
||
BOZO_LEVEL4:
|
||
MOVK 4,A4 ;HE'S THE BIGGEST BOZO OF THEM ALL
|
||
BOZO_QUALIFY_LEVELX:
|
||
MOVE A4,*A2(PBOZO),W
|
||
MOVI AUDMAXBOZO,A0
|
||
CALLA GET_AUD
|
||
CMP A1,A4
|
||
JRLE BOZO_NO_AUD
|
||
MOVE A4,A1
|
||
CALLA STORE_AUDIT
|
||
BOZO_NO_AUD:
|
||
*** CALLA OUTBOZO
|
||
MMFM SP,A0,A1,A3,A4,A5,A6,A7,A8,A9
|
||
RETS
|
||
|
||
.ENDIF
|
||
|
||
**************************************************************************
|
||
* *
|
||
* GAME_OVER - THE GAME OVER PROCESS, JUMP HERE FROM CURRENT PROCESS. *
|
||
* IT WILL TAKE CONTROL. *
|
||
* A11 = PTR TO PLAYER ENDING THIS GAME *
|
||
* *
|
||
**************************************************************************
|
||
GAME_OVER
|
||
MOVE @WAVE,A1,W ; SET THE AVERAGE WAVE NUMBER
|
||
CALLA SET_AVGWAVE
|
||
.IF PRINTER
|
||
CALLA PGAMEEND
|
||
.ENDIF
|
||
CLR A1
|
||
MOVE A1,@GAMEUNITS,W ; CLEAR IT OUT FOR NEXT TIME
|
||
|
||
MOVE @GAME_STATE,A0,W
|
||
CMPI INGAMEOV,A0 ;ALREADY IN GAME OVER?
|
||
JREQ GO_SKIP_SND ;BR = YES, THEN NO SOUND
|
||
|
||
MOVI INGAMEOV,A0
|
||
MOVE A0,@GAME_STATE,W ;SET STATE
|
||
SOUND1 GAMEO_SND ;AND MAKE SOUND
|
||
|
||
GO_SKIP_SND
|
||
JSRP GAMEOTEXT ;OUTPUT THE TEXT FOR GAME OVER
|
||
SLEEP 4
|
||
MOVE A11,A2
|
||
SLEEP 195
|
||
|
||
GO_INIT_WAIT:
|
||
MOVI PINITIALPID,A0
|
||
MOVI 0F8FFH,A1
|
||
CALLA EXISTP ;ARE THERE ANY INITIAL PROCESSES?
|
||
JRZ GO_CONTINUE ;BR = NO
|
||
SLOOP 10,GO_INIT_WAIT
|
||
GO_CONTINUE:
|
||
CALLA EMPTY_HSHOLD ; EMPTY OUT HS HOLDING AREA
|
||
|
||
MOVE @IRQSKYE,A9,W
|
||
JRZ GO_SKIP_SKY
|
||
|
||
MOVI 2000H,A9
|
||
CREATE SKYPID,SKYDOWN
|
||
|
||
GO_SKIP_SKY
|
||
SLEEP 1
|
||
|
||
PUSHP A11 ;STORE THE ENDING PLAYER DATA
|
||
|
||
MOVI SCRNMID,A10
|
||
MOVE A10,A11
|
||
MOVK 16,A0
|
||
JSRP SCREXP32 ;SCREEN DOWN
|
||
CLR A0
|
||
MOVE A0,@IRQSKYE,W ;JUST IN CASE SKYDOWN DIDN'T MAKE IT
|
||
|
||
CLR A0
|
||
MOVI 0A000h,A1
|
||
CALLA KILALL ;WHACK-A-MOLE
|
||
|
||
CALLA MYOINIT
|
||
|
||
MOVK 1,A0
|
||
MOVE A0,@GAMERASE,W
|
||
SLEEP 2
|
||
|
||
CLR A0
|
||
MOVE A0,@GAMERASE,W
|
||
CALLA AUTOEOFF
|
||
|
||
PULLP A11
|
||
**** JSRP GAME_STATS ;SHOW ME THE STATS, NOW!
|
||
|
||
MOVI 08000h,A1
|
||
MOVE A1,A0
|
||
CALLA EXISTP ;ARE THERE INDESTRUCTIBLES?
|
||
JRZ GAMEO_PINIT ;BR = NO, RE-INITIALIZE THE PROCESSES
|
||
CALLA WIPEOUT
|
||
JRUC GAMEO_NEXT
|
||
*MAJOR PROCESS SYSTEM RESET HERE
|
||
GAMEO_PINIT:
|
||
CALLA WIPEOUT
|
||
MOVE *A13(PROCID),A1,W
|
||
CALLA PINIT
|
||
MOVI GAMEO_NEXT,A7
|
||
MOVI STCKST,SP,L ;RESET THE SYSTEM STACK
|
||
CALLA GETPRC ;GET THE PROCESS
|
||
JAUC EXEC_LP ;AND DO SOME EXEC LOOP SHIT
|
||
*NOW CONTINUE TO THE NEXT WAVE
|
||
GAMEO_NEXT:
|
||
*GET INTO ATTRACT MODE
|
||
MOVI INAMODE,A1
|
||
MOVE A1,@GAME_STATE,W
|
||
CREATE INDPID,ATT_MODE_GAME_OVER
|
||
DIE
|
||
|
||
GAMEO_SND .WORD >F3F0,>130,>8001,0 ;GAME OVER SOUND
|
||
|
||
*
|
||
*ALLOCATE SOME RAM FOR STRINGS AND WINS
|
||
.BSS STAT_COUNT,16
|
||
.BSS STAT_WINS,16
|
||
.BSS STAT_SCORE,32
|
||
|
||
.IF 0
|
||
**************************************************************************
|
||
* *
|
||
* GAME_STATS - PRINT OUT THE GAME STATISTICS SCREEN(S) *
|
||
* A11 = PTR TO PLAYER THAT ENDED THE GAME *
|
||
* DISPLAY CONDITIONS: *
|
||
* - DISPLAY SYSTEM ON *
|
||
* - AUTO-ERASE OFF *
|
||
* - PLAYFIELD AREA CLEARED *
|
||
* NOTE: CALL WITH JSRP *
|
||
* DESTROYS PTEMP1 AND PTEMP2 *
|
||
* *
|
||
**************************************************************************
|
||
GAME_STATS:
|
||
MOVE A11,*A13(PTEMP2),L
|
||
|
||
MOVE @P1DATA+PWINS,A8,W
|
||
MOVI P1NAME,A4
|
||
|
||
MOVE @P2DATA+PWINS,A9,W
|
||
MOVI P2NAME,A5
|
||
|
||
MOVE @P3DATA+PWINS,A10,W
|
||
MOVI P3NAME,A6
|
||
|
||
MOVE @P4DATA+PWINS,A11,W
|
||
MOVI P4NAME,A7
|
||
|
||
MOVE @P1DATA+PSCORE,B0,L
|
||
MOVE @P2DATA+PSCORE,B1,L
|
||
MOVE @P3DATA+PSCORE,B2,L
|
||
MOVE @P4DATA+PSCORE,B3,L
|
||
|
||
MOVK 3,A1 ;BUBBLE SORT THE WINS
|
||
COMP_STAT_LP:
|
||
CMP A11,A10
|
||
JRHI COMP_STAT1
|
||
JRLO COMP_SWAP1
|
||
CMP B3,B2 ;EQUAL ON WINS, CHECK SCORES
|
||
JRHS COMP_STAT1 ;BR = SONG REMAINS THE SAME
|
||
COMP_SWAP1:
|
||
SWAP A11,A10
|
||
SWAP A7,A6
|
||
SWAP B3,B2
|
||
COMP_STAT1:
|
||
CMP A10,A9
|
||
JRHI COMP_STAT2
|
||
JRLO COMP_SWAP2
|
||
CMP B2,B1 ;EQUAL ON WINS, CHECK SCORES
|
||
JRHS COMP_STAT2 ;BR = KEEP THEM THE SAME
|
||
COMP_SWAP2:
|
||
SWAP A10,A9
|
||
SWAP A6,A5
|
||
SWAP B2,B1
|
||
COMP_STAT2:
|
||
CMP A9,A8
|
||
JRHI COMP_STAT3
|
||
JRLO COMP_SWAP3 ;SWAP IMMEADIATELY IF THEY ARE REVERSED
|
||
CMP B1,B0 ;EQUAL ON WINS, CHECK SCORES
|
||
JRHS COMP_STAT3 ;BR = KEEP IT IN THE SAME ORDER
|
||
COMP_SWAP3:
|
||
SWAP A9,A8
|
||
SWAP A5,A4
|
||
SWAP B1,B0
|
||
COMP_STAT3:
|
||
DSJ A1,COMP_STAT_LP
|
||
|
||
CLR A1
|
||
MOVE A1,@STAT_COUNT,W ;CLEAR THE WINNER COUNT
|
||
|
||
MOVE A11,A11 ;CHECK FOURTH PLACE WINS
|
||
JRZ NO_FOURTH
|
||
INCM @STAT_COUNT,W
|
||
MMTM A12,A7,A11 ;STACK EVERYBODY CORRECTLY
|
||
NO_FOURTH:
|
||
MOVE A10,A10 ;CHECK THIRD PLACE WINS
|
||
JRZ NO_THIRD
|
||
INCM @STAT_COUNT,W
|
||
MMTM A12,A6,A10
|
||
NO_THIRD:
|
||
MOVE A9,A9 ;CHECK SECOND PLACE
|
||
JRZ NO_SECOND ;BR = THE BUCK STOPS HERE
|
||
INCM @STAT_COUNT,W
|
||
MMTM A12,A5,A9
|
||
NO_SECOND:
|
||
MOVE A8,A8 ;CHECK FIRST PLACE
|
||
JRZ NO_WINNERS ;BR = NOT ONE WINNER, YUK!
|
||
INCM @STAT_COUNT,W
|
||
|
||
MOVE @STAT_COUNT,A1,W
|
||
CMPI 1,A1 ;DID MORE THAN ONE PLAYER WIN?
|
||
JRLS NO_WINNERS ;BR = NO
|
||
|
||
MOVE A4,@STRING1,L ;PRINT THE WINNER
|
||
MOVE A8,@STAT_WINS,W
|
||
MOVE B0,@STAT_SCORE,L ;STORE THE WINNERS SCORE
|
||
CMPI 1,A8
|
||
JRNE STAT_WIN_S
|
||
MOVI SUFFIX_NULL,A1
|
||
JRUC STAT_PRINT_WINNER
|
||
STAT_WIN_S:
|
||
MOVI SUFFIX_S,A1
|
||
STAT_PRINT_WINNER:
|
||
MOVE A1,@STRING3,L
|
||
|
||
MOVK 1,A0
|
||
MOVE A0,@GAMERASE,W ;AUTO ERASE ON
|
||
|
||
MOVE @STRING1,A1,L ;FIND THE WINNERS DATA AREA
|
||
CLR A0
|
||
MOVI PNAME_TAB,A2
|
||
STAT_NEXT_NAME:
|
||
MOVE *A2+,A3,L
|
||
JRZ STAT_NAME_FND ;JUST USE THE LAST, WE DIDN'T FIND ONE
|
||
CMP A3,A1
|
||
JREQ STAT_NAME_FND
|
||
INC A0
|
||
JRUC STAT_NEXT_NAME
|
||
STAT_NAME_FND:
|
||
CALLR GPLAYD ;GET HIS DATA AREA FROM THIS
|
||
MOVE A2,A11
|
||
CREATE GOODIEPID,STAT_WORKS
|
||
|
||
PUSHP A11
|
||
MOVI STAT_WIN,A8
|
||
JSRP LM_PRINTF
|
||
PULLP A11
|
||
|
||
MOVI [115,85],A10 ;PUT THAT MARQUEE HERE
|
||
CREATE INDPID,BORDER_MARQUEE
|
||
|
||
SOUND1 BLOWHARD_SND
|
||
SLEEP 20
|
||
SOUND1 CHAMPM_SND
|
||
SOUNDOFF
|
||
|
||
STAT_BORDER_FAIL:
|
||
MOVI STAT_WIN2,A8
|
||
JSRP LM_PRINTF
|
||
|
||
DECM @STAT_COUNT,W
|
||
JRLE STAT_DONE
|
||
|
||
MOVI [170+SKYTOPOF,115],A9
|
||
MOVE A9,*A13(PTEMP1),L
|
||
SLEEP 100
|
||
STAT_PRINT_LP:
|
||
MMFM A12,A4,A8
|
||
JSRP STAT_SUB
|
||
MOVE @STAT_COUNT,A1,W
|
||
JRNZ STAT_PRINT_LP
|
||
STAT_DONE:
|
||
SLEEP 180
|
||
NO_WINNERS:
|
||
SLEEP 20
|
||
RETP
|
||
|
||
*
|
||
*GAME_STATS SUBROUTINE
|
||
*A4 = PTR TO PLAYER NAME, 0 = PLAYER DIDN'T EXIST
|
||
*A8 = WIN COUNT
|
||
**A13(PTEMP1),L = LAST PRINT POSITION
|
||
STAT_SUB:
|
||
MOVE A4,A4
|
||
JRZ STAT_SUB_X
|
||
MOVE A4,@STRING1,L
|
||
MOVE A8,@STAT_WINS,W
|
||
CMPI 1,A8
|
||
JRNE STAT_SUB_S ;BR = SUFFIX S FOR ALL COUNTS BUT 1
|
||
MOVI SUFFIX_NULL,A4
|
||
JRUC STAT_SUB_P
|
||
STAT_SUB_S:
|
||
MOVI SUFFIX_S,A4
|
||
STAT_SUB_P:
|
||
MOVE A4,@STRING3,L
|
||
MOVI STAT_WON,A8
|
||
CALLA LM_SETUP
|
||
MOVE *A13(PTEMP1),A9,L
|
||
ADDI [12,0],A9 ;RESET FOR THE NEXT LINE
|
||
MOVE A9,*A13(PTEMP1),L
|
||
JSRP PRINTF
|
||
DECM @STAT_COUNT,W ;DECREMENT THE STAT COUNT
|
||
STAT_SUB_X:
|
||
RETP
|
||
|
||
STAT_WIN:
|
||
MESS_MAC RD20FONT,2,197,15+SKYTOPOF,01010000H,STRCNRMO,0
|
||
.STRING "%p\a!\a\n\bThe Champ\a!",0
|
||
.LONG STRING1
|
||
.WORD 60
|
||
.WORD 0
|
||
.WORD 0D0DH
|
||
.WORD 30
|
||
STAT_WIN2:
|
||
MESS_MAC RD15FONT,2,197,87+SKYTOPOF,01010101H,STRCNRMO,0
|
||
.STRING "with \b%d\b win%p\n"
|
||
.STRING "and a score of\d\b\n"
|
||
.STRING "%,lb",0
|
||
.WORD 0F0FH
|
||
.LONG STAT_WINS
|
||
.WORD 0101H
|
||
.LONG STRING3
|
||
.LONG RD20FONT
|
||
.WORD 0F0FH
|
||
.LONG STAT_SCORE
|
||
|
||
STAT_WON:
|
||
MESS_MAC RD7FONT,2,115,167+SKYTOPOF,02020000H,STRLNRMO,0
|
||
.STRING "%p \p\bfinished with \b%d\b win%p\a.\a"
|
||
.STRING 0
|
||
.LONG STRING1
|
||
.LONG RED16
|
||
.WORD 0101H
|
||
.WORD 0F0FH
|
||
.LONG STAT_WINS
|
||
.WORD 0101H
|
||
.LONG STRING3
|
||
.WORD 15
|
||
.WORD 0
|
||
.EVEN
|
||
|
||
BLOWHARD_SND:
|
||
.WORD >F0F0,>5D,>8051,0 ;BIG HARD BANG!
|
||
|
||
.ENDIF
|
||
|
||
SUFFIX_S:
|
||
.STRING "s"
|
||
SUFFIX_NULL
|
||
.STRING 0
|
||
.EVEN
|
||
|
||
*
|
||
*MUSIC FOR CHAMP
|
||
CHAMPM_SND:
|
||
.WORD >F2F0,>34,>8009,0 ;CHAMPION TUNE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* GAMEOTEXT - PROCESS SUBROUTINE TO OUTPUT THE GAME OVER MESSAGE, AND *
|
||
* WAIT FOR READABILITIES SAKE. *
|
||
* NOTE: CALL WITH JSRP *
|
||
* *
|
||
**************************************************************************
|
||
GAMEOTEXT:
|
||
MMTM A12,A8,A9,A10,A11
|
||
MOVI GAMEOMESS,A8
|
||
JSRP LM_PRINTF
|
||
MOVI TEXTOID,A0
|
||
MOVI GAMEOVEROID,A1
|
||
CALLA CHANGOID
|
||
MMFM A12,A8,A9,A10,A11
|
||
RETP
|
||
|
||
GAMEOMESS:
|
||
MESS_MAC RD20FONT,2,197,83+SKYTOPOF,0F0F0101H,STRCNRMOS,0
|
||
.STRING "Game Over",0
|
||
.EVEN
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CLRALLPD - CLEAR ALL PLAYER DATA AREAS *
|
||
* *
|
||
**************************************************************************
|
||
CLRALLPD
|
||
MMTM SP,A2,A7
|
||
**** ALLPLYR CLRPLYRD
|
||
MOVI P1DATA,A2
|
||
CALLR CLRPLYRD
|
||
MOVI P2DATA,A2
|
||
CALLR CLRPLYRD
|
||
MOVI P3DATA,A2
|
||
CALLR CLRPLYRD
|
||
MOVI P4DATA,A2
|
||
CALLR CLRPLYRD
|
||
MMFM SP,A2,A7
|
||
RETS
|
||
|
||
|
||
.BSS CALLPRAM,16,1 ;STORAGE FOR PLAYER CALLS
|
||
**************************************************************************
|
||
* *
|
||
* CALLPLAY - CALL A ROUTINE ON ALL ALLOWED PLAYERS. *
|
||
* A7 = ROUTINE ADDRESS *
|
||
* NOTE: SENDS PLAYER DATA AREA IN A2 *
|
||
* DESTROYS A14 *
|
||
* *
|
||
**************************************************************************
|
||
CALLPLAY
|
||
PUSH A2
|
||
MOVE @NPLAYERS,@CALLPRAM,W
|
||
MOVI P1DATA,A2
|
||
CALLPL
|
||
CALL A7
|
||
ADDI PDSIZE,A2
|
||
DECM @CALLPRAM,W
|
||
JRNN CALLPL
|
||
PULL A2
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CLRPLYRD - CLEAR THE PLAYER DATA AREA OF IT'S STATUS *
|
||
* A2 = PLAYER DATA AREA *
|
||
* *
|
||
**************************************************************************
|
||
CLRPLYRD
|
||
MMTM SP,A0,A1,A3,A4,A5,A6
|
||
CLR A0
|
||
MOVE A2,A1
|
||
MOVI PDSIZE,A3
|
||
SRL 5,A3
|
||
JRNC CLRPD1 ;BR = EVENLY DIVISIBLE BY 32
|
||
MOVE A0,*A1+,W ;KNOCK OFF ODD MAN
|
||
MOVE A3,A3
|
||
CLRPD1
|
||
JRZ CLRPD2
|
||
CLRPDL
|
||
MOVE A0,*A1+,L ;CLEAR THE WHOLE BLOCK
|
||
DSJS A3,CLRPDL
|
||
CLRPD2
|
||
CMPI P1DATA,A2
|
||
JRNE CLRPD3
|
||
; MOVI P1SCRAD,A0
|
||
MOVI P1PID,A1
|
||
MOVI REXINIT,A3
|
||
MOVI royicon,A4
|
||
MOVI P1BARS,A5
|
||
JRUC CLRPD4
|
||
CLRPD3
|
||
CMPI P2DATA,A2
|
||
JRNE CLRPD3A
|
||
; MOVI P2SCRAD,A0
|
||
MOVI P2PID,A1
|
||
MOVI BLOOPINIT,A3
|
||
MOVI bloopicon,A4
|
||
MOVI P2BARS,A5
|
||
JRUC CLRPD4
|
||
CLRPD3A
|
||
CMPI P3DATA,A2
|
||
JRNE CLRPD3B
|
||
; MOVI P3SCRAD,A0
|
||
MOVI P3PID,A1
|
||
MOVI ELVISINIT,A3
|
||
MOVI stegicon,A4
|
||
MOVI P3BARS,A5
|
||
JRUC CLRPD4
|
||
CLRPD3B
|
||
; MOVI P4SCRAD,A0
|
||
MOVI P4PID,A1
|
||
MOVI SPIKEINIT,A3
|
||
MOVI spikeicon,A4
|
||
MOVI P4BARS,A5
|
||
CLRPD4
|
||
MOVE @NPLAYERS,A0,W
|
||
SLL 7,A0 ; * 128
|
||
ADDI PSCTAB,A0
|
||
MOVE A0,A6 ; SAVE BASE TABLE OFFSET
|
||
CALLA GPLAYNUM
|
||
SLL 5,A0
|
||
ADD A6,A0 ; TABLE PLUS REFERENCE
|
||
MOVE *A0,A0,L ; ACTUAL SCREEN ADDRESS
|
||
MOVE A0,*A2(PSCRAD),L
|
||
MOVE A1,*A2(PPID),W
|
||
MOVE A3,*A2(PINITAB),L
|
||
MOVE A4,*A2(PLICON),L
|
||
MOVE A5,*A2(PSUPP),L
|
||
|
||
MOVE *A3(INITIMG),A3,L ;LET'S FIND THE PLAYER PALETTE I.D.
|
||
MOVE *A3(ICMAP),A3,L
|
||
MOVE A3,*A2(PPALID),L
|
||
|
||
*DO THESE THINGS TO ALL PLAYERS ALIKE
|
||
MOVI IREPLAY,A0
|
||
MOVE A0,*A2(PNEXTREP),L
|
||
MMFM SP,A0,A1,A3,A4,A5,A6
|
||
RETS
|
||
|
||
PSCTAB .LONG P11SCRAD,0,0,0 ; 1 PLAYER
|
||
.LONG P21SCRAD,P22SCRAD,0,0 ; 2 PLAYERS
|
||
.LONG P31SCRAD,P32SCRAD,P33SCRAD,0 ; 3 PLAYERS
|
||
.LONG P41SCRAD,P42SCRAD,P43SCRAD,P44SCRAD ; 4 PLAYERS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CLR_PENTER - CLEAR THE PLAYERS PENTER FLAG *
|
||
* A2 = PTR TO PLAYER DATA STRUCTURE *
|
||
* *
|
||
**************************************************************************
|
||
CLR_PENTER:
|
||
PUSH A0
|
||
CLR A0
|
||
MOVE A0,*A2(PENTER),W
|
||
PULL A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CLR_PWAVEST - CLEAR THE PLAYERS PWAVEST COUNTER *
|
||
* A2 = PTR TO PLAYER DATA STRUCTURE *
|
||
* *
|
||
**************************************************************************
|
||
CLR_PWAVEST:
|
||
PUSH A0
|
||
CLR A0
|
||
MOVE A0,*A2(PWAVEST),W
|
||
PULL A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CLR_PDEAD - CLEAR THE PLAYERS PDEAD FLAG *
|
||
* A2 = PTR TO PLAYER DATA STRUCTURE *
|
||
* *
|
||
**************************************************************************
|
||
CLR_PDEAD:
|
||
MMTM SP,A0,A1
|
||
MOVE *A2(PPID),A0,W
|
||
ORI PINITIALPID,A0
|
||
CLR A1
|
||
NOT A1
|
||
CALLA EXISTP
|
||
JRNZ CLR_PDEAD_X
|
||
CLR A0
|
||
MOVE A0,*A2(PDEAD),W
|
||
CLR_PDEAD_X:
|
||
MMFM SP,A0,A1
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CLR_PDINOCNT - CLEAR THE PLAYERS PDINOCNT COUNTER *
|
||
* A2 = PTR TO PLAYER DATA STRUCTURE *
|
||
* *
|
||
**************************************************************************
|
||
CLR_PDINOCNT:
|
||
PUSH A0
|
||
CLR A0
|
||
MOVE A0,*A2(PDINOCNT),W
|
||
PULL A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CLR_PDTHPOS - CLEAR THE PLAYERS PDTHPOS VARIABLE *
|
||
* A2 = PTR TO PLAYER DATA STRUCTURE *
|
||
* *
|
||
**************************************************************************
|
||
CLR_PDTHPOS:
|
||
PUSH A0
|
||
CLR A0
|
||
MOVE A0,*A2(PDTHPOS),L
|
||
PULL A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CLR_PBOZO - CLEAR THE PLAYERS BOZO LEVEL *
|
||
* A2 = PTR TO PLAYER DATA STRUCTURE *
|
||
* *
|
||
**************************************************************************
|
||
CLR_PBOZO:
|
||
PUSH A0
|
||
CLR A0
|
||
MOVE A0,*A2(PBOZO),W
|
||
PULL A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CLR_PEXTRAS - CLEAR THE PLAYERS EXTRA MENABILITY. *
|
||
* A2 = PTR TO PLAYER DATA STRUCTURE *
|
||
* *
|
||
**************************************************************************
|
||
CLR_PEXTRAS:
|
||
PUSH A0
|
||
CLR A0
|
||
MOVE A0,*A2(PEXTRAS),W
|
||
PULL A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* INC_PLAYER_TIMERS - INCREMENT PLAYER TIMERS *
|
||
* A0 = AMOUNT TO INCREMENT *
|
||
* A2 = PTR TO PLAYER DATA STRUCTURE *
|
||
* NOTE: TRASHES A14 *
|
||
* *
|
||
**************************************************************************
|
||
INC_PLAYER_TIMERS:
|
||
MOVE *A2(POBJ),A14,L
|
||
JRZ INC_PTX ;INCREMENT ONLY IF HE'S ALIVE
|
||
ADDRM A0,*A2(PLASTEGG),L
|
||
ADDRM A0,*A2(PLASTDTH),L
|
||
ADDRM A0,*A2(PWAVETIME),L
|
||
INC_PTX:
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* INC_PCONSECUTIVE - INCREMENT OR CLEAR THE CONSECUTIVE PLAY COUNTER FOR *
|
||
* THIS PLAYER. *
|
||
* A2 = PTR TO PLAYER DATA STRUCTURE *
|
||
* NOTE: TRASHES A14 *
|
||
* *
|
||
**************************************************************************
|
||
INC_PCONSECUTIVE:
|
||
MOVE *A2(PWAVEST),A14,W
|
||
JRNZ INC_PCONS
|
||
MOVE *A2(PCONSECUTIVE),A14,W
|
||
JRZ INC_PCONS_X
|
||
DEC A14 ;DEC THE MAN WHO DID NOT PLAY
|
||
MOVE A14,*A2(PCONSECUTIVE),W
|
||
**** CLRM *A2(PCONSECUTIVE),W
|
||
JRUC INC_PCONS_X
|
||
INC_PCONS:
|
||
INCM *A2(PCONSECUTIVE),W
|
||
INCM *A2(PWAVES),W ;INCREMENT TOTAL WAVE COUNTER
|
||
INC_PCONS_X:
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* STUFF_PLASTWIN - PUT A VALUE INTO THE PLAYER PLASTWIN VARIABLE *
|
||
* A0 = VALUE *
|
||
* A2 = PLAYER DATA *
|
||
* NOTE: TRASHES A14 *
|
||
* *
|
||
**************************************************************************
|
||
STUFF_PLASTWIN:
|
||
MOVE *A2(PWAVEST),A14,W
|
||
JRZ STUFF_PLW_X
|
||
MOVE A0,*A2(PLASTWIN),W
|
||
STUFF_PLW_X:
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* GPLAYNUM - GET THE PLAYER'S # (0-3), BASED ON PxDATA ADDRESS. *
|
||
* A2 = PLAYER DATA BLOCK *
|
||
* RETURNS: *
|
||
* A0 = PLAYER # *
|
||
* *
|
||
**************************************************************************
|
||
GPLAYNUM
|
||
CMPI P4DATA,A2
|
||
JRNE GPN1
|
||
MOVK 3,A0
|
||
RETS
|
||
GPN1
|
||
CMPI P3DATA,A2
|
||
JRNE GPN2
|
||
MOVK 2,A0
|
||
RETS
|
||
GPN2
|
||
CMPI P2DATA,A2
|
||
JRNE GPN3
|
||
MOVK 1,A0
|
||
RETS
|
||
GPN3
|
||
CLR A0
|
||
RETS
|
||
**************************************************************************
|
||
* *
|
||
* GPLAYD - GET THE PLAYERS DATA AREA BASED ON HIS #. *
|
||
* A0 = PLAYER # *
|
||
* RETURNS: *
|
||
* A2 = PLAYER DATA AREA *
|
||
* *
|
||
**************************************************************************
|
||
GPLAYD
|
||
MOVE A0,A2
|
||
SLL 5,A2
|
||
ADDI PDTAB,A2
|
||
MOVE *A2,A2,L
|
||
RETS
|
||
|
||
PDTAB .LONG P1DATA,P2DATA,P3DATA,P4DATA
|
||
|
||
**************************************************************************
|
||
* *
|
||
* WAVE_PLAYERS - RETURN THE NUMBER OF PLAYERS THAT PLAYED THIS WAVE. *
|
||
* RETURNS: *
|
||
* A0 = # OF PLAYERS THIS WAVE *
|
||
* *
|
||
**************************************************************************
|
||
WAVE_PLAYERS:
|
||
MMTM SP,A1,A2,A3
|
||
CLR A0
|
||
MOVE @NPLAYERS,A1,W
|
||
MOVI P1DATA,A2
|
||
WAVE_P_LP:
|
||
MOVE *A2(PWAVEST),A3,W
|
||
JRZ WAVE_P_NXT
|
||
INC A0
|
||
WAVE_P_NXT:
|
||
ADDI PDSIZE,A2
|
||
DEC A1
|
||
JRNN WAVE_P_LP
|
||
MMFM SP,A1,A2,A3
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* WIPEOUT - WIPES THE SYSTEM CLEAR OF ALL OTHER PROCESSES, OBJECTS *
|
||
* AND COORDINATES. *
|
||
* IT RETURNS WITH THE DISPLAY SYSTEM AND AUTO-ERASE SHUT OFF, *
|
||
* COLOR RAM CLEARED, AND THE BIT MAP WIPED CLEAN. *
|
||
* THIS IS NICE TO USE WHEN SWITCHING BETWEEN STUFF. *
|
||
* ALSO, NULLS POBJ IN BOTH PLAYERS, SO DON'T USE THIS *
|
||
* DURING GAME PLAY! *
|
||
* *
|
||
**************************************************************************
|
||
WIPEOUT
|
||
MMTM SP,A0,A1
|
||
CLR A0
|
||
** MOVE A0,@P1CTRL,W
|
||
** MOVE A0,@P2CTRL,W ;CLEAR PLAYER CPU CONTROLS
|
||
MOVE A0,@P1DATA+POBJ,L
|
||
MOVE A0,@P2DATA+POBJ,L
|
||
MOVE A0,@P3DATA+POBJ,L
|
||
MOVE A0,@P4DATA+POBJ,L
|
||
** MOVE A0,@PLAYPAGE,W ;CLEAR THE ATTRACT MODE PLAY PAGE
|
||
MOVE A0,@PAGE,W
|
||
MOVE A0,@COINFLAG,W ; NOT ON COIN PAGE YET
|
||
MOVE A0,@PAUSE_GAME,W ;TURN OFF GAME PAUSE
|
||
MOVE A0,@STORY_MODE,W ; TURN OFF STORY MODE
|
||
MOVE A0,@ON_HSTD,W ; NOT ON HIGH SCORE PAGE
|
||
MOVE A0,@ON_CRED,W ; NOT ON CREDITS PAGE
|
||
|
||
MOVI 08000h,A1
|
||
CLR A0
|
||
CALLA KILALL ;KILL ALL PROCS, EXCEPT FOR COINS
|
||
|
||
** CLR A0
|
||
** MOVE A0,@SOUNDSUP,W ;MAKE SURE SOUNDS ARE ALLOWED
|
||
CALLA CLRSNDDB ;RESET THE SOUND DATA BASE
|
||
CLR A0
|
||
MOVE A0,@GAMERASE,W
|
||
CALLA AUTOEOFF
|
||
CLR A0
|
||
MOVE A0,@DISPLAYON,W ;TURN THE DISPLAY PROCESSOR OFF
|
||
CALLA DMAQWAIT
|
||
PUSHST
|
||
DINT
|
||
CALLA CLRSWPRC
|
||
CALLA MYOINIT ;RE-INIT THE OBJECT LIST
|
||
CALLR SYSINITL
|
||
POPST
|
||
CALLA SYNCFULL ;NOW WAIT FOR VBLANK TO ZAP CMAP
|
||
CALLA CLR_SCRN ;WIPE OUT THE BIT MAP
|
||
CALLA IAUTOE ;INITIALIZE THE AUTO ERASE AREA
|
||
CLR A0
|
||
MOVE A0,@IRQSKYE,W ;CLR THE AUTO-ERASE COLOR
|
||
MOVI NORMDPYS,A0
|
||
MOVE A0,@DPYSTRT,W ;RESET DISPLAY START POINT
|
||
MOVI SCOREINT,A0
|
||
MOVE A0,@SINTRAM,W
|
||
MOVI HSINT,A0
|
||
MOVE A0,@HSINTRAM,W
|
||
CALLA COLOR_START ;RE-START THE COLOR CYCLER
|
||
MMFM SP,A0,A1
|
||
RETS
|
||
|
||
FREEZE_SW .EQU 8
|
||
FREEZE_DIP .EQU 9
|
||
**************************************************************************
|
||
* *
|
||
* FREEZE - PROCESS TO FREEZE THE GAME ACTION WHEN THE FREEZE BUTTON *
|
||
* GOES FROM OFF TO ON. GAME RESUMES WHEN THE BUTTON IS RELEASED. *
|
||
* *
|
||
**************************************************************************
|
||
FREEZE
|
||
MOVE @GAME_STATE,A0
|
||
CMPI INDIAG,A0
|
||
JREQ FREEZE_DIE ;NO FREEZE SHIT DURING DIAGNOSTICS
|
||
CALLA SYNCHALF
|
||
MOVE @NOAUTOE,A8,W
|
||
MOVK 1,A0
|
||
MOVE A0,@NOAUTOE,W
|
||
CALLA AUTOEOFF ;SHUT OFF AUTO-ERASE
|
||
DISPOFF
|
||
CALLA DMAQWAIT ;BLOW OUT THE QUEUE'D IMAGES
|
||
PUSHST
|
||
DINT
|
||
CALLR WDOGDIS
|
||
FREEZE_LP:
|
||
MOVE @COINS,A0,W ;GET THE COIN DOOR SWITCHES
|
||
BTST FREEZE_SW,A0
|
||
JREQ FREEZE_LP ;LOOP 'TIL BUTTON COMES UP
|
||
.IF YUNIT
|
||
MOVE @DIPSWITCH,A0,W
|
||
BTST FREEZE_DIP,A0
|
||
JREQ FREEZE_LP
|
||
.ENDIF
|
||
POPST
|
||
MOVE A8,@NOAUTOE,W
|
||
DISPON
|
||
FREEZE_DIE:
|
||
DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* SLEEP_SWITCHX - SLEEP THE GIVEN NUMBER OF TICKS ESCAPING IF *
|
||
* A CONTROL PANEL BUTTON IS PRESSED. USE THIS *
|
||
* TO SLEEP DURING LENGTHY INTRO SCREENS. *
|
||
* A0 = # OF TICKS TO SLEEP *
|
||
* RETURNS: *
|
||
* Z = NO ESCAPE SWITCH DETECTED DURING SLEEP *
|
||
* NZ = ESCAPE SWITCH DETECTED *
|
||
* NOTE: CALL WITH JSRP *
|
||
* *
|
||
**************************************************************************
|
||
SLEEP_SWITCHX:
|
||
PUSHP A11
|
||
MOVE A0,A11
|
||
CLRM @SWITCH_ESCAPE,W
|
||
SLEEP_SWITCHX_LP:
|
||
SLEEP 1
|
||
MOVE @SWITCH_ESCAPE,A0,W
|
||
JRNE SLEEP_SWITCHX_ESC
|
||
DSJS A11,SLEEP_SWITCHX_LP
|
||
SETZ ;ALL IS WELL
|
||
SLEEP_SWITCHX_X
|
||
PULLP A11
|
||
RETP
|
||
SLEEP_SWITCHX_ESC:
|
||
CLRZ ;FLAG THE ESCAPE
|
||
JRUC SLEEP_SWITCHX_X
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CLRSWPRC - MAKE ALL SWITCH TRIGGERED PROCESSES DUMDIE ENTRIES *
|
||
* NOTE: CALL WHEN INTERRUPTS ARE TURNED OFF *
|
||
* *
|
||
**************************************************************************
|
||
CLRSWPRC
|
||
MMTM SP,A0,A1,A3
|
||
MOVI 40,A1 ;USE SWTAB ENTRY 40 FOR DUMDIE PROC
|
||
MOVE @SWSTACK,A3,L
|
||
CLRSTKL CMPI SWSTST,A3,L ;STACK AT START?
|
||
JREQ CLRSTKX ;YES, EXIT
|
||
MOVE *A3+,A0,W
|
||
CMPI 63,A0
|
||
JRLS CLRSTKL ;THIS ENTRY IS A REAL SWITCH
|
||
MOVE A1,*A3(-10H),W ;STORE THE DUMDIE CALL
|
||
JRUC CLRSTKL
|
||
CLRSTKX
|
||
MMFM SP,A0,A1,A3
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* WDOGDIS - WATCH DOG DISABLE *
|
||
* NOTE: CALL WHILE INTERRUPTS ARE TURNED OFF. *
|
||
* *
|
||
**************************************************************************
|
||
WDOGDIS
|
||
MMTM SP,A0,A1,A2,A3
|
||
MOVI WDISTAB,A1
|
||
MOVK 1,A3
|
||
MOVE @SYSCOPY,A2,W
|
||
MOVE *A1+,A0,W
|
||
WDOGSL
|
||
OR A2,A0
|
||
MOVE A0,@SYSCTRL,W
|
||
XOR A3,A0
|
||
MOVE A0,@SYSCTRL,W
|
||
MOVE *A1+,A0,W
|
||
JRNN WDOGSL
|
||
MOVE A2,@SYSCTRL,W
|
||
MMFM SP,A0,A1,A2,A3
|
||
RETS
|
||
*
|
||
*WATCH DOG DISABLE TABLE
|
||
WDISTAB
|
||
.WORD 0
|
||
.WORD 0
|
||
.WORD 0
|
||
.WORD 0
|
||
|
||
.WORD 2
|
||
.WORD 0
|
||
.WORD 2
|
||
.WORD 0
|
||
.WORD 0FFFFH
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CLSCRACH - CLEAR SCRATCH PAD *
|
||
* NOTE: DESTROYS A0,A1,A2,A3 *
|
||
* *
|
||
**************************************************************************
|
||
CLSCRACH
|
||
PULL A3
|
||
*CLEAR SCRATCHPAD RAM
|
||
CLR A0
|
||
MOVI SCRATCH,A1,L
|
||
MOVI >8000,A2,L ;CLEAR TWO AT A TIME
|
||
SCTLP MOVE A0,*A1+,L
|
||
DSJS A2,SCTLP
|
||
JUMP A3
|
||
|
||
**************************************************************************
|
||
* *
|
||
* SYSTEM ROUTINES AND PROCESSES *
|
||
* *
|
||
**************************************************************************
|
||
|
||
*NARC RAM INITIALIZATION
|
||
NRAMINIT
|
||
MMTM SP,A0,A1,A2
|
||
MOVI NRAMSTRT,A1
|
||
MOVI NRAMEND,A2
|
||
JRUC RAMINIT
|
||
*GAME RAM INITIALIZATION
|
||
GRAMINIT
|
||
MMTM SP,A0,A1,A2
|
||
MOVI GRAMSTRT,A1
|
||
MOVI GRAMEND,A2
|
||
JRUC RAMINIT
|
||
*WAVE RAM INITIALIZATION
|
||
WRAMINIT
|
||
MMTM SP,A0,A1,A2
|
||
MOVI WRAMSTRT,A1
|
||
MOVI WRAMEND,A2
|
||
RAMINIT
|
||
CLR A0
|
||
RAMLOOP
|
||
MOVE A0,*A1+,W ;16 BITS AT A TIME, NO EXTRANEOUS CLEARS
|
||
CMP A2,A1 ;DONE?
|
||
JRLO RAMLOOP ;NO!
|
||
MMFM SP,A0,A1,A2
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* SYSINITL - INITIALIZE LOW BYTE OF SYSTEM CONTROL REGISTER *
|
||
* *
|
||
**************************************************************************
|
||
SYSINITL
|
||
MMTM SP,A0,A1
|
||
MOVE @SYSCOPY,A0,W
|
||
MOVI SYSCINIT,A1
|
||
SLL 24,A1
|
||
SRL 24,A1
|
||
OR A1,A0
|
||
.IF YUNIT
|
||
ORI 700H,A0 ; SET A NOP
|
||
.ENDIF
|
||
MOVE A0,@SYSCOPY,W ;RE-INITIALIZE SYSTEM CONTROL REG
|
||
MOVE A0,@SYSCTRL,W
|
||
MMFM SP,A0,A1
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DIRQ - DISPLAY IRQ, USES THE VALUE STORE @DPYINT TO DETERMINE *
|
||
* WHICH INTERRUPT THIS IS, HALF OR FULL SCREEN. @DPYINT IS *
|
||
* COMPARED AGAINST THE CONSTANT HSINT. *
|
||
* *
|
||
**************************************************************************
|
||
DIRQ
|
||
MMTM SP,A0,A1
|
||
SETF 16,1,0 ;WORD SIGN EXTEND
|
||
|
||
MOVE @INTPEND,A1,W ;CLEAR STUPID INTERRUPT PENDING
|
||
ANDNI DIE,A1
|
||
MOVE A1,@INTPEND,W
|
||
|
||
MOVE @INTENB,A1,W ;DISABLE DISPLAY INTERRUPT
|
||
ANDNI DIE,A1
|
||
MOVE A1,@INTENB,W
|
||
|
||
MOVE @DPYINT,A0 ;CHECK WHAT SCREEN HALF
|
||
|
||
MOVE @SINTRAM,A1,W ;GET THE LAST SCORE AREA INTERRUPT
|
||
CMP A1,A0
|
||
JREQ DIRQ2 ;BR = END OF SCORE AREA INTERRUPT
|
||
|
||
EINT ;ENABLE OTHER INTERRUPTS
|
||
|
||
**** CMPI HSINT,A0
|
||
MOVE @HSINTRAM,A1,W ;GET THE LAST HALF SCREEN INTERRUPT
|
||
CMP A1,A0 ;IS THIS IT?
|
||
JRNE DIRQ1 ;BR = NO, MUST BE END OF SCREEN INTERRUPT
|
||
**************************************************************************
|
||
* *
|
||
* DIRQ0 - HALF SCREEN INTERRUPT. TOP HALF OBJECTS ARE UPDATED, *
|
||
* OBJECT VELOCITIES ARE ADDED, SWITCHES FOR PLAYER MOVEMENT ARE *
|
||
* SCANNED, AND PLAYERS ARE UPDATED. *
|
||
* *
|
||
**************************************************************************
|
||
DIRQ0
|
||
MMTM SP,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14
|
||
MMTM SP,B0,B1,B2,B3,B4,B5
|
||
|
||
MOVI EOSINT,A1 ;SET FOR EOSCRN INTERRUPT
|
||
MOVE A1,@DPYINT
|
||
|
||
MOVE @TIMER,A1 ;HIT PROCESS TIMER
|
||
INC A1
|
||
MOVE A1,@TIMER
|
||
|
||
MOVE @INTSYNC0,A0,W
|
||
INC A0
|
||
MOVE A0,@INTSYNC0,W ;SYNC AT HALF SCREEN
|
||
|
||
MOVE @GAMERASE,A0,W
|
||
CMPI 2,A0
|
||
JRNE DIRQ0NEO ;BR = NOT THE CORRECT PLACE TO TURN OFF
|
||
|
||
MOVE @SYSCOPY,A0,W
|
||
ORI AUTOERAS,A0 ;DISABLE AUTO ERASE
|
||
MOVE A0,@SYSCOPY,W ;STORE EVERYWHERE I DID GO
|
||
MOVE A0,@SYSCTRL,W
|
||
DIRQ0NEO
|
||
CALLA DISPQT
|
||
DIRQ0E
|
||
CALLR SWSCAN ;SCAN SWITCHES TO TRIGGER PROCS.
|
||
CALLA DISPLAY ;GOT TO MAKE THE DONUTS
|
||
|
||
JRUC DIRQX
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DIRQ1 - END OF SCREEN INTERRUPT ROUTINE. BOTTOM HALF OF SCREEN UPDATED *
|
||
* COLOR RAM IS CYCLED, AND SWITCHES ARE SCANNED. *
|
||
* *
|
||
**************************************************************************
|
||
DIRQ1
|
||
MMTM SP,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14
|
||
MMTM SP,B0,B1,B2,B3,B4,B5
|
||
|
||
MOVE @GAMERASE,A0,W
|
||
JREQ DIRQ1NEO ;AUTO-ERASE IS NOT ENABLED!
|
||
CMPI 3,A0 ;ARE WE ERASING THE FULL SCREEN
|
||
JRNE DIRQ1AEOFF ;BR = NO
|
||
MOVE @NOAUTOE,A0,W ;AUTO-ERASE DISABLED?
|
||
JRNE DIRQ1AEOFF ;BR = YES
|
||
|
||
MOVE @SYSCOPY,A0,W
|
||
ANDNI AUTOERAS,A0 ;ENABLE AUTO-ERASE NOW!
|
||
JRUC DIRQ1AEST ;JUMP TO STORE
|
||
DIRQ1AEOFF
|
||
MOVE @SYSCOPY,A0,W ;ALWAYS TURN OFF HERE JUST FOR YUKS
|
||
ORI AUTOERAS,A0 ;DISABLE AUTO ERASE
|
||
DIRQ1AEST
|
||
MOVE A0,@SYSCOPY,W ;STORE EVERYWHERE I DID GO
|
||
MOVE A0,@SYSCTRL,W
|
||
DIRQ1NEO
|
||
MOVE @IRQSKYE,@ERASELOC,W ;MOVE IN THE CORRECT COLOR
|
||
|
||
MOVI SCOREINT,A0
|
||
MOVE @DPYSTRT,A1,W
|
||
SRA 4,A1
|
||
NOT A1
|
||
SUB A1,A0
|
||
MOVE A0,@SINTRAM,W ;KEEP THE LAST ONE HERE
|
||
JRNN DIRQ1B ;BR = THIS IS AN O.K. INTERRUPT
|
||
MOVI ENDVBLNK,A0
|
||
MOVE A0,@SINTRAM,W
|
||
DIRQ1B
|
||
MOVE A0,@DPYINT ;RESET FOR SCORE AREA INTERRUPT
|
||
|
||
MOVE @DPYCTL,A0,W ;SHIFT REGISTER READ TO RESTART DMA
|
||
ORI SRT,A0
|
||
MOVE A0,@DPYCTL,W ;ENABLE SHIFT REG TRANSFER TO STOP DMA HALT
|
||
CLR A1
|
||
PIXT *A1,A2
|
||
ANDNI SRT,A0
|
||
MOVE A0,@DPYCTL,W
|
||
CALLA DISPH ;CALL END OF SCREEN DISPLAY ROUTINE
|
||
|
||
*
|
||
*UPDATE NORMAL CYCLING COLOR RAM
|
||
MOVI COLRTEMP+COLROFFST,A0 ;GET NEW COLORS
|
||
MOVI CYCOLORS+COLROFFST,A1 ;GET ADDRESS OF CYCLE COLORS
|
||
MOVK COLRCNT,A6
|
||
SRL 1,A6 ;DIVIDE BY 2
|
||
JRNC COLORUP ;BR = NO ODD DUDE
|
||
MOVE *A0+,*A1+,W ;XFER THE ODD MAN
|
||
COLORUP
|
||
MOVE *A0+,*A1+,L
|
||
DSJS A6,COLORUP
|
||
|
||
*
|
||
*UPDATE PLAYER CYCLING COLOR RAM
|
||
MOVI PCYCLE_RAM,A0 ;GET NEW COLORS
|
||
MOVI PCYCOLORS+PCOLROFFST,A1 ;GET ADDRESS OF CYCLE COLORS
|
||
MOVK PCOLRCNT,A6
|
||
SRL 1,A6 ;DIVIDE BY 2
|
||
JRNC PCOLORUP ;BR = NO ODD DUDE
|
||
MOVE *A0+,*A1+,W ;XFER THE ODD MAN
|
||
PCOLORUP
|
||
MOVE *A0+,*A1+,L
|
||
DSJS A6,PCOLORUP
|
||
|
||
CALLA PALTRANS ;XFER NEW PALETTES IF NECESSARY
|
||
|
||
CALLA COININT ; HANDLE SOME COINS!
|
||
|
||
DINT
|
||
MOVE @INTENB,A0,W ;ENABLE DISPLAY INTERRUPT
|
||
ORI DIE,A0
|
||
MOVE A0,@INTENB,W
|
||
|
||
MOVE @INTSYNC1,A0,W
|
||
INC A0
|
||
MOVE A0,@INTSYNC1,W ;SYNC UP AT END OF SCREEN
|
||
CALLR SWSCAN ;SCAN SWITCHES TO TRIGGER PROCS.
|
||
|
||
MOVE @IRQLED,A0,W
|
||
INC A0
|
||
MOVE A0,@IRQLED,W
|
||
CMPI 8,A0
|
||
JRLT DIRQX
|
||
*
|
||
*DO EVERYTHING FROM HERE TO DIRQX EVERY 8 TICKS
|
||
*
|
||
CLR A0
|
||
MOVE A0,@IRQLED,W
|
||
|
||
MOVE @SYSCOPY,A0,W ;BLINK L.E.D. TO ACK OPERATION
|
||
.IF YUNIT
|
||
XORI 0004H,A0
|
||
.ELSE
|
||
XORI 100H,A0
|
||
.ENDIF
|
||
MOVE A0,@SYSCOPY,W
|
||
MOVE A0,@SYSCTRL,W
|
||
DIRQX:
|
||
MMFM SP,B0,B1,B2,B3,B4,B5
|
||
MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14
|
||
RETI
|
||
|
||
*
|
||
*WATCHDOG FEED TABLE
|
||
WDOGBONE
|
||
.WORD 0
|
||
.WORD 2
|
||
.WORD 0
|
||
.WORD 2
|
||
.WORD 2
|
||
.WORD 0FFFFH
|
||
|
||
**************************************************************************
|
||
* *
|
||
* END OF SCORE AREA INTERRUPT, USED TO TURN AUTO-ERASE ON, ONLY DURING *
|
||
* GAME PLAY. *
|
||
* ALL INTERRUPTS ARE DISABLED SO THAT THE AUTO-ERASE ON COMMAND *
|
||
* CAN BE EXECUTED PROMPTLY. *
|
||
* YOU MUST DO AN EINT DIRECTLY AFTER AUTO-ERASE IS ENABLED TO *
|
||
* KEEP THE DMA RUNNING. *
|
||
* NOTE: ONLY REGISTER A0 AND A1 ARE PUSHED AT THIS POINT! *
|
||
* *
|
||
**************************************************************************
|
||
DIRQ2:
|
||
MOVE @GAMERASE,A0,W
|
||
JREQ DIRQ2A ;DON'T ENABLE AUTOERASE
|
||
|
||
MOVE @NOAUTOE,A0,W
|
||
JRNE DIRQ2A
|
||
|
||
MOVE @SYSCOPY,A0,W
|
||
ANDNI AUTOERAS,A0 ;AUTO ERASE IS ENABLED LOW
|
||
MOVE A0,@SYSCOPY,W ;STORE EVERYWHERE I DID GO
|
||
MOVE A0,@SYSCTRL,W
|
||
DIRQ2A:
|
||
EINT ;ENABLE OTHER INTERRUPTS
|
||
|
||
**** MOVI HSINT,A0
|
||
**** MOVE A0,@DPYINT ;RESET FOR HALF SCREEN INTERRUPT
|
||
|
||
MOVI HSINT,A0
|
||
MOVE @DPYSTRT,A1,W
|
||
SRA 4,A1
|
||
NOT A1
|
||
ADD A1,A0
|
||
MOVE A0,@HSINTRAM,W ;KEEP THE LAST ONE HERE
|
||
JRNN DIRQ2B ;BR = THIS IS AN O.K. INTERRUPT
|
||
MOVI ENDVBLNK,A0 ;FAIL SAFE
|
||
MOVE A0,@HSINTRAM,W
|
||
DIRQ2B:
|
||
MOVE A0,@DPYINT,W ;RESET FOR HALF SCREEN INTERRUPT
|
||
|
||
DINT
|
||
MOVE @INTENB,A0,W ;ENABLE DISPLAY INTERRUPT
|
||
ORI DIE,A0
|
||
MOVE A0,@INTENB,W
|
||
MMFM SP,A0,A1
|
||
RETI
|
||
|
||
*
|
||
*SWITCHES SCANNED HERE WILL ACTIVATE THE PROCESSES IN THE SWITCH PROCESS
|
||
*TABLE.
|
||
*BASHES A0,A1,A2 & A3 SO BEWARE!
|
||
SWSCAN:
|
||
MOVE @SWITCH,A0,L
|
||
MOVE @SWTEMP1,A1,L ;PREVIOUS STATE T=N-1
|
||
MOVE @SWTEMP2,A2,L ;PREVIOUS PREVIOUS T=N-2
|
||
MOVE A1,@SWTEMP2,L ;NEW PREVIOUS PREVIOUS
|
||
MOVE A0,@SWTEMP1,L ;NEW PREVIOUS
|
||
AND A1,A2
|
||
ANDN A0,A2 ;LOOK FOR 110
|
||
JREQ SWITCH2_CHECK ;NO SWITCHES
|
||
MOVE @SWSTACK,A3,L ;SWITCH ACTIVATION STACK
|
||
SWSCLP: ;FIND BIT SET
|
||
CMPI SWSTMN,A3 ;SWITCH STACK OVERFLOW?
|
||
JREQ SWSCX1 ;YEP, QUIT
|
||
LMO A2,A0 ;1'S COMP LEFTMOST BIT
|
||
RL A0,A2 ;GET RID OF BIT
|
||
SLL 1,A2
|
||
MOVK 31,A1 ;CALC TRUE BIT #
|
||
SUB A0,A1
|
||
MOVE A1,-*A3 ;PUSH SWITCH NUMBER ON STACK (0-15)
|
||
RL A1,A2 ;RESTORE SWITCH WORD WITHOUT BIT
|
||
JRNE SWSCLP
|
||
SWSCX1:
|
||
MOVE A3,@SWSTACK,L ;RESTORE SWITCH STACK
|
||
*
|
||
SWITCH2_CHECK:
|
||
MOVE @SWITCH2,A0,L
|
||
ORI 0000FF00H,A0
|
||
MOVE @SW2TEMP1,A1,L ;PREVIOUS STATE T=N-1
|
||
MOVE @SW2TEMP2,A2,L ;PREVIOUS PREVIOUS T=N-2
|
||
MOVE A1,@SW2TEMP2,L ;NEW PREVIOUS PREVIOUS
|
||
MOVE A0,@SW2TEMP1,L ;NEW PREVIOUS
|
||
AND A1,A2
|
||
ANDN A0,A2 ;LOOK FOR 110
|
||
JREQ SWSCX ;NO SWITCHES
|
||
MOVE @SWSTACK,A3,L ;SWITCH ACTIVATION STACK
|
||
SW2SCLP: ;FIND BIT SET
|
||
CMPI SWSTMN,A3 ;SWITCH STACK OVERFLOW?
|
||
JREQ SW2SCX1 ;YEP, QUIT
|
||
LMO A2,A0 ;1'S COMP LEFTMOST BIT
|
||
RL A0,A2 ;GET RID OF BIT
|
||
SLL 1,A2
|
||
MOVI 63,A1
|
||
SUB A0,A1
|
||
MOVE A1,-*A3 ;PUSH SWITCH NUMBER ON STACK (0-15)
|
||
RL A1,A2 ;RESTORE SWITCH WORD WITHOUT BIT
|
||
JRNE SW2SCLP
|
||
SW2SCX1:
|
||
MOVE A3,@SWSTACK,L ;RESTORE SWITCH STACK
|
||
SWSCX:
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* INITIO - INITIALIZE THE GSP I/O REGISTERS *
|
||
* *
|
||
**************************************************************************
|
||
INITIO
|
||
MMTM SP,B0,B2,B10
|
||
*INITIALIZE I/O
|
||
MOVI HESYNC,B2,L
|
||
MOVI INITDATA,B0,L
|
||
MOVI (IDATAEND-INITDATA)/16,B10
|
||
INITIOS:
|
||
MOVE *B0+,*B2+
|
||
DSJS B10,INITIOS
|
||
MMFM SP,B0,B2,B10
|
||
RETS
|
||
|
||
*
|
||
*DUMMY FOR THE SWITCHES
|
||
DUMDIE JAUC SUCIDE ;NOTHING PROCESS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* BADTRAP - COME HERE WHEN A TRAP IS HIT THAT IS NOT DEFINED AND LOG IT. *
|
||
* *
|
||
**************************************************************************
|
||
BADTRAP
|
||
LOCKUP
|
||
DINT
|
||
JRUC $ ;LET THE WATCH DOG CATCH US
|
||
|
||
**************************************************************************
|
||
* *
|
||
* SWITCH PROCESS ACTIVATION TABLE FOR JAMMA COMPATIBLE TROG *
|
||
* FOR JOYSTICKS THE PROCID IS THE FLAG LOCATION. *
|
||
* *
|
||
**************************************************************************
|
||
SWTAB:
|
||
.WORD P1PID|PUP|0 ;PROCESS ID SWITCH 0 -- PLAYER 1 UP
|
||
.LONG PJOY ;STARTING ADDR
|
||
|
||
.WORD P1PID|PDOWN|1 ;PROCESS ID SWITCH 1 -- PLAYER 1 DOWN
|
||
.LONG PJOY ;STARTING ADDR
|
||
|
||
.WORD P1PID|PLEFT|2 ;PROCESS ID SWITCH 2 -- PLAYER 1 LEFT
|
||
.LONG PJOY ;STARTING ADDR
|
||
|
||
.WORD P1PID|PRIGHT|3 ;PROCESS ID SWITCH 3 -- PLAYER 1 RIGHT
|
||
.LONG PJOY ;STARTING ADDR
|
||
|
||
.WORD P1PID|PDRAWPID ;PROCESS ID SWITCH 4 -- PLAYER 1 DRAW
|
||
.LONG PDRAW ;STARTING ADDR
|
||
|
||
.WORD 0606H ;PROCESS ID SWITCH 5 -- SWITCH 5 NOT USED
|
||
.LONG 0 ;STARTING ADDR
|
||
|
||
.WORD 0606H ;PROCESS ID SWITCH 6 -- SWITCH 6 NOT USED
|
||
.LONG 0 ;STARTING ADDR
|
||
|
||
.WORD 0606H ;PROCESS ID SWITCH 7 -- SWITCH 7 NOT USED
|
||
.LONG 0 ;STARTING ADDR
|
||
|
||
.WORD P2PID|PUP|8 ;PROCESS ID SWITCH 8 -- PLAYER 2 UP
|
||
.LONG PJOY ;STARTING ADDR
|
||
|
||
.WORD P2PID|PDOWN|9 ;PROCESS ID SWITCH 9 -- PLAYER 2 DOWN
|
||
.LONG PJOY ;STARTING ADDR
|
||
|
||
.WORD P2PID|PLEFT|10 ;PROCESS ID SWITCH 10 -- PLAYER 2 LEFT
|
||
.LONG PJOY ;STARTING ADDR
|
||
|
||
.WORD P2PID|PRIGHT|11 ;PROCESS ID SWITCH 11 -- PLAYER 2 RIGHT
|
||
.LONG PJOY ;STARTING ADDR
|
||
|
||
.WORD P2PID|PDRAWPID ;PROCESS ID SWITCH 12 -- PLAYER 2 DRAW
|
||
.LONG PDRAW ;STARTING ADDR
|
||
|
||
.WORD 0606H ;PROCESS ID SWITCH 13 -- SWITCH 13 NOT USED
|
||
.LONG 0 ;STARTING ADDR
|
||
|
||
.WORD 0606H ;PROCESS ID SWITCH 14 -- SWITCH 14 NOT USED
|
||
.LONG 0 ;STARTING ADDR
|
||
|
||
.WORD 0606H ;PROCESS ID SWITCH 15 -- SWITCH 15 NOT USED
|
||
.LONG 0 ;STARTING ADDR
|
||
|
||
.WORD LC_PID ;PROCESS ID SWITCH 16 -- LEFT COIN
|
||
.LONG LCOIN ;STARTING ADDR
|
||
|
||
.WORD RC_PID ;PROCESS ID SWITCH 17 -- RIGHT COIN
|
||
.LONG RCOIN ;STARTING ADDR
|
||
|
||
.WORD P1PID|PSTRTPID ;PROCESS ID SWITCH 18 -- PLAYER 1 START
|
||
.LONG PLAYER_START ;STARTING ADDR
|
||
|
||
.WORD SLAM_PID ;PROCESS ID SWITCH 19 -- SLAM
|
||
.LONG SLAM ;STARTING ADDR
|
||
|
||
.WORD DIAG_PID ;PROCESS ID SWITCH 20 -- SWITCH 20 -- DIAG!
|
||
.LONG DIAG ;STARTING ADDR
|
||
|
||
.WORD P2PID|PSTRTPID ;PROCESS ID SWITCH 21 -- PLAYER 2 START
|
||
.LONG PLAYER_START ;STARTING ADDR
|
||
|
||
.WORD 0606H ;PROCESS ID SWITCH 22 -- SERVICE CREDIT
|
||
.LONG SCOIN ;STARTING ADDR
|
||
|
||
.WORD CC_PID ;PROCESS ID SWITCH 23 -- CENTER COIN
|
||
.LONG CCOIN ;STARTING ADDR
|
||
|
||
.WORD INDPIDW ;PROCESS ID SWITCH 24 -- FREEZE SWITCH
|
||
.LONG FREEZE ;STARTING ADDR
|
||
|
||
.WORD P3PID|PSTRTPID ;PROCESS ID SWITCH 25 -- PLAYER 3 START
|
||
.LONG PLAYER_START ;STARTING ADDR
|
||
|
||
.WORD P4PID|PSTRTPID ;PROCESS ID SWITCH 26 -- PLAYER 4 START
|
||
.LONG PLAYER_START ;STARTING ADDR
|
||
|
||
.WORD P3PID|PUP|27 ;PROCESS ID SWITCH 27 -- PLAYER 3 UP
|
||
.LONG PJOY ;STARTING ADDR
|
||
|
||
.WORD P3PID|PDOWN|28 ;PROCESS ID SWITCH 28 -- PLAYER 3 DOWN
|
||
.LONG PJOY ;STARTING ADDR
|
||
|
||
.WORD P3PID|PLEFT|29 ;PROCESS ID SWITCH 29 -- PLAYER 3 LEFT
|
||
.LONG PJOY ;STARTING ADDR
|
||
|
||
.WORD P3PID|PRIGHT|30 ;PROCESS ID SWITCH 30 -- PLAYER 3 RIGHT
|
||
.LONG PJOY ;STARTING ADDR
|
||
|
||
.WORD P3PID|PDRAWPID ;PROCESS ID SWITCH 31 -- PLAYER 3 DRAW
|
||
.LONG PDRAW ;STARTING ADDR
|
||
|
||
.WORD P4PID|PUP|32 ;PROCESS ID SWITCH 32 -- PLAYER 4 UP
|
||
.LONG PJOY ;STARTING ADDR
|
||
|
||
.WORD P4PID|PDOWN|33 ;PROCESS ID SWITCH 33 -- PLAYER 4 DOWN
|
||
.LONG PJOY ;STARTING ADDR
|
||
|
||
.WORD P4PID|PLEFT|34 ;PROCESS ID SWITCH 34 -- PLAYER 4 LEFT
|
||
.LONG PJOY ;STARTING ADDR
|
||
|
||
.WORD P4PID|PRIGHT|35 ;PROCESS ID SWITCH 35 -- PLAYER 4 RIGHT
|
||
.LONG PJOY ;STARTING ADDR
|
||
|
||
.WORD P4PID|PDRAWPID ;PROCESS ID SWITCH 36 -- PLAYER 4 DRAW
|
||
.LONG PDRAW ;STARTING ADDR
|
||
|
||
.WORD XC_PID ;PROCESS ID SWITCH 37 -- FOURTH COIN
|
||
.LONG XCOIN ;STARTING ADDR
|
||
|
||
.WORD 0606H ;PROCESS ID SWITCH 38 -- SWITCH 38
|
||
.LONG 0 ;STARTING ADDR
|
||
|
||
.WORD 0606H ;PROCESS ID SWITCH 39 -- SWITCH 39
|
||
.LONG 0 ;STARTING ADDR END OF CONNECTOR INPUTS
|
||
|
||
.WORD 0606H ;PROCESS ID SWITCH 40 -- SWITCH 40 (NON-EXISTANT)
|
||
.LONG 0 ;STARTING ADDR THIS IS CLRSWPRC DEFALUT
|
||
|
||
.WORD 0606H ;PROCESS ID SWITCH 41 -- SWITCH 41 (NON-EXISTANT)
|
||
.LONG 0 ;STARTING ADDR
|
||
|
||
.WORD 0606H ;PROCESS ID SWITCH 42 -- SWITCH 42 (NON-EXISTANT)
|
||
.LONG 0 ;STARTING ADDR
|
||
|
||
.WORD 0606H ;PROCESS ID SWITCH 43 -- SWITCH 43 (NON-EXISTANT)
|
||
.LONG 0 ;STARTING ADDR
|
||
|
||
.WORD 0606H ;PROCESS ID SWITCH 44 -- SWITCH 44 (NON-EXISTANT)
|
||
.LONG 0 ;STARTING ADDR
|
||
|
||
.WORD 0606H ;PROCESS ID SWITCH 45 -- SWITCH 45 (NON-EXISTANT)
|
||
.LONG 0 ;STARTING ADDR
|
||
|
||
.WORD 0606H ;PROCESS ID SWITCH 46 -- SWITCH 46 (NON-EXISTANT)
|
||
.LONG 0 ;STARTING ADDR
|
||
|
||
.WORD 0606H ;PROCESS ID SWITCH 47 -- SWITCH 47 (NON-EXISTANT)
|
||
.LONG 0 ;STARTING ADDR
|
||
|
||
.WORD 0606H ;PROCESS ID SWITCH 48 -- SWITCH 48 DS1-8
|
||
.LONG 0 ;STARTING ADDR *** START OF DIPSWITCHES ***
|
||
|
||
.WORD 0606H ;PROCESS ID SWITCH 49 -- SWITCH 49 DS1-7
|
||
.LONG 0 ;STARTING ADDR
|
||
|
||
.WORD 0606H ;PROCESS ID SWITCH 50 -- SWITCH 50 DS1-6
|
||
.LONG 0 ;STARTING ADDR
|
||
|
||
.WORD 0606H ;PROCESS ID SWITCH 51 -- SWITCH 51 DS1-5
|
||
.LONG 0 ;STARTING ADDR
|
||
|
||
.WORD 0606H ;PROCESS ID SWITCH 52 -- SWITCH 52 DS1-4
|
||
.LONG 0 ;STARTING ADDR
|
||
|
||
.WORD 0606H ;PROCESS ID SWITCH 53 -- SWITCH 53 DS1-3
|
||
.LONG 0 ;STARTING ADDR
|
||
|
||
.WORD 0606H ;PROCESS ID SWITCH 54 -- SWITCH 54 DS1-2
|
||
.LONG 0 ;STARTING ADDR
|
||
|
||
.WORD 0606H ;PROCESS ID SWITCH 55 -- SWITCH 55 DS1-1
|
||
.LONG 0 ;STARTING ADDR
|
||
|
||
.IF YUNIT
|
||
.WORD DIAG_PID ;PROCESS ID SWITCH 56 -- DS2-8, TEST SWITCH
|
||
.LONG DIAG ;STARTING ADDR
|
||
.ELSE
|
||
.WORD 0606H ;PROCESS ID SWITCH 56 -- SWITCH 56 DS2-8
|
||
.LONG 0 ;STARTING ADDR
|
||
.ENDIF
|
||
|
||
.IF YUNIT
|
||
.WORD INDPIDW ;PROCESS ID SWITCH 57 -- DS2-7, VIDEO FREEZE
|
||
.LONG FREEZE ;STARTING ADDR
|
||
.ELSE
|
||
.WORD 0606H ;PROCESS ID SWITCH 57 -- SWITCH 57 DS2-7
|
||
.LONG 0 ;STARTING ADDR
|
||
.ENDIF
|
||
|
||
.WORD 0606H ;PROCESS ID SWITCH 58 -- SWITCH 58 DS2-6
|
||
.LONG 0 ;STARTING ADDR
|
||
|
||
.WORD 0606H ;PROCESS ID SWITCH 59 -- SWITCH 59 DS2-5
|
||
.LONG 0 ;STARTING ADDR
|
||
|
||
.WORD 0606H ;PROCESS ID SWITCH 60 -- SWITCH 60 DS2-4
|
||
.LONG 0 ;STARTING ADDR
|
||
|
||
.WORD 0606H ;PROCESS ID SWITCH 61 -- SWITCH 61 DS2-3
|
||
.LONG 0 ;STARTING ADDR
|
||
|
||
.WORD 0606H ;PROCESS ID SWITCH 62 -- SWITCH 62 DS2-2
|
||
.LONG 0 ;STARTING ADDR
|
||
|
||
.WORD 0606H ;PROCESS ID SWITCH 63 -- SWITCH 63 DS2-1
|
||
.LONG 0 ;STARTING ADDR
|
||
|
||
*TV PATCH AREA
|
||
.BSS TVPATCH,30*16 ;PATCHLAND FOR TV
|
||
.BSS TVPATCHX,0
|
||
|
||
* VIDEO CONTROL REGISTERS INITIAL VALUES
|
||
INITDATA:
|
||
.IF NTSC
|
||
|
||
.WORD >0015 ;>C0000000 -- hesync
|
||
.WORD >002d ;>C0000010 -- heblnk
|
||
.WORD >00f3 ;>C0000020 -- hsblnk
|
||
.WORD >00fc ;>C0000030 -- htotal
|
||
.WORD 0003H ;>C0000040 -- VESYNC
|
||
.WORD ENDVBLNK ;>C0000050 -- VEBLNK
|
||
.WORD 0E0H+ENDVBLNK ;>C0000060 -- VSBLNK
|
||
.WORD 0109H ;>C0000070 -- VTOTAL
|
||
|
||
.ELSE
|
||
|
||
.WORD >0015 ;>C0000000 -- hesync
|
||
.WORD >002d ;>C0000010 -- heblnk
|
||
.WORD >00f3 ;>C0000020 -- hsblnk
|
||
.WORD >00fc ;>C0000030 -- htotal
|
||
.WORD 0003H ;>C0000040 -- VESYNC
|
||
.WORD ENDVBLNK ;>C0000050 -- VEBLNK
|
||
.WORD 0100H+ENDVBLNK ;>C0000060 -- VSBLNK
|
||
.WORD 0120H ;>C0000070 -- VTOTAL
|
||
|
||
.ENDIF
|
||
|
||
.WORD 0F010H ;>C0000080 -- DPYCTL
|
||
.WORD NORMDPYS ;>C0000090 -- dpystrt
|
||
.WORD HSINT ;>C00000A0 -- dpyint (HALF SCREEN)
|
||
.WORD INI_CTRL ;>C00000B0 -- control
|
||
.WORD 00h ;>C00000C0 -- hstdata
|
||
.WORD 00h ;>C00000D0 -- hstadrl
|
||
.WORD 00h ;>C00000E0 -- hstadrh
|
||
.WORD 00h ;>C00000F0 -- hstctll
|
||
.WORD 00h ;>C0000100 -- hstctlh
|
||
.WORD 00h ;>C0000110 -- intenbl
|
||
.WORD 00h ;>C0000120 -- intpend
|
||
.WORD 00h ;>C0000130 -- convsp
|
||
.WORD 00h ;>C0000140 -- convdp
|
||
.WORD PXSIZE ;>C0000150 -- psize
|
||
.WORD 00h ;>C0000160 -- pmask
|
||
.WORD 00h ;>C0000170 -- RESERVED
|
||
.WORD 00h ;>C0000180 -- RESERVED
|
||
.WORD 00h ;>C0000190 -- RESERVED
|
||
.WORD 00h ;>C00001A0 -- RESERVED
|
||
.WORD 00h ;>C00001B0 -- DPYTAP
|
||
IDATAEND:
|
||
|
||
IDATALEN EQU (IDATAEND-INITDATA)/16
|
||
|
||
*
|
||
*INITIALIZE ALL 32 TRAP VECTORS
|
||
*
|
||
.SECT "VECTORS"
|
||
|
||
.LONG BADTRAP ;TRAP 31
|
||
.LONG BADTRAP ;TRAP 30 ILLOP --- Illegal Opcode
|
||
.LONG BADTRAP ;TRAP 29
|
||
.LONG BADTRAP ;TRAP 28
|
||
.LONG BADTRAP ;TRAP 27
|
||
.LONG BADTRAP ;TRAP 26
|
||
.LONG BADTRAP ;TRAP 25
|
||
.LONG BADTRAP ;TRAP 24
|
||
.LONG BADTRAP ;TRAP 23
|
||
.LONG BADTRAP ;TRAP 22
|
||
.LONG BADTRAP ;TRAP 21
|
||
.LONG BADTRAP ;TRAP 20
|
||
.LONG BADTRAP ;TRAP 19
|
||
.LONG BADTRAP ;TRAP 18
|
||
.LONG BADTRAP ;TRAP 17
|
||
.LONG BADTRAP ;TRAP 16
|
||
.LONG BADTRAP ;TRAP 15
|
||
.LONG BADTRAP ;TRAP 14
|
||
.LONG BADTRAP ;TRAP 13
|
||
.LONG BADTRAP ;TRAP 12
|
||
.LONG BADTRAP ;TRAP 11 WV --- Window Violation
|
||
.LONG DIRQ ;TRAP 10 DI --- Display Interrupt
|
||
.LONG BADTRAP ;TRAP 9 HI --- Host Interrupt
|
||
.LONG BADTRAP ;TRAP 8 NMI -- NonMaskable Interrupt
|
||
.LONG BADTRAP ;TRAP 7
|
||
.LONG BADTRAP ;TRAP 6
|
||
.LONG BADTRAP ;TRAP 5
|
||
.LONG BADTRAP ;TRAP 4
|
||
.LONG BADTRAP ;TRAP 3
|
||
.LONG BADTRAP ;TRAP 2 INT2 --- External Interrupt 2
|
||
.LONG DMAINT ;TRAP 1 INT1 --- External Interrupt 1
|
||
.LONG POWERUP ;TRAP 0 Reset
|
||
|
||
.END
|
||
|
||
|
||
|