2698 lines
52 KiB
NASM
2698 lines
52 KiB
NASM
****************************************************************
|
||
*
|
||
* 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
|
||
|