986 lines
19 KiB
NASM
986 lines
19 KiB
NASM
.FILE 'SCORE.ASM'
|
||
.TITLE 'SCORE STUFF FOR ROBO-RAMA GAME PROGRAM'
|
||
.WIDTH 132
|
||
.OPTION B,D,L,T
|
||
.MNOLIST
|
||
|
||
;
|
||
; INITIATED: MAY 6,1989
|
||
; MODIFIED: !
|
||
; SOFTWARE: MARK TURMELL
|
||
;
|
||
; COPYRIGHT (C) 1989 WILLIAMS ELECTRONICS GAMES, INC.
|
||
;
|
||
;
|
||
; GET THE SYSTEM STUFF
|
||
|
||
.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 "ROBO.EQU"
|
||
.INCLUDE "LINK.EQU"
|
||
;
|
||
;SOUNDS
|
||
;
|
||
.REF FREEMAN,LOWSND,YAMOFF,FREESND
|
||
;
|
||
;SYMBOLS EXTERNALLY DEFINED
|
||
;
|
||
.REF LFCY,RFCY,LFACEP,RFACEP,LIVECNT,AUD1,SENDCRNR,KOFFC
|
||
.REF GETFPAL,AFONT0,BLNKAREA,P1DATA,P2DATA,STATUS,XYSEEK2
|
||
.REF STARTUP,OBJON,OBJOFF,CANT,OVERLAP
|
||
.REF RD7FONT,RD15FONT,GAMSTATE,KILOBJ,DTIME,WNDO
|
||
.REF STRNGLEN,DMAN,CR_STRTP,CR_CONTP,CCCC
|
||
.REF GET_CREDITS,DMAQ,QDMAFLG ;FOR FILE SCORE USAGE
|
||
.REF STRCNRMO
|
||
.REF GETPRC,BEGINOBJ,BEGINOBJ2,HEXTOASC,STRLNRM,WORLDTL
|
||
.REF WAVEYX,METERP1,METERP2,FRANIM,P1LVS,P2LVS
|
||
.REF KILL
|
||
.REF ICNFLG,FREETOT
|
||
|
||
|
||
;
|
||
;SYMBOLS DEFINED IN THIS FILE
|
||
;
|
||
.DEF AH,CNTDIG1,CNTDIG2,SET_1ST,FFLG
|
||
;,AH2
|
||
.DEF PDSIZE,MSG_PROC2,MSG_PROC,SCORETYP,SCORE_FLAG,METERS
|
||
.DEF SCRADD2,INIT_SCORE,DRAW_SCORE,SCORE,SCRADD3
|
||
.DEF DELSCORE,FSCORE,BSCORE,P1MTRY,P2MTRY,FILLUP
|
||
.DEF EXTRA,FIXMETERS,FIXMETERS2,MTR1CNT,IS2,IS1
|
||
;
|
||
;UNINITIALIZED RAM DEFINITIONS
|
||
;
|
||
.BSS FFLG,8
|
||
.BSS CNTDIG1,8
|
||
.BSS CNTDIG2,8
|
||
.BSS ADDSCR,16
|
||
.BSS SCOUNT,16
|
||
.BSS SCORETYP,16
|
||
; .BSS MSGSET,16
|
||
.BSS OLDCRD,16
|
||
.BSS SCORE_FLAG,16
|
||
.BSS BSCORE,16
|
||
.BSS P1MTRY,16
|
||
.BSS P2MTRY,16
|
||
.BSS MTR1CNT,16 ;2 8 BIT POSITIONS FOR METER CNTRS
|
||
;
|
||
;EQUATES FIRST ORIGINATED IN THIS FILE
|
||
;
|
||
SCRSPC .EQU 12 ;SPACER FOR DIGITS (INCLUDING DIGIT)
|
||
BPDMA1 .EQU 01
|
||
BPDMA2 .EQU 02
|
||
MSGSLP .EQU 52*1/4
|
||
MSGSLP2 .EQU 52*2/4
|
||
**************************************************************************
|
||
|
||
.TEXT
|
||
EXTRA:
|
||
MMTM SP,A1,A2,A3,A4,A5,A6,A7
|
||
MOVE *A0(OPLINK),A0,L
|
||
MOVB *A0(PNUM),A4
|
||
; MOVE A8,A0
|
||
; CALLA DELOBJ
|
||
MOVK 1,A0
|
||
MOVB A0,@ICNFLG
|
||
CALLR DO_EXTRA
|
||
MOVB @FREETOT,A0
|
||
INC A0
|
||
MOVB A0,@FREETOT
|
||
|
||
MOVE A4,A9
|
||
CALLA SENDCRNR
|
||
CREATE FLYPID,KOFFC
|
||
|
||
MMFM SP,A1,A2,A3,A4,A5,A6,A7
|
||
RETS
|
||
|
||
DO_EXTRA
|
||
MMTM SP,A8,A7,A4
|
||
MOVI P1DATA,A8
|
||
MOVE @P1LVS,A7,L
|
||
CMPI 1,A4
|
||
JREQ CN
|
||
;PLYR 2
|
||
CMPI 2,A4
|
||
JRNZ OUT2
|
||
MOVI P2DATA,A8
|
||
MOVE @P2LVS,A7,L
|
||
CN MOVE *A8(PLIVES),A4,W ;GET NUMBER OF PLAYERS LIVES
|
||
INC A4
|
||
MOVE A4,*A8(PLIVES),W
|
||
CMPI 10,A4
|
||
JRGE OUT
|
||
SLL 7,A4 ;*128 (NEXT HEADER PLEASE!!)
|
||
ADDI AFONT0,A4 ;COMPUTE CORRECT HEADER
|
||
MOVE A4,A1
|
||
MOVE A7,A8
|
||
MOVE *A8(OFLAGS),A4,W
|
||
CALLA ANI
|
||
OUT
|
||
CREATE 0,YAMSND
|
||
OUT2
|
||
MMFM SP,A8,A7,A4
|
||
RETS
|
||
YAMSND
|
||
;CHECK TO SEE IF IN RACKUP, IF SO, DO MUSICAL FREEMAN SND
|
||
MOVB @CANT,A0
|
||
JRNZ DIOUT ;REGMN
|
||
; MOVI FREESND,A0 ;AUDIO EXTEND
|
||
; CALLA ONESND
|
||
; JRUC DIOUT
|
||
;REGMN
|
||
MOVI YAMOFF,A0
|
||
CALLA ONESND
|
||
SLEEP 2
|
||
MOVI FREEMAN,A0 ;AUDIO EXTEND
|
||
CALLA ONESND
|
||
DIOUT
|
||
MOVI AUDEXTRA,A0
|
||
CALLA AUD1
|
||
DIE
|
||
|
||
MTR1OR2 .LONG METERP1,METERP2
|
||
FILLUP:
|
||
;FILL UP THIS PLAYERS METER FROM EMPTY TO FULL
|
||
;A10=PLAYERS PROC PTR WHO IS FILLING UP
|
||
;
|
||
; MOVK 1,A0
|
||
; MOVB A1,@FFLG ;SOMEONE FILLING UP FLAG
|
||
; MOVI WAVESND,A0
|
||
; CALLA ONESND
|
||
; CALLR KILLBEEP
|
||
MOVE @METERP2,A8,L
|
||
MOVB *A10(PNUM),A0
|
||
DEC A0
|
||
JRNZ TAG1
|
||
MOVE @METERP1,A8,L
|
||
TAG1
|
||
MOVI FILLIN,A9
|
||
MOVK 1,A1
|
||
JSRP FRANIM
|
||
;A10
|
||
CALLA GETCNT
|
||
MOVB *A10(PNUM),A0
|
||
DEC A0
|
||
SLL 3,A0
|
||
ADDI MTR1CNT,A0 ;BASE OF METER CNT RAM
|
||
MOVK 1,A1
|
||
MOVB A1,*A0
|
||
|
||
CLR A1
|
||
MOVB A1,@FFLG ;SOMEONE FILLING UP FLAG
|
||
DIE
|
||
|
||
;KILLBEEP:
|
||
; MOVI BEEPID,A0
|
||
; CLR A1
|
||
; NOT A1
|
||
; JAUC KILALL ;KILL LOW ENERGY BEEPING PROCESS
|
||
FILLIN:
|
||
.LONG BOX6
|
||
.WORD 6
|
||
.LONG BOX5
|
||
.WORD 6
|
||
.LONG BOX4
|
||
.WORD 6
|
||
.LONG BOX3
|
||
.WORD 6
|
||
.LONG BOX2
|
||
.WORD 6
|
||
.LONG BOX1
|
||
.WORD 6
|
||
.LONG 0
|
||
|
||
METERS:
|
||
;CK FOR PLAYER #
|
||
;A10=PLAYER PROC PTR WHO IS METERING DOWN
|
||
MOVB @FFLG,A0 ;ANYBODY FILLING UP FLAG
|
||
JRNZ RY
|
||
MOVB *A10(PNUM),A0
|
||
DEC A0
|
||
SLL 3,A0
|
||
MOVI MTR1CNT,A2
|
||
ADD A0,A2
|
||
MOVB *A2,A1
|
||
INC A1
|
||
CMPI 8,A1
|
||
JRLT DAD
|
||
MOVK 7,A1
|
||
DAD
|
||
MOVB A1,*A2
|
||
PUSH A1
|
||
SLL 2,A0
|
||
ADDI MTR1OR2,A0
|
||
SLL 5,A1
|
||
ADDI METRS,A1
|
||
MOVE *A1,A1,L
|
||
PUSH A8
|
||
MOVE *A0,A8,L
|
||
MOVE *A8,A8,L
|
||
; MOVE @METERP1,A8,L
|
||
MOVE *A8(OFLAGS),A4,W
|
||
CALLA ANI
|
||
PULL A8
|
||
PULL A1
|
||
; MOVB @MTR1CNT,A0
|
||
CMPI 7,A1
|
||
JREQ STP
|
||
CMPI 5,A1
|
||
JRNZ GETCNT
|
||
|
||
MOVI LOWSND,A0
|
||
CALLA ONESND
|
||
|
||
; CREATE BEEPID,MRBEEP
|
||
GETCNT:
|
||
MOVE *A10(WPN_TYP),A0
|
||
SLL 4,A0
|
||
ADDI TIMERS,A0
|
||
MOVE *A0,A0,W
|
||
MOVE A0,*A10(SHOTCNT)
|
||
RY RETS
|
||
FIXMETERS:
|
||
SLEEP 1
|
||
MOVB @MTR1CNT,A0
|
||
SLL 5,A0
|
||
ADDI METRS,A0
|
||
MOVE *A0,A1,L
|
||
MOVE @METERP1,A8,L
|
||
MOVE *A8(OFLAGS),A4,W
|
||
CALLA ANI
|
||
; CALLR GETCNT
|
||
DIE
|
||
FIXMETERS2:
|
||
SLEEP 1
|
||
MOVB @MTR1CNT+8,A0
|
||
SLL 5,A0
|
||
ADDI METRS,A0
|
||
MOVE *A0,A1,L
|
||
MOVE @METERP2,A8,L
|
||
MOVE *A8(OFLAGS),A4,W
|
||
CALLA ANI
|
||
; CALLR GETCNT
|
||
DIE
|
||
|
||
STP:
|
||
; CALLR KILLBEEP
|
||
CLR A0
|
||
MOVE A0,*A10(WPN_TYP),W
|
||
RETS
|
||
;MRBEEP:
|
||
; MOVI BEEPLO,A0
|
||
; CALLA ONESND
|
||
; SLOOP 24,MRBEEP
|
||
; DIE
|
||
|
||
;SUBLZR .EQU 000H ;REGULAR LAZER SHOTS
|
||
;SUBSPRY .EQU 0001H ;SPRAY SUB TYPE
|
||
;SUBSPEW .EQU 0002H ;SPEW TYPE WEAPON (3)
|
||
;SUBGRND .EQU 0003H ;GRENADE
|
||
;SUBNOSTP .EQU 0004H ;NON STOPPING BULLET
|
||
|
||
TIMERS: .WORD 100,6,10,4,7,11,8,8 ;WEAPON 0,1,2,3,4 ETC
|
||
METRS .LONG BOX7,BOX1,BOX2,BOX3,BOX4,BOX5,BOX6,BOX7
|
||
|
||
IS2 MOVI P2DATA,A11
|
||
MOVI [35H,111H],A3
|
||
JRUC IS3
|
||
IS1
|
||
MOVI P1DATA,A11
|
||
MOVI [35H,24H],A3
|
||
IS3 CLR A0
|
||
MOVE A0,*A11(SCRCNT),L
|
||
MOVE A0,*A11(SCRSUB),L
|
||
MOVE A3,*A11(PSCRAD),L ;Y,X LOCATION OF SCORE 1
|
||
RETS
|
||
INIT_SCORE:
|
||
CALLR IS1
|
||
; MOVE A0,*A11(PSCORE),L
|
||
MOVE @GAMSTATE,A0
|
||
CMPI INAMODE,A0
|
||
JRZ DOP1MSG
|
||
; MOVE @MSGSET,A0
|
||
MOVE @STATUS,A0
|
||
SRL 1,A0
|
||
JRC NOMSG1
|
||
DOP1MSG:
|
||
CREATE P1PID,MSG_PROC ;ALWAYS DISPLAY START STUFF IN ATTRACT
|
||
NOMSG1:
|
||
CALLR IS2
|
||
; MOVE A0,*A11(PSCORE),L
|
||
MOVE @GAMSTATE,A0
|
||
CMPI INAMODE,A0
|
||
JRZ DOP2MSG
|
||
; MOVE @MSGSET,A0
|
||
MOVE @STATUS,A0
|
||
SRL 2,A0
|
||
JRC NOMSG2
|
||
DOP2MSG:
|
||
CREATE P2PID,MSG_PROC ;ALWAYS DISPLAY START STUFF IN ATTRACT
|
||
NOMSG2:
|
||
CREATE SCOREPID,SCORE
|
||
RETS
|
||
SCORE:
|
||
MOVI P1DATA,A2 ;UPDATE PLAYER 1
|
||
CALLA MOVER
|
||
MOVI P2DATA,A2 ;UPDATE PLAYER 2
|
||
CALLA MOVER
|
||
NODICE:
|
||
SLEEP 10 ;4 ;5! ;7!
|
||
JRUC SCORE
|
||
;
|
||
; MOVER-COUNT UP TO SCORE SPECIFIED IN SCRCNT
|
||
;
|
||
MOVER:
|
||
MOVE *A2(SCRCNT),A4,L ;MOVE SCORE TO ADD INTO A1
|
||
JRZ BYEALL ;NO SCORE SO EXIT
|
||
MOVE *A2(SCRSUB),A0,L ;PRESENT BCD COUNT-UP
|
||
MOVE @ADDSCR,A1,W ;ADD SCORE (ADDSCR+) AT A TIME
|
||
CALLA BCDADD ;BCD PRODUCT IN A0
|
||
CMP A4,A0 ;COUNT_UP MORE THAN AMOUNT TO ADD?
|
||
JRHI PRFCT ;ALL DONE BYE!
|
||
MOVE A0,*A2(SCRSUB),L ;UPDATE BCD COUNT-UP
|
||
MOVE @ADDSCR,A1,W ;GET TOTAL AMOUNT PER ADD
|
||
JRUC ESCAPE1 ;DO IT
|
||
PRFCT:
|
||
CLR A0
|
||
MOVE A0,*A2(SCRCNT),L ;ZERO SCORE AMOUNT TO ADD
|
||
MOVE A0,*A2(SCRSUB),L ;ZERO COUNTER
|
||
JRUC BYEALL ;ALWAYS
|
||
ESCAPE1:
|
||
MOVE *A2(PSCORE),A0,L ;MOVE IN PLAYERS CURRENT SCORE
|
||
CALLA BCDADD ;ADD CONTENTS OF A1 TO SCORE
|
||
MOVE A0,*A2(PSCORE),L ;REVISED SCORE
|
||
BYEALL:
|
||
RETS
|
||
;
|
||
;DRAW_SCORE-UPDATE PLAYER 1 & 2 SCORE
|
||
;
|
||
;A2=PLAYER DATA STRUCTURE
|
||
;
|
||
DRAW_SCORE:
|
||
MOVI AFONT0,A12
|
||
MOVI SCRSPC,A8 ;SPACING BETWEEN DIGITS
|
||
MOVI DMAWNZ,A5 ;CONTROL REGISTER
|
||
;DRAW 1 BITS ONLY
|
||
UPDSLP1:
|
||
MOVI P1DATA,A9
|
||
MOVE @SCORETYP,A0
|
||
JRNZ PUTSCORE
|
||
RETS ;0=NO SCORES 1=1 PLYR 2=2PLYR >3=BOTH
|
||
|
||
PUTSCORE:
|
||
CMPI 1,A0
|
||
JRZ OUTSCR
|
||
CHK1BIT:
|
||
CMPI 2,A0
|
||
JRZ UPDSLP2
|
||
;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 8,A6 ;DIGIT COUNT
|
||
MOVE *A9(PSCRAD),A3,L ;PLAYER SCORE ADDRESS
|
||
;
|
||
MOVI >0101,A1
|
||
MOVE *A9(PSCORE),A0,L ;PLAYER SCORE IN BCD FORM
|
||
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
|
||
SET_1ST
|
||
;A11=P1 OR P2DATA AREA
|
||
MMTM SP,A0,A1
|
||
CLR A0
|
||
MOVI >500000,A1 ;FIRST FREE MAN AT 500000
|
||
CALLR BCDADD
|
||
MOVE A0,*A11(PNEXTREP),L
|
||
MMFM SP,A0,A1
|
||
RETS
|
||
;
|
||
;SCRADD2-ADD BCD (8 DIGIT) AMOUNT TO PLAYERS SCORE
|
||
;A1=AMOUNT TO ADD (8 DIGIT BCD)
|
||
;
|
||
SCRADD3
|
||
;ENTRY POINT FOR BONUS RACKUP
|
||
MMTM SP,A4
|
||
MOVE *A2(PSCORE),A0,L ;GET SCORE
|
||
CALLR BCDADD ;ADD IN NEW VALUE
|
||
JRUC ONEPLYR
|
||
SCRADD2:
|
||
MMTM SP,A4
|
||
MOVE @GAMSTATE,A0
|
||
CMPI INAMODE,A0
|
||
JREQ RT
|
||
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
|
||
CMPI 3,A4
|
||
JRNZ ONEPLYR
|
||
CALLR BCDADD ;ADD IN NEW VALUE
|
||
;TWO PLAYER GAME
|
||
ONEPLYR MOVE A0,*A2(PSCORE),L ;STUFF IT
|
||
MOVE *A2(PNEXTREP),A1,L ;GET NEXT FREE MAN SCORE POINT
|
||
CMP A1,A0
|
||
JRLO RT
|
||
;GIVE PLAYER EXTRA LIFE
|
||
MOVE A1,A0
|
||
MOVI >1500000,A1 ;ADDITIONAL MEN
|
||
CALLR BCDADD
|
||
MOVE A0,*A2(PNEXTREP),L
|
||
MOVK 1,A4
|
||
CMPI P1DATA,A2
|
||
JREQ RT0
|
||
CMPI P2DATA,A2
|
||
JRNZ RT
|
||
MOVK 2,A4
|
||
RT0
|
||
CALLR DO_EXTRA
|
||
RT
|
||
MMFM SP,A4
|
||
ANRT RETS
|
||
;
|
||
;SCRADD-ADD BCD (4 DIGIT) AMOUNT TO PLAYERS SCORE
|
||
;A1,[Y,X]
|
||
;Y HALF IS THE AMOUNT TO ADD (4 DIGIT BCD)
|
||
;X HALF IS MULTIPLE FOR COUNT-UP
|
||
;Y HALF MUST BE EVENLY DIVISIBLE BY X HALF
|
||
;SCRADD:
|
||
; MOVE A1,@ADDSCR,W ;MULTIPLE FOR SCORE ADD
|
||
; SRL 16,A1 ;MOVE SCORE TO ADD INTO WORD
|
||
; MOVE *A2(SCRCNT),A0,L ;COUNT ALREADY STORED
|
||
; CALLR BCDADD ;ADD NEW VALUE (IN BCD)
|
||
; MOVE A0,*A2(SCRCNT),L ;TO NEW TOTAL
|
||
; 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:
|
||
|
||
;NEED ALL THESE MMTM'S?
|
||
MMTM SP,A1,A3,A4,A5,A6
|
||
MOVK 8,A5 ;DO 8 DIGITS
|
||
CLRC ;CLEAR THE CARRY
|
||
MOVK >0A,A6
|
||
BCDLP:
|
||
MOVK >0F,A3
|
||
MOVK >0F,A4
|
||
AND A1,A3 ;MASK GARBAGE
|
||
AND A0,A4 ;TRANSFER
|
||
ADDC A3,A4
|
||
CMP A6,A4 ;NEED TO ADJUST? (PAST 9 DEC.)
|
||
JRLO BCDAD1 ;NO. THEN ADD
|
||
ADDK 6,A4 ;RETURN NUMBER TO 0
|
||
SRL 4,A0 ;
|
||
SLL 28,A4
|
||
ADD A4,A0
|
||
SRL 4,A1
|
||
SETC ;SET CARRY
|
||
DSJS A5,BCDLP ;DO ALL 8 DIGITS
|
||
JRUC BCDADX ;UNSTACK REGISTERS
|
||
BCDAD1:
|
||
SRL 4,A0
|
||
SLL 28,A4
|
||
ADD A4,A0
|
||
SRL 4,A1
|
||
CLRC
|
||
DSJS A5,BCDLP
|
||
BCDADX:
|
||
MMFM SP,A1,A3,A4,A5,A6
|
||
RETS
|
||
CNTDWN:
|
||
;TAKE FACE AWAY, AND DISPLAY LARGE FONT DIGIT WITH COLOR CYCLE
|
||
;DISPLAY A COUNTDOWN
|
||
CREATE 0,OVERLAP
|
||
MOVI 0FFF0H,A0
|
||
CMPI P1DATA,A11
|
||
JRNE V1
|
||
MOVE @LFACEP,A8,L
|
||
MOVE A0,*A8(OYPOS)
|
||
MOVK 10,A0
|
||
MOVB A0,@CNTDIG1
|
||
MOVE @STATUS,A0
|
||
ANDI 2,A0
|
||
MOVE A0,@STATUS
|
||
MOVE A0,@STARTUP
|
||
CREATE DG1PID,DIGIT1
|
||
JRUC V2
|
||
V1
|
||
MOVE @RFACEP,A8,L
|
||
MOVE A0,*A8(OYPOS)
|
||
MOVK 10,A0
|
||
MOVB A0,@CNTDIG2
|
||
MOVE @STATUS,A0
|
||
ANDI 1,A0
|
||
MOVE A0,@STATUS
|
||
MOVE A0,@STARTUP
|
||
CREATE DG2PID,DIGIT2
|
||
V2
|
||
DIE
|
||
DIGIT2
|
||
;DO DIGIT CNT
|
||
;TURN ON NEW CNTR OBJECT
|
||
MOVE @P2LVS,A0,L
|
||
; CALLA OBJOFF
|
||
MOVE *A0(OYPOS),A1
|
||
XORI 0F00H,A1
|
||
MOVE A1,*A0(OYPOS)
|
||
|
||
MOVB @CNTDIG2,A0
|
||
ANDI 0FH,A0
|
||
SLL 5,A0
|
||
ADDI NUMBS,A0
|
||
MOVE *A0,A2,L ;GET IMAGE
|
||
|
||
MOVE @RFACEP,A1,L
|
||
MOVE *A1(OXVAL),A0,L
|
||
MOVE @RFCY,A1
|
||
ADDI 12,A1
|
||
SLL 16,A1 ;GET Y
|
||
MOVI CLSNEUT|TYPTEXT|SUBDG2I,A5
|
||
MOVI 260,A3
|
||
MOVI DMACNZ,A4 ;CONSTANT COLOR NON-ZERO
|
||
CLR A6
|
||
CLR A7
|
||
CALLA BEGINOBJ2
|
||
MOVI >3E3E0000,A0 ;COLOR NUMBER TO CYCLE
|
||
MOVE A0,*A8(OPAL),L
|
||
|
||
HG2 SLEEP 60
|
||
MOVB @CNTDIG2,A0
|
||
ANDI 0FH,A0
|
||
DEC A0
|
||
MOVB A0,@CNTDIG2
|
||
JRLE DV72
|
||
SLL 5,A0
|
||
ADDI NUMBS,A0
|
||
MOVE *A0,A1,L ;GET IMAGE
|
||
MOVE *A8(OFLAGS),A4,W
|
||
CALLA ANI
|
||
JRUC HG2
|
||
DV72
|
||
MOVE @STATUS,A1
|
||
ANDI 1,A1
|
||
MOVE A1,@STATUS
|
||
MOVE A1,@STARTUP
|
||
MOVE @P2LVS,A0,L
|
||
JRUC DV8
|
||
|
||
NUMBS .LONG FON150,FON150,FON151,FON152,FON153,FON154,FON155,FON156,FON157
|
||
.LONG FON158,FON159
|
||
.LONG FON159,FON159,FON159,FON159,FON159,FON159,FON159,FON159
|
||
DIGIT1
|
||
;DO DIGIT CNT
|
||
;TURN ON NEW CNTR OBJECT
|
||
MOVE @P1LVS,A0,L
|
||
; CALLA OBJOFF
|
||
MOVE *A0(OYPOS),A1
|
||
XORI 0F00H,A1
|
||
MOVE A1,*A0(OYPOS)
|
||
|
||
MOVB @CNTDIG1,A0
|
||
ANDI 0FH,A0
|
||
SLL 5,A0
|
||
ADDI NUMBS,A0
|
||
MOVE *A0,A2,L ;GET IMAGE
|
||
|
||
MOVE @LFACEP,A1,L
|
||
MOVE *A1(OXVAL),A0,L
|
||
MOVE @LFCY,A1
|
||
ADDI 12,A1
|
||
SLL 16,A1 ;GET Y
|
||
MOVI CLSNEUT|TYPTEXT|SUBDG1I,A5
|
||
; MOVI CLSNEUT|TYPNEUT,A5
|
||
MOVI 260,A3
|
||
MOVI DMACNZ,A4 ;CONSTANT COLOR NON-ZERO
|
||
CLR A6
|
||
CLR A7
|
||
CALLA BEGINOBJ2
|
||
MOVI >3E3E0000,A0 ;COLOR NUMBER TO CYCLE
|
||
MOVE A0,*A8(OPAL),L
|
||
|
||
HG SLEEP 60
|
||
MOVB @CNTDIG1,A0
|
||
ANDI 0FH,A0
|
||
DEC A0
|
||
MOVB A0,@CNTDIG1
|
||
JRLE DV7
|
||
SLL 5,A0
|
||
ADDI NUMBS,A0
|
||
MOVE *A0,A1,L ;GET IMAGE
|
||
MOVE *A8(OFLAGS),A4,W
|
||
CALLA ANI
|
||
JRUC HG
|
||
DV7
|
||
MOVE @STATUS,A1
|
||
ANDI 2,A1
|
||
MOVE A1,@STATUS
|
||
MOVE A1,@STARTUP
|
||
MOVE @P1LVS,A0,L
|
||
DV8
|
||
; CALLA OBJON
|
||
MOVE *A0(OYPOS),A1
|
||
XORI 0F00H,A1
|
||
MOVE A1,*A0(OYPOS)
|
||
|
||
MOVE A8,A0
|
||
CALLA DELOBJ
|
||
CLR A0
|
||
MOVE A0,*A11(PLIVES)
|
||
CMPI P1DATA,A11
|
||
JRNE V3
|
||
MOVE @LFCY,A0
|
||
MOVE @LFACEP,A1,L
|
||
MOVE A0,*A1(OYPOS)
|
||
JRUC V4
|
||
V3
|
||
MOVE @RFCY,A0
|
||
MOVE @RFACEP,A1,L
|
||
MOVE A0,*A1(OYPOS)
|
||
V4
|
||
MOVK 2,A0 ;INDICATE KILL OFF PLAYER PRC ETC
|
||
MOVB A0,*A11(CNTD)
|
||
CALLA LIVECNT
|
||
DIE
|
||
|
||
MSG_PROC2:
|
||
;BOTH PLAYERS ARE PLAYING!
|
||
;CHANGE MESSAGE ON HIS SCOREBOARD/PLUS STILL SHOW PLAYER SCORE!
|
||
;COLOR CYCLE IT
|
||
SLEEP 30
|
||
MOVE A11,A2
|
||
CREATE 0,CNTDWN
|
||
JRUC DO_MSGS
|
||
;
|
||
; MSG_PROC - ALTERNATE BETWEEN PRESS START X TO PLAY/CONTINUE
|
||
; INSERT COIN TO PLAY/CONTINUE
|
||
; PARAMS:
|
||
; A11 = PTR TO PLAYER DATA STRUCTURE
|
||
;
|
||
MSG_PROC:
|
||
MOVE A11,A2
|
||
PRESSLP:
|
||
MOVE @GAMSTATE,A0
|
||
CMPI ININTRO,A0
|
||
JRNZ DO_GO
|
||
DO_NADA:
|
||
SLOOP 1,PRESSLP
|
||
DO_GO:
|
||
CMPI P2DATA,A11
|
||
JRZ PMSG2
|
||
;PUT P1 METER ON SCREEN
|
||
MOVE @METERP1,A0,L
|
||
MOVE @P1MTRY,A1,W
|
||
MOVE A1,*A0(OYPOS),W
|
||
MOVE @SCORETYP,A0,W ;TURN ON PLAYER 1 SCORE
|
||
ORI 1,A0
|
||
MOVE A0,@SCORETYP,W
|
||
MOVI CLSNEUT|TYPTEXT|SUBP1TXT,A0
|
||
JRUC DOSCRE1
|
||
PMSG2:
|
||
;PUT P2 METER ON SCREEN
|
||
MOVE @METERP2,A0,L
|
||
MOVE @P2MTRY,A1,W
|
||
MOVE A1,*A0(OYPOS),W
|
||
MOVE @SCORETYP,A0,W ;TURN ON PLAYER 2 SCORE
|
||
ORI 2,A0
|
||
MOVE A0,@SCORETYP,W
|
||
|
||
MOVI CLSNEUT|TYPTEXT|SUBP2TXT,A0
|
||
DOSCRE1:
|
||
CLR A1
|
||
NOT A1
|
||
CALLA KILOBJ ;CLEAR PLAYER MESSAGE
|
||
|
||
MOVI MSGSLP,A9
|
||
WLUP1:
|
||
MOVE @GAMSTATE,A0
|
||
CMPI ININTRO,A0
|
||
JRZ DO_NADA
|
||
SLEEP 4 ;1
|
||
DSJS A9,WLUP1
|
||
;
|
||
DO_MSGS:
|
||
CALLA CCCC ;MAKE SURE THINGS ARE INTACT
|
||
CALLA GET_CREDITS ;GET CURRENT CREDITS
|
||
MOVE A0,@OLDCRD,W ;AND SAVE THEM AS PREVIOUS CREDITS
|
||
CALLR AH
|
||
|
||
MOVB *A11(CNTD),A0
|
||
JRNZ CB
|
||
MOVE *A11(PSCORE),A0,L
|
||
JRZ PRESSTRT ;NO SCORE, THIS IS A NEW START
|
||
MOVE @GAMSTATE,A0,W
|
||
CMPI INGAMEOV,A0
|
||
JREQ PRESSTRT
|
||
CMPI INAMODE,A0
|
||
JREQ PRESSTRT
|
||
|
||
CB CALLA CR_CONTP ;CONTINUATION
|
||
JRLO INSCONT ;NOT ENOUGH FOR THE CONTINUE
|
||
JRUC PRESSTOC
|
||
PRESSTRT:
|
||
CALLA CR_STRTP
|
||
JRLO INSCONT ;NOT ENUFF TO START THIS GUY
|
||
;
|
||
; OUTPUT "PRESS START 1" OR "PRESS START 2" ON TOP HALF
|
||
;
|
||
PRESSTOC:
|
||
MOVE A11,A2
|
||
MOVK STRT1MSG,A3 ;"PRESS START 1"
|
||
CMPI P1DATA,A11
|
||
JREQ PRESCON1
|
||
PRESCONA:
|
||
MOVK STRT2MSG,A3 ;"PRESS START 2"
|
||
PRESCON1:
|
||
CALLA PUTMSG
|
||
JRUC NEXT1
|
||
AH
|
||
CMPI P2DATA,A11
|
||
JRZ CLRSCRE2
|
||
MOVE @SCORETYP,A0,W ;TURN OFF PLAYER 1 SCORE
|
||
ANDI 0FFFEH,A0
|
||
MOVE A0,@SCORETYP,W
|
||
;TAKE AWAY P1 METER
|
||
MOVE @METERP1,A0,L
|
||
MOVI 0FFF0H,A1
|
||
MOVE A1,*A0(OYPOS),W
|
||
JRUC DOINTRO
|
||
CLRSCRE2:
|
||
MOVE @SCORETYP,A0,W ;TURN OFF PLAYER 2 SCORE
|
||
ANDI 0FFFDH,A0
|
||
MOVE A0,@SCORETYP,W
|
||
;TAKE AWAY P2 METER
|
||
MOVE @METERP2,A0,L
|
||
MOVI 0FFF0H,A1
|
||
MOVE A1,*A0(OYPOS),W
|
||
DOINTRO:
|
||
; MOVB @WNDO,A0
|
||
RETS
|
||
;AH2
|
||
;
|
||
;OUTPUT PLAYER STANDBY MESSAGE
|
||
;
|
||
; MOVK PLAYER1M,A3
|
||
; CMPI P1DATA,A11
|
||
; JREQ PRESSBMA
|
||
; MOVK PLAYER2M,A3
|
||
;PRESSBMA:
|
||
; CALLA PUTMSG ;"PLAYER X"
|
||
; MOVK STANDBYM,A3 ;"STANDBY"
|
||
; CALLA PUTMSG
|
||
; RETS
|
||
|
||
;
|
||
; OUTPUT "INSERT COIN" ON TOP HALF
|
||
;
|
||
INSCONT:
|
||
MOVE A11,A2
|
||
CLR A3 ;"INSERT COIN"
|
||
CALLA PUTMSG
|
||
;
|
||
; START OF NEXT MESSAGE
|
||
;
|
||
NEXT1:
|
||
;
|
||
; OUTPUT "TO CONTINUE" OR "TO PLAY" ON THE BOTTOM HALF
|
||
;
|
||
MOVB *A11(CNTD),A0
|
||
JRNZ CB2
|
||
MOVE A11,A2
|
||
JRUC TOPLAY
|
||
|
||
; MOVE *A11(PSCORE),A0,L
|
||
; JRZ TOPLAY ;NO SCORE, THIS IS A NEW START
|
||
; MOVE @GAMSTATE,A0,W
|
||
; CMPI INGAMEOV,A0
|
||
; JREQ TOPLAY
|
||
; CMPI INAMODE,A0
|
||
; JREQ TOPLAY
|
||
CB2 MOVK CONTMSG,A3 ;"TO CONTINUE"
|
||
CALLA PUTMSG
|
||
JRUC NEXT2
|
||
TOPLAY:
|
||
MOVK PLAYMSG,A3 ;"TO PLAY"
|
||
CALLA PUTMSG
|
||
NEXT2:
|
||
MOVI MSGSLP2,A9 ;CHECK IF COIN DROP STATUS HAS CHANGED
|
||
CRDLUP:
|
||
CALLA CCCC ;MAKE SURE THINGS ARE IN TACT
|
||
CALLA GET_CREDITS ;GET CURRENT CREDITS
|
||
MOVE @OLDCRD,A1
|
||
CMP A0,A1
|
||
JRNZ RE_PLOT
|
||
SLEEP 4 ;1
|
||
DSJS A9,CRDLUP
|
||
JRUC PRESSLP
|
||
RE_PLOT:
|
||
MOVI CLSNEUT|TYPTEXT|SUBP2TXT,A0
|
||
CMPI P2DATA,A11
|
||
JRZ KIP1
|
||
MOVI CLSNEUT|TYPTEXT|SUBP1TXT,A0
|
||
KIP1:
|
||
CLR A1
|
||
NOT A1
|
||
CALLA KILOBJ
|
||
JRUC DO_MSGS
|
||
;
|
||
; FSCORE - TRANSFER BOTH PLAYERS SCORE TO FORGROUND OBJECTS AND DISPLAY THEM
|
||
; IN PLACE OF DIRECT-DMA OBJECTS
|
||
; PARAMS:
|
||
; BSCORE SET = TEXT OFFSET ADDED, WORLD COORDINATES IGNORED
|
||
; BSCORE CLR = TEXT OFFSET IGNORED, SET TO WORLD COORDINATES
|
||
FSCORE:
|
||
;
|
||
MOVI P1DATA,A9 ;TRANSFER PLAYER 1 SCORE
|
||
CALLA TSCORE
|
||
MOVI P2DATA,A9 ;TRANSFER PLAYER 2 SCORE
|
||
|
||
TSCORE:
|
||
MOVK 8,A11 ;DIGIT COUNT
|
||
MOVE *A9(PSCRAD),A0,L ;PLAYER SCORE ADDRESS
|
||
MOVE *A9(PSCORE),A9,L ;PLAYER SCORE IN BCD FORM
|
||
MOVE @BSCORE,A2
|
||
JRZ PUTSCL
|
||
MOVE @WAVEYX,A1,L
|
||
ADD A1,A0 ;POSSIBLE OFFSET
|
||
PUTSCL:
|
||
MMTM SP,A0
|
||
MOVE A9,A10
|
||
SRL 28,A10 ;NEXT DIGIT VALUE INTO LOWEST 4 BITS
|
||
SLL 7,A10 ;*128 (NEXT HEADER PLEASE!!)
|
||
ADDI AFONT0,A10 ;BASE ADDRESS OF IMAGE HEADER
|
||
CLR A1
|
||
MOVY A0,A1 ;Y VAL
|
||
SLL 16,A0 ;X VAL
|
||
MOVI 50,A3 ;Z POS.
|
||
MOVI DMAWNZ|M_NOCOLL,A4 ;FLAGS
|
||
MOVI CLSNEUT|TYPTEXT|SUBSCOR,A5 ;OBJ. ID
|
||
CLR A6 ;X VEL
|
||
CLR A7 ;Y VEL
|
||
MOVE @BSCORE,A2
|
||
JRNZ NADJST
|
||
MOVE A10,A2 ;IMG
|
||
CALLA BEGINOBJ ;CREATE OBJECT, WORLD ADJUSTED
|
||
JRUC DADJST
|
||
NADJST:
|
||
MOVE A10,A2 ;IMG
|
||
CALLA BEGINOBJ2 ;CREATE OBJECT,WORLD UNADJUSTED
|
||
DADJST:
|
||
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
|
||
|
||
;
|
||
; DELSCORE - DELETE FGND OBJECTS USED AS TEMPORARY SCORES
|
||
; IN PLACE OF DIRECT-DMA OBJECTS
|
||
DELSCORE:
|
||
MOVI CLSNEUT|TYPTEXT|SUBSCOR,A0
|
||
CLR A1
|
||
NOT A1
|
||
JAUC KILOBJ
|
||
;
|
||
PUTMSG:
|
||
;A3=MSG #
|
||
;A11=PLAYER INDEX
|
||
CMPI P1DATA,A11
|
||
JRNZ GP2 ;BR=PLAYER 2 IS BEING UPDATED
|
||
CLR A4 ;OFFSET FOR BASE X POSITION
|
||
MOVI CLSNEUT|TYPTEXT|SUBP1TXT,A5
|
||
JRUC SETPUS
|
||
GP2:
|
||
MOVI 0EBH,A4
|
||
MOVI CLSNEUT|TYPTEXT|SUBP2TXT,A5
|
||
SETPUS:
|
||
MOVI MSGIMG,A1
|
||
SLL 5,A3
|
||
ADD A3,A1
|
||
MOVE *A1,A2,L
|
||
SRL 1,A3
|
||
MOVI MSGX,A1
|
||
ADD A3,A1
|
||
MOVE *A1,A0,W
|
||
ADD A4,A0
|
||
SLL 16,A0
|
||
MOVI MSGY,A1
|
||
ADD A3,A1
|
||
MOVE *A1,A1,W
|
||
SLL 16,A1
|
||
CLR A6
|
||
CLR A7 ;NO OBJECT VELOCITIES
|
||
MOVI DMACNZ,A4 ;CONSTANT COLOR NON-ZERO
|
||
MOVE A3,A9
|
||
MOVI DMACNZ,A4 ;CONSTANT COLOR NON-ZERO
|
||
CALLA BEGINOBJ
|
||
MOVI >3B3B0000,A0 ;COLOR NUMBER
|
||
MOVB *A11(CNTD),A1
|
||
JRNZ HH
|
||
CMPI 16*5,A9
|
||
JRLT GJ
|
||
HH MOVI >3E3E0000,A0 ;COLOR NUMBER TO CYCLE
|
||
GJ
|
||
MOVE A0,*A8(OPAL),L
|
||
P2SETX:
|
||
RETS
|
||
MSGIMG:
|
||
.LONG incoin,pstrt1,pstrt2,tocont,toplay,plyr1,plyr2,stndby
|
||
MSGX:
|
||
.WORD 038H-7,02FH-7,02FH-7,034H-7,044H-7,03BH-8,03BH-8,03DH
|
||
MSGY:
|
||
.WORD 50+3,50+3,50+3,60+3,60+3,50+3,50+3,60+3
|
||
|
||
|
||
STRT1MSG .EQU 1
|
||
;STRING "PRESS START 1"
|
||
STRT2MSG .EQU 2
|
||
;STRING "PRESS START 2"
|
||
CONTMSG .EQU 3
|
||
;STRING "TO CONTINUE"
|
||
PLAYMSG .EQU 4
|
||
;STRING "TO PLAY"
|
||
.END
|
||
|
||
|
||
|