**************************************************************** * * Software: ? * Initiated: ? * * Modified: Shawn Liptak 8/6/91 - Hiscore display and entry * Shawn Liptak 11/9/91 - Title screen * * COPYRIGHT (C) 1991 WILLIAMS ELECTRONICS GAMES, INC. * *.Last mod - 1/7/92 13:50 **************************************************************** .FILE 'ATTRACT.ASM' .TITLE "ATTRACT MODE" .WIDTH 132 .OPTION B,D,L,T .MNOLIST .INCLUDE "MPROC.EQU" ;MPROC EQUATES .INCLUDE "DISP.EQU" ;DISPLAY PROC. EQUATES .INCLUDE "\VIDEO\SYS\SYS.INC" ;Z UNIT SYSTEM EQUATES .INCLUDE "\VIDEO\SYS\GSP.INC" .INCLUDE "MAC2.ASM" ;MACRO 2 DEFINITIONS .INCLUDE "IMGTBL.GLO" .INCLUDE "BGNDTBL.GLO" ;BACKGROUND EQUATES .INCLUDE "GAME.EQU" .include "audit.equ" .include "shawn.hdr" ;Macros .include "title.tbl" ;SOUNDS .REF TOTCARN,BEEP1,BEEP2,CNTDOWN,RESTUFF_AUTOERASE .REF PLYRONE,PLYRTWO,MUSICOFF .ref WRPSND ;yousuck .word >f9a0,10,>80c5,0 ;You suck at this game! ;logosnd .word >f420,1,>804f,0 ;Logo spins logosnd .word >f420,1,>8047,0 ;Logo spins ;exp1snd .word >fc80,10,>803e,0 ;Explosion exp1snd .word >fc80,10,>803f,0 ;Explosion ;ttlgun .word >fca0,4,>8030,0 ;Title guy shoots gun ttlgun .word >fca0,4,>8031,0 ;Title guy shoots gun ; SYMBOLS DEFINED IN THIS FILE .DEF SYSINITL,WIPEOUT,STATUS,ATSTRT,P1START,P2START,ENTERON .DEF NO_START,THIS_PLYR,RUNIN,ATSTRT2 .def hisclong ; SYMBOLS DEFINED EXTERNALLY .ref timerp1,timerp1sd,timerp2,timerp2sd,TNT_TYPE,DELAYALL .ref TAUNTOUT,TWAS1,KP_TAUNT,PLYRPRCS,FRANIMQ,AFTR_WRP .ref GAMERASE,GAMSTATE,P1DATA,P2DATA,COLRPRC,HALT,CLRBPAL,KILBGND .ref BAKMODS,BGND_UD1,BLAKOUT,KILL_CRD,CLR_SCRN,MAPOUT,MAPDN .ref CR_CONTP,P_CONT,CR_STRTP,P_START,SOUNDSUP,WSPEED,WFLG,BOX_OUT .ref WNDWON,CRD_SCRN,IRQSKYE,CLRPAL,PLYROBJS,AUTOEON,KPARWP,WORDS .ref GETFPAL,AUTOEOFF,DMAQWAIT,CLRSWPRC,MYOINIT,AUD1,INFO_BOX .ref CLRWORLD,SYNCFULL,SYSCOPY,GET_ADJ,CYCLE_TABLE,INIT_GAME .ref P1CTRL,P2CTRL,GET_OUT,SCORETYP,BCDADD,SCORETYP,TBOMB .ref DRAW_PLYR_TORSO,CNTDIG1,CNTDIG2,KILLP1,KILLP2,SCRIPTPLAY .ref WARPOUT,INEXP,CYCLIFE,SHK_ON,INAWARP .ref HISCBMOD,COLTAB,GETHIGH,PALSET,FPALRAM .ref SYNCHALF,NOSHOOT .ref FADE_DOWN,FADE_UP,FADEIN,FADEOUT,FB_FADEIN .ref anim_script,anim_killall .ref RNDRNGS .ref WAVE .ref WATR1,WATR2,WATR3 ;RAM AREA FOR THIS FILE .BSS RUNIN,16 .BSS STATUS,16 ;PLAYERS 0,1,2,3 .BSS ENTERON,16 ;INITIALS BEING ENTERD FLAG .BSS NO_START,16 ;FLAG 0=OKAY, 1=NOT RIGHT NOW. .BSS THIS_PLYR,16 ;FLAG = 1/2 FOR PLYR WHO BOUGHT IN .bss palram ,11*15*16 ;Palette mem .bss hisclong,16 ;!0=Show hiscore table longer .BSS SEC_FLAG,16 OWSPD .SET 21 ;31 ;OPEN WINDOW SPEED (HIGHER THE SLOWER) .TEXT ************************************************************************** * * * WIPEOUT - WIPES THE SYSTEM CLEAR OF ALL OTHER PROCESSES, OBJECTS * * AND COORDINATES. IT RETURNS WITH AUTO-ERASE SHUT OFF, * * DISPLAY PROCESSOR DISABLED * COLOR RAM CLEARED, AND THE BIT MAP WIPED CLEAN. * * THIS IS NICE TO USE WHEN SWITCHING BETWEEN STUFF. * ************************************************************************** WIPEOUT MMTM SP,A0,A1 CLR A0 ; MOVE A0,@SCORE_FLAG,W ;INSURE SCORE DMA IS NOT PERFORMED MOVE A0,@WFLG MOVE A0,@P1CTRL MOVE A0,@P2CTRL ;CLEAR PLAYER CPU CONTROLS MOVE A0,@P1DATA+POBJ,L MOVE A0,@P2DATA+POBJ,L movi PLYRPRCS,a1 move a0,*a1+,L ;These must be cleared! move a0,*a1+,L movi PLYROBJS,a1 move a0,*a1+,L move a0,*a1+,L move a0,@TAUNTOUT move a0,@INEXP move a0,@NOSHOOT move a0,@SHK_ON move a0,@INAWARP move a0,@CYCLIFE move a0,@AFTR_WRP move a0,@WARPOUT MOVI PLIST_ID,A1 CLR A0 CALLA KILALL ;KILL ALL PROCS, EXCEPT FOR COINS CALLA KILBGND ;WIPEOUT BACKGROUND BLOCKS CLR A0 MOVE A0,@SOUNDSUP,W ;MAKE SURE SOUNDS ARE ALLOWED MOVE A0,@GAMERASE,W MOVE A0,@IRQSKYE,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 CALLA CLRWORLD ;RESET THE WORLD CALLA SYSINITL CALLA CLR_SCRN POPST CALLA SYNCFULL ;NOW WAIT FOR VBLANK TO ZAP COLOR MAP MOVI -4,A0 MOVE A0,@DPYSTRT ;RESET DISPLAY START POINT MOVI OWSPD,A0 MOVE A0,@WSPEED MMFM SP,A0,A1 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 MOVE A0,@SYSCOPY,W ;RE-INITIALIZE SYSTEM CONTROL REG MOVE A0,@SYSCTRL,W MMFM SP,A0,A1 RETS ;ATTRACT MODE START UP ROUTINE ATSTRT2 MOVK 1,A0 MOVE A0,@GAMERASE MOVE @GAMSTATE,A0 CMPI INDIAG,A0 JREQ ATSTRTX MOVI INAMODE,A0 MOVE A0,@GAMSTATE,W CALLA COLRPRC CREATE AMDEPID,AMODE ;CREATE THE ATTRACT MODE ATS3 CLR A0 MOVE A0,@HALT MOVE A0,@ENTERON .REF START MOVE A0,@START ATSTRTX RETS ATSTRT MOVK 1,A0 MOVE A0,@GAMERASE MOVE @GAMSTATE,A0 CMPI INDIAG,A0 JREQ ATSTRTX MOVI INAMODE,A0 MOVE A0,@GAMSTATE,W CALLA COLRPRC CREATE AMDEPID,amode2 ;CREATE THE ATTRACT MODE JRUC ATS3 ; CYCLE BETWEEN MODES AMODE JSRP HSTDTABQ ;Show high scores with quick blindin amode2 JSRP DO_CRD_SCRN ;DISPLAY INSERT COIN SCREEN JSRP titlescreen CALLA CLRBPAL JSRP ATTPLAY2 ;DO ROAD ATTRACT MODE PLAY JSRP DO_CRD_SCRN ;DISPLAY INSERT COIN SCREEN CALLA CLRBPAL JSRP HSTDTAB ;Show high scores JSRP SHOWDOME ;SHOW PLEASURE DOME ENTRANCE! JSRP ATTPLAY ;DO ORCUS ATTRACT MODE PLAY JSRP DO_CRD_SCRN ;CREDIT INFO SCREEN CALLA CLRBPAL JSRP titlescreen CALLA CLRBPAL JSRP ATTPLAY3 ;DO REPORTER ATTRACT MODE ; JSRP SNK_PRVW JSRP DO_CRD_SCRN ;CREDIT INFO SCREEN CALLA CLRBPAL JSRP HSTDTAB ;Show high scores MOVI AMDEPID,A0 MOVE A0,*A13(PROCID) jruc amode2 SHOWDOME JSRP WNDWON CALLA KILBGND ;KILL OLD BACKGROUND IF ANY EXISTED CALLA CLNPAL MOVI CLSNEUT|TYPTEXT|SUBWNDW,A0 CLR A1 NOT A1 CALLA KILOBJ CLR A0 MOVE A0,@WFLG CALLA WIPEOUT CALLA RESTUFF_AUTOERASE MOVI 0D4H,a0 move a0,@WORLDTLX+16 movi 694H,a0 move a0,@WORLDTLY+16 SLEEPK 2 MOVI DMOD,A0 MOVE A0,@BAKMODS,L CLR A1 MOVE A1,@DISPLAYON CALLA BGND_UD1 MOVI PALCNO,A0 MOVK 2,A1 CALLA FADEIN CLR A0 CALLA FB_FADEIN SLEEPK 2 MOVK 1,A1 MOVE A1,@DISPLAYON ;START FOUNTAINS .REF WATR1,WATR2,WATR3 SLEEP 30 ******************************** * Start the pleasure dome fountain anims movi fount_t,a8 fsalp CREATE0 fountain_ani addi 80,a8 move *a8,a0,L jrnz fsalp SLEEP 5*60 JSRP WNDWON CALLA KILBGND ;KILL OLD BACKGROUND IF ANY EXISTED CALLA CLNPAL MOVI CLSNEUT|TYPTEXT|SUBWNDW,A0 CLR A1 NOT A1 CALLA KILOBJ CLR A0 MOVE A0,@WFLG CALLA WIPEOUT CALLA RESTUFF_AUTOERASE RETP fount_t LWWW watr_l,66H,0B8H,DMAWNZ|M_NOCOLL LWWW watr_l,127H,0B8H,DMAWNZ|M_NOCOLL|M_FLIPH .long 0 watr_l LW WATR1,5 LW WATR2,5 LWL0 WATR3,5 SUBRP fountain_ani move *a8+,a9,L move *a8+,a0 ;X move *a8+,a1 ;Y sll 16,a0 sll 16,a1 move *a9,a2,L movi 170,a3 ;Z move *a8+,a4 movi CLSDEAD,a5 clr a6 clr a7 calla BEGINOBJ move a9,a11 falp JSRP FRANIMQ move a11,a9 jruc falp PALCNO .LONG 5*32*32+5*32+5,0 DMOD .long DOMEBMOD .word 200,200 .long -1 ; ; ATTPLAY - ATTRACT MODE GAME PLAY ; NOTE: CALL WITH JSRP ; .BSS AWAVE,16 ATTPLAY3: CALLA WIPEOUT CALLA RESTUFF_AUTOERASE MOVK 1,A0 MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS OFF CREATE0 AMODWAVE3 ;START WAVE #1-3 SLEEP 18*60 JRUC ATTFIX ATTPLAY2: CALLA WIPEOUT CALLA RESTUFF_AUTOERASE MOVK 1,A0 MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS OFF CREATE0 AMODWAVE2 ;START WAVE #1-3 SLEEP 30 MOVI P1DATA,A11 ;MARK PLAYER 1 FOR DEMO MOVI AWAV2MOV,A9 JRUC ATTNEXT ATTPLAY: CALLA WIPEOUT CALLA RESTUFF_AUTOERASE MOVK 1,A0 MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS OFF MOVE @AWAVE,A0,W INC A0 CMPI 3,A0 JRLS ATTWGO CLR A0 ATTWGO: MOVE A0,@AWAVE,W SLL 4,A0 ADDI WV_TBL,A0 MOVE *A0,A0 ;GET REAL GAME WAVE # MOVE A0,@WAVE,W CALLA CLNPAL .REF AMODWAVE2,AMODWAVE,CLNPAL,FADE_STRT,AMODWAVE3 DROPBMB .EQU 01000H CREATE0 AMODWAVE ;START WAVE #1-3 MOVI P1DATA,A11 ;MARK PLAYER 1 FOR DEMO MOVI AWAV1MOV,A9 ATTNEXT: MOVE *A9+,A0,W ;GET SOME JOYSTICK BITS CMPI DROPBMB,A0 JRNZ ATTNB ;DROP A BMB MOVE @P1DATA+BMB_CNT,A0 INC A0 MOVE A0,@P1DATA+BMB_CNT PUSH A9 MOVK 1,A9 CREATE BMBPID,TBOMB PULL A9 JRUC ATTNB1 ATTNB CMPI -1,A0 JREQ ATTWXXX MOVE A0,@P1CTRL,W ATTNB1 MOVE *A9+,A10,W JSRP ATTSLP ;PROCESS SLEEP TIME JRUC ATTNEXT WV_TBL .WORD 1,2,3,4 ATTWXXX: CALLA INIT_SCORE ATTFIX CLR A1 NOT A1 MOVI CHNKPID,A0 CALLA KILALL .REF INIT_SCORE,SCORE_FLAG SLEEPK 2 CLR A0 MOVE A0,@SCORE_FLAG JSRP WNDWON MOVI ICONPID,A0 CLR A1 NOT A1 CALLA KILALL SLEEP 2 CLR A0 MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON CALLA WIPEOUT CALLA RESTUFF_AUTOERASE RETP ; ; ATTSLP - PROCESS ATTRACT MODE PLAYER SLEEP ; A10 = # TICKS TO SLEEP ; RETURNS: ; CARRY CLEAR = SLEEP COMPLETED ; CARRY SET = STILL SNOZZIN' ; ; NOTE: CALL WITH JSRP ; ATTSLP: PUSHP A10 ATTSLPL: SLEEP 1 SETC DSJS A10,ATTSLPL ;PROCESS SLEEP LOOP CLRC PULLP A10 RETP AWAV1MOV: ;PLACE SCRIPT FOR WAVE ORCUS .WORD 0,60*5 .WORD PUP|PLEFT,35H .WORD PRYTE,35H .WORD DROPBMB,1H .WORD PFUP|PDOWN,40H .WORD PFUP,20H .WORD DROPBMB,1H .WORD 0,5H .WORD PFLEFT|PFUP,20H .WORD DROPBMB,1H .WORD PLEFT,20H .WORD PFRYTE|PFUP|PUP,50H .WORD DROPBMB,1H .WORD DROPBMB,11H .WORD PFUP|PFRYTE|PDOWN,20H .WORD DROPBMB,1H .WORD PFRYTE|PUP,20H .WORD PFUP|PFRYTE|PDOWN,40H .WORD PUP,26H .WORD DROPBMB,1H .WORD 0,20H .WORD PFLEFT|PRYTE,25H .WORD PUP,10H .WORD PRYTE|PFDOWN,55H .WORD DROPBMB,1H .WORD PFUP|PDOWN,20H .WORD PFRYTE|PLEFT,20H .WORD PFRYTE|PUP,20H .WORD DROPBMB,1H .WORD PFRYTE|PDOWN,30H .WORD PFRYTE|PFUP,20H .WORD PLEFT,20H .WORD DROPBMB,1H .WORD PFDOWN|PFLEFT|PRYTE,15H .WORD DROPBMB,1H .WORD PUP,26H .WORD PRYTE|PFDOWN,22H .WORD PFUP|PDOWN,20H .WORD PFRYTE|PFUP|PLEFT,30H .WORD DROPBMB,11H .WORD DROPBMB,1H .WORD PFRYTE|PUP,20H .WORD PFRYTE|PFUP|PDOWN,35H .WORD DROPBMB,1H .WORD PFLEFT|PFUP|PUP,20H .WORD DROPBMB,1H .WORD PFLEFT|PFUP|PDOWN,35H .WORD PFRYTE|PDOWN,30H .WORD PFRYTE,20H .WORD DROPBMB,11H .WORD DROPBMB,1H .WORD PRYTE|PUP|PFDOWN,30H .WORD PLEFT,20H .WORD DROPBMB,1H .WORD PFDOWN|PRYTE,15H .WORD PUP,26H .WORD PRYTE|PFDOWN,22H .WORD PFUP|PDOWN,20H .WORD PFRYTE|PLEFT,30H .WORD PFLEFT|PFUP|PUP,20H .WORD DROPBMB,1H .WORD PFRYTE|PDOWN,35H .WORD PFLEFT|PUP,20H .WORD PFLEFT|PFUP|PDOWN,35H .WORD 0FFFFH AWAV2MOV: ;PLACE SCRIPT FOR ROAD .WORD 0,60*2 .WORD PUP|PRYTE|PFRYTE,50H .WORD PRYTE|PFRYTE,55H .WORD PFUP|PDOWN,40H .WORD PFRYTE,20H .WORD DROPBMB,1H .WORD 0,5H .WORD PFRYTE,20H .WORD DROPBMB,1H .WORD PFRYTE|PUP,50H .WORD DROPBMB,1H .WORD PFUP|PFRYTE|PDOWN,20H .WORD PFRYTE|PUP|PRYTE,20H .WORD PFUP|PFRYTE|PDOWN,40H .WORD PUP,26H .WORD 0,20H .WORD PFRYTE|PRYTE,35H .WORD DROPBMB,1H .WORD PUP,10H .WORD PRYTE|PFDOWN,45H .WORD PFUP|PDOWN,20H .WORD PFRYTE|PUP,20H .WORD DROPBMB,1H .WORD DROPBMB,11H .WORD PFRYTE|PDOWN,30H .WORD PFRYTE|PFUP,20H .WORD DROPBMB,1H .WORD PLEFT,20H .WORD PFDOWN|PFLEFT|PRYTE,15H .WORD PUP,26H .WORD DROPBMB,1H .WORD PRYTE|PFDOWN,22H .WORD PFUP|PDOWN,20H .WORD PFRYTE|PLEFT,30H .WORD PFRYTE|PUP|PRYTE,20H .WORD PFRYTE|PDOWN|PRYTE,35H .WORD DROPBMB,1H .WORD PFLEFT|PFUP|PUP|PRYTE,20H .WORD PFLEFT|PFUP|PDOWN|PRYTE,35H .WORD DROPBMB,1H .WORD PFRYTE|PDOWN,30H .WORD PFRYTE,20H .WORD PRYTE|PUP|PFDOWN,30H .WORD PFDOWN|PRYTE,15H .WORD PUP,26H .WORD PRYTE|PFDOWN,22H .WORD DROPBMB,11H .WORD PFUP|PDOWN,20H .WORD PFLEFT|PFUP|PUP,20H .WORD PFRYTE|PDOWN,35H .WORD DROPBMB,1H .WORD PFLEFT|PUP,20H .WORD PFLEFT|PFUP|PDOWN,35H .WORD 0FFFFH ;DISSND .WORD >F3EE,>18,>80B0,0 ;KEY MELODY TYPE SND ; ; .REF CYCSPECT ;SNK_PRVW ; CREATE COLRPID,CYCSPECT ;START COLOR CYCLE PROCESS ; calla KILBGND ;Kill old background if any existed ; ; ADJUST ADJMUSIC ;GET MUSIC ON OFF FOR DEMO ; MOVE A0,A0 ; JRNZ NONO ; CLR A0 ; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON ; movi DISSND,a0 ;DO DISARM SOUND IF NOT BLOWING ; calla ONESND ; MOVK 1,A0 ; MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS OFF ;NONO ; MOVI RD15FONT,A11 ;FONT TABLE ; CLR A0 ; MOVE A0,@WRLD ; MOVK 2,A10 ;Y,X SPACING BETWEEN CHARCTERS ; CLR A0 ; ; MOVI 3E3EH,A6 ;COLOR CYCLE DIGITS ; MOVI [25-5,0200],A9 ;SCRN Y/X ; MOVI LINE1,A8 ; JSRP STRCNRMO ; ; MOVI 3E3EH,A6 ;COLOR CYCLE DIGITS ; MOVI [45-5,0200],A9 ;SCRN Y/X ; MOVI LINE2,A8 ; JSRP STRCNRMO ; ; MOVI 3E3EH,A6 ;COLOR CYCLE DIGITS ; MOVI [70-5,0200],A9 ;SCRN Y/X ; MOVI LINE3,A8 ; JSRP STRCNRMO ; ; MOVI 3E3EH,A6 ;COLOR CYCLE DIGITS ; MOVI [90-5,0200],A9 ;SCRN Y/X ; MOVI LINE4,A8 ; JSRP STRCNRMO ; ; MOVI 3E3EH,A6 ;COLOR CYCLE DIGITS ; MOVI [110-5,0200],A9 ;SCRN Y/X ; MOVI LINE5,A8 ; JSRP STRCNRMO ; ; MOVI 3E3EH,A6 ;COLOR CYCLE DIGITS ; MOVI [130-5,0200],A9 ;SCRN Y/X ; MOVI LINE6,A8 ; JSRP STRCNRMO ; ; MOVI 3E3EH,A6 ;COLOR CYCLE DIGITS ; MOVI [150-5,0200],A9 ;SCRN Y/X ; MOVI LINE7,A8 ; JSRP STRCNRMO ; ; MOVI 3E3EH,A6 ;COLOR CYCLE DIGITS ; MOVI [170-5,0200],A9 ;SCRN Y/X ; MOVI LINE8,A8 ; JSRP STRCNRMO ; ; MOVI 3E3EH,A6 ;COLOR CYCLE DIGITS ; MOVI [190-5,0200],A9 ;SCRN Y/X ; MOVI LINE9,A8 ; JSRP STRCNRMO ; ; MOVI 3E3EH,A6 ;COLOR CYCLE DIGITS ; MOVI [210-5,0200],A9 ;SCRN Y/X ; MOVI LINE10,A8 ; JSRP STRCNRMO ; ; MOVI 3E3EH,A6 ;COLOR CYCLE DIGITS ; MOVI [235-5,0200],A9 ;SCRN Y/X ; MOVI LINE11,A8 ; JSRP STRCNRMO ; ; SLEEP 12*60 ; ; MOVI CLSNEUT|TYPTEXT|SUBTXT,A0 ; CLR A1 ; NOT A1 ; CALLA KILOBJ ; RETP ; ;LINE1 .BYTE "GAME PLAYERS:",0 ;LINE2 .BYTE "THIS IS A TEST GAME!",0 ;LINE3 .BYTE "TOTAL CARNAGE IS HERE!",0 ; ;LINE4 .BYTE "GET A SNEAK PEEK AND BE",0 ;LINE5 .BYTE "THE FIRST TO PLAY!",0 ;LINE6 .BYTE "THE CARNAGE CAN ONLY BE",0 ;LINE7 .BYTE "FOUND HERE IN CHICAGO.",0 ;LINE8 .BYTE "PLAYING WITH A PARTNER",0 ;LINE9 .BYTE "WILL HELP YOU SURVIVE",0 ;LINE10 .BYTE "THE CARNAGE! GOOD LUCK!",0 ;LINE11 .BYTE "YOU'LL NEED IT!",0 ; .EVEN TOTCARN2 .WORD >F9F0,120,>80F0,0 ;"TOTAL CARNAGE" ******************************** * Title page SUBRP titlescreen calla KILBGND ;Kill old background if any existed movi title_as,a8 CREATE ANIMPID,anim_script ;P1 ; SLEEP 30 ;DEBUG SLEEP 1020 calla anim_killall RETP title_as ; ASSNDD yousuck ASLAB 49 ASNEW titlemdnew_t ;>Midway logo ASDSJ ASASM move @OBJLST,a0,L ;>Set up logo lines move *a0(OSAG),a2,L move *a0(OYPOS),a3 t40 movk 1,a1 move a1,*a0(OSIZEY) move a2,*a0(OSAG),L move a3,*a0(OYPOS) addi 200*8,a2 addk 1,a3 btst 0,a3 jrz t50 move *a0(OXPOS),a1 ;Move to rgt addi 400+200,a1 move a1,*a0(OXPOS) move *a0(OID),a1 addk 1,a1 move a1,*a0(OID) t50 move *a0,a0,L jrnz t40 ASENDASM ASLAB 75 ;>Slide in logo ASXY 8,0,4,0 ASXY 9,0,-4,0 ASDSJS1 ASTXT tpresents_st ASSLP 50 ASASM CALLA logo_setflpv SLEEP 96 CALLA logo_negyv SLEEP 48 CALLA logo_negyv SLEEPK 24 CALLA logo_negyv SLEEPK 12 CALLA logo_negyv SLEEPK 6 CALLA logo_setxv ; ASENDASM ; ASSNDD exp1snd ADJUST ADJMUSIC ;GET MUSIC ON OFF FOR DEMO MOVE A0,A0 JRNZ NONO1 CLR A0 MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON movi exp1snd,a0 calla ONESND MOVK 1,A0 MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS OFF NONO1 ASENDASM ASTXTK ASSLP 20 ASASM ADJUST ADJMUSIC ;GET MUSIC ON OFF FOR DEMO MOVE A0,A0 JRNZ NONO2 CLR A0 MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON movi TOTCARN2,a0 calla ONESND MOVK 1,A0 MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS OFF NONO2 ASENDASM ; ASSNDD TOTCARN ASNEW titlenew_t ASHIDE >54 ASLAB 67 ASXY >10,0,-6,0 ASXY >40,>1f,6,0 ASDSJS1 ASDELM 8,1 ASRUN ttlshoot_as ASLAB 136 ASXY >40,>1f,3,0 ASDSJS1 ASSLP 60*7 ASLAB 43 ASXY >10,0,0,6 ASXY >40,>f,0,8 ASXY >50,>f,0,7 ASDSJS1 ASEND titlemdnew_t ASITEMN -199,100,MIDWAY,50,DMAWNZ,8 .word -1000 TX .set -808 TY .set 0+1 TGY .set 50 ;93 titlenew_t ASITEMN 418,6+1,TITPC1,50,DMAWNZ,>10 ASITEMN 630,6+1,TITPC2,50,DMAWNZ,>10 ASITEMN TX,TY,BLOCKSIZE,30,DMAWNZ,>40 ASITEMN TX+200,TY,BLOCKSIZE,30,DMAWNZ,>40 ASITEMN TX+400,TY,BLOCKSIZE,30,DMAWNZ,>40 ASITEMN TX+600,TY,BLOCKSIZE,30,DMAWNZ,>40 ASITEMN TX,TY+255,BLOCKSIZE,30,DMAWNZ+M_FLIPV,>40 ASITEMN TX+200,TY+255,BLOCKSIZE,30,DMAWNZ+M_FLIPV,>40 ASITEMN TX+400,TY+255,BLOCKSIZE,30,DMAWNZ+M_FLIPV,>40 ASITEMN TX+600,TY+255,BLOCKSIZE,30,DMAWNZ+M_FLIPV,>40 ASITEMN TX+54,TY+238,COPYR,100,DMAWNZ,>40 ASITEMN TX+68,TY+TGY,TTLHED1,70,DMAWNZ,>50 ASITEMN TX+68,TY+TGY,TTLPC1,70,DMAWNZ,>50 ASITEMN TX+68,TY+TGY,TTLPC2,70,DMAWNZ,>50 ASITEMN TX+68,TY+TGY,TTLPC3,40,DMAWNZ,>50 ASITEMN TX+68,TY+TGY,TTLPC4,40,DMAWNZ,>50 ASITEMN TX+68,TY+TGY,TTLPC5,40,DMAWNZ,>50 ASITEMN TX+68,TY+TGY,TTLPC6,40,DMAWNZ,>50 ASITEMN TX+68,TY+TGY,TTLPC7,40,DMAWNZ,>50 ASITEMN TX+67,TY+TGY,TTLPC8,40,DMAWNZ,>50 ASITEMN TX+66,TY+TGY,TTLPC9,40,DMAWNZ,>50 ASITEMN TX+67,TY+TGY,TTLPC10,40,DMAWNZ,>50 ASITEMN TX+68+330,TY+TGY+105,TTLBLAST,44,DMAWNZ,>54 ASITEMN TX+68+330,TY+TGY+104,TTLBLAST,44,DMAWNZ+M_FLIPV,>54 .word -1000 tpresents_st XYTXT 0,200,160,37,"PRESENTS" .word -1 ttlshoot_as ; ASSLP 40 ; ASLAB 5 ; ASLAB 8 ;>Pop up ; ASXY >50,>f,1,-5 ; ASDSJS1 ; ASXY >50,>f,1,-3 ; ASSLP1 ASLAB 12*4 ;>Fire ASXY >50,>f,-2,0 ASSVL FLASH ASPAL >50 ASPAL >54 ASSHOW >54 ASSLP1 ASASM ADJUST ADJMUSIC ;GET MUSIC ON OFF FOR DEMO MOVE A0,A0 JRNZ NONO3 CLR A0 MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON movi ttlgun,a0 calla ONESND MOVK 1,A0 MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS OFF NONO3 ASENDASM ; ASSNDD ttlgun ASXY >50,>f,-2,0 ASSVL BLASTP ASPAL >54 ASSLP1 ASXY >50,>f,2,0 ASSVL FLASH ASPAL >54 ASSLP1 ASXY >50,>f,2,0 ASHIDE >54 ASSVL TTLCOLR ASPAL >50 ASDSJS1 ; ASLAB 8 ;>Duck ; ASXY >50,>f,-1,5 ; ASDSJS1 ; ASXY >50,>f,-1,2 ; ASSLP1 ; ASXY >50,>f,0,1 ; ASSLP1 ; ASSLPR 60,90 ; ASDSJ ASEND SUBRP logo_setflpv move @OBJLST,a2,L ;>Flip logo lines movi >8000,a3 lsfvlp movb *a2(OID),a0 subk 1,a0 jreq lsfv50 ;Txt? move a3,*a2(OYVEL),L subi >555,a3 lsfv50 move *a2,a2,L jrnz lsfvlp rets SUBRP logo_negyv ; ASENDASM ; ASSNDD logosnd ; ASASM ADJUST ADJMUSIC ;GET MUSIC ON OFF FOR DEMO MOVE A0,A0 JRNZ NONO4 CLR A0 MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON movi logosnd,a0 calla ONESND MOVK 1,A0 MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS OFF NONO4 move @OBJLST,a2,L ;>Flip logo lines lnyvlp movb *a2(OID),a0 subk 1,a0 jreq lnyv50 ;Txt? move *a2(OYVEL),a0,L neg a0 sll 1,a0 ;*2 move a0,*a2(OYVEL),L lnyv50 move *a2,a2,L jrnz lnyvlp rets SUBRP logo_setxv move @OBJLST,a2,L ;>Flip logo lines lsxvlp movk 7,a0 sll 16,a0 move *a2(OID),a1 btst 0,a1 jrz lsxv50 neg a0 lsxv50 move a0,*a2(OXVEL),L move *a2,a2,L jrnz lsxvlp rets ******************************** DO_CRD_SCRN JSRP CRD_SCRN ;SHOW CREDITS SCREEN SUPERIMPOSED ; SLEEP 1*60 SLEEP 6*60 CALLA KILL_CRD CALLA CLR_SCRN RETP ************************************************************************** * * * PxSTART - PLAYER START SWITCH PROCESSES * * * ************************************************************************** *PLAYER 1 START P1START: MOVE @TAUNTOUT,A1 JRZ P1TAG0 IN2 ;CHECK TO SEE IF TAUNT IN RACKUP MOVE @TNT_TYPE,A0 JANZ SUCIDE MOVE @KP_TAUNT,A0,L CMPI 1,A1 JRNZ TNT1 MOVI TWAS1,A7 CLR A1 CALLA XFERPROC DIE TNT1 MOVK 3,A0 ;GET OUT OF TAUNT! MOVE A0,@TAUNTOUT DIE P1TAG0 MOVE @INFO_BOX,A0,L JRZ P1TAG P2IN2 ;INFO BOX IS OUT, TAKE IT OFF, IGNORE THIS START! MOVI BOX_OUT,A7 CLR A1 CALLA XFERPROC DIE P1TAG MOVE @WFLG,A0 ;WINDOW GROW FLAG JANZ SUCIDE MOVE @ENTERON,A0 ;NEVER START WHEN INITIALS BEING JANZ SUCIDE ;ENTERED MOVE @MAPOUT,A0,L JRZ P1OK P2IN ;MAP IS OUT, TAKE IT OFF, IGNORE THIS START! MOVI MAPDN,A7 CALLA GETA8 CALLA GETA9 CALLA GETA10 CLR A1 CALLA XFERPROC CLR A0 MOVE A0,@MAPOUT,L JAUC SUCIDE P1OK MOVE @STATUS,A0 ;1/2 OR 3 FOR WHO IS PLAYING NOW BTST 0,A0 ;TEST IF 0 BIT IS SET (1) JRZ P1A MOVE @GAMSTATE,A0 CMPI ININTRO,A0 JRZ INTRO_EXIT MOVE @WARPOUT,A0 JRZ ABM CMPI 1,A0 JANZ SUCIDE WRPIN MOVE @KPARWP,A0,L MOVE *A0(PDATA),A10 ;INDEX 0-5 ;CHECK FOR RIGHT SIDE OF SCREEN ;SCRN EDGE OK CMPI 4,A10 JRZ DONE INC A10 MOVE A10,*A0(PDATA) MOVI BEEP1,A0 CALLA ONESND JAUC SUCIDE ABM ;PLACE TIME BOMB HERE MOVE @PLYRPRCS,A0,L MOVE *A0(DEAD),A0 JRNZ YESSND MOVK 1,A9 MOVE @P1DATA+BMB_CNT,A0 JRZ YESSND MOVE @HALT,A0 JANZ SUCIDE ;YESSND ;PLACE BOMB ON GROUND MOVE @P1DATA+BMBSUSED,A0 INC A0 MOVE A0,@P1DATA+BMBSUSED CREATE BMBPID,TBOMB DIE DONE MOVK 1,A0 MOVE A0,@WORDS+4*16 DIE P1A ;NOT ALREADY IN GAME, SEE IF WE CAN START P1 UP! MOVI P1DATA,A2 JRUC PXSTART *PLAYER 2 START P2START: MOVE @TAUNTOUT,A1 JRNZ IN2 MOVE @INFO_BOX,A0,L JRNZ P2IN2 MOVE @WFLG,A0 ;WINDOW GROW FLAG JANZ SUCIDE MOVE @ENTERON,A0 ;INITIALS BEING ENTERED JANZ SUCIDE MOVE @MAPOUT,A0,L JRNZ P2IN MOVE @STATUS,A0 ;1/2 OR 3 FOR WHO IS PLAYING NOW BTST 1,A0 ;TEST IF 1 BIT IS SET (2) JRZ P2A MOVE @GAMSTATE,A0 CMPI ININTRO,A0 JRZ INTRO_EXIT MOVE @WARPOUT,A0 JRZ NOW CMPI 2,A0 JRZ WRPIN DIE NOW ;PLACE TIME BOMB HERE MOVE @PLYRPRCS+32,A0,L MOVE *A0(DEAD),A0 JRNZ YESSND MOVK 2,A9 MOVE @P2DATA+BMB_CNT,A0 JRZ YESSND MOVE @HALT,A0 JANZ SUCIDE ;YESSND ;PLACE BOMB ON GROUND MOVE @P2DATA+BMBSUSED,A0 INC A0 MOVE A0,@P2DATA+BMBSUSED CREATE BMBPID,TBOMB DIE YESSND MOVI BEEP2,A0 ;NO BOMBS LEFT SND CALLA ONESND DIE P2A ;NOT ALREADY IN GAME, SEE IF WE CAN START P2 UP! MOVI P2DATA,A2 PXSTART: MOVE @GAMSTATE,A0,W CMPI INGAMEOV,A0 JAZ SUCIDE CMPI INDIAG,A0 JRNE PSTARTG ;GAME IN DIAGNOSTICS MODE! DO NOT START A GAME. DIE INTRO_EXIT ;IF IN INTRO, TELL CODE TO EXIT EARLY. ;TELL INTRO TO STOP NOW! CLR A1 NOT A1 MOVI INTROPID,A0 CALLA EXISTP JAZ SUCIDE ;YES, FOUND INTRO PROC MOVI GET_OUT,A7 ;WAKE UP AT GET_OUT CLR A1 CALLA XFERPROC DIE DEC_DIGIT ;MAYBE INC BUYIN TIMER TO GIVE MORE TIME MOVE @CNTDIG1,A0 JRZ DEC1 CMPI 10,A0 JRZ DEC1 INC A0 MOVE A0,@CNTDIG1 MOVI CNTDOWN,A0 CALLA ONESND DEC1 MOVE @CNTDIG2,A0 JRZ DEC2 CMPI 10,A0 JRZ DEC2 INC A0 MOVE A0,@CNTDIG2 MOVI CNTDOWN,A0 CALLA ONESND DEC2 DIE ;DEC_DIGIT ;;MAYBE DEC BUYIN TIMER FASTER! ; MOVE @CNTDIG1,A0 ; CMPI 6,A0 ; JRC DEC1 ; DEC A0 ; MOVE A0,@CNTDIG1 ; MOVI CNTDOWN,A0 ; CALLA ONESND ;DEC1 ; MOVE @CNTDIG2,A0 ; CMPI 6,A0 ; JRC DEC2 ; DEC A0 ; MOVE A0,@CNTDIG2 ; MOVI CNTDOWN,A0 ; CALLA ONESND ;DEC2 DIE PSTARTG CMPI INAMODE,A0 JREQ PXSTRTNEW ;BR=FRESH START FROM ATTRACT MODE move *a2(PSCORE),a0,L jrnz psg50 ;Continue? calla CR_STRTP ;Credits to start jrlo DEC_DIGIT ;No? calla P_START ;Take credits MOVK 1,A10 ;AT LEAST 5 MEN FOR .50 CENTS MOVE @GAMSTATE,A0 CMPI ININTRO,A0 ;IF IN INTRO, THE REGULAR START UP JRZ psg80 CALLR AUD_BOSS_ROAD movk AUD1STRT,a0 ;Mid game start calla AUD1 jruc psg80 AUD_BOSS_ROAD movk AUDBOSS1SC,a0 ;Starts/continues move @WAVE,a1 subk 16,a1 jreq psg20 subk 17-16,a1 jrne psg30 movk AUDROAD1SC,a0 ;Starts/continues psg20 calla AUD1 psg30 RETS psg50 CMPI P1DATA,A2 JRZ psg52 move @CNTDIG2,A0 JRNZ STILL_CNTIN ;CNTDWN DIGIT STILL GOING? JRZ psg54 psg52 move @CNTDIG1,A0 JRNZ STILL_CNTIN psg54 ;TRY TO CHARGE 50 CENTS! ; calla CR_STRTP ;Credits to start calla CR_CONTP ;Credits to CONTINUE jrlo DEC_DIGIT ;No? calla P_CONT ;Take credits ; calla P_START ;Take credits CALLR AUD_BOSS_ROAD movk AUD1STRT,a0 ;Mid game start calla AUD1 ; MOVK 1,A10 ;5 PLAYERS FOR 50 CENTS CLR A10 ;NOT 5 PLAYERS FOR 25 CENTS jruc psg80 STILL_CNTIN ;TRY TO CHARGE 25 CENTS - CNTDWN TIMER STILL GOING calla CR_CONTP ;Credits to continue jrlo DEC_DIGIT ;No? calla P_CONT ;Take credits CALLR AUD_BOSS_ROAD AUDIT AUD1CONT ;Audit plyr 1 continue CLR A10 ;NOT 5 PLAYERS FOR 25 CENTS psg80 CMPI P1DATA,A2 JRNE P2STARTA ;THIS IS PLAYER 1 BUYING IN TO A GAME IN PROGRESS (OR A CONTINUE) ;IF GAME IS NOT SHOWING PLAYFIELD AREA, VOCALLY INDICATE PLAYER HAS BOUGHT ;IN BUT DELAY HIS CREATION UNTIL PLAYFIELD SCREEN IS SHOWN. IF HE NEEDS TO ;APPREAR IN A VIEWSCRN OR SOMETHING, THEN THAT IS A SPECIAL CASE TURN ON ;OF THE PLAYER. MOVI PLYRONE,A0 ;WELCOME PLAYER 1 AUDIO CALLA ONESND CALLA SET_P1BUYIN MOVI P1DATA,A11 CALLA GET_LIVES ;ZERO STATS IF CNTDWN TIMER NOT GOING? CALLR ZERO_TIMERS ; MOVE @CNTDIG1,A0 ; JRNZ NO_ZER ; CALLA ZERO_STATS ;NO_ZER MOVI DG1PID,A0 CLR A1 MOVE A1,@CNTDIG1 MOVE A1,*A11(CNTD) ;CNTDWN FLAG NOT A1 CALLA KILALL ;ZERO COUNTDOWN DIGIT FOR PLYR 1 DIE ZERO_STATS MOVK 3,A0 MOVE A0,*A11(BMB_CNT) CLR A0 MOVE A0,*A11(CASHCNT),W MOVE A0,*A11(TFLAGS),W ;US FLAGS PICKED UP MOVE A0,*A11(PSCORE),L MOVE A0,*A11(THSTGS) ;TOTAL HOSTAGES MOVE A0,*A11(THITS) ;TOTAL SUCCESSFUL SHOTS FIRED MOVE A0,*A11(TWPNS) ;TOTAL WEAPONS PICKED UP MOVE A0,*A11(TEARNED) ;TOTAL EXTRA MEN EARNED MOVE A0,*A11(BMBSUSED) ;TOTAL BOMBS/CRUISE MISSILES USED MOVE A0,*A11(TBIGSTF) ;TOTAL BIG STUFF DESTROYED MOVE A0,*A11(TMISLS) ;TOTAL MISSILE STRIKES CALLED IN MOVE A0,*A11(TMINEDTH) ;TOTAL LAND MINE DEATHS MOVE A0,*A11(TSHOTS) ;TOTAL SHOTS FIRED MOVE A0,*A11(TKEYS) ;TOTAL KEYS COLLECTED MOVE A0,*A11(WAVEPTS) ;POINTS SCORE THIS WAVE (FOR BONUS) CMPI P1DATA,A11 JRZ P1TIMR MOVE A0,@timerp2 MOVE A0,@timerp2sd ;Player 2 seconds since death RETS P1TIMR MOVE A0,@timerp1 MOVE A0,@timerp1sd ;Player 1 seconds since death RETS ZERO_TIMERS ;ZERO BOZO MODE TIMERS CLR A0 CMPI P1DATA,A11 JRZ P1TIMRX MOVE A0,@timerp2 MOVE A0,@timerp2sd ;Player 2 seconds since death RETS P1TIMRX MOVE A0,@timerp1 MOVE A0,@timerp1sd ;Player 1 seconds since death RETS P2STARTA MOVI PLYRTWO,A0 ;WELCOME PLAYER 2 AUDIO CALLA ONESND CALLA SET_P2BUYIN MOVI P2DATA,A11 CALLA GET_LIVES CALLR ZERO_TIMERS ; MOVE @CNTDIG2,A0 ; JRNZ NO_ZER2 ; CALLA ZERO_STATS ;NO_ZER2 MOVI DG2PID,A0 CLR A1 MOVE A1,@CNTDIG2 MOVE A1,*A11(CNTD) ;CNTDWN FLAG NOT A1 CALLA KILALL DIE SET_P1BUYIN: MOVK 1,A2 MOVK 1,A8 MOVI P1PID,A0 JRUC SET_OUT SET_P2BUYIN: MOVK 2,A2 MOVK 2,A8 MOVI P2PID,A0 SET_OUT MOVE A8,@THIS_PLYR ;FLAG FOR BUY IN BOX CLOSE DOWN CLR A1 NOT A1 CALLA KILALL ;KILL SCOREBOARD MESSAGE PROCESS MOVE @STATUS,A1 OR A2,A1 ;TELL STATUS WORD THAT PLYR X IS ON! MOVE A1,@STATUS MOVE @SCORETYP,A1 OR A2,A1 MOVE A1,@SCORETYP ;FOR DISPLAYING OF SCORES OR TEXT CREATE0 ALL_PLYR_STUFF RETS ALL_PLYR_STUFF ;A8=1 OR 2 FOR PLYR ;IF FLAG SET, DELAY TURN ON OF NEW PLAYER UNTIL FLAG CLEARED MOVE @GAMSTATE,A0 CMPI ININTRO,A0 ;IF IN INTRO, THE REGULAR START UP JRZ ALL_OUT2 ;CODE WILL START THIS PLAYER! ;IN GAME! TRY TO START. MOVE @NO_START,A0 JREQ OKAY ;DELAY START FOR SOME REASON. ;PLAYER TRYED TO START WHEN WE DON'T WANT HIM TO. ;DELAY STARTING PLAYER UNTIL WE RESET NO_START FLAG TO 0. CREATE0 DELAY_START DIE DELAY_START SLEEPK 1 MOVE @NO_START,A0 JRNE DELAY_START ;LOOP UNTIL FLAG RESET ;FALL IN HERE WHEN IT IS OKAY TO START A PLAYER OKAY: ;OKAY TO TRY AND START THIS PLAYER RIGHT NOW. ;A8=1 OR 2 FOR START STUFF ;START PLAYER AT BOTTOM OF SCREEN - IN SAFE SPOT. CMPI 1,A8 JRNZ NEXT1 CALLA KILLP1 ;KILL OLD PLYR1 IF ANY CREATE PLY1PID,DRAW_PLYR_TORSO MOVE @WORLDTLY,A3,L CMPI [127EH,0],A3 JRZ ALL_OUT ;BR=STARTING AT PARACHUTES! MOVE @RUNIN,A10,W ;INDICATES FROM BOTTOM OR LEFT ;A10=0 FOR COME IN FROM BOTTOM CREATE SCRPID,SCRIPTPLAY DIE NEXT1 CALLA KILLP2 ;KILL OLD PLYR2 IF ANY CREATE PLY2PID,DRAW_PLYR_TORSO MOVE @WORLDTLY,A3,L CMPI [127EH,0],A3 JRZ ALL_OUT ;BR=STARTING AT PARACHUTES! MOVE @RUNIN,A10,W ;INDICATES FROM BOTTOM OR LEFT ;A10=0 FOR COME IN FROM BOTTOM CREATE SCRPID,SCRIPTPLAY ALL_OUT DIE ALL_OUT2 ;A8=1 OR 2 FOR PLYR ; MOVI PLY1PID,A0 ; CLR A1 ; NOT A1 ; CMPI 1,A8 ; JRZ AL2O ; MOVI PLY2PID,A0 ;AL2O LOCKUP ; EINT ; CALLA EXISTP ;* Z BIT SET = NO MATCH, A0 = 0 ; JRNZ ALL_OUT ;;START ME! ; LOCKUP ; EINT DIE ***************************************************************************** PXSTRTNEW CALLA CR_STRTP ;CHECK FOR ENOUGH CREDITS TO START JALO SUCIDE ;BR=NOPE! CALLA P_START ;AUDIT CREDITS (TAKE THEM AWAY!) MOVE A2,A11 FCALL SECURITY,B0 MOVE @SEC_FLAG,A14,W JRZ PXSTRT_SEC_OK AUDIT AUDSECURITY ;SHOW THE SECURITY BREECH DIE PXSTRT_SEC_OK ;NEW START FROM ATTRACT MODE, ZERO BOTH SCORES! MOVE A11,A2 MOVK 1,A10 ;5 LIVES FOR .50 CENTS CALLA GET_LIVES ;GET LIVES PER CREDIT MOVI P2DATA,A11 CALLA SET_1ST MOVI P1DATA,A11 CALLA SET_1ST movk 1,a1 ;A1=Flag for status cmpi P1DATA,a2 jreq P1GAME ;P1? ;PLYR2 FALLS IN HERE ************************************************************************** * PLAYER 2 GAME START - COLD FROM ATTRACT MODE OR GAME OVER MODE * ************************************************************************** MOVK 2,A1 ;A1 IS P2 FLAG FOR STATUS ************************************************************************** * PLAYER 1 GAME START - COLD FROM ATTRACT MODE OR GAME OVER MODE * ************************************************************************** P1GAME GAMESTR: ;GAME START PROCESS ;A1 = PLAYERS TO START,1 = PLAYER 1,2 = PLAYER 2 MOVE A1,@STATUS,W MOVE A1,@SCORETYP,W MOVI ININTRO,A0 ;NOT IN ATTRACT MODE ANYMORE! MOVE A0,@GAMSTATE,W ;FLAG ININTRO ;POSSIBLY DO SOME OTHER KIND OF WIPE (NOT WNDON) IF FROM CREDITS SCREEN! MOVI CP_PID2,A0 ;ARE WE SHOWING THE CREDIT PAGE? CLR A1 MOVE A1,@SCORE_FLAG NOT A1 CALLA KILALL MOVI CP_PID1,A0 ;ARE WE SHOWING THE CREDIT PAGE? CALLA KILALL MOVI AMDEPID,A0 ;ARE WE SHOWING THE CREDIT PAGE? CALLA KILALL MOVI TOTCARN,A0 ;WELCOME PLAYER AUDIO CALLA ONESND MOVK 15H,A0 MOVE A0,@WSPEED JSRP WNDWON ;GROW WINDOW CLR A0 MOVE A0,@IRQSKYE ;BACKGROUND COLOR CALLA CLRPAL SLEEPK 1 CALLA WIPEOUT ;CLEAN SYSTEM OUT MOVK 1,A0 MOVE A0,@GAMERASE ;AUTOERASE FLAG CALLA AUTOEON CALLA COLRPRC ;INIT FIXED PAL 0 AND MAYBE 2ND PAL SLEEPK 2 ;8/1/91 CREATE INTROPID,INIT_GAME ;INITIALIZE GAMEPLAY DIE GET_LIVES: ;A11=P1/P2DATA ADJUST ADJLIVES ;GET LIVES PER GAME MOVE A0,A1 DEC A1 MOVE A10,A10 JRZ GETL ADJUST ADJCSTRT ;CREDITS REQUIRED TO START ;RETURN 1,2 SUBK 1,A0 JRZ GETL MOVE *A11(PSCORE),A0 JRNZ GETL ;MID GAME START WHEN PLAYER HAS A ;SCORE - SOMEBODY LET TIMER EXPIRE. ADDK 1,A1 ;ALSO CHANGE IN AUDIT.ASM GETL MOVE A1,*A11(PLIVES),W MOVE *A11(BMB_CNT),A0 cmpi 4,A0 ;CAN CARRY MAXIMUM OF 20 BMBS JRNC NOADD ADDK 3,A0 MOVE A0,*A11(BMB_CNT) ;BOMBS PER CREDIT NOADD ;SET RAM PTS AREA TO START CLR A0 MOVE A0,*A11(PTSRAM),W RETS SET_1ST ;FIRST FREE MAN AT X POINTS ;A11=P1 OR P2DATA AREA MMTM SP,A0,A1 CALLA ZERO_STATS MOVI >100000,A1 ;FIRST FREE MAN AT 100000 CALLA BCDADD MOVE A0,*A11(PNEXTREP),L MMFM SP,A0,A1 RETS ******************************** * Show high score tables SUBRP HSTDTABQ clr a0 jruc hst5 SUBRP HSTDTAB movk 1,a0 hst5 move a0,-*a12 clr a0 move a0,@GAMERASE move a0,@IRQSKYE ;Black movi ->1004,a0 ;Start display at bottom of screen move a0,@DPYSTRT calla CLR_SCRN calla KILBGND ;Kill old background SLEEPK 1 clr a1 calla KILOBJ ;Kill all objs (Screen mem is clr) calla COLRPRC movi FPALRAM+PALRSIZ,a2 ;>Steal pals 1-3 movi junkp,a1 movk 3,a3 hst30 move a1,*a2+,L dsj a3,hst30 movi SCRNEND,a0 ;[256,405] move a0,@SCRNLR,L movk 10,a0 move a0,@WORLDTLX+16 movi 1000,a0 move a0,@WORLDTLY+16 SLEEPK 2 movi hiscbg_t,a0 ;Show high score screen move a0,@BAKMODS,L calla BGND_UD1 callr palcyc_init JSRP GETHIGH ;Prints high scores SLEEPK 2 clr a0 move a0,@DISPLAYON movi -4,a0 ;Show screen move a0,@DPYSTRT move *a12+,a0 jrnz hst90 ;Do flyin? callr vidhwfx_blindin jruc hst120 hst90 move @SWITCH,a0 movk >11,a1 and a1,a0 jrz hst100 callr vidhwfx_flyin jruc hst120 hst100 callr vidhwfx_zoomin hst120 movk 1,a0 move a0,@DISPLAYON clr a0 move a0,@WFLG ;Plyr can start CREATE CYCPID,palcyc ; SLEEP 10 ;DEBUG SLEEP 60*9+20 move @hisclong,a0 jrz hst200 SLEEP 60*9+20 clr a0 move a0,@hisclong SLEEP 40 SOUND1 MUSICOFF hst200 callr vidhwfx_flyout movi CYCPID,a0 calla KIL1C RETP hiscbg_t .long HISCBMOD .word 10,1002 .long -1 hscolorsc_t COLORW 02,29,02, 03,29,03, 04,29,04 COLORW 05,30,05, 04,29,04, 03,29,03, 02,29,02 COLORW 01,29,01, 00,29,00, 00,28,00, 00,27,00 COLORW 00,26,00, 00,25,00, 00,24,00, 00,23,00 COLORW 30,09,30, 30,10,30, 30,11,30 COLORW 31,13,31, 30,11,30, 30,10,30, 30,09,30 COLORW 30,08,30, 30,07,30, 30,06,30, 30,05,30 COLORW 30,04,30, 30,03,30, 30,02,30, 30,01,30 COLORW 31,11,00, 31,12,00, 31,13,00 COLORW 31,15,00, 31,13,00, 31,12,00, 31,11,00 COLORW 31,10,00, 31,09,00, 31,08,00, 31,07,00 COLORW 31,06,00, 31,05,00, 31,04,00, 31,03,00 .word -1 hscolori_t ;Blue COLORW 00,09,31, 00,10,31, 00,11,31 COLORW 00,12,31, 00,11,31, 00,10,31, 00,09,31 COLORW 00,08,31, 00,07,31, 00,06,31, 00,05,31 COLORW 00,04,31, 00,03,31, 00,02,31, 00,01,31 junkp .word 1,0 ******************************** * Palette cycle code SUBRP palcyc_init movi hscolorsc_t+30*16,b0 movi palram,a1 ;>Set palram movk 10,a3 psi40 move b0,a0 movk 15,a2 psi50 move *a0+,*a1+ dsj a2,psi50 dsj a3,psi40 movi hscolori_t,a0 movk 15,a2 psi100 move *a0+,*a1+ dsj a2,psi100 CREATE CYCPID,hiscore_cyc CREATE CYCPID,paldump rets SUBRP palcyc movi hscolorsc_t,a10 ps20 movi palram+15*16,a9 movk 9,a8 ps40 movk 15,a11 ps50 CREATE CYCPID,palnewcol SLEEPK 1 addk 16,a9 ;Next slot addk 16,a10 ;Next color in set dsj a11,ps50 subi 15*16,a10 ;Back to 1st in set dsj a8,ps40 SLEEP 60 addi 15*16,a10 ;Next set move *a10,a0 ;End of color tables = Neg jrnn ps20 jruc palcyc SUBRP palnewcol ;A9=*palram, A10=*New color movi 120,a8 ;>Fade old down move *a9,a11 ;Get old pp50 move a11,*a9 move a9,a0 move a9,a1 CALLA palnewc_set SLEEPK 1 subk 8,a8 cmpi 16,a8 jrgt pp50 pp100 move a10,a1 ;>Fade new up move a9,a0 CALLA palnewc_set SLEEPK 1 addk 4,a8 cmpi 128,a8 jrls pp100 DIE SUBRP palnewc_set move a8,a2 movk 1,a14 jruc color_fade ******************************** * Cycle the #1 score colors SUBRP hiscore_cyc hsc10 movi COLTAB,a8 hsc30 move *a8+,a7 jrn hsc10 movi palram,a4 move a4,a0 addk 16,a0 movk 14,a2 hsc40 move *a0+,*a4+ ;Shift colors down dsj a2,hsc40 move a7,*a4+ SLEEPK 2 jruc hsc30 ******************************** * Dump palram each frame (process) SUBRP paldump movi palram,a0 ;*Color movi >101,a1 ;Palette 1, Color 1 movi 60,a2 ;# Colors calla PALSET movi palram+60*16,a0 movi >201,a1 ;Palette 2, Color 1 movi 60,a2 calla PALSET movi palram+120*16,a0 movi >301,a1 ;Palette 3, Color 1 movi 45,a2 calla PALSET SLEEPK 1 jruc paldump ******************************** * Fade a palette * Each color in palette will be multiplied by a2 then divided by 128 * A0=*Ram for pal, A1=*Palette, A2=Brightness (0-128) SUBRP color_fade PUSH a3,a4,a5,a6,a7,a8,a9,a10,a11 movi >7c00,a4 ;A4=Mask for 5 bits of red movi >03e0,a6 ;A6=Mask for 5 bits of green movk >1f,a8 ;A8=Mask for 5 bits of blue move a4,a9 move a6,a10 move a8,a11 sll 7,a9 ;A9=post mult max for 5 bits of red sll 7,a10 ;A10=post mult max for 5 bits of green sll 7,a11 ;A11=post mult max for 5 bits of blue fp100 move *a1+,a3 move a3,a5 ;A3=Red move a3,a7 ;A5=Green and a4,a3 ;A7=Blue and a6,a5 and a8,a7 mpyu a2,a3 mpyu a2,a5 mpyu a2,a7 cmp a9,a3 jrle redok move a9,a3 redok cmp a10,a5 jrle greenok move a10,a5 greenok cmp a11,a7 jrle blueok move a11,a7 blueok and a9,a3 and a10,a5 or a5,a3 or a7,a3 srl 7,a3 move a3,*a0+ ;Save color dsj a14,fp100 PULL a3,a4,a5,a6,a7,a8,a9,a10,a11 rets ******************************** * Video hardware effects FXNUML .equ 254 .bss vhfxmem ,FXNUML*16 ;Video line effect list .bss vhfxlnv ,FXNUML*16 ;Velocity SUBR vidhwfx_flyin move @HEBLNK,a10 movi FXNUML/2,a0 ;>Clr effect list and init lines movi vhfxmem,a3 movi vhfxlnv,a4 move @HSBLNK,a1 sub a10,a1 subk 1,a1 sll 4,a1 ;*16 clr a2 vffi100 move a1,*a3+ ;Set X move a2,*a4+ ;Set vel addk 1,a1 move a1,*a3+ ;Set X move a2,*a4+ ;Set vel subk 1,a1 dsj a0,vffi100 movk 2,b2 ;B2=#Lines active ; movk 1,b4 ;B4=Spawn delay ; move b4,b3 ;B3=Spawn cntdn movi >10f,a11 vffi200 move @COINS,a0 ori >34,a0 not a0 jrnz vffix clr a0 move a0,@TIMER movi VCOUNT,a7 ;A7=*VCNT movi HEBLNK,a6 ;A6=*Dest reg movi vhfxmem,a3 movk 21,a1 ;1st line movi FXNUML,a5 DINT vffi230 addk 1,a1 move *a3+,a2 ;Get X start of line srl 4,a2 ;/16 add a10,a2 vffi260 move *a7,a0 ;Wait on vcnt cmp a1,a0 jrnz vffi260 move a2,*a6 ;Stuff value dsj a5,vffi230 EINT movi vhfxlnv,a3 ;>Move lines movi vhfxmem,a8 move b2,b0 vffi400 move *a8,a0 ;Get X move *a3,a1 add a1,a0 ;New pos jrge vffi500 clr a0 ; cmpi >1f,a11 ;No bounce at end ; jrls vffi500 sra 1,a1 neg a1 vffi500 subk 2,a1 ;New vel ; movk 3,a2 ; and a11,a2 ; jrnz vffi530 ; move a1,a2 ; sra 3,a2 ;1/8 drag ; sub a2,a1 vffi530 move a1,*a3+ move a0,*a8+ ;New X dsj b0,vffi400 cmpi FXNUML,b2 jrhs vffi700 ; dsj b3,vffi700 addk 2,b2 ;2 New ; movk 1,b3 ; subk 6,b4 ; jrle vffi700 ; move b4,b3 ; subk 1,b2 ;Only 1 vffi700 dsj a11,vffi200 vffix move a10,@HEBLNK rets SUBRP vidhwfx_flyout clr a0 move a0,@GAMERASE ;Off move a0,@DISPLAYON ;^ calla SYNCHALF calla SYNCFULL ;At top and DMA should be done! move @HSBLNK,a9 subk 2,a9 ;A9=Highest HEBLNK allowed move @HEBLNK,a10 movi FXNUML,a0 ;>Clr effect list and init lines movi vhfxmem,a3 movi vhfxlnv,a4 clr a1 clr a2 vffo100 move a1,*a3+ ;Set X move a2,*a4+ ;Set vel addk 1,a2 dsj a0,vffo100 movk 2,b2 ;B2=#Lines active ; movk 1,b4 ;B4=Spawn delay ; move b4,b3 ;B3=Spawn cntdn movi >4f,a11 vffo200 move @COINS,a0 ori >34,a0 not a0 jrnz vffox movi VCOUNT,a7 ;A7=*VCNT movi HEBLNK,a6 ;A6=*Dest reg movi vhfxmem,a3 movk 21,a1 ;1st line movi FXNUML,a5 DINT vffo230 addk 1,a1 move *a3+,a2 ;Get X start of line srl 4,a2 ;/16 add a10,a2 cmp a9,a2 jrls vffo260 move a9,a2 vffo260 move *a7,a0 ;Wait on vcnt cmp a1,a0 jrnz vffo260 move a2,*a6 ;Stuff value dsj a5,vffo230 EINT movi vhfxlnv,a3 ;>Move lines movi vhfxmem,a8 move b2,b0 vffo400 move *a8,a0 ;Get X move *a3,a1 add a1,a0 ;New pos jrge vffo500 clr a0 ; cmpi >1f,a11 ;No bounce at end ; jrls vffo500 sra 1,a1 neg a1 vffo500 addk 1,a1 ;New vel ; movk 3,a2 ; and a11,a2 ; jrnz vffo530 ; move a1,a2 ; sra 3,a2 ;1/8 drag ; sub a2,a1 vffo530 move a1,*a3+ move a0,*a8+ ;New X dsj b0,vffo400 cmpi FXNUML,b2 jrhs vffo700 ; dsj b3,vffo700 addk 4,b2 ;2 New ; movk 1,b3 ; subk 6,b4 ; jrle vffo700 ; move b4,b3 ; subk 1,b2 ;Only 1 vffo700 dsj a11,vffo200 vffox movk 1,a0 move a0,@GAMERASE ;On calla SYNCFULL ;At top calla KILBGND clr a1 calla KILOBJ ;Kill all objs calla SYNCFULL ;At top move a10,@HEBLNK ;Set normal movk 1,a0 move a0,@DISPLAYON ;ON rets ******************************** * Zoom into screen SUBRP vidhwfx_zoomin movi FXNUML,a0 ;>Clr effect list and init lines movi vhfxmem,a3 movi vhfxlnv,a4 move @DPYSTRT,a1 vfzi100 move a1,*a3+ ;Set Addr move a1,*a4+ ;^ subk >10,a1 dsj a0,vfzi100 movi >10000,b2 ;B2=#Lines per addr ; movk 1,b4 ;B4=Spawn delay ; move b4,b3 ;B3=Spawn cntdn movi >10f,a11 vfzi200 move @COINS,a0 ori >34,a0 not a0 jrnz vfzix movi VCOUNT,a7 ;A7=*VCNT movi DPYADR,a6 ;A6=*Dest reg movi vhfxmem,a3 movk 21,a1 ;1st line movi FXNUML,a5 DINT vfzi230 addk 1,a1 move *a3+,a2 ;Get X start of line vfzi260 move *a7,a0 ;Wait on vcnt cmp a1,a0 jrnz vfzi260 move a2,*a6 ;Stuff value dsj a5,vfzi230 EINT ; movi vhfxlnv,a3 ;>Move lines movi vhfxmem,a8 movi FXNUML,a2 clr b0 vfzi400 move b0,a3 srl 16,a3 cmpi FXNUML,a3 jrlo vfzi430 movi FXNUML-1,a3 vfzi430 sll 4,a3 ;*16 addi vhfxlnv,a3 move *a3,a0 ;Get addr move a0,*a8+ ;Set addr add b2,b0 dsj a2,vfzi400 addi >200,b2 ;Inc line skip ; jrgt vfzi550 ; movi >100,b2 ; subi >200,b2 ;Decrease line skip ; jrgt vfzi550 ; movi >100,b2 vfzi550 ; cmpi FXNUML,b2 ; jrhs vfzi700 ; dsj b3,vfzi700 addk 1,b2 ; movk 1,b3 ; subk 6,b4 ; jrle vfzi700 ; move b4,b3 ; subk 1,b2 ;Only 1 vfzi700 dsj a11,vfzi200 vfzix move a10,@HEBLNK rets ******************************** * Show screen by droping lines (BOGUS) NOTINUSE .bss vhfxln ,FXNUML*32 ;Line current pos, velocity SUBRP vidhwfx_linein move @DPYCTL,a10 movi FXNUML,a0 ;>Clr effect list and init lines movi vhfxmem,a3 movi vhfxln,a4 clr a1 movi -8,a2 vhf100 move a1,*a3+ move a2,*a4+ ;Set pos (3 bits fraction) move a1,*a4+ ;Set vel dsj a0,vhf100 movk 1,b2 ;B2=#Lines active movi 45,b4 ;B4=Spawn delay move b4,b3 ;B3=Spawn cntdn movi >12f,a11 vhf200 move @COINS,a0 ori >34,a0 not a0 jrnz vhfx movi VCOUNT,a7 ;A7=*VCNT movi DPYCTL,a6 ;A6=*Dest reg movi vhfxmem,a3 movk 21,a1 ;1st line movi FXNUML,a5 DINT vhf230 addk 1,a1 move a10,a2 move *a3+,a0 ;Get effect for line jrnz vhf260 sll 17,a2 ;Clr ENV bit srl 17,a2 vhf260 move *a7,a0 ;Wait on vcnt cmp a1,a0 jrnz vhf260 move a2,*a6 ;Stuff value dsj a5,vhf230 movi FXNUML,a0 ;>Clr effect list movi vhfxmem,a3 clr a1 vhf300 move a1,*a3+ dsj a0,vhf300 EINT movi vhfxln,a3 ;>Move lines movi vhfxmem,a8 movi FXNUML*8,a5 ;A5=Line #*8 move b2,b0 move a5,a2 jruc vhf410 vhf400 move *a3(-32),a2 vhf410 move *a3+,a0 move *a3,a1 add a1,a0 ;New pos cmp a2,a0 jrlt vhf450 move a2,a0 subk 8,a0 jruc vhf470 vhf450 cmp a5,a0 jrlt vhf500 move a5,a0 vhf470 cmpi >2f,a11 ;No bounce at end jrls vhf500 neg a1 vhf500 addk 4,a1 ;Add vel movk 3,a2 and a11,a2 jrnz vhf530 move a1,a2 sra 3,a2 ;1/8 drag sub a2,a1 vhf530 move a1,*a3+ move a0,*a3(-32) ;New pos sra 3,a0 ;Get int part jrle vhf550 sll 4,a0 ;*16 addi vhfxmem-16,a0 movk 1,a2 move a2,*a0 ;Effect on vhf550 subk 8,a5 dsj b0,vhf400 cmpi FXNUML,b2 jrhs vhf700 dsj b3,vhf700 addk 4,b2 ;4 New movk 1,b3 subk 6,b4 jrle vhf700 move b4,b3 subk 3,b2 ;Only 1 vhf700 dsj a11,vhf200 vhfx move a10,@DPYCTL rets .endif ******************************** * Show screen with blind effect SUBRP vidhwfx_blindin move @DPYCTL,a10 movi FXNUML,a0 ;>Clr effect list movi vhfxmem,a3 move a3,a9 ;A9=*Next line to show clr a1 vhfb100 move a1,*a3+ dsj a0,vhfb100 movk 18,a11 vhfb200 move @COINS,a0 ori >34,a0 not a0 jrnz vhfbx movi VCOUNT,a7 ;A7=*VCNT movi DPYCTL,a6 ;A6=*Dest reg movi vhfxmem,a3 movk 21,a1 ;1st line movi FXNUML,a5 DINT vhfb230 addk 1,a1 move a10,a2 move *a3+,a0 ;Get effect for line jrnz vhfb260 sll 17,a2 ;Clr ENV bit srl 17,a2 vhfb260 move *a7,a0 ;Wait on vcnt cmp a1,a0 jrnz vhfb260 move a2,*a6 ;Stuff value dsj a5,vhfb230 EINT movk 14,a5 move a9,a3 movk 1,a0 vhfb400 move a0,*a3 ;Line on addi 18*16,a3 dsj a5,vhfb400 addk 16,a9 dsj a11,vhfb200 vhfbx move a10,@DPYCTL rets ******************************** * Get initials from players .ref STRT_S,WNDWOFF,GETINIT,ISHSTD,INITTIM .ref GETINIT1,GETINIT2 .ref WRLD,BAKBITS,STRT_CRM SUBR INITIALS JSRP WNDWON movi junkp,a1 ;>Steal PAL 1 move a1,@FPALRAM+PALRSIZ,L movi hscolorsc_t+30*16,a0 ;*Red movi >101,a1 ;Palette 1, Color 1 movk 15,a2 ;# Colors calla PALSET clr a0 move a0,@TNT_TYPE move a0,@WORLDTLX+16 movi 1000,a0 move a0,@WORLDTLY+16 SLEEPK 2 movi hiscoreinit_t,a0 ;Show home base view screen move a0,@BAKMODS,L calla BGND_UD1 calla STRT_S ;Static color cycle calla STRT_CRM ;Start headquarters cycle CALLA intgrid_prt ;Print grid movk 4,a0 move a0,@IRQSKYE ;Dark blue clr a0 move a0,@WRLD ;Do world adj movk 1,a0 move a0,@ENTERON movk 30,a0 move a0,@WSPEED JSRP WNDWOFF calla ISHSTD jrz in70 move a0,b0 ;P1=1, P2=2, Both=3 calla INITTIM srl 1,b0 jrnc in30 CREATE HISCPID,GETINIT1 ;GET PLAYER 1 INITS in30 srl 1,b0 jrnc in70 CREATE HISCPID,GETINIT2 ;GET PLAYER 2 INITS in70 JSRP GETINIT ;Wait on initials calla KILBGND movi INTROPID,a0 calla KIL1C movi HISCPID,a0 calla KIL1C movi CYCPID,a0 calla KIL1C clr a1 calla KILOBJ ;Kill all objs SLEEPK 1 calla MYOINIT movi WRPSND,a0 calla ONESND RETP hiscoreinit_t .long HISCOREBMOD ;Module name .word 6,1000 ;X,Y start pos .long -1 ******************************** * print initials letter grid .bss intgridbuf ,16 ;Print buffer .ref INITMAT,RD15FONT,STRCNRMO SUBRP intgrid_prt movi INITMAT,a4 movi >2525,a6 movi [44,149],a9 ;Scrn y/x movk [0,1],a10 ;Spacing movi RD15FONT,a11 movk 5,a2 igp30 movk 6,a3 igp50 clr a0 ;No sleep movi intgridbuf,a8 movb *a4,*a8 PUSH a9 JSRP STRCNRMO ;Print, objs PULL a9 addk 8,a4 addk 21,a9 ;Next X dsj a3,igp50 subi 6*21,a9 ;1st X addi [22,0],a9 ;Next Y dsj a2,igp30 rets ************************************************************************** * * * SECURITY - AND FINALLY ... THERE IS SECURITY! * * B0 = RETURN ADDRESS * * SETS GLOBAL SEC_FLAG TO 1 IF BREECH! * * NOTE: TRASHES A0,A1,A2,A3,A4,A6 * * * Modified and added table for Total Carnage. 1/8/92 CMM * ************************************************************************** SECURITY CLR A0 MOVE A0,@SEC_FLAG,W MOVI SECBTAB,A0 GETST A6 DINT MOVI SECCHIP/2,A3 ;A3 points to sec chip SLL 1,A3 SECLOOP MOVB *A0,A1 ADDK 8,A0 SLL 24,A1 ; STRIP OUT THE CRUD leaving SRL 24,A1 ;16 bits, right justified CMPI >FF,A1 ;ff signifies no more commands JREQ SECCHX ; WE ARE DONE MOVE A1,A2 SLL 8,A1 ;align with register in chip ANDI >0F00,A1 MOVE A1,*A3,W CMPI >0600,A1 ;is this a seed cycle? JREQ SESEED CMPI >0400,A1 ;is this a READ cycle? JRNE SECLOOP ;NO READ CYCLE MOVE *A3,A4,W ;CHECK OUT READ DATA SLL 16,A4 ;mask off all but SRL 24,A4 ;8 bits ANDI >0F0,a2 ;isolate read value ORI >0A,A2 ;or in number of TC Chip CMP A4,A2 JREQ SECLOOP SECERR ;BOGUS SHIT = ERROR MOVK 1,A0 MOVE A0,@SEC_FLAG,W SECCHX PUTST A6 FRET B0 ;seed code is by itself so that a seed value equal to a special ;command value passes thru alright. SESEED MOVB *A0,A1 ;get seed value from table ADDK 8,A0 SLL 24,A1 ; STRIP OUT THE CRUD leaving SRL 24,A1 ;16 bits, right justified MOVE A1,A2 SLL 8,A1 ;align with register in chip ANDI >0F00,A1 MOVE A1,*A3,W JRUC SECLOOP ************************************************************************** * * * SECURITY EXERCISE TABLE * * * ************************************************************************** SECBTAB ;current register value is at end of comment column .BYTE >F ;CLEAR THE SUCKER 0 .BYTE >F ;CLEAR THE SUCKER 0 .BYTE >F ;CLEAR THE SUCKER 0 .BYTE >8 ;CLOCK IT .BYTE >44 ;READ A 4 14 .BYTE >6 ;LOAD SEED .BYTE >3 ;LOAD A 3 13 .BYTE >8 ;CLOCK IT 1E .BYTE >8 ;CLOCK IT 05 .BYTE >8 ;CLOCK IT 03 .BYTE >8 ;CLOCK IT 06 .BYTE >64 ;READ AN 6 .BYTE >C ;CLOCK IT 11 .BYTE >C ;CLOCK IT 1D .BYTE >D4 ;READ AN D .BYTE >5 ;NOP 1D .BYTE >7 ;NOP 1D .BYTE >5 ;NOP 1D .BYTE >7 ;NOP 1D .BYTE >7 ;NOP 1D .BYTE >7 ;NOP 1D .BYTE >D4 ;READ AN D .BYTE >C ;CLOCK IT 17 .BYTE >8 ;CLOCK IT 18 .BYTE >6 ;LOAD SEED .BYTE >6 ;LOAD A 6 16 .BYTE >5 ;NOP 16 .BYTE >64 ;READ A 6 .BYTE >C ;CLOCK IT 09 .BYTE >8 ;CLOCK IT 09 .BYTE >C ;CLOCK IT 09 .BYTE >8 ;CLOCK IT 09 .BYTE >94 ;READ A 9 .BYTE >9 ;RRX IT 04 .BYTE >44 ;READ A 4 .BYTE >9 ;RRX IT 12 .BYTE >24 ;READ A 2 .BYTE >9 ;RRX IT 09 .BYTE >94 ;READ A 9 .BYTE >9 ;RRX IT 04 .BYTE >D ;ROR IT 02 .BYTE >D ;ROR IT 01 .BYTE >14 ;READ A 1 .BYTE >9 ;RRX IT 00 .BYTE >9 ;RRX IT 10 .BYTE >9 ;RRX IT 08 .BYTE >84 ;READ A 8 .BYTE >9 ;RRX IT 14 .BYTE >9 ;RRX IT 0A .BYTE >A4 ;READ A A .BYTE >9 ;RRX IT 15 .BYTE >9 ;RRX IT 1A .BYTE >9 ;RRX IT 0D .BYTE >AD ;READ A D .BYTE >9 ;RRX IT 06 .BYTE >A6 ;READ A 6 .BYTE >9 ;RRX IT 13 .BYTE >A3 ;READ A 3 .BYTE >9 ;RRX IT 19 .BYTE >A9 ;READ A 9 .BYTE >9 ;RRX IT 1C .BYTE >AC ;READ A C .BYTE >9 ;RRX IT 0E .BYTE >7 ;NOP 0E .BYTE >7 ;NOP 0E .BYTE >7 ;NOP 0E .BYTE >7 ;NOP 0E .BYTE >7 ;NOP 0E .BYTE >7 ;NOP 0E .BYTE >7 ;NOP 0E .BYTE >7 ;NOP 0E .BYTE >7 ;NOP 0E .BYTE >7 ;NOP 0E .BYTE >7 ;NOP 0E .BYTE >7 ;NOP 0E .BYTE >AE ;READ A E .BYTE >9 ;RRX IT 17 .BYTE >A7 ;READ A 7 .BYTE >9 ;RRX IT 1b .BYTE >AB ;READ A B .BYTE >8 ;CLOCK IT 12 .BYTE >A2 ;READ A 2 .BYTE >8 ;CLOCK IT 0F .BYTE >AF ;READ A F .BYTE >8 ;CLOCK IT 0C .BYTE >AC ;READ A C .BYTE >FF ;ITS ALL OVER .BYTE >FF ;ITS ALL OVER (extra for safety with seed) .EVEN .REF GET_AUD,DEF_PAGE,ADD_DUMP ************************************************************************** * * * ERRORLOG - THIS SHOULD BE CALLED IN PLACE OF ANY JRxx $ * * IN CASE OF ERROR. IF WE ARE IN DEBUG MODE * * IT WILL HANG, IF NOT, THE ERROR WILL BE LOGGED * * AND IT WILL RETURN. * * A1 = RETURN ADDRESS OF CALLING ROUTINE * * A2 = ERROR CODE * ************************************************************************** ERRORLOG ;TURMELL ;; .IF DEBUG ; LOCKUP ; EINT ;; .ENDIF MMTM SP,A2,A3,A4,A5,A6,A7 SLL 16,A2 ERRLOGG ;A8 IS IN A8 MOVE A13,A7 ;PROC. BLOCK IN A7 MOVE *A7(PROCID),A6,W SLL 16,A6 MOVE *A8(OID),A3,W MOVX A3,A6 ;A6 = [PROCID:*A8(OID)] ; MOVE @CIRCUIT,A5,W ; SLL 16,A5 MOVE @WAVE,A3,W MOVX A3,A5 ;A5 = [CIRCUIT#:WAVE#,)] MOVI AUD1STRT,A4 ;PLAY # CALLR GETAUD4 SLL 16,A4 MOVE *A0(OID),A3,W ;A4 = [STRT#:*A0(OID)] MOVX A3,A4 MOVE @GAMSTATE,A3,W ;A2 = [STATUS:GAMSTATE] MOVX A3,A2 MOVE @STATUS,A3,W ;A2 = [ERROR CODE:STATUS] MOVX A3,A2 MOVE *SP(0C0H),A3,L ;A3=GET THE RETURN ADDRESS MOVE *SP(0E0H),A1,L ;A1=CALLING ADDRESS CALLA ADD_DUMP MMFM SP,A2,A3,A4,A5,A6,A7 RETS ************************************************************************** * * * GETAUD4 - GET AN AUDIT * * A4 = AUDIT # * * RETURNS: * * A4 = AUDIT * * * ************************************************************************** GETAUD4 MMTM SP,A0,A1 MOVE A4,A0 CALLA GET_AUD CALLA DEF_PAGE ;POINT AT DEFAULT PAGE. MOVE A1,A4 MMFM SP,A0,A1 RETS .end