932 lines
18 KiB
NASM
932 lines
18 KiB
NASM
**************************************************************
|
||
*
|
||
* Software: Mark Turmell
|
||
* Initiated: 7/17/90
|
||
*
|
||
* Modified: Shawn Liptak, 11/13/91 -Insert coin fix, clean up
|
||
*
|
||
* COPYRIGHT (C) 1991 WILLIAMS ELECTRONICS GAMES, INC.
|
||
*
|
||
*.Last mod - 11/13/91 21:55
|
||
**************************************************************
|
||
.FILE 'SCORE.ASM'
|
||
.TITLE 'SCORE STUFF'
|
||
.WIDTH 132
|
||
.OPTION B,D,L,T
|
||
.MNOLIST
|
||
|
||
|
||
.INCLUDE "MPROC.EQU" ;MPROC EQUATES
|
||
.INCLUDE "DISP.EQU" ;DISPLAY PROCESSOR EQUATES
|
||
.INCLUDE "\VIDEO\SYS\SYS.INC" ;ZUNIT SYSTEM EQUATES
|
||
.INCLUDE "\VIDEO\SYS\MACROS.HDR" ;MACROS, YEAH!
|
||
.INCLUDE "IMGTBL.GLO"
|
||
.INCLUDE "GAME.EQU"
|
||
.INCLUDE "LINK.EQU"
|
||
.include "shawn.hdr" ;Macros
|
||
|
||
;SOUNDS
|
||
|
||
.REF FREEMAN,CNTDOWN,CNTDWN2
|
||
|
||
;SYMBOLS EXTERNALLY DEFINED
|
||
|
||
.REF P1DATA,P2DATA,DMAQCUR,STATUS,QDMAFLG,DMAQ,CCCC,GET_CREDITS
|
||
.REF AUD1,GETFPAL
|
||
.REF AUTOEOFF,DMAWAIT,GAMERASE,CYCSPECT
|
||
.REF FON150,FON151,FON152,FON153,FON154,FON155,FON156,FON157
|
||
.REF FON158,FON159,GAMSTATE
|
||
.REF ONHEAD
|
||
.ref CR_STRTP,CR_CONTP
|
||
|
||
|
||
;SYMBOLS DEFINED IN THIS FILE
|
||
|
||
.DEF DRAW_SCORE,SCORE_FLAG,INIT_SCORE,BCDADD,SCORETYP,DMA_SCORE
|
||
.DEF SCRADD2,CNTDIG1,CNTDIG2,MSG_PROC2,STUFF_LVADDR,ONARRW,ARWOFF
|
||
.DEF DO_EXTRA
|
||
|
||
;UNINITIALIZED RAM DEFINITIONS
|
||
|
||
.BSS SCORETYP,16
|
||
.BSS SCORE_FLAG,16
|
||
.BSS CNTDIG1,16
|
||
.BSS CNTDIG2,16
|
||
.BSS ARWOFF,16 ;CNT DWN TO KILL ARROW OFF
|
||
|
||
;EQUATES FIRST ORIGINATED IN THIS FILE
|
||
|
||
SCRSPC .EQU 8 ;SPACER FOR DIGITS (INCLUDING DIGIT)
|
||
BPDMA1 .EQU 01
|
||
BPDMA2 .EQU 02
|
||
|
||
MSGSLP .EQU 0CH ;TIME FOR SCORE
|
||
MSGSLP2 .EQU 20H ;TIME FOR TEXT ON SCORE BOARD
|
||
|
||
.TEXT
|
||
**************************************************************************
|
||
|
||
DO_EXTRA
|
||
;EXTRA MAN
|
||
;A2 = P1DATA OR P2DATA
|
||
MMTM SP,A11
|
||
MOVE A2,A11
|
||
MOVE *A2(TEARNED),A4 ;BUMP STATISTIC OF MEN EARNED
|
||
INC A4
|
||
MOVE A4,*A2(TEARNED)
|
||
MOVE *A2(PLIVES),A4
|
||
INC A4
|
||
MOVE A4,*A2(PLIVES)
|
||
CALLR STUFF_LVADDR
|
||
MOVI FREEMAN,A0 ;SPEECH CALL
|
||
CALLA ONESND
|
||
MOVI YEAHHH,A0
|
||
CALLA ONESND
|
||
MOVI AUDEXTRA,A0
|
||
CALLA AUD1
|
||
MMFM SP,A11
|
||
RETS
|
||
YEAHHH .WORD >F9F0,>64,>80FE,0 ;RACKUP YEAHHH
|
||
|
||
LVS_TBL .LONG LV0,LV1,LV2,LV3,LV4,LV5,LV6,LV7,LV8,LV9
|
||
.LONG LV9,LV9,LV9,LV9,LV9
|
||
.LONG LV9,LV9,LV9,LV9,LV9
|
||
.LONG LV9,LV9,LV9,LV9,LV9
|
||
.LONG LV9,LV9,LV9,LV9,LV9
|
||
.LONG LV9,LV9,LV9,LV9,LV9
|
||
.LONG LV9,LV9,LV9,LV9,LV9
|
||
.LONG LV9,LV9,LV9,LV9,LV9
|
||
|
||
********************************
|
||
* BOTH PLAYERS ARE PLAYING!
|
||
* CHANGE MESSAGE ON HIS SCOREBOARD/PLUS STILL SHOW PLAYER SCORE!
|
||
* COLOR CYCLE IT
|
||
|
||
MSG_PROC2
|
||
SLEEP 90
|
||
CREATE0 CNTDWN
|
||
JRUC DO_TXT
|
||
|
||
********************************
|
||
* MSG_PROC - ALTERNATE BETWEEN PRESS START OR INSERT COIN AND OLD SCORE
|
||
* A11 = PTR TO PLAYER DATA STRUCTURE
|
||
|
||
MSG_PROC
|
||
move @SCORETYP,a0 ;Turn on plyrs score
|
||
movk 1,a1
|
||
cmpi P1DATA,a11
|
||
jreq mp30
|
||
movk 2,a1
|
||
mp30 or a1,a0
|
||
move a0,@SCORETYP
|
||
|
||
movi MSGSLP,a9 ;Leave score up for awhile
|
||
mplp1 SLEEPK 4
|
||
dsj a9,mplp1
|
||
|
||
DO_TXT move @SCORETYP,a0 ;Turn off plyrs score
|
||
movk 1,a1
|
||
cmpi P1DATA,a11
|
||
jreq mp70
|
||
movk 2,a1
|
||
mp70 andn a1,a0
|
||
move a0,@SCORETYP
|
||
|
||
|
||
movi MSGSLP2,a9 ;>Leave text message up for awhile
|
||
mp100 movi INSERT,a2 ;Insert coin message
|
||
move *a11(PSCORE),a0,L
|
||
jrnz mp120 ;Continue?
|
||
calla CR_STRTP ;Credits to start
|
||
jrlo mp150 ;No?
|
||
jruc mp140
|
||
|
||
mp120
|
||
|
||
|
||
|
||
|
||
CMPI P1DATA,A11
|
||
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 mp150 ;No?
|
||
jruc mp140
|
||
STILL_CNTIN
|
||
;TRY TO CHARGE 25 CENTS - CNTDWN TIMER STILL GOING
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
calla CR_CONTP ;Credits to continue
|
||
jrlo mp150 ;No?
|
||
|
||
mp140 movi PRESS,a2
|
||
mp150 move a2,*a11(MESSAGE),L
|
||
SLEEPK 4
|
||
dsj a9,mp100
|
||
|
||
jruc MSG_PROC
|
||
|
||
|
||
INIT_SCORE:
|
||
;TURN ON SCORE IMAGES
|
||
MOVI P1DATA,A11
|
||
MOVI [1AH,36H],A3 ;[1FH,38H],A3
|
||
MOVE A3,*A11(PSCRAD),L ;Y,X LOCATION OF SCORE 1
|
||
CALLR STUFF_LVADDR
|
||
MOVI P2DATA,A11
|
||
MOVI [1AH,14EH],A3 ;[1FH,150H],A3
|
||
MOVE A3,*A11(PSCRAD),L ;Y,X LOCATION OF SCORE 2
|
||
CALLR STUFF_LVADDR
|
||
CALLA FSCORE
|
||
MOVI PHD1,A2
|
||
MOVI 0120000H,A0
|
||
MOVI 0A0000H,A1
|
||
CALLR ONIT
|
||
;DRAW PLYR TWO SCORE PLATE
|
||
MOVI PHD2,A2
|
||
MOVI 012A0000H,A0
|
||
MOVI 0A0000H,A1
|
||
CALLR ONIT
|
||
;PLYR 1 LIVES
|
||
MOVE @P1DATA+PLIVES,A0
|
||
SLL 5,A0
|
||
ADDI LVS_TBL,A0
|
||
MOVE *A0,A2,L
|
||
MOVI 0360000H,A0
|
||
MOVI 0260000H,A1
|
||
CALLR ONIT
|
||
;PLYR 2 LIVES
|
||
MOVE @P2DATA+PLIVES,A0
|
||
SLL 5,A0
|
||
ADDI LVS_TBL,A0
|
||
MOVE *A0,A2,L
|
||
MOVI 14E0000H,A0
|
||
MOVI 0260000H,A1
|
||
CALLR ONIT
|
||
;PLYR 1 BOMBS
|
||
MOVE @P1DATA+BMB_CNT,A0
|
||
SLL 5,A0
|
||
ADDI BLST,A0
|
||
MOVE *A0,A2,L
|
||
MOVI 03F0000H,A0
|
||
MOVI 00E0000H,A1
|
||
CALLR ONIT
|
||
;PLYR 2 BOMBS
|
||
MOVE @P2DATA+BMB_CNT,A0
|
||
SLL 5,A0
|
||
ADDI BLST,A0
|
||
MOVE *A0,A2,L
|
||
MOVI 1570000H,A0
|
||
MOVI 00E0000H,A1
|
||
CALLR ONIT
|
||
;
|
||
;PLYR 1 THSTGS
|
||
MOVE @P1DATA+THSTGS,A6
|
||
SLL 4,A6
|
||
ADDI DECLST,A6
|
||
MOVE *A6,A2
|
||
MOVK 0FH,A1
|
||
AND A1,A2
|
||
SLL 7,A2
|
||
ADDI RRD0,A2
|
||
MOVI 5A0000H,A0
|
||
MOVI 260000H,A1
|
||
PUSH A6
|
||
CALLR EONIT
|
||
PULL A6
|
||
|
||
MOVE *A6,A2
|
||
MOVI 0F0H,A1
|
||
AND A1,A2
|
||
SLL 3,A2
|
||
ADDI RRD0,A2
|
||
MOVI 520000H,A0
|
||
MOVI 260000H,A1
|
||
PUSH A6
|
||
CALLR EONIT
|
||
PULL A6
|
||
|
||
MOVE *A6,A2
|
||
SRL 8,A2
|
||
JRZ SKP0
|
||
SLL 7,A2
|
||
ADDI RRD0,A2
|
||
MOVI 4A0000H,A0
|
||
MOVI 260000H,A1
|
||
CALLR EONIT
|
||
SKP0
|
||
;PLYR 2 THSTGS
|
||
MOVE @P2DATA+THSTGS,A6
|
||
SLL 4,A6
|
||
ADDI DECLST,A6
|
||
MOVE *A6,A2
|
||
MOVK 0FH,A1
|
||
AND A1,A2
|
||
SLL 7,A2
|
||
ADDI RRD0,A2
|
||
MOVI 1720000H,A0
|
||
MOVI 260000H,A1
|
||
PUSH A6
|
||
CALLR EONIT
|
||
PULL A6
|
||
|
||
MOVE *A6,A2
|
||
MOVI 0F0H,A1
|
||
AND A1,A2
|
||
SLL 3,A2
|
||
ADDI RRD0,A2
|
||
MOVI 16A0000H,A0
|
||
MOVI 260000H,A1
|
||
PUSH A6
|
||
CALLR EONIT
|
||
PULL A6
|
||
|
||
MOVE *A6,A2
|
||
SRL 8,A2
|
||
JRZ SKP1
|
||
SLL 7,A2
|
||
ADDI RRD0,A2
|
||
MOVI 1620000H,A0
|
||
MOVI 260000H,A1
|
||
CALLR EONIT
|
||
SKP1 RETS
|
||
|
||
STUFF_LVADDR
|
||
;STUFF ADDR OF LIVES LEFT IMAGE TO BE BLOWN OUT
|
||
;A11=P1/P2DATA
|
||
MOVE *A11(PLIVES),A4
|
||
CMPI 10,A4 ;NEVER 10 TO BE DISPLAYED!
|
||
JRGE EX1
|
||
SLL 5,A4
|
||
ADDI LVS_TBL,A4
|
||
MOVE *A4,A4,L
|
||
MOVE A4,*A11(LVADDR),L ;ADDRESS OF LIVES
|
||
EX1 RETS
|
||
|
||
ONIT
|
||
MOVI 0120H,A3 ;241,A3 ;Z POS.
|
||
MOVI DMAWNZ|M_NOCOLL,A4 ;FLAGS
|
||
MOVI CLSNEUT|TYPTEXT|SUBSCOR,A5 ;OBJ. ID
|
||
CLR A6 ;X VEL
|
||
CLR A7 ;Y VEL
|
||
jauc BEGINOBJ ;CREATE OBJECT, WORLD ADJUSTED
|
||
|
||
EONIT
|
||
MOVI 0120H,A3 ;241,A3 ;Z POS.
|
||
MOVI DMACNZ|M_NOCOLL,A4 ;FLAGS
|
||
MOVI CLSNEUT|TYPTEXT|SUBSCOR,A5 ;OBJ. ID
|
||
CLR A6 ;X VEL
|
||
CLR A7 ;Y VEL
|
||
CALLA BEGINOBJ ;CREATE OBJECT, WORLD ADJUSTED
|
||
MOVI 3B3BH,A1
|
||
MOVE A1,*A8(OCONST),W
|
||
RETS
|
||
|
||
DMA_SCORE
|
||
;START SCORE DIRECT DMA
|
||
|
||
MOVE @STATUS,A0
|
||
SRL 1,A0
|
||
JRC NOMSG1
|
||
MOVI P1PID,A0
|
||
CLR A1
|
||
NOT A1
|
||
CALLA KILALL
|
||
MOVI P1DATA,A11
|
||
CREATE P1PID,MSG_PROC
|
||
NOMSG1:
|
||
MOVE @STATUS,A0
|
||
SRL 2,A0
|
||
JRC NOMSG2
|
||
MOVI P2PID,A0
|
||
CLR A1
|
||
NOT A1
|
||
CALLA KILALL
|
||
MOVI P2DATA,A11
|
||
CREATE P2PID,MSG_PROC ;ALWAYS DISPLAY START STUFF IN ATTRACT
|
||
NOMSG2:
|
||
MOVK 1,A0
|
||
MOVE A0,@SCORE_FLAG ;1=SHOW DMA SCORE AREA ON SCREEN
|
||
CREATE0 KILL_IMAGES
|
||
RETS
|
||
|
||
KILL_IMAGES
|
||
SLEEPK 3
|
||
;KILL SCOREBOARD IMAGES
|
||
MOVI CLSNEUT|TYPTEXT|SUBSCOR,A0
|
||
CLR A1
|
||
NOT A1
|
||
CALLA KILOBJ
|
||
DIE
|
||
|
||
ONARRW:
|
||
;TURN ON AN ARROW AND BLINK IT FOREVER UNTIL SOMEBODY ELSE KILLS IT
|
||
;A9=0 FOR UP ARROW, 1=RGT ARROW, 2=LFT ARROW
|
||
SLEEP 50
|
||
CLR A0
|
||
MOVE A0,@ARWOFF ;STUFF 1 INTO FLAG TO KILL OFF
|
||
MOVI STUFFP,A0
|
||
CALLA GETFPAL
|
||
MOVE A0,A8
|
||
SLL 5,A9
|
||
ADDI ARWLST,A9
|
||
;TURN ON PROPER ARROW
|
||
AON0 MOVI 01AH,A10
|
||
AON1 MOVE A8,A1
|
||
MOVE *A9,A14,L
|
||
MOVI 0600148H,A3
|
||
MOVE A13,-*SP,L
|
||
CALLR ABLOWP
|
||
MOVE *SP+,A13,L
|
||
SLEEPK 1
|
||
DSJS A10,AON1
|
||
SLEEPK 0FH
|
||
MOVE @ARWOFF,A0
|
||
JRZ AON0
|
||
DEC A0
|
||
MOVE A0,@ARWOFF
|
||
CMPI 1,A0
|
||
JRNZ AON0
|
||
DIE
|
||
|
||
ARWLST .LONG UPARRW,RGTARRW,LFTARRW
|
||
|
||
;
|
||
;DRAW_SCORE-UPDATE PLAYER 1 & 2 SCORE AREA
|
||
;
|
||
DRAW_SCORE:
|
||
;
|
||
;DRAW BOTH FACE PLATES
|
||
;
|
||
;DRAW PLYR ONE SCORE PLATE
|
||
MOVI PHD1,A14
|
||
MOVE @CNTDIG1,A6
|
||
JRZ NO_CNT
|
||
; JRNN DRW1
|
||
; CLR A6
|
||
; MOVE A6,@CNTDIG1
|
||
;DRW1
|
||
MOVI PHD2A,A14
|
||
MOVI 0A0012H,A3
|
||
CALLR BLOWOUT
|
||
;NOW BLOW OUT CNTDIG1 FOR THIS PLAYER
|
||
SLL 5,A6
|
||
ADDI NUMBS,A6
|
||
MOVE *A6,A14,L ;GET IMAGE
|
||
MOVI 017001FH,A3
|
||
MOVI 3F3F0000H,A1 ;COLOR/PAL FOR CONSTANT COLOR
|
||
MOVI DMACNZ,A5
|
||
CALLR BLOWOUT2
|
||
JRUC DO_2
|
||
NO_CNT MOVI 0A0012H,A3
|
||
CALLR BLOWOUT
|
||
;DRAW PLYR TWO SCORE PLATE
|
||
DO_2 MOVI PHD2,A14
|
||
MOVE @CNTDIG2,A6
|
||
JRZ NO_CNT1
|
||
MOVI PHD2A,A14
|
||
MOVI 0A012AH,A3
|
||
CALLR BLOWOUT
|
||
SLL 5,A6
|
||
ADDI NUMBS,A6
|
||
MOVE *A6,A14,L ;GET IMAGE
|
||
MOVI 0170137H,A3
|
||
MOVI 3F3F0000H,A1 ;COLOR/PAL FOR CONSTANT COLOR
|
||
MOVI DMACNZ,A5
|
||
CALLR BLOWOUT2
|
||
JRUC DO_3
|
||
NO_CNT1 MOVI 0A012AH,A3
|
||
CALLR BLOWOUT
|
||
DO_3
|
||
MOVE @SCORETYP,A0
|
||
BTST 0,A0
|
||
JRNZ DO_P1
|
||
;DISPLAY CORRECT COIN IN MESSAGE (PRESS OR INSERT) FOR P1
|
||
MOVE @P1DATA+MESSAGE,A14,L
|
||
MOVI 16003BH,A3
|
||
CALLR BLOWOUT
|
||
JRUC NEXT
|
||
DO_P1
|
||
;PLAYER 1 IS IN GAME
|
||
;DRAW PLYR 1 LIVES
|
||
MOVE @P1DATA+LVADDR,A14,L
|
||
MOVI 260036H,A3 ;140038H,A3
|
||
CALLR BLOWOUT
|
||
MOVE @P1DATA+BMB_CNT,A14
|
||
SLL 5,A14
|
||
ADDI BLST,A14
|
||
MOVE *A14,A14,L
|
||
MOVI 0E003FH,A3 ;130048H,A3
|
||
CALLR BLOWOUT
|
||
;NOW BLOW OUT # OF HOSTAGES COLLECTED FOR PLAYER 1
|
||
MOVE @P1DATA+THSTGS,A6
|
||
SLL 4,A6
|
||
ADDI DECLST,A6
|
||
MOVE *A6,A14
|
||
MOVK 0FH,A1
|
||
AND A1,A14
|
||
SLL 7,A14
|
||
ADDI RRD0,A14
|
||
MOVI 26005AH,A3
|
||
MOVI 3B3B0000H,A1
|
||
MOVI DMACNZ,A5
|
||
CALLR BLOWOUT2
|
||
|
||
MOVE *A6,A14
|
||
MOVI 0F0H,A1
|
||
AND A1,A14
|
||
SLL 3,A14
|
||
ADDI RRD0,A14
|
||
MOVI 260052H,A3
|
||
MOVI 3B3B0000H,A1
|
||
MOVI DMACNZ,A5
|
||
CALLR BLOWOUT2
|
||
|
||
MOVE *A6,A14
|
||
SRL 8,A14
|
||
JRZ NEXT
|
||
SLL 7,A14
|
||
ADDI RRD0,A14
|
||
MOVI 26004AH,A3
|
||
MOVI 3B3B0000H,A1
|
||
MOVI DMACNZ,A5
|
||
CALLR BLOWOUT2
|
||
|
||
NEXT
|
||
BTST 1,A0
|
||
JRNZ DO_P2
|
||
;DISPLAY CORRECT COIN IN MESSAGE (PRESS OR INSERT) FOR P2
|
||
MOVE @P2DATA+MESSAGE,A14,L
|
||
MOVI 160153H,A3
|
||
CALLR BLOWOUT
|
||
JRUC NEXT1
|
||
DO_P2
|
||
;PLAYER 2 IS IN GAME
|
||
;DRAW PLYR 2 LIVES
|
||
MOVE @P2DATA+LVADDR,A14,L
|
||
MOVI 26014EH,A3 ;140150H,A3
|
||
CALLR BLOWOUT
|
||
MOVE @P2DATA+BMB_CNT,A14
|
||
SLL 5,A14
|
||
ADDI BLST,A14
|
||
MOVE *A14,A14,L
|
||
MOVI 0E0157H,A3 ;130160H,A3
|
||
CALLR BLOWOUT
|
||
|
||
;NOW BLOW OUT # OF HOSTAGES COLLECTED FOR PLAYER 2
|
||
MOVE @P2DATA+THSTGS,A6
|
||
SLL 4,A6
|
||
ADDI DECLST,A6
|
||
MOVE *A6,A14
|
||
MOVK 0FH,A1
|
||
AND A1,A14
|
||
SLL 7,A14
|
||
ADDI RRD0,A14
|
||
MOVI 260172H,A3
|
||
MOVI 3B3B0000H,A1
|
||
MOVI DMACNZ,A5
|
||
CALLR BLOWOUT2
|
||
|
||
MOVE *A6,A14
|
||
MOVI 0F0H,A1
|
||
AND A1,A14
|
||
SLL 3,A14
|
||
ADDI RRD0,A14
|
||
MOVI 26016AH,A3
|
||
MOVI 3B3B0000H,A1
|
||
MOVI DMACNZ,A5
|
||
CALLR BLOWOUT2
|
||
|
||
MOVE *A6,A14
|
||
SRL 8,A14
|
||
JRZ NEXT1
|
||
SLL 7,A14
|
||
ADDI RRD0,A14
|
||
MOVI 260162H,A3
|
||
MOVI 3B3B0000H,A1
|
||
MOVI DMACNZ,A5
|
||
CALLR BLOWOUT2
|
||
NEXT1
|
||
CLR A1
|
||
MOVI DMAWNZ,A5 ;ENTER WITH PAL SET ALREADY
|
||
;NOW DO SCORE DIGITS FOR PLAYER 1
|
||
MOVI RRD0,A12
|
||
MOVI SCRSPC,A8 ;SPACING BETWEEN DIGITS
|
||
MOVI P1DATA,A9
|
||
CMPI 1,A0
|
||
JRZ OUTSCR
|
||
CMPI 2,A0
|
||
JRZ UPDSLP2
|
||
CMPI 3,A0
|
||
JRNZ OUTSCRX
|
||
;BOTH PLAYERS
|
||
CALLR OUTSCR
|
||
UPDSLP2:
|
||
MOVI P2DATA,A9 ;BASE TABLE PLAYER 2
|
||
;
|
||
;OUTPUT SCORE TO SCREEN
|
||
;A0=CURRENT PLAYER SCORE
|
||
;A9=PLINDX=PLAYER DATA AREA
|
||
;
|
||
OUTSCR:
|
||
MOVK 6,A6 ;5 ;DIGIT COUNT
|
||
MOVE *A9(PSCRAD),A3,L ;PLAYER SCORE ADDRESS
|
||
MOVE *A9(PSCORE),A0,L ;PLAYER SCORE IN BCD FORM
|
||
SLL 8,A0 ;12
|
||
OUTSCL:
|
||
MOVE A0,A14
|
||
SRL 28,A14 ;NEXT DIGIT VALUE INTO LOWEST 4 BITS
|
||
SLL 7,A14 ;*128 (NEXT HEADER PLEASE!!)
|
||
ADD A12,A14 ;BASE ADDRESS OF IMAGE HEADER
|
||
*A1: CONSTANT COLOR:PALETTE
|
||
*A3: DESTINATION Y:X
|
||
*A5: OFFSET:CONTROL
|
||
*A14: ADDRESS OF IMAGE HEADER
|
||
*GETS: A2=H/W; A4=SAG
|
||
MOVE *A14,A2,L ;GET VSIZE:HSIZE
|
||
MOVE *A14(ISAG),A4,L ;GET SAG
|
||
MOVE @QDMAFLG,A13,W ;IS Q BEING MODIFIED?
|
||
JRNZ OUTSCRX
|
||
MOVK 1,A13
|
||
MOVE A13,@QDMAFLG,W ;Q BEING MODIFIED
|
||
MOVE @DMAQCUR,A13,L
|
||
CMPI DMAQ,A13
|
||
JRLS OUTSCRX ;Q OVERLOAD, CAN IT
|
||
MMTM A13,A1,A2,A3,A4,A5
|
||
MOVE A13,@DMAQCUR,L
|
||
CLR A13
|
||
MOVE A13,@QDMAFLG,W
|
||
|
||
ADDXY A8,A3 ;ADD SPACE AFTER DIGIT
|
||
SLL 4,A0 ;NEXT DIGIT PLEASE!
|
||
DSJ A6,OUTSCL
|
||
OUTSCRX:
|
||
RETS
|
||
DECLST .WORD >00,>01,>02,>03,>04,>05,>06,>07,>08,>09
|
||
.WORD >10,>11,>12,>13,>14,>15,>16,>17,>18,>19
|
||
.WORD >20,>21,>22,>23,>24,>25,>26,>27,>28,>29
|
||
.WORD >30,>31,>32,>33,>34,>35,>36,>37,>38,>39
|
||
.WORD >40,>41,>42,>43,>44,>45,>46,>47,>48,>49
|
||
.WORD >50,>51,>52,>53,>54,>55,>56,>57,>58,>59
|
||
.WORD >60,>61,>62,>63,>64,>65,>66,>67,>68,>69
|
||
.WORD >70,>71,>72,>73,>74,>75,>76,>77,>78,>79
|
||
.WORD >80,>81,>82,>83,>84,>85,>86,>87,>88,>89
|
||
.WORD >90,>91,>92,>93,>94,>95,>96,>97,>98,>99
|
||
.WORD >100,>101,>102,>103,>104,>105,>106,>107,>108,>109
|
||
.WORD >110,>111,>112,>113,>114,>115,>116,>117,>118,>119
|
||
.WORD >120,>121,>122,>123,>124,>125,>126,>127,>128,>129
|
||
.WORD >130,>131,>132,>133,>134,>135,>136,>137,>138,>139
|
||
.WORD >140,>141,>142,>143,>144,>145,>146,>147,>148,>149
|
||
.WORD >150,>151,>152,>153,>154,>155,>156,>157,>158,>159
|
||
.WORD >160,>161,>162,>163,>164,>165,>166,>167,>168,>169
|
||
.WORD >170,>171,>172,>173,>174,>175,>176,>177,>178,>179
|
||
.WORD >180,>181,>182,>183,>184,>185,>186,>187,>188,>189
|
||
.WORD >190,>191,>192,>193,>194,>195,>196,>197,>198,>199
|
||
.WORD >200,>201,>202,>203,>204,>205,>206,>207,>208,>209
|
||
.WORD >210,>211,>212,>213,>214,>215,>216,>217,>218,>219
|
||
.WORD >220,>221,>222,>223,>224,>225,>226,>227,>228,>229
|
||
.WORD >230,>231,>232,>233,>234,>235,>236,>237,>238,>239
|
||
.WORD >240,>241,>242,>243,>244,>245,>246,>247,>248,>249
|
||
.WORD >250,>251,>252,>253,>254,>255,>256,>257,>258,>259
|
||
.WORD >260,>261,>262,>263,>264,>265,>266,>267,>268,>269
|
||
.WORD >270,>271,>272,>273,>274,>275,>276,>277,>278,>279
|
||
.WORD >280,>281,>282,>283,>284,>285,>286,>287,>288,>289
|
||
.WORD >290,>291,>292,>293,>294,>295,>296,>297,>298,>299
|
||
|
||
BLST .LONG BMB0,BMB1,BMB2,BMB3,BMB4,BMB5,BMB6,BMB7
|
||
.LONG BMB8,BMB9,BMB9,BMB9,BMB9,BMB9,BMB9
|
||
.LONG BMB9,BMB9,BMB9,BMB9,BMB9,BMB9,BMB9
|
||
.LONG BMB9,BMB9
|
||
|
||
ABLOWP2 MOVI DMAWNZ|M_FLIPH,A5 ;ENTER WITH PAL SET ALREADY
|
||
JRUC BLOWOUT2
|
||
BLOWOUT
|
||
CLR A1
|
||
ABLOWP MOVI DMAWNZ,A5 ;ENTER WITH PAL SET ALREADY
|
||
BLOWOUT2
|
||
*A1: CONSTANT COLOR:PALETTE
|
||
*A3: DESTINATION Y:X
|
||
*A5: OFFSET:CONTROL
|
||
*A14: ADDRESS OF IMAGE HEADER
|
||
*GETS: A2=H/W; A4=SAG
|
||
MOVE *A14,A2,L ;GET VSIZE:HSIZE
|
||
MOVE *A14(ISAG),A4,L ;GET SAG
|
||
MOVE @QDMAFLG,A13,W ;IS Q BEING MODIFIED?
|
||
JRNZ BLOWX
|
||
MOVK 1,A13
|
||
MOVE A13,@QDMAFLG,W ;Q BEING MODIFIED
|
||
MOVE @DMAQCUR,A13,L
|
||
CMPI DMAQ,A13
|
||
JRLS BLOWX ;Q OVERLOAD, CAN IT
|
||
MMTM A13,A1,A2,A3,A4,A5
|
||
MOVE A13,@DMAQCUR,L
|
||
CLR A13
|
||
MOVE A13,@QDMAFLG
|
||
BLOWX RETS
|
||
|
||
|
||
********************************
|
||
* SCRADD2-ADD BCD (8 DIGIT) AMOUNT TO PLAYERS SCORE
|
||
* A1=AMOUNT TO ADD (8 DIGIT BCD)
|
||
* A2=P1 OR P2DATA
|
||
|
||
SCRADD2
|
||
PUSH a4
|
||
MOVE @GAMSTATE,A0
|
||
CMPI INAMODE,A0
|
||
JREQ RT
|
||
|
||
; CMPI P1DATA,A2
|
||
; JRNZ ABUG
|
||
; LOCKUP
|
||
;ABUG
|
||
MOVE *A2(WAVEPTS),A0
|
||
ADD A1,A0
|
||
MOVE A0,*A2(WAVEPTS)
|
||
MOVE *A2(PSCORE),A0,L ;GET SCORE
|
||
CALLR BCDADD ;ADD IN NEW VALUE
|
||
MOVE @STATUS,A4
|
||
;CHECK TO SEE IF WE WANT TO DOUBLE SCORES FOR TWO PLAYER GAME
|
||
SUBK 3,A4 ;CMPI 3,A4
|
||
JRNZ ONEPLYR
|
||
CALLR BCDADD ;ADD IN NEW VALUE
|
||
;TWO PLAYER GAME
|
||
ONEPLYR
|
||
MOVE A0,*A2(PSCORE),L ;STUFF IT
|
||
|
||
*;FREE MAN BASED ON SCORE
|
||
* MOVE *A2(PNEXTREP),A1,L ;GET NEXT FREE MAN SCORE POINT
|
||
* CMP A1,A0
|
||
* JRLO RT
|
||
*;GIVE PLAYER EXTRA LIFE
|
||
* MOVE A1,A0
|
||
* MOVI >200000,A1 ;ADDITIONAL MEN
|
||
* CALLR BCDADD
|
||
* MOVE A0,*A2(PNEXTREP),L
|
||
* CALLR DO_EXTRA
|
||
* MMTM SP,A0,A1,A7,A9
|
||
* MOVE A2,A9
|
||
* CREATE0 ONHEAD
|
||
* MMFM SP,A0,A1,A7,A9
|
||
*
|
||
RT
|
||
PULL a4
|
||
RETS
|
||
|
||
********************************
|
||
* BCD ADD ROUTINE
|
||
* A0=SCORE (8 DIGIT BCD) 32 BITS
|
||
* A1=NUMBER TO ADD TO A0 (8 DIGIT BCD)
|
||
* PACKED BCD FORMAT 4-BITS/ DIGIT
|
||
|
||
BCDADD
|
||
PUSH a1,a3,a4,a5,a6
|
||
movk 8,a5 ;Do 8 digits
|
||
movk >a,a6
|
||
|
||
bcdlp movk >f,a3
|
||
movk >f,a4
|
||
and a1,a3 ;Mask garbage
|
||
and a0,a4
|
||
add a3,a4
|
||
srl 4,a0
|
||
srl 4,a1
|
||
cmp a6,a4 ;Check for adjustment (past 9)
|
||
jrlo bcdad1 ;No adjust?
|
||
addk 6,a4 ;Return number to 0
|
||
addk 1,a1 ;Add 1 to next digit
|
||
|
||
bcdad1 sll 32-4,a4
|
||
add a4,a0
|
||
dsjs a5,bcdlp
|
||
|
||
PULL a1,a3,a4,a5,a6
|
||
rets
|
||
|
||
CNTDWN
|
||
;TAKE FACE AWAY, AND DISPLAY LARGE FONT DIGIT WITH COLOR CYCLE
|
||
;DISPLAY A COUNTDOWN
|
||
;A11=P1/P2DATA
|
||
MOVI COLRPID,A0
|
||
CLR A1
|
||
NOT A1
|
||
CALLA EXISTP
|
||
JRNZ SKIPCYC
|
||
CREATE COLRPID,CYCSPECT ;START CYCLE FOR CNTDWN DIGIT
|
||
SKIPCYC SLEEP 40 ;15
|
||
; MOVI 0FFF0H,A0
|
||
CMPI P1DATA,A11
|
||
JRNE V1
|
||
MOVK 10,A0
|
||
MOVE A0,@CNTDIG1
|
||
MOVE @STATUS,A0
|
||
ANDI 2,A0
|
||
MOVE A0,@STATUS
|
||
CREATE DG1PID,DIGIT1
|
||
DIE
|
||
V1
|
||
MOVK 10,A0
|
||
MOVE A0,@CNTDIG2
|
||
MOVE @STATUS,A0
|
||
ANDI 1,A0
|
||
MOVE A0,@STATUS
|
||
CREATE DG2PID,DIGIT2
|
||
DIE
|
||
|
||
DIGIT1
|
||
;DO DIGIT CNT
|
||
;TURN ON NEW CNTR OBJECT
|
||
MOVI CNTDOWN,A0
|
||
CALLA ONESND
|
||
SLEEPK 7
|
||
MOVI CNTDWN2,A0
|
||
CALLA ONESND
|
||
SLEEP 22
|
||
MOVI CNTDOWN,A0
|
||
CALLA ONESND
|
||
SLEEPK 7
|
||
MOVI CNTDWN2,A0
|
||
CALLA ONESND
|
||
SLEEP 22 ;75
|
||
MOVE @CNTDIG1,A0
|
||
CMPI 10,A0
|
||
JRNZ DGL
|
||
JSRP DO_CLICK
|
||
DGL MOVE @CNTDIG1,A0
|
||
ANDI 0FH,A0
|
||
DEC A0
|
||
MOVE A0,@CNTDIG1
|
||
JRGT DIGIT1
|
||
|
||
CLR A0
|
||
MOVE A0,@CNTDIG1
|
||
|
||
MOVE @STATUS,A1
|
||
ANDI 2,A1
|
||
MOVE A1,@STATUS
|
||
DV8
|
||
CLR A0
|
||
MOVE A0,*A11(PLIVES)
|
||
MOVK 2,A0 ;INDICATE KILL OFF PLAYER PRC ETC
|
||
MOVE A0,*A11(CNTD)
|
||
CALLR KILDGCYC
|
||
DIE
|
||
KILDGCYC:
|
||
MOVE @CNTDIG1,A0
|
||
MOVE @CNTDIG2,A1
|
||
OR A0,A1
|
||
JRNZ DOUT
|
||
MOVI COLRPID,A0
|
||
CLR A1
|
||
NOT A1
|
||
CALLA KILALL
|
||
DOUT RETS
|
||
|
||
DIGIT2
|
||
;DO DIGIT CNT
|
||
;TURN ON NEW CNTR OBJECT
|
||
MOVI CNTDOWN,A0
|
||
CALLA ONESND
|
||
SLEEPK 7
|
||
MOVI CNTDWN2,A0
|
||
CALLA ONESND
|
||
SLEEP 22
|
||
MOVI CNTDOWN,A0
|
||
CALLA ONESND
|
||
SLEEPK 7
|
||
MOVI CNTDWN2,A0
|
||
CALLA ONESND
|
||
SLEEP 22 ;75
|
||
MOVE @CNTDIG2,A0
|
||
CMPI 10,A0
|
||
JRNZ DGL2
|
||
JSRP DO_CLICK
|
||
DGL2
|
||
MOVE @CNTDIG2,A0
|
||
ANDI 0FH,A0
|
||
DEC A0
|
||
MOVE A0,@CNTDIG2
|
||
JRGT DIGIT2
|
||
|
||
CLR A0
|
||
MOVE A0,@CNTDIG2
|
||
|
||
MOVE @STATUS,A1
|
||
ANDI 1,A1
|
||
MOVE A1,@STATUS
|
||
JRUC DV8
|
||
DO_CLICK
|
||
MOVK 2,A10
|
||
GARP
|
||
MOVI CNTDOWN,A0
|
||
CALLA ONESND
|
||
SLEEPK 7
|
||
MOVI CNTDWN2,A0
|
||
CALLA ONESND
|
||
SLEEP 22
|
||
MOVI CNTDOWN,A0
|
||
CALLA ONESND
|
||
SLEEPK 7
|
||
MOVI CNTDWN2,A0
|
||
CALLA ONESND
|
||
SLEEP 22
|
||
DSJ A10,GARP
|
||
RETP
|
||
|
||
NUMBS .LONG FON150,FON150,FON151,FON152,FON153,FON154,FON155,FON156
|
||
.LONG FON157,FON158,FON159
|
||
.LONG FON159,FON159,FON159,FON159,FON159,FON159,FON159,FON159
|
||
|
||
|
||
|
||
********************************
|
||
* FSCORE - TRANSFER BOTH PLAYERS SCORE TO FORGROUND OBJECTS AND DISPLAY THEM
|
||
* IN PLACE OF DIRECT-DMA OBJECTS
|
||
|
||
FSCORE
|
||
MOVI P1DATA,A9 ;TRANSFER PLAYER 1 SCORE
|
||
CALLA VSCORE
|
||
MOVI P2DATA,A9 ;TRANSFER PLAYER 2 SCORE
|
||
VSCORE
|
||
MOVK 6,A11 ;DIGIT COUNT
|
||
MOVE *A9(PSCRAD),A0,L ;PLAYER SCORE ADDRESS
|
||
MOVE *A9(PSCORE),A9,L ;PLAYER SCORE IN BCD FORM
|
||
SLL 8,A9 ;12
|
||
PUTSCL
|
||
MMTM SP,A0
|
||
MOVE A9,A10
|
||
SRL 28,A10 ;NEXT VALUE INTO LOWEST 4 BITS
|
||
SLL 7,A10 ;*128 (NEXT HEADER PLEASE!!)
|
||
ADDI RRD0,A10 ;BASE ADDRESS OF IMAGE HEADER
|
||
CLR A1
|
||
MOVY A0,A1 ;Y VAL
|
||
SLL 16,A0 ;X VAL
|
||
MOVE A10,A2 ;IMG
|
||
CALLR ONIT
|
||
|
||
MMFM SP,A0
|
||
MOVI SCRSPC,A1 ;SPACE BETWEEN DIGITS
|
||
ADDXY A1,A0 ;ADD SPACE AFTER DIGIT
|
||
SLL 4,A9 ;NEXT DIGIT PLEASE!
|
||
DSJ A11,PUTSCL
|
||
RETS
|
||
|
||
.END
|
||
|
||
|
||
|