2447 lines
65 KiB
NASM
2447 lines
65 KiB
NASM
.MLIB "TROGMACS.LIB"
|
||
.FILE 'TROGCOIN.ASM'
|
||
.TITLE "TROG COIN HANDLING ROUTINES"
|
||
.WIDTH 132
|
||
.OPTION B,D,L,T
|
||
.MNOLIST
|
||
|
||
**************************************************************************
|
||
* *
|
||
* COPYRIGHT (C) 1990 MIDWAY MANUFACTURING COMPANY, *
|
||
* MANUFACTURERS OF BALLY/MIDWAY AMUSEMENT GAMES. *
|
||
* ALL RIGHTS RESERVED. *
|
||
* *
|
||
**************************************************************************
|
||
|
||
.INCLUDE "MPROCEQU.ASM" ;MPROC equates
|
||
.INCLUDE "DISPEQU.ASM" ;Display processor equates
|
||
.INCLUDE "GSPINC.ASM" ;GSP assembler equates
|
||
.INCLUDE "SYSINC.ASM" ;Zunit system equates
|
||
.INCLUDE "TROGEQU.ASM"
|
||
.INCLUDE "IMGTBL.GLO"
|
||
.INCLUDE "STRING.H"
|
||
.INCLUDE "TROGSEQU.ASM"
|
||
.INCLUDE "TROGMEQU.ASM"
|
||
.INCLUDE "TROGAUDN.ASM"
|
||
.INCLUDE "TROGDIP.ASM"
|
||
|
||
|
||
.DEF RCOIN,LCOIN,CCOIN,XCOIN, SCOIN,SLAM, COININT, NO_CREDS
|
||
.DEF CR_STRTP, CR_CONTP, P_START, P_CONT, CR_BOTH
|
||
.DEF GET_CSTR, CHECKFREE
|
||
.DEF COINFLAG, TIMEINT, TIMEINIT
|
||
.DEF CAT_A0, STRCAT
|
||
.DEF CRED_P
|
||
.DEF CREDIT_SCREEN
|
||
.DEF CRED_STRING
|
||
.DEF LOGOINIT,COPYRIGHTINIT
|
||
|
||
.REF BAKMODS, BGND_UD1, CREDITBGND
|
||
|
||
.REF DEC_HSR
|
||
.REF DEF_PAGE, SET_PAGE
|
||
.REF RC_BYTE, RC_BYTEI, RC_WORD, RC_WORDI
|
||
.REF WC_BYTE, WC_BYTEI, WC_WORD, WC_WORDI
|
||
.REF ATT_MODE_HSTD
|
||
.REF WIPEOUT, COLOR_START
|
||
.REF P_FORK, ADJ_PAGE
|
||
.REF CHECKDIPFREE, READ_DIP, FORCEDIP
|
||
.REF G_CRED
|
||
.REF GET_CSPT
|
||
.REF AUD1, STORE_AUDIT, GET_AUD
|
||
.IF PRINTER
|
||
.REF PLCOIN,PRCOIN,PSCOIN
|
||
.ENDIF
|
||
|
||
.DEF OCTO_FLAG
|
||
.REF OCTO_PAGE, HSTD_ENTRY_POINT, ON_HSTD
|
||
.REF ON_CRED, CRED_ENTRY_POINT
|
||
**************************************************************************
|
||
* *
|
||
* GLOBAL VARIABLES *
|
||
* *
|
||
**************************************************************************
|
||
|
||
.BSS C_FLAGS,4*32 ;INTERRUPT COIN BOUNCE
|
||
.BSS CTRLEFT,16 ; FOR THE COIN COUNTERS
|
||
.BSS CTRRIGHT,16
|
||
.BSS COINFLAG,16
|
||
.BSS GAMEUNITS,16 ; UNITS USED PER CURRENT GAME
|
||
.BSS TIMECNT,16 ; TIME COUNTER
|
||
.BSS SUBTIMECNT,16 ; YET ANOTHER TIMER COUNTER
|
||
.BSS CTIMEAUD,4*16 ; CREDIT TIME AUDITS
|
||
.BSS OCTO_FLAG,16 ; OCTOPUS FLAG
|
||
.BSS TEXT_BUFF,(8*25)
|
||
|
||
.DEF GAMEUNITS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* COIN EQUATES *
|
||
* *
|
||
**************************************************************************
|
||
|
||
LC_FLAG EQU C_FLAGS
|
||
RC_FLAG EQU C_FLAGS+8
|
||
CC_FLAG EQU RC_FLAG+8
|
||
XC_FLAG EQU CC_FLAG+8
|
||
|
||
RUN_TIME EQU 32 ;2ND LONG WORD COUNTS DOWN LONG TIME
|
||
OPENS_LEFT EQU RUN_TIME+32 ;3RD LONG WORD COUNTS DOWN CONSEC OPENS
|
||
|
||
PULSE_MAX EQU 700/16 ;FRAMES TILL ITS TOO LINE.
|
||
MIN_OPENS EQU 4
|
||
ACC_LIMIT EQU 80H ;AFTER 2 SECONDS OF NO-REPLY....RE-SET FLAG!
|
||
COIN_SBIT EQU 0
|
||
COIN_SUCC_BIT EQU 1
|
||
COIN_FAIL_BIT EQU 2
|
||
COIN_ACK_BIT EQU 3
|
||
|
||
COIN_SFLAG EQU 1
|
||
COIN_SUCC_VAL EQU 2
|
||
COIN_FAIL_VAL EQU 4
|
||
COIN_ACK_VAL EQU 8
|
||
|
||
COINENABLE EQU 0000H ; CURRENTLY BACKWARDS!
|
||
COINDISABLE EQU 0100H ; HA!
|
||
LEFTCOIN EQU 0100H ; LEFT COIN MASK
|
||
RIGHTCOIN EQU 0200H ; RIGHT COIN MASK
|
||
|
||
**************************************************************************
|
||
* *
|
||
* COIN ROUTINES *
|
||
* *
|
||
**************************************************************************
|
||
|
||
.TEXT
|
||
.EVEN
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CLICKLEFT *
|
||
* *
|
||
* CLICK THE LEFT COIN COUNTER *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
CLICKLEFT:
|
||
MMTM SP,A0,A1,A7
|
||
SINGLECLICK
|
||
MOVE @CTRLEFT,A0,W
|
||
INC A0
|
||
MOVE A0,@CTRLEFT,W
|
||
CALLR COINCTR_P ; CHECK TO SEE IF PROCESS EXISTS
|
||
JRNE CLRET
|
||
CREATE COINCTR_PID,COINCOUNTER
|
||
CLRET
|
||
MMFM SP,A0,A1,A7
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CLICKRIGHT *
|
||
* *
|
||
* CLICK THE RIGHT COIN COUNTER *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
CLICKRIGHT:
|
||
MMTM SP,A0,A1,A7
|
||
CALLA READ_DIP
|
||
ANDI DPCOUNTER,A0 ; CHECK FOR DUAL COUNTERS
|
||
JRZ SINGLECLICK ; COMBINED COUNTER
|
||
MOVE @CTRRIGHT,A0,W
|
||
INC A0
|
||
MOVE A0,@CTRRIGHT,W
|
||
CALLR COINCTR_P ; CHECK TO SEE IF PROCESS EXISTS
|
||
JRNE CRRET
|
||
CREATE COINCTR_PID,COINCOUNTER
|
||
CRRET
|
||
MMFM SP,A0,A1,A7
|
||
RETS
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* COINCOUNTER *
|
||
* *
|
||
* PROCESS THAT DEALS WITH THE COIN COUNTER *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
COINCOUNTER
|
||
CLR A8
|
||
MOVE @CTRLEFT,A1,W
|
||
JRZ CC1
|
||
MOVI LEFTCOIN,A8
|
||
DEC A1
|
||
MOVE A1,@CTRLEFT,W
|
||
CC1
|
||
MOVE @CTRRIGHT,A1,W
|
||
JRZ CC2
|
||
ORI RIGHTCOIN,A8
|
||
DEC A1
|
||
MOVE A1,@CTRRIGHT,W
|
||
CC2
|
||
MOVE A8,A8
|
||
JRZ CCDIE ; BOTH WERE EMPTY
|
||
;
|
||
CALLA READ_DIP
|
||
ANDI DPCOUNTER,A0
|
||
JRNZ CC3
|
||
ORI RIGHTCOIN,A8
|
||
ORI LEFTCOIN,A8 ; MAKE SURE BOTH TRIGGER
|
||
CC3
|
||
PUSHST
|
||
DINT ; DON'T FUCK WITH ME
|
||
; MOVE @SYSCOPY,A1,W
|
||
; ANDI 00FFH,A1
|
||
; ORI COINENABLE,A1 ; GET THE COIN ENABLE THING
|
||
MOVI COINENABLE,A1
|
||
MOVE A1,@SECCHIP,W ; TRIGGER ENABLE
|
||
; MOVE A1,@SYSCTRL,W ; TRIGGER ENABLE
|
||
ANDI 00FFH,A1
|
||
OR A8,A1 ; SET THE COUNTER TRIGGER BITS
|
||
; MOVE A1,@SYSCTRL,W
|
||
MOVE A1,@SECCHIP,W
|
||
POPST ; LET PEOPLE INTERRUPT ME
|
||
SLEEP 7 ; THIS SUCKS, BUT CARY LIKES IT
|
||
PUSHST
|
||
DINT
|
||
; MOVE @SYSCOPY,A1,W
|
||
; ANDI 00FFH,A1
|
||
; ORI COINENABLE,A1 ; GET THE COIN ENABLE THING
|
||
MOVI COINENABLE,A1
|
||
MOVE A1,@SECCHIP,W
|
||
; MOVE A1,@SYSCTRL,W ; TRIGGER ENABLE
|
||
ANDI 00FFH,A1
|
||
; MOVE A1,@SYSCTRL,W
|
||
MOVE A1,@SECCHIP,W
|
||
POPST
|
||
SLEEP 7 ; GIVE THEM TIME TO BE OFF
|
||
JRUC COINCOUNTER
|
||
CCDIE
|
||
DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* COINCTR_P *
|
||
* *
|
||
* IS THERE A COIN COUNTER PROCESS RUNNING *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* .EQ. NO *
|
||
* .NE. YES *
|
||
* *
|
||
**************************************************************************
|
||
|
||
COINCTR_P
|
||
MOVI COINCTR_PID,A0 ; COIN COUNTER PROCESS
|
||
MOVI 0FFFFH,A1
|
||
CALLA EXISTP
|
||
RETS
|
||
|
||
|
||
CREDIT_JUMP
|
||
JSRP CREDIT_SCREEN
|
||
JAUC ATT_MODE_HSTD
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CREDIT_SCREEN *
|
||
* *
|
||
* PLOT THE APPROPRIATE CREDIT SCREEN -- DESTROY ANYTHING THAT *
|
||
* HAPPENS TO BE AROUND AT THE TIME *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
CREDIT_SCREEN:
|
||
CLR A0
|
||
MOVI 08000h,A1
|
||
CALLA KILALL ;KILL ALL BUT THE INDESTRUCTIBLES
|
||
CALLA COLOR_START
|
||
MOVE @COINFLAG,A0,W ; CHECK TO SEE WHICH PAGE WE ARE
|
||
JRNZ CS1
|
||
CALLA WIPEOUT ; LATER, DUDES!
|
||
DISPON
|
||
MOVE @COINFLAG,A0,W ; CHECK TO SEE WHICH PAGE WE ARE
|
||
JRNZ CS1
|
||
CALLA CLR_SCRN
|
||
CLR A0
|
||
MOVE A0,@SCRNTL,L ;RE-ADJUST TOP LEFT CORNER OF SCREEN
|
||
MOVE A0,@GAMERASE,W ;AUTO ERASE OFF
|
||
|
||
MOVI CREDITBGND,A14
|
||
MOVE A14,@BAKMODS,L ; SETUP THE BACKGROUND
|
||
CALLA BGND_UD1
|
||
SLEEP 2 ; MAKE SURE IT GETS OUT
|
||
CLR A1
|
||
CALLA KILBOBJ
|
||
|
||
MOVI LOGOINIT,A14
|
||
CALLA MAKE_OBJ
|
||
MOVI COPYRIGHTINIT,A14
|
||
CALLA MAKE_OBJ
|
||
|
||
CS1
|
||
MOVK 1,A0
|
||
MOVE A0,@COINFLAG,W ; FLAG WE ARE ON THE COIN PAGE
|
||
MOVI [68,74],A3
|
||
MOVI [100,250],A4
|
||
CALLA BLNKAREA ; CLEAR OUT INNER AREA
|
||
|
||
MOVI [175,108],A3
|
||
MOVI [40,180],A4
|
||
CALLA BLNKAREA ; CLEAR OUT INNER AREA
|
||
|
||
CALLR OUTPUT_CUSTOM
|
||
|
||
MOVI COIN_MESS,A8
|
||
MOVE A2,A2
|
||
JRNZ CS2
|
||
MOVI COIN_MESS2,A8
|
||
CS2
|
||
CALLA LM_SETUP
|
||
CALLR GET_CSTR ; GET THE CHARACTER STRING
|
||
JSRP PRINTF
|
||
JSRP ADD_PROMPT ; ADD THE RANDOM MESSAGE FLASHER
|
||
SLEEP 300
|
||
CLR A0
|
||
MOVE A0,@COINFLAG,W
|
||
RETP
|
||
|
||
**************************************************************************
|
||
* *
|
||
* OUTPUT_CUSTOM *
|
||
* *
|
||
* OUTPUT THE COINUP MESSAGE. THIS PLOTS ALL THE DIFFERENT *
|
||
* FORMS OF IT.. *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* A2 NUMBER OF LINES PLOTTED *
|
||
* *
|
||
**************************************************************************
|
||
|
||
CM_LINE1 EQU CUSTOM_MESSAGE
|
||
CM_LINE2 EQU CUSTOM_MESSAGE+CMESS_LINE_SIZE
|
||
CM_LINE3 EQU CUSTOM_MESSAGE+(2*CMESS_LINE_SIZE)
|
||
|
||
CM_Y_GAP EQU 20
|
||
CM_Y_ADDGAP EQU [20,200]
|
||
CM_Y1 EQU SKYTOPOF+43
|
||
CM_Y2 EQU SKYTOPOF+33
|
||
CM_Y3 EQU SKYTOPOF+28
|
||
|
||
OUTPUT_CUSTOM
|
||
CLR A2
|
||
CALLR CHECKFREE
|
||
JRNZ OCGO ; BR = FREEPLAY
|
||
|
||
MOVI ADJMAXC,A0
|
||
CALLA GET_ADJ ; MAX CREDITS ALLOWED
|
||
JRZ OCGO ; BR = NO MAX CREDITS
|
||
MOVE A0,A1
|
||
CALLR CRED_P
|
||
JRZ OCGO ; AIN'T GOT NO CREDITS
|
||
CMP A1,A0
|
||
JRLO OCGO ; CREDITS < MAXCREDITS
|
||
MOVI MESS_MAX,A8
|
||
CALLA LM_SETUP
|
||
JSRP PRINTF
|
||
MOVI 1,A2
|
||
JRUC OCRET
|
||
; JRUC OCNOMESS
|
||
OCGO
|
||
CALLA ADJ_PAGE
|
||
MOVI VALID_CUSTOM,A7
|
||
CALLA RC_WORD
|
||
CMPI VALID_VALUE,A0 ; CHECK TO SEE IF MESSAGE IS VALID
|
||
JRNZ OCNOMESS ; BR = NOT VALID
|
||
|
||
CALLR NUM_CLINES ; COMPUTE NUMBER OF DISPLAYABLE LINES
|
||
JRZ OCNOMESS ; NOTHING TO SHOW
|
||
MOVK 1,A2
|
||
SLL 4,A0
|
||
ADDI CM_YTAB,A0
|
||
MOVE *A0,A9,W
|
||
|
||
MOVI CM_LINE1,A10
|
||
CALLR CK_LINE ; LOAD IT UP, BABY!
|
||
JRZ OC1
|
||
CALLR CPLOTLINE
|
||
OC1
|
||
MOVI CM_LINE2,A10
|
||
CALLR CK_LINE
|
||
JRZ OC2
|
||
CALLR CPLOTLINE
|
||
OC2
|
||
MOVI CM_LINE3,A10
|
||
CALLR CK_LINE
|
||
JRZ OC3
|
||
CALLR CPLOTLINE
|
||
OC3
|
||
JRUC OCRET
|
||
OCNOMESS
|
||
.IF DEBUG
|
||
.ELSE
|
||
CALLR PLOTCOINAGE
|
||
.ENDIF
|
||
OCRET
|
||
RETS
|
||
|
||
CM_YTAB .WORD 0,CM_Y1, CM_Y2, CM_Y3, CM_Y3
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CPLOTLINE *
|
||
* *
|
||
* PLOT THE LINE IN PDATA OUT ON THE SCREEN *
|
||
* *
|
||
* ENTRY *
|
||
* A9 Y LOCATION TO PLOT AT *
|
||
* *
|
||
* EXIT *
|
||
* A9 NEW Y LOCATION *
|
||
* *
|
||
**************************************************************************
|
||
|
||
CPLOTLINE:
|
||
PUSH A9
|
||
PUSH A9
|
||
MOVI CUSTOM_SETUP,A8
|
||
CALLA LM_SETUP
|
||
; MOVE A13,A8
|
||
; ADDI PDATA,A8
|
||
MOVI TEXT_BUFF,A8
|
||
PULL A9
|
||
SLL 16,A9
|
||
ADDI 200,A9
|
||
JSRP PRINTF
|
||
PULL A9
|
||
ADDI CM_Y_GAP,A9
|
||
RETS
|
||
|
||
CUSTOM_SETUP:
|
||
MESS_MAC RD15FONT,SPACING20,196,0,TROG_PRGB,STRCNRM,0
|
||
|
||
MESS_MAX:
|
||
MESS_MAC RD20FONT,SPACING20,200,CM_Y2-4,TROG_PLF,STRCNRM,0
|
||
.STRING "MAXIMUM"
|
||
.STRING "\nCREDITS!",0
|
||
.EVEN
|
||
|
||
COPYRIGHTINIT:
|
||
.LONG [78,0],[247,0]
|
||
.WORD 0,0
|
||
.LONG COPY,0,DUMCOLL
|
||
.WORD DMAWNZ,JUNKOID
|
||
|
||
LOGOINIT:
|
||
.LONG [152,0],[0,0]
|
||
.WORD 0,0
|
||
.LONG LITTLELOG,0,DUMCOLL
|
||
.WORD DMAWNZ,JUNKOID
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* NUM_CLINES *
|
||
* *
|
||
* COMPUTE THE NUMBER OF DISPLAYABLE LINES IN CUSTOM RAM *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* A0 NUMBER OF LINES *
|
||
* *
|
||
**************************************************************************
|
||
|
||
NUM_CLINES
|
||
MMTM SP,A1,A10
|
||
CLR A1
|
||
MOVI CM_LINE1,A10
|
||
CALLR CK_LINE
|
||
JRZ NC2
|
||
INC A1
|
||
NC2
|
||
MOVI CM_LINE2,A10
|
||
CALLR CK_LINE
|
||
JRZ NC3
|
||
INC A1
|
||
NC3
|
||
MOVI CM_LINE3,A10
|
||
CALLR CK_LINE
|
||
JRZ NC4
|
||
INC A1
|
||
NC4
|
||
MOVE A1,A0
|
||
MMFM SP,A1,A10
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CK_LINE *
|
||
* *
|
||
* COPY A LINE INTO PDATA AREA, AND RETURN IN A0 NUMBER OF CHARS *
|
||
* *
|
||
* ENTRY *
|
||
* A10 POINTER TO CMOS LOC OF LINE *
|
||
* *
|
||
* EXIT *
|
||
* A0 NUMBER OF VALID CHARS IN LINE *
|
||
* *
|
||
**************************************************************************
|
||
|
||
CK_LINE:
|
||
MMTM SP,A1,A2,A3,A4,A7,A10
|
||
MOVE A10,A7 ;INPUT POINTER TO CMOS
|
||
; MOVE A13,A2 ;OUR PDATA AREA
|
||
; ADDI PDATA,A2 ;A10 IS DESTINATION.
|
||
MOVI TEXT_BUFF,A2
|
||
|
||
MOVI CMESS_CHARS,A1 ;COUNTER
|
||
CALLA ADJ_PAGE ;POINT THE PAGE
|
||
CLR A3 ; ONLY SPACES SO FAR
|
||
|
||
CK_LOOP CALLA RC_BYTEI ;FETCH A BYTE
|
||
MOVB A0,*A2 ;STORE
|
||
MOVE A0,A0
|
||
JRZ CKLX ; END OF STRING
|
||
CMPI 20H,A0 ; CHECK FOR NON-SPACES
|
||
JRZ CKGO
|
||
INC A3
|
||
CKGO
|
||
ADDI BYTE_SIZE,A2
|
||
DSJS A1,CK_LOOP
|
||
CLR A0
|
||
MOVE A0,*A2,W ; MAKE SURE OF THINGS
|
||
CKLX
|
||
CALLA DEF_PAGE ;POINT AWAY NOW
|
||
MOVE A3,A3 ; HOW MANY "REAL" CHARACTERS
|
||
MMFM SP,A1,A2,A3,A4,A7,A10
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PLOTCOINAGE *
|
||
* *
|
||
* PLOT OUT THE CURRENT COINAGE ON THE SCREEN *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
PLOTCOINAGE:
|
||
MMTM SP,A0,A1,A6
|
||
CLR A2
|
||
MOVI ADJFREPL,A0
|
||
CALLA GET_ADJ
|
||
JRNZ PCNOHEAD
|
||
MOVI ADJMAXC,A0
|
||
CALLA GET_ADJ ; MAX CREDITS ALLOWED
|
||
JRZ PC1 ; BR = NO MAX CREDITS
|
||
MOVE A0,A1
|
||
CALLR CRED_P
|
||
JRZ PC1 ; AIN'T GOT NO CREDITS
|
||
CMP A1,A0
|
||
JRHS PCNOHEAD
|
||
PC1
|
||
MOVI ADJPRICE,A0
|
||
CALLA GET_ADJ ; GET THE CURRENT PRICING
|
||
CALLA GET_CSPT
|
||
MOVE *A6(CS_LIST),A2,L
|
||
JRZ PCNOHEAD ; NO HEADER, BELIEVE IT OR NOT
|
||
MOVI PCSETUP,A8
|
||
CALLA LM_SETUP
|
||
MMTM SP,A0,A1,A2
|
||
CLR A0
|
||
PC2
|
||
MOVE *A2+,A1,L ; COUNT UP NUMBER OF MESSAGES
|
||
JRZ PC3
|
||
INC A0
|
||
JRUC PC2
|
||
PC3
|
||
SLL 4,A0
|
||
ADDI CM_YTAB,A0
|
||
MOVE *A0,A9,W
|
||
SLL 16,A9
|
||
*** ADDI 200,A9
|
||
ADDI 190,A9
|
||
MMFM SP,A0,A1,A2
|
||
PCNEXTHEAD
|
||
MOVE *A2+,A8,L ; PICKUP THE NEXT POINTER
|
||
JRZ PCDONE
|
||
JSRP PRINTF
|
||
SRL 16,A9
|
||
SLL 16,A9 ; MASK OFF X ADDRESS
|
||
ADDI CM_Y_ADDGAP,A9
|
||
JRUC PCNEXTHEAD
|
||
PCDONE
|
||
MOVK 1,A2
|
||
JRUC PCRET
|
||
|
||
PCNOHEAD
|
||
CLR A2
|
||
PCRET
|
||
MMFM SP,A0,A1,A6
|
||
RETS
|
||
|
||
PCSETUP
|
||
MESS_MAC RD15FONT,SPACING20,185,CM_Y1,TROG_PRGB,STRCNRM,0
|
||
|
||
;
|
||
; "I love wine. What is this?" -- Inga to Hawkeye -- MASH
|
||
;
|
||
|
||
**************************************************************************
|
||
* *
|
||
* GET_CSTR *
|
||
* *
|
||
* CREATE THE CREDIT STRING AND RETURN IT IN STRNGRAM *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* A8 POINTS TO *STRNGRAM* *
|
||
* *
|
||
**************************************************************************
|
||
|
||
GET_CSTR:
|
||
MMTM SP,A0,A1,A7,A10
|
||
|
||
|
||
CALLR CHECKFREE
|
||
JRZ NOT_FREE
|
||
|
||
MOVI MESS_FREEP,A8 ; FREEPLAY MESSAGE
|
||
JRUC GET_CX
|
||
|
||
NOT_FREE
|
||
.IF 0
|
||
CALLR FORM_COIN_CKSUM ;THIS SETS US TO THE COINAGE PAGE!
|
||
JRZ GCCOOL ;ALL IS OK!
|
||
MOVI GCCMOSBAD,A8
|
||
JRUC GET_CX
|
||
.ENDIF
|
||
GCCOOL
|
||
MOVI STRINGF_RAM,A7 ; TEXT STRING TO BUILD IN
|
||
MOVI MESS_CREDITS,A8 ;POINT AT TEXT PART
|
||
CALLA STRCAT ;BUILD THIS IN.
|
||
CALLR CRED_P
|
||
MOVE A0,A10 ;SAVE CREDITS
|
||
CALLR CAT_A0
|
||
*
|
||
* NOW WE NEED TO SEE IF WE SHOULD ADD A FRACTION.
|
||
*
|
||
MOVI ADJFRAC,A0
|
||
CALLA GET_ADJ ;CHECK THE ADJUSTMENT
|
||
JRZ NSFRAC ;DON'T SHOW IT!
|
||
*
|
||
* ADD ANY FRACTION WE HAVE.
|
||
*
|
||
CALLR COIN_PAG ;PUT US ON COIN PAGE
|
||
CALLR GET_CUNITS ;A0 HAS CUNITS
|
||
CALLR DEF_PAGE ;FLIP CMOS AWAY
|
||
MOVE A0,A0 ;ZERO?
|
||
JRZ NSFRAC ;THEN NO FRACTION.
|
||
*
|
||
* WE HAVE A FRACTION...WERE THE CREDITS ZERO?
|
||
*
|
||
MOVE A10,A10 ; WE SAVED EM IN A10
|
||
JRNZ NZM ; NON ZERO MANTISSA
|
||
|
||
MOVI STRINGF_RAM,A8 ; WALK DOWN STRING LOOKING FOR THE "ZERO"
|
||
KILL_Z MOVB *A8,A1 ; GET A BYTE
|
||
JRZ NZM ; COULDN'T FIND IT....GO ON.
|
||
CMPI LET_0,A1 ; IS THIS THE ZERO?
|
||
JRZ GOT_ZERO
|
||
ADDI BYTE_SIZE,A8
|
||
JRUC KILL_Z
|
||
|
||
GOT_ZERO
|
||
CLR A1
|
||
MOVB A1,*A8 ; KILL THE ZERO
|
||
MOVE A8,A7 ; UPDATE END OF STRING LOCATION
|
||
|
||
NZM MOVI MESS_2SPACE,A8 ; SPACE BET. MANTISSA AND DENMO
|
||
CALLA STRCAT
|
||
|
||
NOT_ZM CALLR CAT_A0 ; ADD A0 ONTO FRACTION
|
||
|
||
MOVI MESS_SLASH,A8
|
||
CALLA STRCAT ; ADD SLASH
|
||
|
||
MOVI ADJCUNIT,A0 ; UNITS REQUIRED FOR CREDIT
|
||
CALLA GET_ADJ
|
||
CALLR CAT_A0 ; DENOMINATOR
|
||
|
||
NSFRAC
|
||
MOVI STRNGRAM,A7 ; STARTING POINTER
|
||
MOVI STRINGF_RAM,A8
|
||
CALLR STRCAT
|
||
MOVI STRNGRAM,A8
|
||
|
||
GET_CX CLRC ;RETURN OK
|
||
GET_CXX
|
||
MMFM SP,A0,A1,A7,A10
|
||
RETS
|
||
|
||
GCCMOSBAD
|
||
.STRING "CMOS BAD",0
|
||
.EVEN
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CAT_A0 *
|
||
* *
|
||
* TURN A0 INTO A DECIMAL NUMBER AND THEN CONCATENATE IT ONTO *
|
||
* THE END OF THE STRING WE ARE BUILDING *
|
||
* *
|
||
* ENTRY *
|
||
* A0 NUMBER FOR THE END OF THE STRING *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
CAT_A0
|
||
MMTM SP,A8
|
||
MOVE A0,A8 ;CREDIT COUNT IN A8
|
||
CALLA HEXTOASC ;STRING
|
||
CALLA STRCAT ;NOW WE HAVE WHOLE NUMBER.
|
||
MMFM SP,A8
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* STRCAT *
|
||
* *
|
||
* CONCATENATE THE STRING POINTED TO BY A8 ONTO A7 STARTING AT *
|
||
* A7. GROSS BUT EFFECTIVE *
|
||
* *
|
||
* ENTRY *
|
||
* A7 STARTING POSITION IN STRING *
|
||
* A8 ZERO-TERMINATED STRING TO STICK ONTO A7 *
|
||
* *
|
||
* EXIT *
|
||
* A7 POINTS AT ZERO TERMINATOR *
|
||
* *
|
||
**************************************************************************
|
||
|
||
STRCAT
|
||
PUSH A0
|
||
STRLOOP
|
||
MOVB *A8,*A7 ; STICK NEXT CHAR IN
|
||
MOVB *A7,A0 ; MOVB SUCKS
|
||
JRZ STRDONE
|
||
ADDI 8,A7
|
||
ADDI 8,A8 ; WOOF WOOF WHO CARES
|
||
JRUC STRLOOP
|
||
STRDONE
|
||
PULL A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* ADD_PROMPT *
|
||
* *
|
||
* THIS IS CALLED ON THE CREDITS PAGE TO ADD A WORD OF *
|
||
* WISDOM BELOW THE CREDITS MESSAGE -- IT PICKS OUT THE *
|
||
* BEST MESSAGES AND BLINKS THEM *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
ADD_PROMPT:
|
||
MOVI PROMPT_PROC,A7
|
||
CALLA P_FORK ;START UP ANOTHER W/ SAME ID TO FLASH!
|
||
RETP
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PROMPT_PROC *
|
||
* *
|
||
* PROCESS TO PICK A GOOD MESSAGE AND SHOW IT *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
PROMPT_PROC:
|
||
CALLR CHECKFREE
|
||
JRNZ PPFREE ; BR = FREEPLAY
|
||
|
||
CALLR CRED_P
|
||
JRZ PPNOCOIN ; BR = NOT ENOUGH TO START 1 PLAYER
|
||
|
||
MOVE A0,A1 ; STORE CREDS IN A1
|
||
MOVI ADJCSTRT,A0 ; CREDITS TO START
|
||
CALLA GET_ADJ
|
||
CMP A0,A1
|
||
JRLO PPNOCOIN ; BR = NOT ENOUGH TO START
|
||
MOVE A0,A2 ; CREDS REQUIRED IN A2
|
||
SUB A2,A1 ; GET US GOING HERE
|
||
MOVK 1,A0 ; HAVE ENOUGH FOR 1 PLAYER
|
||
SUB A2,A1
|
||
JRN PPMESS ; BR = NOT ENOUGH FOR 2
|
||
INC A0
|
||
SUB A2,A1
|
||
JRN PPMESS ; BR = NOT ENOUGH FOR 3
|
||
INC A0
|
||
SUB A2,A1
|
||
JRN PPMESS ; BR = NOT ENOUGH FOR 4
|
||
INC A0
|
||
JRUC PPMESS ; CAN HAVE UP TO 4 PLAYERS
|
||
|
||
PPFREE
|
||
MOVK 4,A0 ; FREEPLAY IS MAX PLAYERS
|
||
;
|
||
; A0 NUMBER OF PLAYERS WE ARE READY FOR ( 0 = NONE )
|
||
;
|
||
PPMESS
|
||
MOVE @NPLAYERS,A1,W ; GRAB GAME NUMBER OF PLAYERS
|
||
INC A1
|
||
CMP A1,A0
|
||
JRLS PPMESS1 ; BR = COOL NUMBER
|
||
MOVE A1,A0 ; SET TO MAXIMUM NUMBER OF PLAYERS
|
||
PPMESS1
|
||
SLL 5,A0
|
||
ADDI PROMPT_TAB,A0
|
||
MOVE *A0,A0,L ; GET APPROPRIATE MESSAGE
|
||
JRZ PPNOCOIN
|
||
PUSH A0
|
||
MOVI PROMPT_SETUP,A8
|
||
CALLA LM_SETUP
|
||
PULL A8 ; PULL OUT THE MESSAGE STRING
|
||
JSRP PRINTF
|
||
MOVK 1,A0
|
||
JRUC BLINKINIT
|
||
PPNOCOIN
|
||
CLR A0
|
||
BLINKINIT
|
||
MOVE A0,*A13(PDATA),W ; FLASH "PRESS START"
|
||
MOVI PROMPT_COLOR,A0
|
||
MOVE A0,*A13(PDATA+10H),L ; COLOR TO FLASH IT IN
|
||
|
||
BLINKLOOP
|
||
MOVI PROMPT_SETUP2,A8
|
||
CALLA LM_SETUP
|
||
MOVE *A13(PDATA+10H),A5,L ; GET THE CURRENT COLOR
|
||
MOVE *A13(PDATA),A8,W ; GET STRING
|
||
SLL 5,A8
|
||
ADDI PROMPT_MESSTAB,A8
|
||
MOVE *A8,A8,L
|
||
JSRP PRINTF
|
||
CMPI PROMPT_COLOR,A5
|
||
JRNZ BL1
|
||
MOVI TROG_PBLACK,A5
|
||
JRUC BL2
|
||
BL1
|
||
MOVI PROMPT_COLOR,A5
|
||
BL2
|
||
MOVE A5,*A13(PDATA+10H),L ; SET NEW COLOR
|
||
SLEEP 10H
|
||
JRUC BLINKLOOP
|
||
|
||
PROMPT_COLOR EQU TROG_PWHITE
|
||
|
||
MESS_SLASH .STRING "/"
|
||
.BYTE 0
|
||
.EVEN
|
||
|
||
MESS_2SPACE .STRING " "
|
||
MESS_NULL .BYTE 0
|
||
.EVEN
|
||
|
||
MESS_CREDITS
|
||
.STRING "CREDIT "
|
||
.BYTE 0
|
||
.EVEN
|
||
|
||
PROMPT_SETUP
|
||
MESS_MAC RD7FONT,SPACING20,196,SKYTOPOF+135,TROG_PYELLOW,STRCNRM,0
|
||
|
||
PROMPT_SETUP2
|
||
MESS_MAC RD15FONT,SPACING20,200,SKYTOPOF+158,TROG_PYELLOW,STRCNRM,0
|
||
|
||
PROMPT_1
|
||
.STRING "READY FOR 1 PLAYER.",0
|
||
.EVEN
|
||
PROMPT_2
|
||
.STRING "READY FOR 1 OR 2 PLAYERS.",0
|
||
.EVEN
|
||
PROMPT_3
|
||
.STRING "READY FOR 1 - 3 PLAYERS.",0
|
||
.EVEN
|
||
PROMPT_4
|
||
.STRING "READY FOR 1 - 4 PLAYERS.",0
|
||
.EVEN
|
||
|
||
PROMPT_TAB
|
||
.LONG 0,PROMPT_1, PROMPT_2, PROMPT_3, PROMPT_4
|
||
|
||
PROMPT_INSCOIN
|
||
.STRING "INSERT COIN.",0
|
||
.EVEN
|
||
PROMPT_PRESSSTART
|
||
.STRING "PRESS START.",0
|
||
.EVEN
|
||
PROMPT_MESSTAB
|
||
.LONG PROMPT_INSCOIN, PROMPT_PRESSSTART
|
||
|
||
*
|
||
* NORMAL CREDITS SETUP STRING
|
||
*
|
||
|
||
.IF 0
|
||
MESS_CNUM
|
||
MESS_MAC RD20FONT,SPACING20,CP_CX,240,TROG_PLF,STRCNRM,0
|
||
|
||
*
|
||
* "LOW" CREDITS SETUP STRING WHEN EXTRA ADVICE ON PRICING
|
||
* IS BEING ADDED.
|
||
*
|
||
|
||
MESS_LOWNUM
|
||
MESS_MAC RD20FONT,SPACING20,CP_CX,118H,TROG_PLF,STRCNRM,0
|
||
.ENDIF
|
||
|
||
MESS_FREEP
|
||
.STRING "FREE PLAY"
|
||
.BYTE 0
|
||
.EVEN
|
||
|
||
.IF 0
|
||
MESS_INS_COIN
|
||
MESS_MAC RD15FONT,SPACING20,CP_CX,335,TROG_PWHITE,STRCNRM,0
|
||
.STRING "INSERT COIN."
|
||
.BYTE 0,0
|
||
.EVEN
|
||
|
||
MESS_PRESS_START
|
||
MESS_MAC RD15FONT,SPACING20,CP_CX,355,TROG_PWHITE,STRCNRM,0
|
||
.STRING "PRESS START"
|
||
.BYTE 0,0
|
||
.EVEN
|
||
.ENDIF
|
||
|
||
COIN_MESS
|
||
MESS_MAC RD20FONT,SPACING20,197,95+SKYTOPOF,TROG_PLF,STRCNRM,0
|
||
.EVEN
|
||
COIN_MESS2
|
||
MESS_MAC RD20FONT,SPACING20,197,CM_Y1+10,TROG_PLF,STRCNRM,0
|
||
.EVEN
|
||
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* COIN UTILITY ROUTINES *
|
||
* *
|
||
**************************************************************************
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CRED_STRING *
|
||
* *
|
||
* RETURN A STRING TO JUST THE NUMBER OF CREDITS IN A8 *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* A8 STRING POINTING TO CREDITS *
|
||
* *
|
||
**************************************************************************
|
||
|
||
CRED_STRING:
|
||
MMTM SP,A0
|
||
CALLR CRED_P ; GET CREDITS IN A0
|
||
MOVE A0,A8
|
||
CALLA HEXTOASC
|
||
MMFM SP,A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CHECKFREE *
|
||
* *
|
||
* CHECK TO SEE IF THE GAME IS IN FREEPLAY STATE *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* NZ = FREEPLAY *
|
||
* Z = NOT IN FREEPLAY *
|
||
* *
|
||
**************************************************************************
|
||
|
||
CHECKFREE:
|
||
.IF FORCEFREE
|
||
MOVK 1,A0
|
||
JRUC CFRET
|
||
.ENDIF
|
||
|
||
MOVI ADJFREPL,A0
|
||
CALLA GET_ADJ
|
||
CFRET
|
||
MOVE A0,A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* SCOIN *
|
||
* *
|
||
* PROCESS CALLED WHEN SERVICE COIN SWITCH TRIGGERED *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
SCOIN:
|
||
.IF PRINTER
|
||
JSRP PSCOIN
|
||
.ENDIF
|
||
|
||
MOVE @GAME_STATE,A0,W ;DIAGNOSTICS?
|
||
CMPI INDIAG,A0
|
||
JREQ CRX ;THEN NO ACTION!
|
||
|
||
MOVI LC_PID,A0 ; ALL 3 SLOTS USE THIS ID NOW
|
||
MOVE A0,*A13(PROCID),W ; SET OUR ID (IN CASE TABLE IS WRONG)
|
||
|
||
CALLR CK_MAX ;ARE WE AT MAXIMUM CREDITS?
|
||
JRHS SCOIN_KURT_BONE ;BR = YES, SKIP THIS KURT BONER
|
||
|
||
MOVI AUDPAIDC,A0
|
||
MOVI -1,A1
|
||
CALLA AUD ; OFFSET FOR SERVICE, GROSS!!
|
||
|
||
SCOIN_KURT_BONE
|
||
MOVI AUDSCOIN,A11
|
||
MOVK 1,A8
|
||
JRUC CGOPROC
|
||
|
||
**************************************************************************
|
||
* *
|
||
* XCOIN *
|
||
* *
|
||
* PROCESS CALLED WHEN FOURTH COIN SWITCH TRIGGERED *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
XCOIN MOVI ADJ4MULT,A8
|
||
MOVI XC_FLAG,A10 ; LEFT COIN FLAG
|
||
MOVI AUD4COIN,A11
|
||
JRUC COIN_ROUTINE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* LCOIN *
|
||
* *
|
||
* PROCESS CALLED WHEN LEFT COIN SWITCH TRIGGERED *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
LCOIN
|
||
.IF PRINTER
|
||
JSRP PLCOIN
|
||
.ENDIF
|
||
MOVI ADJLMULT,A8
|
||
MOVI LC_FLAG,A10 ; LEFT COIN FLAG
|
||
MOVI AUDLCOIN,A11
|
||
JRUC COIN_ROUTINE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CCOIN *
|
||
* *
|
||
* PROCESS CALLED WHEN CENTER COIN SWITCH TRIGGERED *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
CCOIN MOVI ADJCMULT,A8
|
||
MOVI CC_FLAG,A10 ; CENTER COIN FLAG
|
||
MOVI AUDCCOIN,A11
|
||
JRUC COIN_ROUTINE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* RCOIN *
|
||
* *
|
||
* PROCESS CALLED WHEN RIGHT COIN SWITCH TRIGGERED *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
RCOIN
|
||
.IF PRINTER
|
||
JSRP PRCOIN
|
||
.ENDIF
|
||
MOVI ADJRMULT,A8
|
||
MOVI RC_FLAG,A10 ; RIGHT COIN FLAG
|
||
MOVI AUDRCOIN,A11
|
||
|
||
; FALL THROUGH
|
||
|
||
**************************************************************************
|
||
* *
|
||
* COIN_ROUTINE *
|
||
* *
|
||
* THIS IS CALLED FROM EACH OF THE COIN SWITCHES WHEN *
|
||
* MADE. IT CONTAINS THE FOLLOWING: *
|
||
* *
|
||
* A8 = MULTIPLIER FOR THAT SWITCH. *
|
||
* A10 = BASE OF RAM POINTERS *
|
||
* A11 = BASE AUDIT NUMBER *
|
||
* *
|
||
**************************************************************************
|
||
|
||
COIN_ROUTINE
|
||
MOVE @GAME_STATE,A0,W ;DIAGNOSTICS?
|
||
CMPI INDIAG,A0
|
||
JREQ CRX ;THEN NO ACTION!
|
||
|
||
MOVE A8,A0 ;MOVE MULTIPLIER ADJUST NUMBER TO A0
|
||
CALLA GET_ADJ ;FETCH IT
|
||
MOVE A0,A8 ;AND BACK TO STATIC REG...ANY THERE?
|
||
JRZ CRX ;NOPE....DON'T WASTE THE TIME!
|
||
|
||
CALLR SLAM_P ;SLAM AROUND?
|
||
JRNZ CRX ;THEN NO ACTION
|
||
|
||
MOVI LC_PID,A0 ;ALL 3 SLOTS USE THIS ID NOW
|
||
MOVE A0,*A13(PROCID),W ;SET OUR ID (IN CASE TABLE IS WRONG)
|
||
|
||
MOVB *A10,A0 ;GET FLAG BYTE
|
||
JRNZ CRX ;SOMEONE ELSE THERE...WE'RE A BOUNCE!
|
||
*
|
||
* OK....THIS IS A NEW POSITIVE EDGE....START THE TIMING
|
||
* WHEELS (A0 HAS A ZERO!)
|
||
*
|
||
MOVI PULSE_MAX,A1 ;MAXIMUM PULSE WIDTH
|
||
MOVB A1,*A10(RUN_TIME) ;COUNT IT DOWN HERE.
|
||
|
||
MOVI MIN_OPENS,A1 ;THIS MANY FRAMES OF OPEN TIL OPEN
|
||
MOVB A1,*A10(OPENS_LEFT)
|
||
|
||
MOVI COIN_SFLAG,A1
|
||
MOVB A1,*A10 ;TELL INTERRUPT TO START!
|
||
|
||
MOVI 100H,A9 ;4 SECONDS MAX
|
||
COIN_LOOP
|
||
SLEEP 1 ;NOW SLEEP TIGHTLY TILL WE GET SUCCESS OR FAIL
|
||
MOVB *A10,A0 ;GET THE FLAGS
|
||
BTST COIN_FAIL_BIT,A0 ;TOO LONG?
|
||
JRZ CK_SUCC
|
||
*
|
||
* WE HAVE FAILURE...ACKNOWLEDGE IT
|
||
*
|
||
ORI COIN_ACK_VAL,A0 ;THIS ACKNOWLEDGES WE SAW IT.
|
||
MOVB A0,*A10 ;PUT IT BACK
|
||
JRUC CRX ;AND GET OUT
|
||
|
||
CK_SUCC
|
||
BTST COIN_SUCC_BIT,A0
|
||
JRNZ COIN_GO ;GOT IT!...CONTINUE!
|
||
|
||
DSJS A9,COIN_LOOP ;TIME OUT FOR SAFETY
|
||
|
||
|
||
.IF DEBUG ; THIS IS A STUPID PLACE TO BE
|
||
JRUC $
|
||
.ENDIF
|
||
|
||
JRUC CRX ;TIMED OUT....JUST DIE!
|
||
|
||
COIN_GO CLR A0
|
||
MOVB A0,*A10 ;CLEAR THE FLAGS BACK OUT!
|
||
|
||
CALLR SLAM_P ;SLAM?
|
||
JRNZ CRX ;THEN WE'RE OUT OF HERE
|
||
*
|
||
* WE SURVIVED 1/2 SECOND WITHOUT A SLAM....ITS TIME TO CASH
|
||
* IN HIS STACHE.
|
||
*
|
||
CMPI LC_FLAG,A10
|
||
JRNZ CGO1
|
||
CALLR CLICKLEFT ; CLICK LEFT COIN COUNTER
|
||
JRUC CGO2
|
||
CGO1
|
||
CMPI RC_FLAG,A10
|
||
JRNZ CGO2
|
||
CALLR CLICKRIGHT ; CLICK RIGHT COIN COUNTER
|
||
CGO2
|
||
*
|
||
CGOPROC
|
||
CALLR CHALK_COIN ;STRIKE UP THE AUDIT(S)
|
||
|
||
MOVE A8,A8 ;NO CUNITS?
|
||
JRZ CRX ;THEN NO MORE WORK TO DO.
|
||
|
||
CALLR ADJUST_CREDITS ;GIVE CREDIT FOR THE MONEY.
|
||
CALLA DEF_PAGE ;POINT PAGE AWAY!
|
||
|
||
|
||
SOUNDON
|
||
SOUND1 COINSND
|
||
|
||
MOVE @GAME_STATE,A0,W ; CHECK FOR ATTRACT MODE
|
||
CMPI INAMODE,A0
|
||
JRNZ CRCALL
|
||
|
||
MOVI INDPID,A0
|
||
MOVE A0,*A13(PROCID),W ; MAKE ME KILLABLE
|
||
; JRUC CREDIT_SCREEN
|
||
JRUC CREDIT_JUMP
|
||
CRCALL
|
||
CALLR GET_CSTR ; GET CREDIT STRING
|
||
CALLA G_CRED ; CALL GEORGE
|
||
CRX
|
||
JAUC SUCIDE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CHALK_COIN *
|
||
* *
|
||
* A11 contains the base audit number. Chalk the audit for *
|
||
* 1 more coin hit there! *
|
||
* *
|
||
* 3 away from the base is the "door-closed" counter *
|
||
* *
|
||
* 3 away from that is the "sub-total". *
|
||
* *
|
||
* 3 away from that is the "door-closed" sub-total. *
|
||
* *
|
||
* *
|
||
**************************************************************************
|
||
|
||
CHALK_COIN:
|
||
MMTM SP,A0
|
||
MOVE A11,A0
|
||
CALLR CHALK_FOR_A0 ;CHALK RELEVANT COUNTERS
|
||
MMFM SP,A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CHALK_FOR_A0 *
|
||
* *
|
||
* THIS IS CALLED TO CHALK THE AUDITS FOR A COIN SWITCH. *
|
||
* A0 HAS THE BASE AUDIT FOR THE COIN SWITCH. *
|
||
* *
|
||
**************************************************************************
|
||
|
||
CHALK_FOR_A0
|
||
MMTM SP,A0
|
||
CALLA AUD1 ;CHALK THE DIRECT AUDIT
|
||
MMFM SP,A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* ADJUST_CREDITS *
|
||
* *
|
||
* TAKES A VALID COIN SWITCH HIT AND COUNTS IT TOWARDS CREDITS *
|
||
* *
|
||
* ENTRY *
|
||
* A8 CHUTE MULTIPLIER *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
ADJUST_CREDITS
|
||
MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11
|
||
CALLR CK_MAX ;ARE WE AT MAXIMUM CREDITS?
|
||
JRHS ADCRXX ;YEP.....DON'T ROCK THE BOAT!
|
||
*
|
||
CALLR CCCC ;VALIDATE THE CURRENT TOTALS (OR CLEAR!)
|
||
|
||
CALLR FETCH_REQ ;GET THE REQUIRED FOR CREDIT, BONUS AND MINIMUM
|
||
*
|
||
* A2 = REQUIRED FOR CREDIT
|
||
* A3 = FOR BONUS
|
||
* A4 = MINIMUM
|
||
*
|
||
CALLR ADD_TO_CUNITS ;ADD TO OUR CUNITS
|
||
MOVE A3,A3 ;BONUS EFFECTIVE?
|
||
JRZ NO_BUNITS ;NOPE....DON'T RUN UP THE COUNTER!
|
||
|
||
CALLR ADD_TO_BUNITS ;ADD TO BONUS UNITS
|
||
|
||
NO_BUNITS
|
||
MOVE A4,A4 ;MINIMUM REQUIRED?
|
||
JRZ NO_MINIMUM ;NOPE.....LEAVE ALONE.
|
||
|
||
MOVI MINUNITS,A7 ;POINT AT MINIMUM
|
||
CALLA RC_WORD ;GET THE AMOUNT ACCUMULATED
|
||
ADD A8,A0 ;ADD AMOUNT RECEIVED
|
||
CALLA WC_WORD ;WRITE THE MINUNITS BACK IN CASE NOT ENOUGH.
|
||
|
||
SUB A4,A0 ;DO WE HAVE ENOUGH TO ACT?
|
||
JRLO ADCRX ;NOPE....NO CREDITS YET!
|
||
|
||
CLR A0 ;CLEAR OUT MINIMUM FOR NEXT SHOT!
|
||
CALLA WC_WORD ;REMOVE ACCUMULATED MINIMUM.
|
||
|
||
NO_MINIMUM
|
||
CLR A6 ;COUNT ACCUMULATED CREDITS IN A6
|
||
CLR A10 ;IN CASE NO BONUS!
|
||
|
||
CLR A8
|
||
MOVI BUNITS,A7
|
||
CALLA RC_WORD ;GET THE NUMBER OF BUNITS
|
||
MOVE A0,A9 ;INTO A9
|
||
|
||
MOVE A3,A3 ;DON'T DIVIDE BY ZERO!
|
||
JRZ NO_BU_BU
|
||
DIVU A3,A8 ;DIVIDE BUNITS BY NUMBER NEEDED FOR BONUS
|
||
|
||
MOVE A9,A0 ;WRITE REMAINDER BACK
|
||
CALLA WC_WORD
|
||
|
||
MOVE A8,A6 ;NUMBER OF BONUS CREDITS EARNED.
|
||
MOVE A8,A10 ;REMEMBER IF ANY BONUS CREDITS WERE EARNED!
|
||
|
||
NO_BU_BU
|
||
CLR A8
|
||
CALLR GET_CUNITS ;READ IN THE CUNITS
|
||
MOVE A0,A9
|
||
|
||
MOVE A2,A2 ;DON'T DIVIDE BY ZERO.
|
||
JRZ NO_CR
|
||
|
||
DIVU A2,A8 ;GET CREDITS!
|
||
MOVE A9,A0 ;REMAINDER IS LEFTOVER CUNITS
|
||
CALLR PUT_CUNITS
|
||
ADD A8,A6 ;A6 HAS WHAT WE'VE WON!
|
||
|
||
NO_CR MOVE A6,A1
|
||
MOVI AUDPAIDC,A0
|
||
CALLA AUD ;CHALK UP THE EARNED CREDITS!
|
||
|
||
CALLR GET_CREDITS
|
||
ADD A6,A0 ;ADD IN THE NEW ONES.
|
||
CALLR PUT_CREDITS ;NOW STORE EM BACK (ENFORCE MAX)
|
||
|
||
MOVE A10,A10 ;WAS THE BONUS EARNED?
|
||
JRZ ADCRX ;NOPE...EXIT!
|
||
*
|
||
* WHEN BONUS EARNED...WE START THE WHOLE SYSTEM OVER!
|
||
*
|
||
CALLR CLEAR_UNITS
|
||
|
||
ADCRX
|
||
CALLR FORM_COIN_CKSUM_AND_STORE
|
||
ADCRXX
|
||
MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PUT_CREDITS *
|
||
* *
|
||
* STORE THE CREDIT COUNT IN A0 TO CMOS -- ENFORCE MAX CREDITS *
|
||
* *
|
||
* ENTRY *
|
||
* A0 CREDIT COUNT *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
PUT_CREDITS
|
||
MMTM SP,A0,A6,A7
|
||
CALLR GET_MAX ;GET MAX CREDS IN A1....BE ON COIN PAGE
|
||
CMP A1,A0 ;SEE HOW WE STACK UP.
|
||
JRLO USE_A0 ;WE'RE LOWER...JUST STORE.
|
||
*
|
||
* WE'RE AT (OR OVER) MAXIMUM CREDITS
|
||
*
|
||
CALLR CLEAR_UNITS ;CLEAR OUT THE UNIT FRACTIONS.
|
||
MOVE A1,A0 ;USE MAXIMUM
|
||
|
||
USE_A0 MOVI CREDITS,A7
|
||
CALLA WC_BYTE ;WRITE THE CREDITS OUT.
|
||
MMFM SP,A0,A6,A7
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* GET_MAX *
|
||
* *
|
||
* GET MAXIMUM CREDITS IN A1 ( LEAVES YOU ON COIN PAGE ) *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* A1 MAXIMUM CREDITS *
|
||
* *
|
||
**************************************************************************
|
||
|
||
GET_MAX
|
||
MMTM SP,A0
|
||
MOVI ADJMAXC,A0
|
||
CALLA GET_ADJ_FOR_COIN ;FETCH MAXIMUM CREDITS (PUT US ON COIN PAGE)
|
||
MOVE A0,A1
|
||
MMFM SP,A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CK_MAX *
|
||
* *
|
||
* CALLED TO SEE IF WE ARE AT MAXIMUM CREDITS *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* .HS. AT MAXIMUM CREDITS *
|
||
* *
|
||
**************************************************************************
|
||
CK_MAX
|
||
MMTM SP,A0,A1
|
||
CALLR GET_MAX ;GET MAXIMUM IN A1
|
||
CALLR CRED_P ;GET CREDITS IN A0 (AND FLIP PAGE AWAY)
|
||
CMP A1,A0 ;JRHS FOR MAXIMUM CREDITS!
|
||
MMFM SP,A0,A1
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CLEAR_UNITS *
|
||
* *
|
||
* CLEAR OUT ANY FRACTIONS OF A UNIT IN CMOS *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
CLEAR_UNITS
|
||
MMTM SP,A0,A7
|
||
CLR A0
|
||
MOVI CUNITS,A7 ;3 CONSECUTIVE WORDS OF CMOS
|
||
CALLA WC_WORDI
|
||
CALLA WC_WORDI
|
||
CALLA WC_WORD
|
||
MMFM SP,A0,A7
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* FETCH_REQ *
|
||
* *
|
||
* SNAG THE NUMBER OF UNITS REQUIRED FOR CREDIT, BONUS AND *
|
||
* MINIMUM *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* A2 REQUIRED FOR CREDITS *
|
||
* A3 REQUIRED FOR BONUS *
|
||
* A4 MINIMUM *
|
||
* *
|
||
**************************************************************************
|
||
|
||
FETCH_REQ
|
||
MMTM SP,A0
|
||
MOVI ADJCUNIT,A0
|
||
CALLA GET_ADJ
|
||
MOVE A0,A2
|
||
|
||
MOVI ADJBUNIT,A0
|
||
CALLA GET_ADJ
|
||
MOVE A0,A3
|
||
|
||
MOVI ADJMUNIT,A0
|
||
CALLR GET_ADJ_FOR_COIN
|
||
MOVE A0,A4
|
||
MMFM SP,A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* GET_ADJ_FOR_COIN *
|
||
* *
|
||
* GET THE PASSED ADJUSTMENT AND PUT BACK ON COIN PAGE *
|
||
* *
|
||
* ENTRY *
|
||
* A0 ADJUSTMENT REQUESTED *
|
||
* *
|
||
* EXIT *
|
||
* A0 ADJUSTMENT VALUE *
|
||
* *
|
||
**************************************************************************
|
||
|
||
GET_ADJ_FOR_COIN:
|
||
CALLA GET_ADJ ; GET THE ADJUSTMENT
|
||
JAUC COIN_PAG ; THEN RE-INSTATE THE COIN PAGE!
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CRED_P *
|
||
* *
|
||
* RETURN NUMBER OF CREDITS IN A0. ALSO CLEARS Z BIT IF *
|
||
* CREDITS EXIST OR IN FREE PLAY *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* A0 NUMBER OF CREDITS *
|
||
* .NZ. CREDITS OR FREEPLAY *
|
||
* *
|
||
**************************************************************************
|
||
|
||
CRED_P:
|
||
CALLR CCCC ; CHECKSUM COIN CREDITS
|
||
|
||
GET_CREDITS
|
||
MMTM SP,A7
|
||
CALLR COIN_PAG ; COIN PAGE
|
||
MOVI CREDITS,A7 ; WANT NUMBER OF CREDITS
|
||
CALLA RC_BYTE ;READ CURRENT CREDITS
|
||
; JRNZ GC1 ;WE GOT SOME!
|
||
|
||
; MOVI ADJFREPL,A0
|
||
; CALLA GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!)
|
||
|
||
GC1 CALLA DEF_PAGE ;FLIP CMOS AWAY
|
||
MMFM SP,A7
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* ADD_TO_CUNITS *
|
||
* *
|
||
* ADD A VALUE TO THE CREDIT UNITS *
|
||
* *
|
||
* ENTRY *
|
||
* A8 NUMBER OF CUNITS TO ADD *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
ADD_TO_CUNITS
|
||
MMTM SP,A0,A7
|
||
CALLR GET_CUNITS
|
||
ADD A8,A0
|
||
CALLR PUT_CUNITS
|
||
MMFM SP,A0,A7
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* GET_CUNITS *
|
||
* *
|
||
* GET THE NUMBER OF CREDIT UNITS HANGING AROUND *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* A0 NUMBER OF CUNITS *
|
||
* *
|
||
**************************************************************************
|
||
|
||
GET_CUNITS
|
||
MMTM SP,A7
|
||
MOVI CUNITS,A7
|
||
CALLA RC_WORD
|
||
MMFM SP,A7
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PUT_CUNITS *
|
||
* *
|
||
* PUT THE NUMBER OF CREDIT UNITS IN A0 OUT TO CMOS *
|
||
* *
|
||
* ENTRY *
|
||
* A0 NUMBER OF CUNITS *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
PUT_CUNITS
|
||
MMTM SP,A7
|
||
MOVI CUNITS,A7
|
||
CALLA WC_WORD
|
||
MMFM SP,A7
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* ADD_TO_BUNITS *
|
||
* *
|
||
* ADD A NUMBER OF BONUS UNITS TO THE BONUS COUNTER *
|
||
* *
|
||
* ENTRY *
|
||
* A8 NUMBER OF BONUS UNITS TO ADD *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
ADD_TO_BUNITS
|
||
MMTM SP,A7,A0
|
||
MOVI BUNITS,A7
|
||
CALLA RC_WORD
|
||
ADD A8,A0
|
||
CALLA WC_WORD
|
||
MMFM SP,A7,A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* FORM_COIN_CKSUM *
|
||
* *
|
||
* THIS ROUTINE IS CALLED TO FORM THE COINS/CREDITS CHECKSUM. *
|
||
* THE CHECKSUM IS RETURNED IN A1 *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* A1 CHECKSUM *
|
||
* .EQ. MATCHES WHAT'S THERE *
|
||
* .NE. IT DON'T MATCH, DUDE *
|
||
* *
|
||
**************************************************************************
|
||
|
||
FORM_COIN_CKSUM:
|
||
MMTM SP,A0,A7,A2
|
||
CALLR COIN_PAG ;MAKE SURE WE'RE ON THE RIGHT PAGE.
|
||
MOVI COIN_CKSUM_START,A7 ;POINT AT FIRST BYTE TO CHECK
|
||
MOVI COIN_CKSUM_BYTES,A2
|
||
CLR A1 ;CLEAR OUT CHECKSUM
|
||
|
||
CN_SUM CALLA RC_BYTEI ;FETCH A BYTE IN A0
|
||
ADD A0,A1 ;ADD TO SUM
|
||
DSJS A2,CN_SUM ;TILL WE HAVE EM ALL
|
||
|
||
NOT A1 ;COMPLEMENT OF COURSE
|
||
ANDI BYTE_MASK,A1 ;AND KEEP THE BYTE
|
||
|
||
MOVI COIN_CKSUM,A7
|
||
CALLA RC_BYTE ;FETCH THE CURRENT CKSUM
|
||
CMP A0,A1 ;COMPARE TO THIS
|
||
MMFM SP,A0,A7,A2
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* FORM_COIN_CKSUM_AND_STORE *
|
||
* *
|
||
* CHECKSUM THE COINS AND THEN STORE IT OUT *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
FORM_COIN_CKSUM_AND_STORE
|
||
MMTM SP,A1,A7,A0
|
||
CALLR FORM_COIN_CKSUM
|
||
MOVI COIN_CKSUM,A7
|
||
MOVE A1,A0
|
||
CALLA WC_BYTE
|
||
MMFM SP,A1,A7,A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CCCC *
|
||
* *
|
||
* CHECK COIN AND CLEAR ON BAD CHECKSUM -- BASICALLY JUST *
|
||
* CHECKS OUT THE COIN CHECKSUMS AND IF THEY ARE WRONG IT *
|
||
* CLEARS THEM OUT *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
CCCC
|
||
MMTM SP,A0,A1,A7,A2
|
||
CALLR FORM_COIN_CKSUM ;THIS SETS US TO THE COINAGE PAGE!
|
||
JRZ CCCCX ;ALL IS OK!
|
||
|
||
MOVI COIN_CKSUM_START,A7 ;POINT AT FIRST BYTE
|
||
MOVI COIN_CKSUM_BYTES,A2 ;NUMBER OF BYTES TO CLEAR
|
||
CLR A0
|
||
|
||
CCCC_LOOP
|
||
CALLA WC_BYTEI ;WRITE A BYTE
|
||
DSJS A2,CCCC_LOOP ;UNTIL THEY'RE DONE!
|
||
|
||
CALLR FORM_COIN_CKSUM_AND_STORE ;NOW MAKE THE CKSUM VALID
|
||
|
||
CCCCX MMFM SP,A0,A1,A7,A2
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* COIN_PAG *
|
||
* *
|
||
* SET THE CURRENT CMOS PAGE TO TO COINS/CREDITS *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
COIN_PAG
|
||
MMTM SP,A1
|
||
MOVI COIN_SELECT,A1 ;THIS IS COIN/CREDITS PAGE
|
||
CALLA SET_PAGE ;SET IT PLEASE
|
||
MMFM SP,A1
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* NO_CREDS *
|
||
* *
|
||
* THIS IS CALLED TO REMOVE CREDITS AND STUFF FROM THE MACHINE *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
NO_CREDS
|
||
MMTM SP,A0,A1,A7
|
||
CALLR FORM_COIN_CKSUM
|
||
MOVI COIN_CKSUM,A7
|
||
MOVE A1,A0
|
||
INC A0 ;MAKE THE CKSUM BAD!
|
||
CALLA WC_BYTE
|
||
MMFM SP,A0,A1,A7
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CR_BOTH *
|
||
* *
|
||
* CHECK TO SEE IF THINGS ARE GOOD FOR A LOT OF STUFF *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* A2 0 = NEITHER *
|
||
* 1 = CAN START *
|
||
* 2 = CAN CONTINUE *
|
||
* 3 = YOU CAN DO ANYTHING YOU WANT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
CR_BOTH:
|
||
MMTM SP,A0,A1
|
||
|
||
.IF FORCEFREE
|
||
MOVK 3,A2
|
||
JRUC CR_BX
|
||
.ENDIF
|
||
|
||
MOVK 3,A2 ; ASSUME FREEPLAY
|
||
|
||
MOVI ADJFREPL,A0
|
||
CALLA GET_ADJ ; ARE WE IN FREE PLAY?
|
||
MOVE A0,A0
|
||
JRNZ CR_BX
|
||
|
||
CLR A2 ; ASSUME NOTHING
|
||
CALLR GET_CREDITS ; GET CURRENT CREDS
|
||
CMPI 1,A0
|
||
JRLO CR_BX
|
||
MOVE A0,A1
|
||
MOVI ADJCSTRT,A0
|
||
CALLA GET_ADJ ; GET START CREDS
|
||
CMP A0,A1
|
||
JRLO CR_B1
|
||
MOVK 1,A2 ; YES, ENOUGH TO START
|
||
CR_B1
|
||
MOVI ADJCCONT,A0
|
||
CALLA GET_ADJ ; GET CONTINUE CREDS
|
||
CMP A0,A1
|
||
JRLO CR_BX
|
||
ORI 2,A2 ; SET SECOND BIT
|
||
|
||
CR_BX MMFM SP,A0,A1
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CR_STRTP *
|
||
* *
|
||
* CHECK TO SEE IF THERE ARE ENOUGH CREDITS TO START *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* .HS. ENOUGH CREDITS TO START *
|
||
* *
|
||
**************************************************************************
|
||
|
||
CR_STRTP:
|
||
MMTM SP,A0,A1
|
||
|
||
.IF FORCEFREE
|
||
MOVK 1,A0
|
||
; MOVE A0,A0
|
||
CMPI 0,A0
|
||
JRUC CR_STX
|
||
.ENDIF
|
||
|
||
MOVI ADJFREPL,A0
|
||
CALLA GET_ADJ ;ARE WE IN FREE PLAY?
|
||
MOVE A0,A0
|
||
JRNZ CR_STX
|
||
|
||
CALLR GET_CREDITS ;GET CURRENT CREDITS
|
||
CMPI 1,A0
|
||
JRLO CR_STX
|
||
MOVE A0,A1
|
||
MOVI ADJCSTRT,A0
|
||
CALLA GET_ADJ ;GET NUMBER NEEDED
|
||
CMP A0,A1 ;DO WE HAVE ENOUGH TO START?
|
||
|
||
CR_STX MMFM SP,A0,A1
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CR_CONTP *
|
||
* *
|
||
* CHECK TO SEE IF THERE ARE ENOUGH CREDITS TO CONTINUE *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* .HS. ENOUGH CREDITS TO START *
|
||
* *
|
||
**************************************************************************
|
||
|
||
CR_CONTP
|
||
MMTM SP,A0,A1
|
||
|
||
.IF FORCEFREE
|
||
MOVK 1,A0
|
||
; MOVE A0,A0
|
||
CMPI 0,A0
|
||
JRUC CR_CTX
|
||
.ENDIF
|
||
|
||
MOVI ADJFREPL,A0
|
||
CALLA GET_ADJ ;ARE WE IN FREE PLAY?
|
||
MOVE A0,A0
|
||
JRNZ CR_CTX
|
||
|
||
CALLR GET_CREDITS ;GET CURRENT CREDITS
|
||
MOVE A0,A1
|
||
CMPI 1,A0
|
||
JRLO CR_STX
|
||
MOVI ADJCCONT,A0
|
||
CALLA GET_ADJ ;GET NUMBER NEEDED
|
||
CMP A0,A1 ;DO WE HAVE ENOUGH TO START?
|
||
|
||
CR_CTX MMFM SP,A0,A1
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* P_START *
|
||
* *
|
||
* PLAYER STARTED -- DEDUCT REQUISITE NUMBER OF CREDITS *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
P_START MMTM SP,A0,A1,A8
|
||
CALLR CRED_P
|
||
MOVE A0,A1
|
||
MOVI ADJCSTRT,A0
|
||
CALLA GET_ADJ ;GET NUMBER NEEDED ( IN A0 )
|
||
ADDRM A0,@GAMEUNITS,W ; CONTINUING COST OF THE GAME
|
||
CALLR REMOVE_CREDITS
|
||
CALLA DEC_HSR ;TAKE 1 FROM HIGH SCORE RESET COUNTER
|
||
CALLR GET_CSTR ; GET CREDIT STRING
|
||
CALLA G_CRED ; CALL GEORGE
|
||
MMFM SP,A0,A1,A8
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* P_CONT *
|
||
* *
|
||
* PLAYER CONTINUED -- DEDUCT REQUISITE NUMBER OF CREDITS *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
P_CONT MMTM SP,A0,A1,A8
|
||
CALLR CRED_P
|
||
MOVE A0,A1
|
||
MOVI ADJCCONT,A0
|
||
CALLA GET_ADJ ;GET NUMBER NEEDED
|
||
ADDRM A0,@GAMEUNITS,W ; CONTINUING COST OF THE GAME
|
||
CALLR REMOVE_CREDITS
|
||
CALLA DEC_HSR ;TAKE 1 FROM HIGH SCORE RESET COUNTER
|
||
CALLR GET_CSTR ; GET CREDIT STRING
|
||
CALLA G_CRED ; CALL GEORGE
|
||
MMFM SP,A0,A1,A8
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* REMOVE_CREDITS *
|
||
* *
|
||
* REMOVE N CREDITS FROM THE MACHINE *
|
||
* *
|
||
* ENTRY *
|
||
* A0 NUMBER OF CREDITS TO REMOVE *
|
||
* A1 NUMBER OF CREDITS ON THE MACHINE *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
REMOVE_CREDITS
|
||
SUB A0,A1 ;REMOVE START AMOUNT FROM WHAT WE HAVE
|
||
JRHS PS1 ;WE'RE OK.
|
||
CLR A1 ;IT WENT NEGATIVE....MAKE ZERO.
|
||
PS1 CALLR COIN_PAG
|
||
MOVI CREDITS,A7
|
||
MOVE A1,A0 ;PUT WHATS LEFT OUT TO WRITE
|
||
CALLA WC_BYTE ;WRITE THE NEW AMOUNT
|
||
CALLR FORM_COIN_CKSUM_AND_STORE
|
||
CALLR DEF_PAGE ;POINT AT DEFAULT PAGE.
|
||
RETS
|
||
|
||
TIMEINIT
|
||
MOVI PTAB,A0
|
||
TILOOP
|
||
MOVE *A0+,A1,L
|
||
JRZ TIDONE
|
||
CLR A2
|
||
MOVE A2,*A1(PTOTTIME),W
|
||
JRUC TILOOP
|
||
TIDONE
|
||
RETS
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* TIMEINT *
|
||
* *
|
||
* TIME INTERRUPT -- CALLED ONCE EVERY TIME THROUGH THE EXEC *
|
||
* LOOP.. *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
MINRES EQU 5 ;MINIMUM TIME RESOLUTION
|
||
ONE_SECOND EQU 55 ;THIS MANY TICKS PER SECOND
|
||
|
||
TIMEINT:
|
||
MMTM SP,A0,A1,A2
|
||
;
|
||
MOVE @SUBTIMECNT,A0,W
|
||
INC A0
|
||
MOVE A0,@SUBTIMECNT,W
|
||
CMPI MINRES,A0
|
||
JRLO TIMECHECK
|
||
TIMESUBTICK
|
||
CLR A0
|
||
MOVE A0,@SUBTIMECNT,W
|
||
;
|
||
; EVERY MINRES TICKS
|
||
;
|
||
MOVI PTAB,A0
|
||
TLOOP
|
||
MOVE *A0+,A1,L
|
||
JRZ TIME_OCTO_CHECK
|
||
MOVE *A1(PDRONEFLG),A2,W
|
||
JRNZ TLOOP ; BR = DRONE PLAYER
|
||
MOVE *A1(PDTHFLAG),A2,W ; CHECK HIS "I DIED" FLAG
|
||
JRZ TL1CK1 ; BR = "I'M NOT DEAD"
|
||
MMTM SP,A0,A1
|
||
MOVE *A1(PLIFETIME),A2,W ; GET THE TIME HE LIVED
|
||
MOVI AUDNUMTL,A0
|
||
CALLA AUD1 ; TL DIVISOR ++
|
||
MOVI AUDAVGTL,A0
|
||
MOVE A2,A1
|
||
CALLA AUD ; TIME += NTIME
|
||
MMFM SP,A0,A1
|
||
CLR A2
|
||
MOVE A2,*A1(PDTHFLAG),W ; WE DON'T THINK OF HIM AS DEAD
|
||
MOVE A2,*A1(PLIFETIME),W ; BORN AGAIN!
|
||
TL1CK1
|
||
MOVE *A1(POBJ),A2,L
|
||
JRNZ TLOOP ; BR = NOT DEAD YET
|
||
MOVE *A1(PTOTTIME),A2,W
|
||
JRZ TLOOP ; BR = NOT BEING COUNTED
|
||
PUSH A0
|
||
CLR A0
|
||
MOVE A0,*A1(PTOTTIME),W ; SO WE DON'T COUNT IT AGAIN
|
||
MOVI AUDNUMTC,A0
|
||
CALLA AUD1 ; TC DIVISOR ++
|
||
MOVI AUDAVGTC,A0
|
||
MOVE A2,A1
|
||
CALLA AUD ; TIME += NTIME
|
||
PULL A0
|
||
JRUC TLOOP
|
||
|
||
TIME_OCTO_CHECK:
|
||
MOVE @GAME_STATE,A0 ; GET THE CURRENT GAME STATE
|
||
CMPI INAMODE,A0
|
||
JRNZ TIMECHECK
|
||
|
||
MOVE @SWITCH,A1,L ; GET SWITCH STATE
|
||
NOT A1
|
||
ANDI 1F1FH,A1 ; STICKS AND BUTTONS ONLY, DUDE
|
||
MOVE @OCTO_FLAG,A0
|
||
JRNZ TIME_OCTO_PART2 ; BR = WORKING ON SECOND PART OF IT
|
||
CMPI 0111H,A1 ; P1 UP, P2 UP, P1 BONE
|
||
JRNZ TIME_OCTO_FAIL
|
||
MOVK 1,A1
|
||
MOVE A1,@OCTO_FLAG,W ; SET THE "WE SAW IT" FLAG
|
||
TIME_OCTO_PART2:
|
||
MOVE @SWITCH,A1,L
|
||
NOT A1
|
||
ANDI 1F1FH,A1
|
||
MOVE A1,A2
|
||
ANDI 0010H,A1 ; CHECK TO SEE IF P1 BONE BUTTON DOWN
|
||
JRNZ TIME_HSTD_CHECK ; YEP, KEEP WAITING
|
||
MOVE A2,A1
|
||
ANDI 0F0FH,A1 ; CHECKING JUST THE STICKS
|
||
CMPI 0804H,A1 ; JOYSTICKS RIGHT? ( P1 LEFT, P2 RT )
|
||
JRNZ TIME_OCTO_FAIL
|
||
TIME_OCTO_LASTBUT
|
||
CMPI 1804H,A2 ; ADD THAT P2 BONE SWITCH IN
|
||
JRNZ TIME_HSTD_CHECK
|
||
CREATE INDPIDW,OCTO_PAGE ; FIRE OFF THE OCTOPUSS PAGE
|
||
TIME_OCTO_FAIL:
|
||
CLR A0
|
||
MOVE A0,@OCTO_FLAG,W
|
||
;
|
||
; CHECK FOR P1 DOWN, P2 DOWN FOR HSTD PAGE
|
||
;
|
||
TIME_HSTD_CHECK:
|
||
MOVE @SWITCH,A1,L ; GET SWITCH STATE
|
||
NOT A1
|
||
ANDI 1F1FH,A1 ; STICKS AND BUTTONS ONLY, DUDE
|
||
CMPI 0202H,A1 ; P1 DOWN, P2 DOWN
|
||
JRNZ TIMECHECK
|
||
MOVE @ON_HSTD,A2,W
|
||
JRNZ TIMECHECK
|
||
ADJUST ADJHSON ; CHECK TO SEE IF HIGHSCORE EXISTS
|
||
JREQ TIMECHECK
|
||
CREATE INDPIDW,HSTD_ENTRY_POINT
|
||
|
||
*THIS STUFF IS DONE EVERY TICK
|
||
TIMECHECK
|
||
MOVE @TIMECNT,A0,W
|
||
MOVE @TIMER,A1,W
|
||
ADD A1,A0
|
||
MOVE A0,@TIMECNT,W
|
||
CMPI ONE_SECOND,A0
|
||
JRLO TIME_REAL_RET
|
||
|
||
*THIS STUFF IS DONE EVERY SECOND
|
||
CLR A0
|
||
MOVE A0,@TIMECNT,W ;RESET TIMER
|
||
|
||
MOVI AUDUPTIME,A0 ; TOTAL GAME POWER ON TIME
|
||
CALLA AUD1
|
||
|
||
MOVI AUDONTIME,A0 ; GAME ON TODAY TIME
|
||
CALLA AUD1
|
||
|
||
MOVE @GAME_STATE,A0 ; GET THE CURRENT GAME STATE
|
||
CMPI INGAME,A0
|
||
JRZ TIMEGAME
|
||
CMPI ININTRO,A0
|
||
JRZ TIMEGAME
|
||
CMPI INGAMEOV,A0
|
||
JRZ TIMEGAME
|
||
CMPI INEPILOG,A0
|
||
JREQ TIMEGAME
|
||
CMPI INPLAY,A0
|
||
JRNZ TIME_REAL_RET
|
||
|
||
TIMEGAME
|
||
MOVI AUDPTIME,A0 ; TOTAL PLAY TIME
|
||
CALLA AUD1
|
||
CLR A2 ; COUNT OF ACTIVE PLAYERS
|
||
MOVI PTAB,A0
|
||
TLOOP2
|
||
MOVE *A0+,A1,L
|
||
JRZ TIMEDONE
|
||
MOVE *A1(PITIME),A3,W ; INITIAL COUNTDOWN TIME
|
||
JRZ TL2BYPASS
|
||
DEC A3 ; DECREMENT TIME, EVEN FOR DRONES
|
||
MOVE A3,*A1(PITIME),W
|
||
TL2BYPASS
|
||
MOVE *A1(PDRONEFLG),A3,W
|
||
JRNZ TLOOP2 ; BR = DRONE PLAYER
|
||
MOVE *A1(POBJ),A3,L
|
||
JRZ TLOOP2 ; BR = NOT ALIVE
|
||
MOVE *A1(PTOTTIME),A3,W ; CREDIT TIME
|
||
INC A3
|
||
MOVE A3,*A1(PTOTTIME),W
|
||
MOVE *A1(PLIFETIME),A3,W ; LIFE TIME
|
||
INC A3
|
||
MOVE A3,*A1(PLIFETIME),W
|
||
INC A2
|
||
JRUC TLOOP2
|
||
|
||
TIMEDONE
|
||
SLL 4,A2
|
||
ADDI TIMETAB,A2
|
||
MOVE *A2,A0,W
|
||
CALLA AUD1 ; ADD FOR RIGHT NUMBER OF PLAYERS
|
||
|
||
TIME_REAL_RET
|
||
MMFM SP,A0,A1,A2
|
||
RETS
|
||
|
||
TIMETAB .WORD 0,AUD1TIME, AUD2TIME,AUD3TIME, AUD4TIME
|
||
PTAB .LONG P1DATA,P2DATA,P3DATA,P4DATA,0
|
||
|
||
**************************************************************************
|
||
* *
|
||
* COININT *
|
||
* *
|
||
* INTERRUPT ROUTINE PROCESSING FOR COINS *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
COININT:
|
||
MOVE @C_FLAGS,A0,L ;ANY FLAGS SET?
|
||
JRZ NO_COIN_WORK ;NOPE!
|
||
|
||
MOVI C_FLAGS,A10 ;WALK THROUGH THE 3 COUNTERS
|
||
MOVI 4,A9
|
||
MOVI L_COIN_BIT,A8 ;THIS IS THE BIT TO CHECK
|
||
*
|
||
* I BELIEVE THAT LC_FLAG IS IN THE LOW BYTE...THEN CC_FLAG...THEN RC_FLAG
|
||
*
|
||
NEXT_SLOT
|
||
MOVE A0,A1 ;GET CURRENT BYTE IN A1
|
||
SRL 8,A0 ;SHIFT DOWN TO NEXT
|
||
ANDI 0FFH,A1 ;JUST HOLD LEFT SWITCH
|
||
JRZ TRY_NEXT ;NOT LEFT
|
||
|
||
BTST COIN_FAIL_BIT,A1 ;FAIL LOOKING FOR OPEN?
|
||
JRZ CHECK_START ;YEP...THAT'S ALL WE NEED DO!
|
||
*
|
||
* WE'RE IN A FAIL CONDITION SEE IF WE CAN CANCEL IT!
|
||
*
|
||
BTST COIN_ACK_BIT,A1 ;HAS IT BEEN ACKNOWLEDGED?
|
||
JRNZ FAIL_ACKED ;YEP.....JUST RUN DOWN THE "OPEN" TIMER
|
||
*
|
||
* HASN'T BEEN ACKNOWLEDGED.....TIME DOWN AND AUTO ACK IF
|
||
* PROCESS IS DEAD! THIS SHOULDN'T HAPPEN, BUT
|
||
* DEADLOCKS ARE UGLY!
|
||
*
|
||
MOVB *A10(RUN_TIME),A3 ;WE'RE RUNNING OUT OF TIME
|
||
DEC A3
|
||
MOVB A3,*A10(RUN_TIME) ;PUT IT BACK!
|
||
JRNZ TRY_TO_OPEN ;NOW CONTINUE TO OPEN THE SWITCH
|
||
*
|
||
* NO ACK IN ALL THIS TIME!
|
||
* PROVIDE THE ACK OURSELVES!
|
||
*
|
||
.IF DEBUG ;THIS IS A FAIL-SAFE...TRAP DURING DEBUG
|
||
JRUC $
|
||
.ENDIF
|
||
|
||
ORI COIN_ACK_VAL,A1 ;ADD IN THE ACK!
|
||
MOVB A1,*A10 ;AND STORE IT BACK!
|
||
*
|
||
* WE HAVE ACK...HAVE WE HAD OUR OPEN?
|
||
*
|
||
FAIL_ACKED
|
||
MOVB *A10(OPENS_LEFT),A3 ;HAVE WE MADE IT?
|
||
JRNZ TRY_TO_OPEN ;NOT YET...KEEP TRYING.
|
||
*
|
||
* WERE OPEN AND HAVE OUR ACK CLEAR OUT THE FLAGS!
|
||
*
|
||
MOVB A3,*A10 ;THIS CLEARS OUT THE FLAG
|
||
JRUC TRY_NEXT ;FLAGS ARE CLEAR...STEP TO NEXT
|
||
|
||
CHECK_START
|
||
BTST COIN_SBIT,A1 ;"START" FLAG?
|
||
JRNZ TIME_START ;YEP......KEEP TIMING
|
||
*
|
||
* HERE BY PROCESS OF ELIMINATION...ITS "SUCC" BIT OR
|
||
* SOMTHING ELSE GOT SET.....SIMPLY TIME IT DOWN
|
||
* IN CASE SOMEONE TRASHED IN ON THIS BYTE
|
||
*
|
||
MOVB *A10(RUN_TIME),A3 ;WE'RE RUNNING OUT OF TIME
|
||
DEC A3
|
||
MOVB A3,*A10(RUN_TIME) ;PUT IT BACK!
|
||
JRNZ TRY_NEXT ;WHEN IT HITS ZERO...WE'LL CLEAR OUT!
|
||
|
||
.IF DEBUG ;THIS IS A FAIL-SAFE...TRAP DURING DEBUG
|
||
JRUC $
|
||
.ENDIF
|
||
|
||
MOVB A3,*A10 ;CLEAR OUT THE FLAGS...PROC IS GONE!
|
||
JRUC TRY_NEXT ;MUST BE SUCCESS...NO ACTION.
|
||
|
||
TIME_START
|
||
MOVB *A10(RUN_TIME),A3 ;WE'RE RUNNING OUT OF TIME
|
||
DEC A3
|
||
MOVB A3,*A10(RUN_TIME) ;PUT IT BACK!
|
||
JRNZ TRY_TO_OPEN ;NOW CONTINUE TO OPEN THE SWITCH
|
||
*
|
||
* THIS ONE TIMED OUT......ITS FAIL FLAG TIME!
|
||
*
|
||
MOVI COIN_FAIL_VAL,A3
|
||
MOVB A3,*A10 ;WE HAVE FAILURE
|
||
|
||
MOVI ACC_LIMIT,A3
|
||
MOVB A3,*A10(RUN_TIME) ;THIS IS TIME LIMIT FOR PROCESS TO ANSWER!
|
||
*
|
||
TRY_TO_OPEN
|
||
CMPI 8,A8
|
||
JRZ TTOFOURTH ; ANOTHER KLUDGE FOR XCOIN
|
||
MOVE @COINS,A2,W ;THE SWITCH HAS 1/2 SECOND TO OPEN
|
||
CMPI 4,A8 ; SPECIAL CHECK FOR CENTER CHUTE
|
||
JRZ TTOCENTER
|
||
AND A8,A2 ;A1 CONTIAINS ZERO FOR CLOSED
|
||
JRZ STILL_CLOSED ;ITS CLOSED...RE-START THE OPEN COUNT
|
||
JRUC TTOGO
|
||
TTOCENTER
|
||
ANDI 80H,A2 ; MASK FOR JAMMA CENTER
|
||
JRZ STILL_CLOSED
|
||
JRUC TTOGO
|
||
TTOFOURTH
|
||
MOVE @SWITCH2,A2,W
|
||
ANDI 20H,A2
|
||
JRZ STILL_CLOSED
|
||
TTOGO
|
||
*
|
||
* ITS OPEN
|
||
*
|
||
MOVB *A10(OPENS_LEFT),A3 ;HAVE WE MADE IT?
|
||
JRZ HIT_ZERO ;WE HAVE A LONG ENOUGH OPEN
|
||
DEC A3
|
||
MOVB A3,*A10(OPENS_LEFT) ;PUT IT BACK
|
||
JRNZ TRY_NEXT ;TRY THE NEXT BYTE
|
||
*
|
||
* WE HIT ZERO....IF "START FLAG" IS ON THEN WE HAVE SUCCESS
|
||
*
|
||
HIT_ZERO BTST COIN_SBIT,A1 ;"START" FLAG?
|
||
JRZ TRY_NEXT ;NOPE....
|
||
|
||
MOVI COIN_SUCC_VAL,A3
|
||
MOVB A3,*A10 ;INDICATE WE MADE IT!
|
||
|
||
MOVI ACC_LIMIT,A3
|
||
MOVB A3,*A10(RUN_TIME) ;THIS IS TIME LIMIT FOR PROCESS TO ANSWER!
|
||
|
||
JRUC TRY_NEXT
|
||
|
||
STILL_CLOSED
|
||
MOVI MIN_OPENS,A1 ;THIS MANY FRAMES OF OPEN TIL OPEN
|
||
MOVB A1,*A10(OPENS_LEFT)
|
||
|
||
TRY_NEXT
|
||
ADDI 8,A10 ;NEXT BYTE
|
||
SLL 1,A8 ;NEXT COIN BIT
|
||
|
||
DSJ A9,NEXT_SLOT
|
||
|
||
NO_COIN_WORK
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* SLAM_P *
|
||
* *
|
||
* IS THERE A SLAM PROCESS RUNNING *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* .EQ. NO *
|
||
* .NE. YES *
|
||
* *
|
||
**************************************************************************
|
||
|
||
SLAM_P MOVI SLAM_PID,A0 ;SLAM PROCESS ACTIVE?
|
||
MOVI 0FFFFH,A1
|
||
CALLA EXISTP
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* SLAM *
|
||
* *
|
||
* PROCESS THAT STARTS UP WHEN WE GET SLAMMED ON *
|
||
* *
|
||
* ENTRY *
|
||
* NOTHING *
|
||
* *
|
||
* EXIT *
|
||
* NOTHING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
SLAM
|
||
MOVI AUDSLAMS,A0
|
||
CALLA AUD1
|
||
MOVI SLAM_PID,A0
|
||
MOVE A0,*A13(PROCID),W ;SET OUR ID TO SLAM
|
||
MOVI 0FFFFH,A1
|
||
CALLA KILALL ;KILL ANY OTHER INCARNATIONS
|
||
SLEEP 40H ;1 SECOND OF COIN IGNORING.
|
||
JAUC SUCIDE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* SOUND(S?) *
|
||
* *
|
||
**************************************************************************
|
||
|
||
COINSND .WORD >F0FE,>30,>8049,0 ;"COIN" SOUND
|
||
|
||
PCOINLEFT
|
||
.STRING "LEFT COIN",0AH,0
|
||
.EVEN
|
||
|
||
PCOINRIGHT
|
||
.STRING "RIGHT COIN",0AH,0
|
||
.EVEN
|
||
|
||
|