3475 lines
74 KiB
NASM
Executable File
3475 lines
74 KiB
NASM
Executable File
**************************************************************
|
||
*
|
||
* Software: LARRY DEMAR and DR. J
|
||
* Initiated: ?
|
||
*
|
||
* Modified: Shawn Liptak, 9/6/91 -SLEEPK (Total carnage)
|
||
* Shawn Liptak, 11/1/91 -Clean up
|
||
* Shawn Liptak, 2/11/91 -Started basketball
|
||
* Shawn Liptak, 11/6/92 -L_TIMER clean up
|
||
* GEORGE PETRO, 1/17/93 -NBA JAM
|
||
*
|
||
* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC.
|
||
*
|
||
*.Last mod - 3/19/93 13:08
|
||
**************************************************************
|
||
.file "audit.asm"
|
||
.title "audits and ajustments handling"
|
||
.width 132
|
||
.option b,d,l,t
|
||
.mnolist
|
||
|
||
|
||
.include "mproc.equ" ;mproc equates
|
||
.include "disp.equ" ;display proc. equates
|
||
.include "sys.equ" ;z unit system equates
|
||
.include "gsp.equ"
|
||
.include "imgtbl.glo"
|
||
.include "game.equ"
|
||
.include "link.equ" ;link equates
|
||
.include "menu.equ" ;menu equates
|
||
.include "audit.equ"
|
||
.include "shawn.hdr" ;Macros
|
||
.include "mac2.asm"
|
||
.include "imgtbl.glo"
|
||
.include "bgndtbl.glo"
|
||
|
||
|
||
|
||
* BAD_AUD - ANYTIME AN AUDIT NUMBER IS FETCHED, IF ITS
|
||
* CHECKSUM IS BAD, THEN BAD_AUD GETS SET TO 1
|
||
* THIS CAUSES "ERROR" IF ANY AUDIT IN A CALCULATION
|
||
* IS CORRUPTED, AND KEEPS A BAD CHECKSUM BAD WHEN
|
||
* AN AUDIT IS CHANGED.
|
||
|
||
.BSS BAD_AUD ,16 ;(BAD_AUD...NOT BAD_DOG!)
|
||
.bss playtimer ,16 ;timer units for game
|
||
.BSS C_FRAC ,16 ;TIME 10 SECONDS TO
|
||
;INDICATE COIN ACTIVITY
|
||
.BSS C_FLAGS ,3*32 ;INTERRUPT COIN BOUNCE
|
||
.BSS COINCNTR ,32 ;MECH COIN COUNTER TIMERS AND COUNTS
|
||
COINCNT1 .EQU COINCNTR
|
||
COINCNT2 .EQU COINCNTR+8
|
||
* TIMERS 1,2:B16-23,B24-B31; COUNTS 1,2 B0-B7;B8-B15
|
||
.BSS OCT_FLG,16 ;!0=Did 1st part
|
||
|
||
|
||
* IN THIS MODULE
|
||
; .def ADD_DUMP
|
||
.def ADJ_PAGE
|
||
.def BAD_AUD
|
||
.def C_FRAC,COINCNTR
|
||
.def C_FLAGS
|
||
.def L_MESS,AUD,AUD1,GET_ADJ
|
||
.def GET_AUD,SLAM_SW,STORE_AUDIT
|
||
.def CAT_A0
|
||
.def CCCC
|
||
.def CK_MAX
|
||
; .def CLRSWPRC
|
||
.def CLR_AUD,FAC_SET
|
||
.def CLR_AUDR
|
||
; .def CLR_SUBS
|
||
.def CMOS_VAL
|
||
.def COIN_PAG
|
||
; .def COINIRQ
|
||
.def CR_STRTP
|
||
.def CR_CONTP
|
||
.def CRD_SCRN
|
||
.def CRED_P
|
||
.def DEF_PAGE
|
||
; .def DUMP_FS
|
||
.def FORM_ADC
|
||
.def F_ADC_S
|
||
.def GET_CREDITS
|
||
.def GET_CSTR
|
||
.def HTOHXASC
|
||
; .def KILL_CRD
|
||
.def L_TIMER
|
||
.def LD_CTAB
|
||
.def LM_SETUP
|
||
.def LM_FINIS
|
||
.def NO_CREDS
|
||
.def P_START
|
||
.def P_CONT
|
||
.def PUT_ADJ
|
||
.def ROM_NAME
|
||
.def STRCAT
|
||
.def UNIT_CLR
|
||
.def WAIT_MUT
|
||
.DEF KILL_AUD
|
||
|
||
.def CCOIN,RCOIN,SERVICE,XCOIN,LCOIN
|
||
|
||
.ref osgemd_ascii,sgmd8_ascii,ogmd10_ascii,lgmd_ascii
|
||
.ref mess_cursx,mess_cursy
|
||
.ref mess_line_spacing
|
||
.ref message_palette
|
||
|
||
.ref print_message,setup_message
|
||
.ref print_string_C,print_string_C2
|
||
.ref dec_to_asc
|
||
.ref copy_string,copy_rom_string
|
||
.ref concat_string,concat_rom_string
|
||
.ref BAKMODS
|
||
.ref KILBGND
|
||
.ref BGND_UD1
|
||
.ref COLRTEMP
|
||
.REF COUNTER_MODE
|
||
|
||
.GLOBAL SYNCHALF,WDOGDIS,GAMSTATE
|
||
|
||
.REF IRQSKYE
|
||
.ref dpageflip_off
|
||
.ref WFLG,BTIME
|
||
.REF PSTATUS,WRLD
|
||
|
||
;sounds
|
||
.ref coin_snd,beep2_snd
|
||
|
||
|
||
* IN HSTD.ASM
|
||
|
||
.REF SET_PAGE
|
||
.REF P_FORK
|
||
.REF DEC_HSR,INIT_HSR
|
||
.REF RC_BYTEI
|
||
.REF RC_BYTE
|
||
.REF RC_WORD
|
||
.REF RC_LONG
|
||
.REF RC_LONGI
|
||
.REF WC_BYTE
|
||
.REF WC_BYTEI
|
||
.REF WC_WORD
|
||
.REF WC_WORDI
|
||
.REF WC_LONG
|
||
.REF WC_LONGI
|
||
|
||
* IN MENU.ASM
|
||
|
||
.REF GET_CSPT
|
||
.REF STR_OBJ
|
||
.REF STR_FREE
|
||
.REF CKPROMPT
|
||
.REF TWO_TS,TWO_TP
|
||
.REF BUILD_ST
|
||
.REF HID_P
|
||
.REF DIAG
|
||
.REF CS_ENTS
|
||
|
||
* IN ROBOATT.ASM
|
||
|
||
.REF WIPEOUT
|
||
|
||
|
||
* IN TEST.ASM
|
||
|
||
; .REF CK_DOOR
|
||
; .REF WT_ADV,WW_ADV
|
||
.REF WAIT_BUT
|
||
.REF FORM_SWS
|
||
.ref opmsg_clr
|
||
|
||
|
||
|
||
* OTHERS
|
||
|
||
.ref TWOPLAYERS ;0 = NO, 1 = YES 2 players
|
||
|
||
; .ref plyr_strtb1,plyr_strtb2
|
||
.ref conttimers
|
||
.ref dirqtimer
|
||
.ref SOUNDSUP
|
||
.ref RD15FONT,RD7FONT,dmaq_wait,STRCNRM
|
||
.ref STRNGRAM,BLNKAREA,STRLNRM,HEXTOASC
|
||
.ref CLR_SCRN
|
||
.ref KILALL
|
||
.ref GETPRC,SUCIDE
|
||
.ref amode_start
|
||
.ref dpageflip
|
||
.ref snd_play1ovr
|
||
.ref update_scorebrd
|
||
*gnp
|
||
.ref TAMPEREDP
|
||
*gnp
|
||
|
||
|
||
|
||
.text
|
||
|
||
**************************************************************************
|
||
*
|
||
* COIN HANDLING
|
||
*
|
||
**************************************************************************
|
||
|
||
**************************************************************************
|
||
*
|
||
* L_TIMER
|
||
*
|
||
* THIS IS CALLED EACH TICK THROUGH THE EXEC LOOP
|
||
* BEFORE TIMER IS CLEARED. IT DOES NOTHING
|
||
* IF THE GAME IS NOT IN PLAY, ELSE IT ADDS
|
||
* THE EXEC TIME TO THE 1 PLAYER OR 2 PLAYER
|
||
* TIMER BASED ON CURRENT NUMBER OF PEOPLE PLAYING.
|
||
*
|
||
**************************************************************************
|
||
FIVE_SEC equ TSEC*5
|
||
|
||
L_TIMER
|
||
move @GAMSTATE,a0
|
||
jrn douptime ;In diagnostics?
|
||
subk INAMODE,a0
|
||
jreq CK_OCTO ;ATTRACT MODE..CHECK OCTOPUS!
|
||
subk INGAMEOV-INAMODE,a0
|
||
jreq douptime
|
||
|
||
move @dirqtimer,a1 ;get elapsed time
|
||
move @playtimer,a0 ;get play timer
|
||
sub a1,a0 ;add elapsed time
|
||
jrgt #not5 ;Under 5 seconds?
|
||
|
||
move @PSTATUS,a2
|
||
jrz audup
|
||
|
||
movi AUD_1PLAYTIME-1,a0
|
||
movk 4,b0
|
||
#plp srl 1,a2
|
||
jrnc #nop
|
||
addk 1,a0 ;+1 plyr
|
||
#nop dsj b0,#plp
|
||
|
||
callr AUD1
|
||
|
||
movi AUD_PLTIME,a0
|
||
callr AUD1
|
||
|
||
audup
|
||
movi AUD_UPTIME,a0
|
||
callr AUD1
|
||
|
||
movi FIVE_SEC,a0
|
||
#not5 move a0,@playtimer
|
||
rets
|
||
|
||
|
||
********************************
|
||
|
||
douptime
|
||
move @dirqtimer,a1 ;get elapsed time
|
||
move @playtimer,a0 ;get play timer
|
||
sub a1,a0 ;add elapsed time
|
||
jrle audup ;Under 5 seconds?
|
||
move a0,@playtimer
|
||
rets
|
||
|
||
#*******************************
|
||
* ITS A-MODE...CHECK OCTOPUS!
|
||
|
||
CK_OCTO
|
||
move @SWITCH,a0
|
||
not a0
|
||
andi >7f7f,a0 ;Get sticks 'n starts
|
||
move @OCT_FLG,a1
|
||
jrgt #p2 ;Got part one?
|
||
|
||
cmpi >7171,a0 ;P1&P2 all buts down & both sticks up
|
||
jrne #x ;Wrong?
|
||
movi TSEC,a1 ;One sec to get part two
|
||
#p2
|
||
subk 1,a1
|
||
move a1,@OCT_FLG
|
||
jrgt #x ;Still counting?
|
||
cmpi >202,a0
|
||
jrne #x ;Wrong?
|
||
|
||
movi ACTIVE,a13
|
||
movi HID_P,a7 ;Start the process!
|
||
movi DIAG_PID,a1
|
||
calla GETPRC
|
||
; movi MAW,A0
|
||
; calla snd_play1
|
||
|
||
#x jruc douptime
|
||
|
||
|
||
;MAW .WORD >F9F7,>50,>814A,0 ;OH MAW
|
||
|
||
|
||
#*******************************
|
||
* Give him a service credit
|
||
|
||
SERVICE
|
||
move @GAMSTATE,a0
|
||
jrn #x ;In diagnostics?
|
||
|
||
callr CCCC ;MAKE SURE THINGS ARE IN TACT
|
||
|
||
movk AUDSERV,a0
|
||
callr AUD1 ;CHALK UP A SERVICE CREDITS!
|
||
|
||
callr getcoin
|
||
|
||
movk 10,a0
|
||
move a0,@BTIME ;Restuff buyin timer
|
||
|
||
callr conttimers_set
|
||
|
||
callr GET_CREDITS
|
||
addk 1,a0 ;Add in the new ones
|
||
callr PUT_CREDITS ;NOW STORE EM BACK (ENFORCE MAX)
|
||
|
||
callr FORM_COIN_CKSUM_AND_STORE
|
||
|
||
calla update_scorebrd ;redraw scoreboard credits message
|
||
|
||
jruc CREDSP
|
||
|
||
#x DIE
|
||
|
||
|
||
********************************
|
||
* THE FOLLOWING COIN ROUTINES ARE PROCESSES!
|
||
|
||
LCOIN MOVK ADJLMULT,A8 ;CMOS RAM ADJUST
|
||
MOVI LC_FLAG,A10 ;LEFT COIN FLAG
|
||
MOVI AUDLCOIN,A11 ;AUDIT NUMBER
|
||
JRUC VALID_COIN
|
||
|
||
CCOIN MOVK ADJCMULT,A8
|
||
MOVI CC_FLAG,A10 ;CENTER COIN FLAG
|
||
MOVI AUDCCOIN,A11
|
||
JRUC VALID_COIN
|
||
|
||
RCOIN MOVK ADJRMULT,A8
|
||
MOVI RC_FLAG,A10 ;RYTE COIN FLAG
|
||
MOVI AUDRCOIN,A11
|
||
JRUC VALID_COIN
|
||
|
||
XCOIN MOVK ADJXMULT,A8
|
||
MOVI XC_FLAG,A10 ;XTRA (FOURTH) COIN FLAG
|
||
MOVI AUDXCOIN,A11
|
||
JRUC VALID_COIN
|
||
;
|
||
; COIN CONTROL EQUATES
|
||
;
|
||
LC_FLAG .EQU C_FLAGS ;UHB LEFT COIN
|
||
RC_FLAG .EQU C_FLAGS+8 ;UHB RGT "
|
||
CC_FLAG .EQU C_FLAGS+16 ;UHB CNTR "
|
||
XC_FLAG .EQU C_FLAGS+24 ;UHB XTRA "
|
||
;
|
||
; VALID_COIN- CHECK THE DURATION OF COIN DROP AND SEES IF IT IS A VALID
|
||
; ENTRY
|
||
;PARAMS REQUIRED:
|
||
; A8 = MULTIPLIER FOR THAT SWITCH.
|
||
; A10 = RAM TIMER/FLAG
|
||
; A11 = BASE AUDIT NUMBER
|
||
|
||
VALID_COIN
|
||
move @GAMSTATE,a0
|
||
jrn CRX ;In diagnostics?
|
||
|
||
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 4 SLOTS USE THIS ID NOW
|
||
MOVE A0,*A13(PROCID) ;SET OUR ID (IN CASE TABLE IS WRONG)
|
||
|
||
; movb *a10,a0 ;get flag byte
|
||
; jrz #fok
|
||
; LOCKUP
|
||
;#fok
|
||
MOVB *A10,A0 ;GET FLAG BYTE
|
||
JRNZ CRX ;SOMEONE ELSE THERE...WE'RE A BOUNCE!
|
||
|
||
;OK....THIS IS A NEW POSITIVE EDGE....START THE DROP TIMING
|
||
|
||
movk 5,a0 ;Wait a few ticks
|
||
movb a0,*a10
|
||
|
||
COIN_LOOP
|
||
SLEEPK 1 ;SLEEP TILL WE GET SUCCESS OR FAIL
|
||
MOVB *A10,A0 ;GET THE TIMER
|
||
JRGT COIN_LOOP
|
||
|
||
CALLR SLAM_P ;SLAM?
|
||
JRNZ CRX ;THEN WE'RE OUT OF HERE
|
||
|
||
; 1/2 SECOND HAS PASSED WITHOUT A SLAM....INDICATE COIN DROP
|
||
|
||
CLR A0
|
||
MOVE A0,@SOUNDSUP ;TURN SOUNDS ON. (A-MODE SOUND SUPRESSOR)
|
||
|
||
callr getcoin
|
||
|
||
MOVK 20,A0
|
||
MOVE A0,@BTIME ;RESTUFF BUYIN TIMER
|
||
callr conttimers_set
|
||
|
||
MOVI 15*40H/8,A0 ;DON'T WIPE ON GAME OVER IF ITS WITHIN
|
||
MOVE A0,@C_FRAC ;15 SECONDS (THIS TIMES OUT TO OVER 20)
|
||
|
||
MOVE A11,A0
|
||
CALLR AUD1 ;CHALK THE DIRECT AUDIT
|
||
|
||
*HIT THE MECHANICAL COIN COUNTERS
|
||
MOVE @COUNTER_MODE,A0,W
|
||
; MOVK ADJCNTR,A0
|
||
; CALLA GET_ADJ
|
||
CMPI 1,A0
|
||
JRNE MECH20
|
||
|
||
*MULTIPLE OF LEAST VALUE COIN MODE
|
||
CALLA GET_CSPT ;POINT TO COIN TABLE A6
|
||
MOVK 4,A1 ;CHECK ALL CHUTES
|
||
ADDI CS_LVAL,A6 ;ADD IN OFFSET TO CHUTE VALUES
|
||
MOVE A6,A5 ;SAVE A6
|
||
CLR A2
|
||
NOT A2
|
||
MECH1L
|
||
MOVE *A5+,A0 ;FIND LOWEST NON-ZERO NUMBER IN LIST
|
||
JRZ MECH_SKIPZ
|
||
CMP A2,A0
|
||
JRHI MECH_SKIPZ
|
||
MOVE A0,A2 ;A NEW LOW!
|
||
MECH_SKIPZ
|
||
DSJS A1,MECH1L
|
||
MOVE A2,A2
|
||
JRZ MECH10 ;SOMETHING ILLEGAL HAPPENED, JUST ONE
|
||
|
||
DEC A11 ;GET YOUR CLICK COUNT
|
||
SLL 4,A11 ;OFFSET FOR CHUTE, WORD CORRECT
|
||
ADD A11,A6
|
||
MOVE *A6,A1 ;GET MONEY VALUE
|
||
JRZ MECH10 ;WIERDNESS, JUST ONE CLICK
|
||
DIVU A2,A1 ;DIVIDE BY LOWEST COMMON DENOMINATOR
|
||
MOVE A1,A2 ;RESULT TO KEEP COMPAT
|
||
MOVI COINCNT1,A1
|
||
JRUC MECH3B
|
||
MECH10
|
||
MOVK 2,A0 ;VALUE OVER 10, JUST GIVE ONE CLICK
|
||
MECH20
|
||
MOVI COINCNT1,A1
|
||
CMPI 2,A0
|
||
JREQ MECH3A ;CLICK COUNTER 1 MODE
|
||
|
||
CMPI AUDLCOIN,A11
|
||
JREQ MECH3A
|
||
CMPI AUDRCOIN,A11
|
||
JRNE MECH4
|
||
ADDK 8,A1
|
||
MECH3A
|
||
MOVK 1,A2
|
||
MECH3B
|
||
DINT
|
||
MOVB *A1,A0
|
||
ADD A2,A0
|
||
MOVB A0,*A1
|
||
EINT
|
||
MECH4
|
||
MOVE A8,A8 ;NO CREDIT UNITS?
|
||
JRZ CRX ;THEN NO MORE WORK TO DO.
|
||
CALLR ADJUST_CREDITS ;GIVE CREDIT FOR THE MONEY.
|
||
CALLR DEF_PAGE ;POINT PAGE AWAY!
|
||
|
||
calla update_scorebrd ;redraw scoreboard credits message
|
||
|
||
|
||
; SET-UP CREDITS MSG IN GAME SCREEN AND INDICATE 'INSERT COIN' IF NOT ENOUGH
|
||
; HAVE BEEN DROPPED
|
||
;
|
||
; CALLA G_MSG ;PLOT MESSAGE FOR GAME PLAY SCREEN
|
||
CREDSP
|
||
; MOVE @GAMSTATE,A0
|
||
; CMPI INAMODE,A0
|
||
; JRNZ NOZERO
|
||
;NOZERO
|
||
MOVE @PSTATUS,A0
|
||
JRNZ CRX
|
||
move @GAMSTATE,a0
|
||
subk INAMODE,a0 ;A DISPLAY IN AMODE ONLY!
|
||
jrne CRX
|
||
|
||
CRY jruc CRD_SCRN ;PUT UP THE CREDITS SCREEN
|
||
|
||
CRX JAUC SUCIDE
|
||
|
||
|
||
********************************
|
||
* Set active continue timers
|
||
* A0=New value
|
||
|
||
conttimers_set
|
||
|
||
PUSH a2,a3
|
||
movi conttimers,a2
|
||
movk 4,a3
|
||
|
||
ctslp move *a2,a1
|
||
jrz cts50 ;None?
|
||
move a0,*a2
|
||
cts50 addk 16,a2
|
||
dsj a3,ctslp
|
||
|
||
PULL a2,a3
|
||
rets
|
||
|
||
|
||
********************************
|
||
* Make all switch process dumdie entries
|
||
|
||
;CLRSWPRC
|
||
; MMTM SP,A0,A1,A3
|
||
;
|
||
; CLR A1 ;USE SWTAB ENTRY 0 FOR DUMDIE PROC
|
||
; MOVE @SWSTACK,A3,L
|
||
;CLRSTKL CMPI SWSTST,A3,L ;STACK AT START?
|
||
; JREQ CLRSTKX ;YES, EXIT
|
||
; MOVE *A3+,A0
|
||
; CMPI 31,A0
|
||
; JRLS CLRSTKL ;THIS ENTRY IS A REAL SWITCH
|
||
; MOVE A1,*A3(-10H) ;STORE THE DUMDIE CALL
|
||
; JRUC CLRSTKL
|
||
;
|
||
;CLRSTKX MMFM SP,A0,A1,A3
|
||
; RETS
|
||
|
||
|
||
********************************
|
||
* CR_STRTP - ARE THERE ENOUGH CREDITS TO START
|
||
* CR_CONTP - ARE THERE ENOUGH CREDITS TO CONTINUE
|
||
* P_START - PLAYER STARTED...DEDUCT CREDITS
|
||
* P_CONT - PLAYER CONTINUED...DEDUCT CREDITS
|
||
* CRED_P - HOW MANY CREDITS
|
||
*
|
||
* JRHS FOR OK TO START!
|
||
|
||
CR_STRTP
|
||
PUSH a0,a1
|
||
MOVK ADJFREPL,A0
|
||
CALLR GET_ADJ ;ARE WE IN FREE PLAY?
|
||
CMPI 1,A0 ;WE ARE IF ITS NOT ZERO.
|
||
JRHS CR_STX
|
||
|
||
CALLR CCCC ;MAKE SURE THINGS ARE IN TACT
|
||
CALLR COIN_PAG
|
||
CALLR GET_CREDITS ;GET CURRENT CREDITS
|
||
MOVE A0,A1
|
||
MOVK ADJCSTRT,A0
|
||
CALLR GET_ADJ ;GET NUMBER NEEDED
|
||
CMP A0,A1 ;DO WE HAVE ENOUGH TO START?
|
||
|
||
CR_STX MMFM SP,A0,A1
|
||
RETS
|
||
|
||
CR_CONTP
|
||
PUSH a0,a1
|
||
MOVK ADJFREPL,A0
|
||
CALLR GET_ADJ ;ARE WE IN FREE PLAY?
|
||
CMPI 1,A0 ;WE ARE IF ITS NOT ZERO.
|
||
JRHS CR_STX1
|
||
|
||
CALLR CCCC ;MAKE SURE THINGS ARE IN TACT
|
||
CALLR COIN_PAG
|
||
CALLR GET_CREDITS ;GET CURRENT CREDITS
|
||
MOVE A0,A1
|
||
MOVK ADJCCONT,A0
|
||
CALLR GET_ADJ ;GET NUMBER NEEDED
|
||
CMP A0,A1 ;DO WE HAVE ENOUGH TO START?
|
||
CR_STX1
|
||
MMFM SP,A0,A1
|
||
RETS
|
||
|
||
P_START
|
||
MMTM SP,A0,A1
|
||
CALLR CRED_P
|
||
MOVE A0,A1
|
||
MOVK ADJCSTRT,A0
|
||
CALLR GET_ADJ ;GET NUMBER NEEDED
|
||
CALLR REMOVE_CREDITS
|
||
CALLA DEC_HSR ;TAKE 1 FROM HIGH SCORE RESET COUNTER
|
||
calla update_scorebrd ;redraw scoreboard credits message
|
||
|
||
movi AUD_TOTSTARTS,a0
|
||
calla AUD1
|
||
|
||
move @GAMSTATE,a0
|
||
subk INAMODE,a0
|
||
jreq #doit
|
||
subk ININTRO-INAMODE,a0
|
||
jrne #nope
|
||
#doit
|
||
movi AUD_PRESTARTS,a0
|
||
calla AUD1
|
||
#nope
|
||
MMFM SP,A0,A1
|
||
RETS
|
||
|
||
P_CONT
|
||
MMTM SP,A0,A1
|
||
CALLR CRED_P
|
||
MOVE A0,A1
|
||
MOVK ADJCCONT,A0
|
||
CALLR GET_ADJ ;GET NUMBER NEEDED
|
||
CALLR REMOVE_CREDITS
|
||
CALLA DEC_HSR ;TAKE 1 FROM HIGH SCORE RESET COUNTER
|
||
MMFM SP,A0,A1
|
||
RETS
|
||
|
||
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
|
||
|
||
**************************************************************************
|
||
*
|
||
* NO_CREDS
|
||
*
|
||
* THIS IS CALLED TO REMOVE CREDITS AND CREDIT FRACTIONS
|
||
* FROM THE MACHINE.
|
||
*
|
||
**************************************************************************
|
||
NO_CREDS
|
||
MMTM SP,A0,A1,A7
|
||
CALLR FORM_COIN_CKSUM ;MAKE THE REAL CKSUM
|
||
MOVI COIN_CKSUM,A7
|
||
MOVE A1,A0
|
||
INC A0 ;MAKE THE CKSUM BAD!
|
||
CALLA WC_BYTE
|
||
MMFM SP,A0,A1,A7
|
||
RETS
|
||
**************************************************************************
|
||
*
|
||
* 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
|
||
;*
|
||
;* READY TO CHALK THE AUDIT......ZERO MEANS "EXTRA SLOT"
|
||
;*
|
||
;
|
||
;CCC01
|
||
; 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
|
||
; CALLR AUD1 ;CHALK THE DIRECT AUDIT
|
||
|
||
; ADDI 2*CHUTES,A0 ;AND THE "SUB-TOTAL"
|
||
; CALLR AUD1
|
||
|
||
; SUBI CHUTES,A0 ;MOVE TO DOOR OPEN TOTAL
|
||
; CALLR AUD1
|
||
;
|
||
; ADDI 2*CHUTES,A0 ;AND DOOR OPEN SUB-TOTAL
|
||
; CALLR AUD1
|
||
|
||
;CKCN1
|
||
; MMFM SP,A0
|
||
; RETS
|
||
|
||
**************************************************************************
|
||
*
|
||
* ADJUST_CREDITS
|
||
*
|
||
* This is the routine that turns the coin switch hit
|
||
* into a tangable (if you could say that) reward.
|
||
*
|
||
* The coin chute multiplier is in A8.
|
||
*
|
||
**************************************************************************
|
||
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 CREDIT COUNT IN A0 TO CMOS....ENFORCING MAXIMUM CREDITS.
|
||
*
|
||
**************************************************************************
|
||
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.
|
||
*
|
||
* THIS LEAVES YOU ON COIN PAGE.
|
||
*
|
||
**************************************************************************
|
||
GET_MAX
|
||
PUSH a0
|
||
MOVK ADJMAXC,A0
|
||
CALLA GET_ADJ_FOR_COIN ;FETCH MAXIMUM CREDITS (PUT US ON COIN PAGE)
|
||
MOVE A0,A1
|
||
MMFM SP,A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
*
|
||
* CK_MAX
|
||
*
|
||
* THIS IS CALLED TO SEE IF WE ARE AT MAXIMUM CREDITS.
|
||
* .HS. MEANS WE ARE 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
|
||
|
||
**************************************************************************
|
||
*
|
||
* UNIT_CLR
|
||
*
|
||
* THIS IS CALLED AT GAME OVER. IT CLEARS
|
||
* OUT ANY COIN FRACTIONS THAT WERE NOT USED BY THE
|
||
* CURRENT PLAYER(S). THIS ALLOWS ALL BUY-IN TO
|
||
* TAKE ADVANTAGE OF MULTIPLE COIN BONUSES.
|
||
*
|
||
* ANYTIME A COIN IS INSERTED, C_FRAC IS SET TO ABOUT
|
||
* 10 SECONDS. MY TIMING INTERFACE COUNTS C_FRAC DOWN
|
||
* TO ZERO. IF C_FRAC IS NON ZERO WHEN THIS ROUTINE IS
|
||
* CALLED, THEN SOMEONE PUT A COIN IN NOT TOO LONG BEFORE
|
||
* GAME OVER. DON'T SCREW HIM OUT OF HIS FRACTIONS.
|
||
*
|
||
**************************************************************************
|
||
UNIT_CLR
|
||
PUSH a0
|
||
MOVE @C_FRAC,A0 ;DO WE GIVE HIM A REPRIEVE?
|
||
JRNZ UC1 ;YEP!
|
||
CALLR CCCC ;VALIDATE COINAGE
|
||
CALLR CLEAR_UNITS ;CLEAR OUT FRACTIONAL UNITS
|
||
CALLR FORM_COIN_CKSUM_AND_STORE ;MAKE ALL GOOD.
|
||
UC1
|
||
MMFM SP,A0
|
||
RETS
|
||
|
||
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
|
||
|
||
* RETURN CREDITS IN A0.........AND Z BIT CLEAR IF
|
||
* CREDITS EXIST OR IN FREE PLAY.
|
||
|
||
CRED_P
|
||
CALLR CCCC ;CHECK TO SEE IF DATA IS OK.
|
||
|
||
GET_CREDITS
|
||
PUSH a7
|
||
CALLR COIN_PAG
|
||
MOVI CREDITS,A7 ;
|
||
CALLA RC_BYTE ;READ CURRENT CREDITS
|
||
JRNZ GC1 ;WE GOT SOME!
|
||
|
||
;PUSH THE ZERO!
|
||
PUSH a0
|
||
MOVK ADJFREPL,A0
|
||
CALLR GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!)
|
||
MMFM SP,A0 ;RESTORE A0
|
||
|
||
GC1 CALLR DEF_PAGE ;FLIP CMOS AWAY
|
||
MMFM SP,A7
|
||
RETS
|
||
|
||
ADD_TO_CUNITS
|
||
MMTM SP,A0,A7
|
||
CALLR GET_CUNITS
|
||
ADD A8,A0
|
||
CALLR PUT_CUNITS
|
||
MMFM SP,A0,A7
|
||
RETS
|
||
|
||
GET_CUNITS
|
||
PUSH a7
|
||
MOVI CUNITS,A7
|
||
CALLA RC_WORD
|
||
MMFM SP,A7
|
||
RETS
|
||
|
||
PUT_CUNITS
|
||
PUSH a7
|
||
MOVI CUNITS,A7
|
||
CALLA WC_WORD
|
||
MMFM SP,A7
|
||
RETS
|
||
|
||
ADD_TO_BUNITS
|
||
MMTM SP,A7,A0
|
||
MOVI BUNITS,A7
|
||
CALLA RC_WORD
|
||
ADD A8,A0
|
||
CALLA WC_WORD
|
||
MMFM SP,A7,A0
|
||
RETS
|
||
|
||
|
||
******************************************************************************
|
||
|
||
CRD_SCRN
|
||
|
||
CLR a10 ;Sleep 7 secs
|
||
|
||
SUBR CRD_SCRN2 ;Entry pnt for shorter sleep
|
||
|
||
MOVI CP_PID1,A0 ;CHANGE TO "CREDIT PAGE" ID 1
|
||
MOVE A0,*A13(PROCID)
|
||
MOVI 0FFFFH,A1 ;CHECK TO SEE IF CREDIT PAGE IS UP
|
||
CALLA EXISTP
|
||
jrnz #exists ;credit page up, so reprint text only
|
||
|
||
; JSRP scrn_scaleininit ;Hide display
|
||
|
||
calla display_blank
|
||
calla WIPEOUT ;CLEAN SYSTEM OUT
|
||
|
||
movk 1,a0 ;page flipping on
|
||
move a0,@dpageflip
|
||
|
||
movi SCRNEND,a0 ;[256,405]
|
||
move a0,@SCRNLR,L
|
||
|
||
clr a0
|
||
move a0,@WORLDTLX,L
|
||
move a0,@WORLDTLY,L
|
||
|
||
SLEEPK 2
|
||
|
||
movi coinin_mod,a0
|
||
move a0,@BAKMODS,L
|
||
calla BGND_UD1
|
||
|
||
movk 1,a0
|
||
move a0,@DISPLAYON ;Display processor on
|
||
|
||
callr crd_updatetxt
|
||
|
||
SLEEPK 2
|
||
|
||
; JSRP scrn_scalein
|
||
|
||
movi 4<<10+4<<5+7,a0
|
||
move a0,@IRQSKYE
|
||
|
||
SLEEPK 2
|
||
calla display_unblank
|
||
|
||
jruc #cont
|
||
|
||
|
||
#exists
|
||
move @HEBLNK,a0
|
||
cmpi >32,a0
|
||
jrne #inscl
|
||
move @dtype,a0
|
||
jrge #notinscl
|
||
#inscl move a10,a10
|
||
jrnz KILL_CRD2
|
||
jruc #die
|
||
#notinscl
|
||
SLEEPK 3
|
||
#cont
|
||
callr crd_updatetxt ;Display players per credit messages
|
||
|
||
movi >32,a0 ;Display on (just in case)
|
||
move a0,@HEBLNK
|
||
|
||
|
||
SLEEP 1*TSEC
|
||
|
||
|
||
movi 4*TSEC,a11
|
||
#lp SLEEPK 1
|
||
.ref get_all_buttons_cur2
|
||
calla get_all_buttons_cur2
|
||
jrz #nob
|
||
SOUND1 bounce_snd
|
||
move a10,a10
|
||
jrnz KILL_CRD2
|
||
jruc KILL_CRD
|
||
#nob
|
||
dsj a11,#lp
|
||
|
||
#ck2
|
||
move a10,a10
|
||
jrnz KILL_CRD2
|
||
|
||
movi 10*TSEC,a11
|
||
#lp1 SLEEPK 1
|
||
calla get_all_buttons_cur2
|
||
jrz #nob1
|
||
SOUND1 bounce_snd
|
||
jruc KILL_CRD
|
||
#nob1
|
||
dsj a11,#lp1
|
||
|
||
KILL_CRD
|
||
calla display_blank
|
||
calla WIPEOUT ;CLEAN SYSTEM OUT
|
||
SLEEPK 1
|
||
jauc amode_start
|
||
|
||
|
||
#die DIE
|
||
|
||
|
||
bounce_snd .word >fc80,10,>8129,0 ;Ball bounce
|
||
|
||
KILL_CRD2
|
||
RETP
|
||
|
||
coinin_mod
|
||
.long empjambBMOD
|
||
.word 0,0
|
||
.long 0
|
||
|
||
|
||
********************************
|
||
|
||
SUBRP crd_updatetxt
|
||
|
||
movi CP_PID1,a0 ;PID
|
||
movi 0ffffh,a1 ;mask bits
|
||
calla KILALL ;kill all CP_PID1 procs except self
|
||
|
||
movi TYPTEXT,a0 ;object ID
|
||
clr a1 ;mask
|
||
calla obj_delc ;delete existing text
|
||
|
||
; MOVI CPYR_MES,a2 ;COPYRIGHT MESSAGE
|
||
|
||
; .ref DIPSWITCH
|
||
move @DIPSWITCH,a0
|
||
btst 6,a0 ;UJ2 switch 1
|
||
jrnz #notfair ;OFF?
|
||
|
||
;Yes, a dollar bill acceptor is hooked up!
|
||
|
||
MOVI dollar_mes,a2 ;Dollar bill message
|
||
calla print_message
|
||
#notfair
|
||
|
||
PUSH A10
|
||
callr credits_string
|
||
PULL A10
|
||
rets
|
||
|
||
#*****************************************************************************
|
||
|
||
.asg 25,YSPACE
|
||
.asg 17,YSPACE0
|
||
|
||
.asg 40,LN0
|
||
.asg 70,LN1
|
||
.asg 100,LN2
|
||
.asg 130,LN3
|
||
.asg 60,LN3x
|
||
.asg 160,LN4
|
||
.asg 190,LN5
|
||
.asg 220,LN6
|
||
|
||
|
||
CM_Y_GAP EQU 13
|
||
CM_Y_GAP2 EQU 80
|
||
CM_Y_ADDGAP EQU [CM_Y_GAP,200]
|
||
|
||
|
||
credits_string
|
||
|
||
MOVK ADJFREPL,A0 ;ARE WE IN FREE PLAY?
|
||
CALLA GET_ADJ
|
||
JRZ #not_freeply
|
||
|
||
movi LN3x_setup,a2
|
||
calla setup_message
|
||
movi CM_Y_GAP2,a0
|
||
move a0,@mess_line_spacing
|
||
movi #str_freeply,a4
|
||
calla print_string_C2
|
||
|
||
rets
|
||
|
||
#not_freeply
|
||
|
||
;print "BEST VALUE"
|
||
; movi LN0a_setup,a2
|
||
; calla setup_message
|
||
; movi #str_value,a4
|
||
; calla print_string_C2
|
||
|
||
|
||
;print "PURCHASE FULL GAMES FOR ONLY X CREDITS!"
|
||
movi LN0_setup,a2
|
||
calla setup_message
|
||
movi #str_fullg1,a4
|
||
calla print_string_C2
|
||
|
||
movk ADJCCONT,a0
|
||
calla GET_ADJ
|
||
move a0,a10
|
||
add a0,a10
|
||
add a0,a10
|
||
movk ADJCSTRT,a0
|
||
calla GET_ADJ
|
||
add a0,a10
|
||
|
||
move @mess_cursy,a0
|
||
addi YSPACE0,a0
|
||
move a0,@mess_cursy
|
||
movi ADJFULLG,a0
|
||
calla GET_ADJ ;# credits for full game
|
||
cmp a0,a10
|
||
jrge #ok
|
||
move a10,a0
|
||
#ok
|
||
movi 20,a1 ;max string value
|
||
|
||
|
||
calla dec_to_asc
|
||
calla copy_string
|
||
movi #str_fullg2,a4
|
||
calla concat_rom_string
|
||
calla print_string_C
|
||
|
||
|
||
|
||
calla GET_CSPT ;a6 = * current pricing table
|
||
movk 2,a10 ;min number strings to print
|
||
move *a6(CS_LIST),a11,L ;a11 = * string list
|
||
jrz #no_strings
|
||
|
||
move a11,a2
|
||
#next_string
|
||
move *a2+,a0,L ;count up number of strings
|
||
jrz #last
|
||
inc a10
|
||
jruc #next_string
|
||
#last
|
||
#no_strings
|
||
callr CRED_P ;get number credits
|
||
move a0,a3
|
||
MOVK ADJCSTRT,A0
|
||
callr GET_ADJ ;# credits to start
|
||
divu a0,a3 ;credits / credits to start
|
||
move a3,a3
|
||
jrz #not_enough1
|
||
inc a10 ;+1 string (READY FOR...)
|
||
#not_enough1
|
||
|
||
|
||
;print "CREDITS : N"
|
||
|
||
movi LN1_setup,a2
|
||
calla setup_message
|
||
|
||
callr CRED_P ;# credits in a0
|
||
PUSH a0
|
||
|
||
movi #crd_str,a4
|
||
calla copy_rom_string
|
||
|
||
PULL a0
|
||
PUSH a0
|
||
movi 99,a1 ;max string value
|
||
calla dec_to_asc
|
||
calla concat_string
|
||
|
||
MOVK ADJMAXC,a0
|
||
calla GET_ADJ_FOR_COIN ;a0 = max credits
|
||
PULL a1
|
||
cmp a0,a1
|
||
jrlo #not_max_crds
|
||
movi #str_max,a4 ;max credits
|
||
calla concat_rom_string
|
||
#not_max_crds
|
||
calla print_string_C ;"CREDITS : NN"
|
||
|
||
|
||
;print 0-3 strings from current pricing table
|
||
|
||
|
||
movi LN2_setup,a2
|
||
calla setup_message
|
||
|
||
movi 140,a0
|
||
movi YSPACE0,a1
|
||
mpyu a10,a1 ;# strings * Y spacing
|
||
srl 1,a1 ;/2
|
||
sub a1,a0
|
||
move a0,@mess_cursy ;centered Y
|
||
|
||
*gnp
|
||
calla TAMPEREDP
|
||
JRZ #done
|
||
*gnp
|
||
|
||
#next_string2
|
||
move *a11+,a4,L ;* next string
|
||
jrz #done
|
||
|
||
move @mess_cursy,a0
|
||
addi YSPACE0,a0
|
||
move a0,@mess_cursy
|
||
|
||
calla print_string_C2
|
||
|
||
jruc #next_string2
|
||
#done
|
||
|
||
|
||
;print "N CREDITS TO START"
|
||
|
||
move @mess_cursy,a0
|
||
addi YSPACE0,a0
|
||
move a0,@mess_cursy
|
||
|
||
MOVK ADJCSTRT,a0
|
||
callr GET_ADJ ;# credits to start
|
||
PUSH a0
|
||
movi 99,a1 ;max string value
|
||
calla dec_to_asc
|
||
calla copy_string
|
||
|
||
movi #crd_2start,a4
|
||
PULL a0
|
||
dec a0
|
||
jrz #1credit
|
||
movi #crd_2starts,a4
|
||
#1credit
|
||
calla concat_rom_string
|
||
calla print_string_C
|
||
|
||
|
||
;print "N CREDITS TO CONTINUE"
|
||
|
||
move @mess_cursy,a0
|
||
addi YSPACE0,a0
|
||
move a0,@mess_cursy
|
||
|
||
MOVI ADJCCONT,a0 ;# credits to continue
|
||
callr GET_ADJ
|
||
PUSH a0
|
||
movi 99,a1 ;max string value
|
||
calla dec_to_asc
|
||
callr copy_string
|
||
movi #crd_2cont,a4
|
||
PULL a0
|
||
dec a0
|
||
jrz #1_creditb
|
||
movi #crd_2conts,a4
|
||
#1_creditb
|
||
calla concat_rom_string
|
||
calla print_string_C
|
||
|
||
|
||
;print READY FOR N PLAYERS and PRESS START/INSERT COIN messages
|
||
movi LN5_setup,a2
|
||
calla setup_message
|
||
|
||
callr CRED_P ;get number credits
|
||
move a0,a3
|
||
|
||
MOVK ADJCSTRT,A0
|
||
callr GET_ADJ ;# credits to start
|
||
|
||
divu a0,a3 ;credits / credits to start
|
||
move a3,a3
|
||
jrz #not_ready
|
||
dec a3
|
||
|
||
move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players
|
||
jrz #4_plyrs
|
||
|
||
cmpi 2,a3
|
||
jrlo #not_max
|
||
movi 1,a3
|
||
|
||
#4_plyrs
|
||
cmpi 4,a3
|
||
jrlo #not_max
|
||
movi 3,a3
|
||
#not_max
|
||
sll 5,a3 ;x 32 bits
|
||
addi #ready_for_lookup,a3
|
||
move *a3,a4,L
|
||
; move @mess_cursy,a0
|
||
; addi YSPACE,a0
|
||
; move a0,@mess_cursy
|
||
calla print_string_C2
|
||
|
||
movi #str_start,a4
|
||
jruc #ready
|
||
|
||
#not_ready
|
||
;Turmell
|
||
; movi RUBYPAL,a0 ;redpal
|
||
; move a0,@message_palette
|
||
movi #str_insert,a4
|
||
#ready
|
||
move @mess_cursy,a0
|
||
addi YSPACE,a0
|
||
move a0,@mess_cursy
|
||
|
||
calla print_string_C2
|
||
|
||
rets
|
||
|
||
|
||
|
||
LN0a_setup
|
||
RJR_STR osgemd_ascii,10,0,200,LN0-3-YSPACE,WHITEPAL,0
|
||
.even
|
||
LN0_setup
|
||
RJR_STR ogmd10_ascii,5,0,200,LN0-YSPACE,SGMD8WHT,0
|
||
.even
|
||
LN1_setup
|
||
RJR_STR osgemd_ascii,10,0,200,LN1+4,GOLD,0
|
||
.even
|
||
LN2_setup
|
||
RJR_STR ogmd10_ascii,5,0,200,LN2,SGMD8GLD,0
|
||
.even
|
||
LN3_setup
|
||
RJR_STR osgemd_ascii,5,0,200,LN3,GREENPAL,0
|
||
.even
|
||
LN3x_setup
|
||
;MJT
|
||
RJR_STR lgmd_ascii,10,2,200,LN3x,LGMDGLD,0
|
||
.even
|
||
LN5_setup
|
||
RJR_STR osgemd_ascii,10,0,200,LN5+10,GREENPAL,0
|
||
.even
|
||
LN6_setup
|
||
RJR_STR osgemd_ascii,10,0,200,LN6,GOLD,0
|
||
.even
|
||
|
||
#str_value
|
||
.string "BEST VALUE:",0
|
||
#str_fullg1
|
||
.string "PURCHASE FULL GAMES FOR ONLY ",0
|
||
#str_fullg2
|
||
.string " CREDITS PER PLAYER!",0
|
||
#str_max
|
||
.string " (MAXIMUM)",0
|
||
#crd_str
|
||
.string "CREDITS : ",0
|
||
#crd_2start
|
||
.string " CREDIT TO START",0
|
||
#crd_2starts
|
||
.string " CREDITS TO START",0
|
||
#crd_2cont
|
||
.string " CREDIT TO CONTINUE",0
|
||
#crd_2conts
|
||
.string " CREDITS TO CONTINUE",0
|
||
#str_freeply
|
||
.string "FREE PLAY",1
|
||
#str_start
|
||
.string "PRESS START",0
|
||
#str_insert
|
||
.string "INSERT COINS",0
|
||
.even
|
||
#ready_for_lookup
|
||
.long #str_1p,#str_2p
|
||
.long #str_3p,#str_4p
|
||
#str_1p .string "READY FOR 1 PLAYER",0
|
||
#str_2p .string "READY FOR 1 - 2 PLAYERS",0
|
||
#str_3p .string "READY FOR 1 - 3 PLAYERS",0
|
||
#str_4p .string "READY FOR 1 - 4 PLAYERS",0
|
||
.even
|
||
|
||
|
||
.if 0
|
||
|
||
CM_LINE1 EQU CUSTOM_MESSAGE
|
||
CM_LINE2 EQU CUSTOM_MESSAGE+CMESS_LINE_SIZE
|
||
CM_LINE3 EQU CUSTOM_MESSAGE+(2*CMESS_LINE_SIZE)
|
||
|
||
;OUTPUT_CUSTOM
|
||
|
||
|
||
CALLA ADJ_PAGE
|
||
MOVI VALID_CUSTOM,A7
|
||
CALLA RC_WORD
|
||
CMPI VALID_VALUE,A0 ; CHECK TO SEE IF MESSAGE IS VALID
|
||
JRNZ #zippo
|
||
|
||
|
||
movi CM_LINE3,A10 ;CHECK LINE 3
|
||
callr CK_LINE ;3 VALID LINES?
|
||
jrz GO_FOR_2
|
||
movi LN2_setup,a2
|
||
calla setup_message
|
||
movi STRNGRAM,a4
|
||
calla print_string_C2
|
||
GO_FOR_2
|
||
movi CM_LINE2,A10 ;CHECK LINE 2
|
||
callr CK_LINE ;2 VALID LINES?
|
||
jrz GO_FOR_1
|
||
movi LN3_setup,a2
|
||
calla setup_message
|
||
movi STRNGRAM,a4
|
||
calla print_string_C2
|
||
GO_FOR_1
|
||
movi CM_LINE1,A10 ;CHECK LINE 1
|
||
callr CK_LINE ;1 VALID LINES?
|
||
jrz #zippo
|
||
movi LN4_setup,a2
|
||
calla setup_message
|
||
movi STRNGRAM,a4
|
||
calla print_string_C2
|
||
#zippo
|
||
.endif
|
||
|
||
#*****************************************************************************
|
||
|
||
;open up window stating winners of a 4 player game get next game free
|
||
|
||
.asg 8,Y0
|
||
.asg 129-38,Y1
|
||
.asg 159-38,Y2
|
||
.asg 16,SPACING
|
||
|
||
.ref mess_objid
|
||
.ref flash_bigtxt
|
||
|
||
SUBR winner_stays_box
|
||
|
||
movi cheer_snd,a0
|
||
calla snd_play1
|
||
movi cheer1_snd,a0
|
||
calla snd_play1
|
||
|
||
movk ADJFREPL,a0 ;ARE WE IN FREE PLAY?
|
||
calla GET_ADJ
|
||
jrnz #freeply
|
||
|
||
movi ADJWINMODE,a0
|
||
calla GET_ADJ
|
||
jrz #exit ;disabled?
|
||
|
||
movi [200-2,0],a0 ;x val
|
||
movi [120-38,0],a1 ;y val
|
||
movi _4playbx,a2 ;* image
|
||
movi 200,a3 ;z pos
|
||
movi DMAWNZ|M_SCRNREL,a4 ;DMA flags
|
||
movi CLSNEUT|TYPTEXT|SUBMES2,a5 ;object ID
|
||
clr a6 ;x vel
|
||
clr a7 ;y vel
|
||
calla BEGINOBJ2
|
||
|
||
movi [200-2,0],a0 ;x val
|
||
movi [149-38,0],a1 ;y val
|
||
movi _4playline,a2 ;* image
|
||
movi 201,a3 ;z pos
|
||
movi DMAWNZ|M_SCRNREL,a4 ;DMA flags
|
||
movi CLSNEUT|TYPTEXT|SUBMES2,a5 ;object ID
|
||
clr a6 ;x vel
|
||
clr a7 ;y vel
|
||
calla BEGINOBJ2
|
||
|
||
movi #ln1_setup,a2
|
||
calla setup_message
|
||
movi CLSDEAD|123,a0 ;object ID
|
||
move a0,@mess_objid
|
||
|
||
movi Y0,a2
|
||
move a2,@mess_cursy
|
||
movi #notice,a4
|
||
calla print_string_C2
|
||
|
||
movi #ln2_setup,a2
|
||
calla setup_message
|
||
movi CLSNEUT|TYPTEXT|SUBMES2,a0 ;object ID
|
||
move a0,@mess_objid
|
||
|
||
movi Y1,a0
|
||
move a0,@mess_cursy
|
||
movi SPACING,a0
|
||
move a0,@mess_line_spacing
|
||
movi #str_in4,a4
|
||
calla print_string_C2
|
||
|
||
movi Y2,a0
|
||
move a0,@mess_cursy
|
||
movi #str_free,a4
|
||
calla print_string_C2
|
||
|
||
movk 8,a10
|
||
CREATE0 flash_bigtxt
|
||
move a0,a9
|
||
|
||
SLEEP 36
|
||
|
||
move a9,a0
|
||
calla KILL
|
||
|
||
SLEEP TSEC*1+20
|
||
|
||
|
||
movi TSEC*3+20,a10
|
||
#whopper_with_cheese
|
||
SLEEPK 1
|
||
.ref get_all_buttons_down
|
||
calla get_all_buttons_down
|
||
move a0,a0
|
||
jrnz #exit1
|
||
dsj a10,#whopper_with_cheese
|
||
jruc #ex2
|
||
#exit1
|
||
SOUND1 bounce_snd
|
||
#ex2
|
||
|
||
movi CLSNEUT|TYPTEXT|SUBMES2,a0 ;object ID
|
||
calla obj_del1c ;delete text
|
||
|
||
movi CLSDEAD|123,a0
|
||
calla obj_del1c ;delete text
|
||
|
||
#exit
|
||
#no_credpage
|
||
#freeply
|
||
RETP
|
||
|
||
cheer1_snd .word >fd84,80,>8144,0 ;Long cheer
|
||
cheer_snd .word >f898,10,>814e,0
|
||
|
||
#ln1_setup
|
||
RJR_STR lgmd_ascii,12,2,200-2,6,LGMDRED2,0
|
||
#ln2_setup
|
||
RJR_STR ogmd10_ascii,9,0,200-2,100,SGMD8GLD,0
|
||
|
||
#notice .string "NOTICE:",0
|
||
.even
|
||
#str_in4
|
||
.string "when 4 players play:",0
|
||
.even
|
||
#str_free
|
||
.string "winning team",1
|
||
.string "stays on",1
|
||
.string "for free!",0
|
||
.even
|
||
|
||
|
||
#*****************************************************************************
|
||
|
||
|
||
.if 0
|
||
HELP_TAB
|
||
.LONG L_MESS ;0 SAYS USE L_MESS
|
||
.LONG JUST_LIST ;1 SAYS USE LISTED MESSAGES ONLY
|
||
.LONG LINE_ONE_PLUS ;2 SAYS USE 1ST LINE W/ 2 TO START
|
||
.LONG LINE_TWO_PLUS ;3
|
||
.LONG LINE_THREE_PLUS ;4
|
||
.LONG LINE_ONE_PLUS_2 ;5 USE 1ST LINE 2/ 2 CREDITS PER PLAYER
|
||
.LONG LINE_TWO_PLUS_2 ;6
|
||
.LONG LINE_THREE_PLUS_2 ;7
|
||
.LONG OUTPUT_CUSTOM ;8 CUSTOM MESSAGE!
|
||
|
||
JUST_LIST
|
||
MOVE A8,A3 ;STASH WHERE IT WILL SURVIVE
|
||
MOVE *A3(LONG_SIZE),A2,L ;ONE WORD ONLY?
|
||
JRZ JUST_ONE ;YEP....CENTER IT NICELY
|
||
*
|
||
* there's a 2nd line...check for 3rd!
|
||
*
|
||
MOVE *A3(2*LONG_SIZE),A2,L ;IS THERE A 3RD LINE?
|
||
JRZ JUST_TWO ;NOPE
|
||
|
||
MOVI SETUP_3_OF_3,A8
|
||
JSRP SET_THEN_A2
|
||
|
||
MOVE *A3(LONG_SIZE),A2,L ;GET LINE 2
|
||
|
||
MOVI SETUP_2_OF_3,A8
|
||
JSRP SET_THEN_A2
|
||
|
||
MOVI SETUP_1_OF_3,A8 ;SET HEIGHT FOR TOP LINE
|
||
JRUC FIRST_LINE
|
||
|
||
JUST_TWO
|
||
MOVE *A3(LONG_SIZE),A2,L ;GET LINE 2
|
||
MOVI SETUP_2_OF_2,A8
|
||
JSRP SET_THEN_A2
|
||
|
||
MOVI SETUP_1_OF_2,A8
|
||
|
||
FIRST_LINE
|
||
MOVE *A3,A2,L
|
||
JRUC SET_THEN_A2 ;DO TOP LEN AND RETURN
|
||
|
||
JUST_ONE
|
||
MOVI SETUP_1_OF_1,A8
|
||
JRUC FIRST_LINE ;DO TOP LEN AND RETURN
|
||
|
||
*
|
||
* OUTPUT THE CUSTOM MESSAGE
|
||
*
|
||
CM_LINE1 EQU CUSTOM_MESSAGE
|
||
CM_LINE2 EQU CUSTOM_MESSAGE+CMESS_LINE_SIZE
|
||
CM_LINE3 EQU CUSTOM_MESSAGE+(2*CMESS_LINE_SIZE)
|
||
|
||
OUTPUT_CUSTOM
|
||
MOVI CM_LINE3,A10 ;CHECK LINE 3
|
||
CALLR CK_LINE ;3 VALID LINES?
|
||
JRZ GO_FOR_2
|
||
|
||
MOVI SETUP_3_OF_3,A8
|
||
JSRP SET_THEN_STRNGRAM ;PUT IT OUT
|
||
|
||
MOVI CM_LINE2,A10
|
||
MOVI SETUP_2_OF_3,A8
|
||
JSRP SET_THEN_STRNGRAM
|
||
|
||
MOVI CM_LINE1,A10
|
||
MOVI SETUP_1_OF_3,A8
|
||
JRUC SET_THEN_STRNGRAM
|
||
|
||
GO_FOR_2
|
||
MOVI CM_LINE2,A10 ;CHECK LINE 2
|
||
CALLR CK_LINE ;2 VALID LINES?
|
||
JRZ GO_FOR_1
|
||
|
||
MOVI SETUP_2_OF_2,A8
|
||
JSRP SET_THEN_STRNGRAM ;PUT IT OUT
|
||
|
||
MOVI CM_LINE1,A10
|
||
MOVI SETUP_1_OF_2,A8
|
||
JRUC SET_THEN_STRNGRAM
|
||
|
||
GO_FOR_1
|
||
MOVI CM_LINE1,A10
|
||
MOVI SETUP_1_OF_1,A8
|
||
JRUC SET_THEN_STRNGRAM
|
||
|
||
.endif
|
||
|
||
**************************************************************************
|
||
*
|
||
* SET_THEN_A2
|
||
*
|
||
* THIS IS A PRIMITIVE FOR THE COIN PAGE PLOTTERS.
|
||
*
|
||
* IT SETS UP WITH THE STRING IN A8, THEN FINSHES
|
||
* ON THE STRING IN A2.
|
||
*
|
||
* JSRP THIS ROUTINE!
|
||
*
|
||
**************************************************************************
|
||
SET_THEN_A2
|
||
CALLA LM_SETUP
|
||
MOVE A2,A8
|
||
JAUC LM_FINIS ;THAT DOES LINE 3
|
||
|
||
**************************************************************************
|
||
*
|
||
* SET_THEN_STRNGRAM
|
||
*
|
||
* A10 POINTS AT A CMOS STRING FOR CUSTOM MESSAGE.
|
||
* A8 CONTAINS THE SETUP STRING FOR PRINTING THIS
|
||
* STRING OUT. CONVERT FROM CMOS TO STRNGRAM
|
||
* AND PRINT ON THE STRING.
|
||
*
|
||
**************************************************************************
|
||
SET_THEN_STRNGRAM
|
||
CALLR CK_LINE ;TRANSFER TO STRNGRAM
|
||
CALLR LM_SETUP
|
||
MOVI STRNGRAM,A8
|
||
JAUC LM_FINIS
|
||
|
||
**************************************************************************
|
||
*
|
||
* CK_LINE
|
||
*
|
||
* A10 POINTS AT A CMOS STRING. WE MOVE THIS STRING
|
||
* TO OUR PDATA AREA. THEN WE CALL BUILD_ST TO
|
||
* PACK IT INTO "STRNGRAM" WE RETURN .EQ. (PASSED FROM
|
||
* BUILD_ST) BACK TO OUR CALLER IF IT IS ALL SPACES.
|
||
*
|
||
**************************************************************************
|
||
CK_LINE
|
||
MMTM SP,A0,A7,A1,A2,A10
|
||
MOVE A10,A7 ;INPUT POINTER TO CMOS
|
||
MOVE A13,A10 ;OUR PDATA AREA
|
||
ADDI PDATA,A10 ;A10 IS DESTINATION.
|
||
MOVE A10,A2 ;ITERATE TO LOAD IT UP.
|
||
|
||
MOVI CMESS_CHARS,A1 ;COUNTER
|
||
CALLA ADJ_PAGE ;POINT THE PAGE
|
||
|
||
CK_LOOP
|
||
CALLA RC_BYTEI ;FETCH A BYTE
|
||
MOVB A0,*A2 ;STORE
|
||
ADDK BYTE_SIZE,A2
|
||
DSJS A1,CK_LOOP
|
||
|
||
CALLA DEF_PAGE ;POINT AWAY NOW
|
||
CALLA BUILD_ST ;NOW XFER TO STRNGRAM (REMOVING SPACES ETC)
|
||
MMFM SP,A0,A7,A1,A2,A10 ;RETURN .EQ. IF ITS ALL SPACES.
|
||
RETS
|
||
|
||
|
||
|
||
|
||
LINE_ONE_PLUS
|
||
MOVE *A8,A2,L ;GET LINE 1
|
||
LOP_1
|
||
MOVI SETUP_1_OF_3,A8
|
||
CALLR LM_SETUP
|
||
MOVE A2,A8 ;SWAP IN TEXT POINTER
|
||
JSRP LM_FINIS ;PRINT IT
|
||
|
||
LOP_2
|
||
MOVI TWO_TS,A8 ;TWO TO START STUFF
|
||
JAUC L_MESS ;PRINT IT AND RETURN
|
||
|
||
*
|
||
* IF THE GAME IS IN A 2 TO START....2 TO CONTINUE MODE
|
||
*
|
||
LINE_THREE_PLUS
|
||
MOVE *A8(2*LONG_SIZE),A2,L ;FETCH LINE 3
|
||
JRZ LOP_2 ;NOTHING ON LINE 3
|
||
JAUC LOP_1 ;THEN ITS THE SAME AS ABOVE!
|
||
|
||
LINE_TWO_PLUS
|
||
MOVE *A8(LONG_SIZE),A2,L ;FETCH LINE 2
|
||
JRZ LOP_2 ;NOTHING ON LINE 2
|
||
JAUC LOP_1 ;THEN ITS THE SAME AS ABOVE!
|
||
|
||
LINE_ONE_PLUS_2
|
||
MOVE *A8,A2,L ;GET LINE 1
|
||
LOP_12
|
||
MOVI SETUP_1_OF_2,A8
|
||
CALLR LM_SETUP
|
||
MOVE A2,A8 ;SWAP IN TEXT POINTER
|
||
JSRP LM_FINIS ;PRINT IT
|
||
|
||
LOP_22
|
||
MOVI TWO_TP,A8 ;TWO CREDITS PER PLAYER
|
||
JAUC L_MESS ;PRINT IT AND RETURN
|
||
|
||
LINE_TWO_PLUS_2
|
||
MOVE *A8(LONG_SIZE),A2,L ;FETCH LINE 2
|
||
JRZ LOP_22 ;NOTHING ON LINE 2
|
||
JAUC LOP_12 ;THEN ITS THE SAME AS ABOVE!
|
||
|
||
LINE_THREE_PLUS_2
|
||
MOVE *A8(2*LONG_SIZE),A2,L ;FETCH LINE 3
|
||
JRZ LOP_22 ;NOTHING ON LINE 3
|
||
JAUC LOP_12 ;THEN ITS THE SAME AS ABOVE!
|
||
|
||
**************************************************************************
|
||
*
|
||
* SELECT_SETUP
|
||
*
|
||
* THIS IS CALLED TO SELECT A SETUP STRING FOR THE
|
||
* CREDITS MESSAGE. IF THERE IS PROMPTING TO ADD...WE
|
||
* DROP IT DOWN....ELSE WE PRINT IT CENTERED.
|
||
*
|
||
**************************************************************************
|
||
SELECT_SETUP
|
||
PUSH a0
|
||
MOVI MESS_CNUM,A8 ;ASSUME NO EXTRA PROMPT
|
||
|
||
CALLA CKPROMPT ;IS THERE ONE?
|
||
JRZ NO_EXTRA
|
||
|
||
MOVI MESS_LOWNUM,A8
|
||
NO_EXTRA
|
||
MMFM SP,A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
*
|
||
* FETCH_REQ
|
||
*
|
||
* THIS ROUTINE FETCHES THE NUMBER OF UNITS REQUIRED
|
||
* FOR CREDIT, BONUS AND MINIMUM:
|
||
*
|
||
* A2 = REQ FOR CREDITS
|
||
* A3 = REQ FOR BONUS
|
||
* A4 = MINIMUM
|
||
*
|
||
**************************************************************************
|
||
FETCH_REQ
|
||
PUSH a0
|
||
MOVK ADJCUNIT,A0
|
||
CALLR GET_ADJ
|
||
MOVE A0,A2
|
||
|
||
MOVK ADJBUNIT,A0
|
||
CALLR GET_ADJ
|
||
MOVE A0,A3
|
||
|
||
MOVK ADJMUNIT,A0
|
||
CALLR GET_ADJ_FOR_COIN
|
||
MOVE A0,A4
|
||
MMFM SP,A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
*
|
||
* SLAM_P
|
||
*
|
||
* IS THERE A SLAM PROCESS RUNNING?
|
||
*
|
||
* .EQ. NO
|
||
* .NE. YES
|
||
*
|
||
**************************************************************************
|
||
SLAM_P
|
||
MOVI SLAM_PID,A0 ;SLAM PROCESS ACTIVE?
|
||
MOVI 0FFFFH,A1
|
||
jauc EXISTP
|
||
|
||
SLAM_SW
|
||
movi SLAM_PID|>ffff0000,a0 ;So we can kill other indestructables
|
||
move a0,*a13(PROCID) ;Set our ID
|
||
calla KIL1C ;Kill others
|
||
|
||
SLEEP TSEC ;1 second of coin ignoring
|
||
jauc SUCIDE
|
||
|
||
**************************************************************************
|
||
*
|
||
* FORM_COIN_CKSUM
|
||
*
|
||
* THIS ROUTINE IS CALLED TO FORM THE COIN/CREDITS
|
||
* CHECKSUM. THE CHECKSUM IS RETURNED IN A1.
|
||
*
|
||
* Z IT MATCHES WHATS THERE
|
||
* NZ IT DOESN'T MATCH
|
||
*
|
||
**************************************************************************
|
||
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
|
||
sll 32-8,a1
|
||
srl 32-8,a1
|
||
|
||
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
|
||
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.
|
||
*
|
||
* This is called before operations that deal with
|
||
* the coinage and credits values.
|
||
*
|
||
* It checks to see if the area is in tact. If it
|
||
* is, then no action is performed.
|
||
*
|
||
* Else, it clears our all values (credits, etc.)
|
||
* so that nothing is given away erroneously.
|
||
*
|
||
**************************************************************************
|
||
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
|
||
*
|
||
* THIS SETS THE CURRENT CMOS PAGE FOR COIN/CREDITS
|
||
*
|
||
**************************************************************************
|
||
COIN_PAG
|
||
PUSH a1
|
||
MOVI COIN_SELECT,A1 ;THIS IS COIN/CREDITS PAGE
|
||
CALLA SET_PAGE ;SET IT PLEASE
|
||
MMFM SP,A1
|
||
RETS
|
||
|
||
|
||
********************************
|
||
* Add the # of players to the audit
|
||
* A0=Audit #
|
||
* Trashes A0-A1,B0-B1
|
||
|
||
SUBR aud_addnumplyrs
|
||
|
||
movk 1,a1 ;1 plyr
|
||
move @PSTATUS,b0
|
||
subk 3,b0
|
||
jrne aanp50 ;Only 1?
|
||
movk 2,a1 ;2 plyrs
|
||
aanp50 jruc AUD
|
||
|
||
|
||
**************************************************************************
|
||
*
|
||
* AUDIT HANDLING
|
||
*
|
||
**************************************************************************
|
||
*
|
||
* POINT_AT_AUDIT
|
||
*
|
||
* THIS IS CALLED TO POINT AT THE AUDIT INDICATED BY
|
||
* A0. A0 IS THE AUDIT NUMBER 0-30. A7 IS RETURNED
|
||
* POINTING AT THE BEGINNING OF THE AUDIT.
|
||
*
|
||
**************************************************************************
|
||
POINT_AT_AUDIT
|
||
PUSH a1
|
||
CALLR AUDIT_PAGE
|
||
|
||
MOVI AUD_SIZE,A7 ;THIS IS SIZE PER AUDIT
|
||
MPYU A0,A7 ;A1 NOW HAS OFFSET
|
||
ADDI AUDITORG,A7 ;ADD BASE
|
||
MMFM SP,A1
|
||
RETS
|
||
|
||
AUDIT_PAGE
|
||
PUSH a1
|
||
MOVI AUDIT_SELECT,A1 ;THIS IS AUDIT PAGE
|
||
CALLA SET_PAGE ;SET IT PLEASE
|
||
MMFM SP,A1
|
||
RETS
|
||
|
||
**************************************************************************
|
||
*
|
||
* FORM_AUD_CKSUM
|
||
*
|
||
* THIS IS CALLED TO FORM THE CHECKSUM FOR THE AUDIT
|
||
* SPECIFIED IN A0.
|
||
*
|
||
* A1 RETURNS THE CHECKSUM.
|
||
*
|
||
* Z BIT IS SET BASED ON WHETHER IT MATCHES THE CHECKSUM THERE.
|
||
*
|
||
**************************************************************************
|
||
FORM_AUD_CKSUM
|
||
MMTM SP,A0,A4,A7
|
||
CALLR POINT_AT_AUDIT ;A7 = POINTER TO CURRENT ENTRY
|
||
MMTM SP,A7 ;SAVE POINTER TO ENTRY
|
||
MOVI AUD_BYTES_TO_CHECK,A4 ;COUNT DOWN THE BYTES
|
||
CLR A1 ;KEEP SUM IN A1
|
||
ADD_A_BYTE
|
||
CALLA RC_BYTEI ;GET A BYTE INTO A0
|
||
ADD A0,A1 ;ADD TO SUM
|
||
DSJ A4,ADD_A_BYTE ;ONE MORE ADDED
|
||
NOT A1 ;CHECKSUM IS NOW IN LOW WORD
|
||
ZEXT A1
|
||
; ANDI WORD_MASK,A1 ;MASK SO ITS COOL
|
||
MMFM SP,A7 ;GET POINTER BACK
|
||
ADDI AUD_CKSUM,A7 ;POINT AT CHECKBYTE
|
||
CALLA RC_WORD ;READ IN THE CKSUM
|
||
CMP A0,A1 ;COMPARE WHAT'S THERE TO WHAT WE GOT
|
||
MMFM SP,A0,A4,A7 ;Z BIT RETURNS COMPARE
|
||
RETS ;A1 RETURNS CKSUM
|
||
|
||
**************************************************************************
|
||
*
|
||
* STORE_AUD_CKSUM
|
||
*
|
||
* THIS WILL STORE THE AUDIT CHECKSUM IN A1 FOR THE
|
||
* AUDIT NUMBER SPECIFIED BY A0.
|
||
*
|
||
**************************************************************************
|
||
STORE_AUD_CKSUM
|
||
MMTM SP,A7,A0 ;POINTING REGISTER
|
||
CALLR POINT_AT_AUDIT ;A7 POINTS AT AUDIT
|
||
ADDI AUD_CKSUM,A7 ;POINT AT CHECKBYTE
|
||
MOVE A1,A0 ;GET CHECKBYTE IN A0
|
||
CALLA WC_WORD ;WRITE THE CKSUM
|
||
MMFM SP,A7,A0 ;POINTING REGISTER
|
||
RETS
|
||
|
||
**************************************************************************
|
||
*
|
||
* FORM_AUD_CKSUM_AND_STORE
|
||
*
|
||
* THE VALUE AT BAD_AUD IS USED TO DETERMINE WHETHER TO STORE
|
||
* THE CORRECT OR INCORRECT VALUE!
|
||
*
|
||
* A0 = AUDIT NUMBER
|
||
*
|
||
**************************************************************************
|
||
FORM_AUD_CKSUM_AND_STORE
|
||
MMTM SP,A1,A2 ;SAVE A1!
|
||
CALLR FORM_AUD_CKSUM
|
||
MOVE @BAD_AUD,A2 ;GET THE "FUDGE" WORD
|
||
XOR A2,A1 ;MAKE CKSUM BAD IF AUDIT IS BAD
|
||
CALLR STORE_AUD_CKSUM
|
||
MMFM SP,A1,A2
|
||
RETS
|
||
|
||
**************************************************************************
|
||
*
|
||
* GET_AUD
|
||
*
|
||
* THIS IS CALLED TO FETCH THE AUDIT VALUE FOR THE AUDIT
|
||
* SPECIFIED IN A0 INTO A1. IF THE CHECKBYTE FOR THE
|
||
* AUDIT IS INCORRECT, THEN RAM LOCATION BAD_AUD WILL BE
|
||
* SET TO 1.
|
||
*
|
||
**************************************************************************
|
||
GET_AUD
|
||
MMTM SP,A0,A7
|
||
CALLR FORM_AUD_CKSUM ;SEE IF CKSUM IS OK
|
||
JRZ FETCH_AUDIT_1 ;ITS OK....
|
||
|
||
MOVK 1,A1 ;CHECKSUM IS BAD
|
||
MOVE A1,@BAD_AUD ;SET THE FLAG!
|
||
|
||
FETCH_AUDIT_1
|
||
CALLR POINT_AT_AUDIT ;A7 POINTS AT AUDIT
|
||
ADDI AUD_DATA,A7 ;ADD ZERO OFFSET
|
||
CALLA RC_LONG ;FETCH THE LONG WORD TO A0
|
||
MOVE A0,A1 ;RETURN IN A1
|
||
MMFM SP,A0,A7
|
||
RETS
|
||
|
||
**************************************************************************
|
||
*
|
||
* STORE_AUDIT
|
||
*
|
||
* A0 = AUDIT NUMBER TO STORE VALUE FOR
|
||
* A1 = VALUE TO STORE.
|
||
* BAD_AUD = NON ZERO IF BAD CHECKSUM IS TO BE MAINTAINED.
|
||
*
|
||
**************************************************************************
|
||
STORE_AUDIT
|
||
|
||
MMTM SP,A0,A7
|
||
CALLR POINT_AT_AUDIT ;A7 POINTS AT AUDIT
|
||
ADDI AUD_DATA,A7 ;ADD ZERO OFFSET
|
||
MOVE A1,A0 ;MOVE DATA TO WRITING REGISTER
|
||
CALLA WC_LONG ;WRITE THE DATA BACK
|
||
MMFM SP,A0,A7 ;GET AUDIT NUMBER BACK
|
||
JRUC FORM_AUD_CKSUM_AND_STORE ;STORE GOOD OR BAD CKSUM BASED
|
||
;ON BAD_AUD
|
||
|
||
**************************************************************************
|
||
*
|
||
* CLR_SUBS
|
||
*
|
||
* THIS IS CALLED TO CLEAR OUT THE COINAGE SUB-TOTALS.
|
||
*
|
||
**************************************************************************
|
||
;CLR_SUBS
|
||
; MOVI FRST_SUB,A0
|
||
; MOVI LAST_SUB,A1
|
||
; CALLR CLR_AUDR ;CLEAR EM OUT!
|
||
; RETP
|
||
;
|
||
**************************************************************************
|
||
*
|
||
* CLR_AUDR
|
||
*
|
||
* THIS IS CALLED TO CLEAR OUT A RANGE OF AUDITS.
|
||
* A0 = 1ST AUDIT NUMBER
|
||
* A1 = LAST AUDIT NUMBER (INCLUSIVE)
|
||
*
|
||
**************************************************************************
|
||
CLR_AUDR
|
||
MMTM SP,A0,A1,A2
|
||
MOVE A1,A2 ;MOVE "LAST" TO A2
|
||
CLR A1 ;WE'LL STORE ZEROS
|
||
MOVE A1,@BAD_AUD ;MAKE CKSUMS GOOD ON STORING
|
||
CAR1
|
||
CALLR STORE_AUDIT ;STORE THIS AUDIT
|
||
INC A0 ;KICK TO NEXT AUDIT
|
||
CMP A2,A0
|
||
JRLS CAR1
|
||
MMFM SP,A0,A1,A2
|
||
RETS
|
||
|
||
**************************************************************************
|
||
*
|
||
* CLR_DUMP_AUD
|
||
*
|
||
* This is called by both joysticks down while looking
|
||
* at dump page. It clears out the audits associated
|
||
* with that page.
|
||
*
|
||
**************************************************************************
|
||
;CLR_DUMP_AUD
|
||
; MOVI AUDDOGGY,A0
|
||
; CALLR KILL_AUD
|
||
; MOVI AUDLOCK,A0
|
||
; CALLR KILL_AUD
|
||
; MOVI AUDTRAP,A0
|
||
; CALLR KILL_AUD
|
||
; MOVI AUDSURV,A0
|
||
; CALLR KILL_AUD
|
||
; MOVI AUDBONE,A0
|
||
; CALLR KILL_AUD
|
||
; RETS
|
||
|
||
**************************************************************************
|
||
*
|
||
* KILL_AUD
|
||
*
|
||
* This is called to clear out an audit.
|
||
*
|
||
* A0 = audit number.
|
||
*
|
||
**************************************************************************
|
||
KILL_AUD
|
||
PUSH a1
|
||
CLR A1 ;WE'LL STORE ZEROS
|
||
MOVE A1,@BAD_AUD ;MAKE CKSUMS GOOD ON STORING
|
||
CALLR STORE_AUDIT ;STORE THIS AUDIT
|
||
MMFM SP,A1
|
||
RETS
|
||
|
||
**************************************************************************
|
||
*
|
||
* AUD
|
||
*
|
||
* A0 = AUDIT NUMBER.......A1 = COUNT TO ADD.
|
||
*
|
||
**************************************************************************
|
||
AUD
|
||
MMTM SP,A1,A2
|
||
CLR A2 ;SET "BAD_AUD" GOOD UNTIL OTHERWISE PROVEN!
|
||
MOVE A2,@BAD_AUD ;ITS GOOD.
|
||
MOVE A1,A2 ;COPY OUR COUNT
|
||
CALLR GET_AUD ;FETCH THE CURRENT AUDIT COUNTER
|
||
ADD A2,A1 ;ADD THE NEW COUNT
|
||
CALLR STORE_AUDIT ;STORE IT BACK
|
||
CALLR DEF_PAGE ;SWITCH PAGE AWAY FROM THE DATA!
|
||
MMFM SP,A1,A2
|
||
RETS
|
||
|
||
AUD1
|
||
PUSH a1
|
||
MOVK 1,A1
|
||
CALLR AUD
|
||
MMFM SP,A1
|
||
RETS
|
||
|
||
**************************************************************************
|
||
*
|
||
* CLR_AUD
|
||
*
|
||
* This is called to clear out all of the audits.
|
||
*
|
||
* A relatively easy task given the primitives available.
|
||
*
|
||
**************************************************************************
|
||
CLR_AUD
|
||
MMTM SP,A0,A1
|
||
MOVK 1,A0 ;START AT AUDIT 1
|
||
MOVI N_AUDITS-1,A1 ;THIS IS TOTAL ALLOCATED
|
||
CALLR CLR_AUDR
|
||
MMFM SP,A0,A1
|
||
RETS
|
||
|
||
**************************************************************************
|
||
*
|
||
* ADJUSTMENTS
|
||
*
|
||
**************************************************************************
|
||
**************************************************************************
|
||
*
|
||
* CMOS_VAL
|
||
*
|
||
* ARE ADJUSTMENTS AND NAME/REV OK?
|
||
*
|
||
* .EQ. MEANS YES
|
||
* .NE. MEANS NO
|
||
*
|
||
**************************************************************************
|
||
CMOS_VAL
|
||
CALLR FORM_ADC ;SEE IF CKSUM IS OK.
|
||
JRNZ CMOS_BAD ;NOPE....RETURN .NE.
|
||
|
||
CALLR CHECK_NAME_AND_REV ;HOW ABOUT THE NAME AND REV?
|
||
CMOS_BAD
|
||
RETS
|
||
|
||
**************************************************************************
|
||
*
|
||
* Adjustments are all stored as long words in CMOS.
|
||
* They are referenced by adjustment number. Stuff
|
||
* adjustment number in A0. Call GET_ADJ and the
|
||
* value is returned in A0.
|
||
*
|
||
**************************************************************************
|
||
**************************************************************************
|
||
*
|
||
* FORM_ADC
|
||
*
|
||
* THIS IS CALLED TO FORM THE CHECKSUM FOR THE ADJUSTMENTS
|
||
* AREA. IT IS RETURNED IN A1.
|
||
*
|
||
* IT IS COMPARED TO THE REAL CHECKSUM AND .EQ. RETURNED IF OK.
|
||
*
|
||
**************************************************************************
|
||
FORM_ADC
|
||
MMTM SP,A7,A0,A6
|
||
CALLR ADJ_PAGE ;SET CMOS PAGE FOR ADJUSTMENTS
|
||
MOVI ADJUSTORG,A7 ;POINT AT FIRST BYTE
|
||
MOVI ADJ_BYTES_TO_CHECK,A6 ;NUMBER OF BYTES
|
||
CLR A1 ;ACCUMULATE CKSUM HERE
|
||
|
||
ADJ_C1
|
||
CALLA RC_BYTEI ;READ A BYTE
|
||
ADD A0,A1 ;ADD THE BYTE TO THE SUM
|
||
DSJS A6,ADJ_C1
|
||
NOT A1 ;COMPLEMENT THE SUM
|
||
ZEXT A1
|
||
MOVI ADJ_CKSUM,A7
|
||
CALLA RC_WORD ;FETCH THE CHECKSUM
|
||
CMP A0,A1 ;COMPARE TO FETCHED VALUE
|
||
MMFM SP,A7,A0,A6
|
||
RETS
|
||
|
||
**************************************************************************
|
||
*
|
||
* F_ADC_S
|
||
*
|
||
* CALCULATE THE ADJUSTMENT CHECKSUM AND STORE THE
|
||
* NEW VALUE.
|
||
*
|
||
**************************************************************************
|
||
F_ADC_S
|
||
MMTM SP,A0,A1,A7
|
||
CALLR FORM_ADC ;FORM THE CKSUM
|
||
MOVE A1,A0 ;PUT IN CMOS WRITING REGGIE
|
||
MOVI ADJ_CKSUM,A7
|
||
CALLA WC_WORD ;AND STORE IT
|
||
MMFM SP,A0,A1,A7
|
||
RETS
|
||
|
||
**************************************************************************
|
||
*
|
||
* GET_ADJ
|
||
*
|
||
* THIS IS CALLED TO FETCH THE VALUE OF AN ADJUSTMENT.
|
||
*
|
||
* THE ADJUSTMENT NUMBER IS GIVEN IN A0.
|
||
* THE VALUE FOR THE ADJUSTMENT IS RETURNED IN A0.
|
||
*
|
||
**************************************************************************
|
||
GET_ADJ
|
||
PUSH a1,a7
|
||
CALLR ADJPOINT ;POINT AT ADJUSTMENT
|
||
CALLA RC_LONG ;FETCH THE ADJUST PLEASE
|
||
CALLR DEF_PAGE
|
||
PULL a1,a7
|
||
MOVE A0,A0 ;RETURN Z BIT BASED ON ADJUSTMENT!
|
||
RETS
|
||
|
||
**************************************************************************
|
||
*
|
||
* PUT_ADJ
|
||
*
|
||
* ADJUST NUMBER IN A0.
|
||
* VALUE IN A1.
|
||
* STORE IT!........
|
||
*
|
||
* ****************** THIS IS A UTILITY......IT DOES NOT
|
||
* CORRECT ANY CHECKSUM CHANGE THAT
|
||
* MAY OCCUR!!
|
||
*
|
||
**************************************************************************
|
||
PUT_ADJ
|
||
PUSH a0,a7
|
||
CALLR ADJPOINT ;POINT AT REQUESTED ADJ.
|
||
MOVE A1,A0 ;GET VALUE IN WRITING REGGIE!
|
||
CALLA WC_LONG ;WRITE THE ADJUSTMENT
|
||
CALLR DEF_PAGE ;SWAP PAGE AWAY.
|
||
MMFM SP,A7,A0
|
||
RETS
|
||
|
||
ADJPOINT
|
||
CALLR ADJ_PAGE ;SET CMOS PAGE FOR ADJUSTMENTS
|
||
MOVI ADJ_SIZE,A7 ;SIZE PER ADJUSTMENT IN A7
|
||
MPYU A0,A7 ;TIMES ADJUSTMENT REQUESTED.
|
||
ADDI ADJUSTORG,A7 ;ADD TO BASE
|
||
RETS
|
||
|
||
GET_ADJ_FOR_COIN
|
||
CALLR GET_ADJ ;GET THE ADJUSTMENT
|
||
JAUC COIN_PAG ;THEN RE-INSTATE THE COIN PAGE!
|
||
|
||
**************************************************************************
|
||
*
|
||
* CHECK_NAME_AND_REV
|
||
*
|
||
* THIS ROUTINE IS CALLED TO SEE IF THE GAME NAME/REV IS
|
||
* CORRECT. IF IT IS NOT, THE GAME WILL AUTOMATICALLY
|
||
* FACTORY SET. Z MEANS OK!
|
||
*
|
||
**************************************************************************
|
||
CHECK_NAME_AND_REV
|
||
MMTM SP,A0,A1,A2,A3,A7
|
||
CALLR ADJ_PAGE ;MAKE SURE WE'RE ON THE CORRECT PAGE
|
||
|
||
MOVI NAME_REV,A7 ;POINT AT CMOS NAME STORAGE
|
||
MOVI ROM_NAME,A1 ;POINT AT OUR VERSION
|
||
MOVI NAME_REV_SIZE,A2 ;MAXIMUM NAME SIZE
|
||
|
||
NEXT_LET1
|
||
CALLA RC_BYTEI ;FETCH A BYTE
|
||
MOVB *A1,A3 ;GET 1 FROM ROM
|
||
SLL 24,A3
|
||
SRL 24,A3
|
||
|
||
CMP A3,A0 ;THEY BETTER BE THE SAME
|
||
JRNZ RETURN_NOW ;NOPE....BYE (RETURN .NE.)
|
||
|
||
ADDK BYTE_SIZE,A1 ;KICK SOURCE POINTER
|
||
MOVE A0,A0 ;WAS IT A ZERO?
|
||
JRZ RETURN_NOW ;YEP....NO MORE (RETURN .EQ.)
|
||
DSJS A2,NEXT_LET1
|
||
CLR A0 ;RETURN .EQ.
|
||
|
||
RETURN_NOW
|
||
MMFM SP,A0,A1,A2,A3,A7
|
||
RETS
|
||
|
||
**************************************************************************
|
||
*
|
||
* ADJ_PAGE
|
||
*
|
||
* THIS SETS THE CURRENT CMOS PAGE FOR ADJUSTMENTS.
|
||
*
|
||
**************************************************************************
|
||
ADJ_PAGE
|
||
PUSH a1
|
||
MOVI ADJUST_SELECT,A1 ;THIS IS AUDIT PAGE
|
||
CALLA SET_PAGE ;SET IT PLEASE
|
||
MMFM SP,A1
|
||
RETS
|
||
|
||
|
||
**************************************************************************
|
||
*
|
||
* DEF_PAGE
|
||
*
|
||
* THIS SWITCHES TO "DEFAULT" PAGE. THE DEFAULT
|
||
* PAGE IS THE ONE THAT WE WOULD LIKE TO SMASH
|
||
* MOST IN THE CASE OF A CRASH. AFTER MOST
|
||
* PROCESSING, WE SWITCH TO THIS PAGE!
|
||
*
|
||
**************************************************************************
|
||
DEF_PAGE
|
||
.if 0
|
||
PUSHST ;PRESERVE CODES THAT ARE BEING RETURNED
|
||
PUSH a1
|
||
MOVI TODAYS_SELECT,A1 ;THIS IS TODAY'S HIGH SCORES PAGE
|
||
CALLA SET_PAGE ;SET IT PLEASE
|
||
PULL a1
|
||
POPST
|
||
.endif
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* FAC_SET - Restores the factory settings to the adjustments
|
||
* A0=Mode (0=All adjustments, 1=Only coinage)
|
||
|
||
FAC_SET
|
||
PUSH a1,a2,a7
|
||
|
||
move a0,-*sp
|
||
subk 1,a0
|
||
jreq fs20 ;Just coinage?
|
||
|
||
;MJT
|
||
.ref clear_player_records
|
||
calla clear_player_records
|
||
|
||
calla opmsg_clr
|
||
|
||
;;; CALLR DUMP_FS ;CLEAR OUT "DUMP" MEMORY
|
||
;;; (stomps on player records)
|
||
|
||
|
||
CALLR NO_CREDS ;REMOVE ANY COINS
|
||
CALLR ADJ_PAGE ;SET CMOS PAGE CORRECTLY
|
||
|
||
MOVI FACTORY_TABLE,A1 ;ROM
|
||
MOVI ADJUSTORG,A7 ;CMOS
|
||
MOVI N_ADJUSTS,A2 ;NUMBER OF ADJUSTMENTS ALLOCATED
|
||
|
||
FACS1
|
||
MOVE *A1+,A0 ;FETCH A ROM LONG WORD
|
||
ZEXT A0
|
||
CALLA WC_LONGI ;WRITE THE WORD TO CMOS
|
||
DSJS A2,FACS1 ;WRITE 1 LONG WORD PER ADJUST
|
||
fs20
|
||
; .if YUNIT
|
||
; move @SWITCH+>30,a1
|
||
; btst 6,a1
|
||
; jrnz fs80
|
||
; not a1
|
||
; sll 32-5,a1
|
||
; srl 32-5-3,a1 ;*8
|
||
; cmpi (dctend-dipcoinage_t),a1
|
||
; jrhs fs50 ;Illegal setting?
|
||
; addi dipcoinage_t,a1
|
||
; movb *a1,a1
|
||
; movk ADJPRICE,a0 ;Master priceing
|
||
; callr PUT_ADJ
|
||
;fs50
|
||
; movk ADJFREPL,a0 ;Free play
|
||
; clr a1 ;Off
|
||
; callr PUT_ADJ
|
||
;fs80
|
||
; .endif
|
||
|
||
callr LD_CTAB ;EXPAND THE CSELCT VALUE
|
||
callr F_ADC_S ;MAKE THE CHECKSUM CORRECT.
|
||
|
||
move *sp+,a0
|
||
subk 1,a0
|
||
jreq fsx ;Only coinage?
|
||
|
||
* NOW STORE THE GAME NAME AND REVISION INFO
|
||
|
||
MOVI NAME_REV,A7 ;POINT AT CMOS NAME STORAGE
|
||
MOVI ROM_NAME,A1 ;POINT AT OUR VERSION
|
||
MOVI NAME_REV_SIZE,A2 ;MAXIMUM NAME SIZE
|
||
|
||
NEXT_LETTER
|
||
MOVB *A1,A0 ;FETCH A BYTE
|
||
CALLA WC_BYTEI ;WRITE IT TO CMOS
|
||
ADDK BYTE_SIZE,A1 ;KICK SOURCE POINTER
|
||
move a0,a0
|
||
jrz fsx ;End?
|
||
DSJS A2,NEXT_LETTER
|
||
|
||
fsx PULL a1,a2,a7
|
||
rets
|
||
|
||
;dipcoinage_t
|
||
; .byte 1,2,3, 10,11,12, 16,17,18, 29, 32, 33,34,35, 37
|
||
; .byte 39, 41,42, 43, 45,46, 49, 50, 52, 53, 54, 55
|
||
;dctend
|
||
.even
|
||
|
||
**************************************************************************
|
||
*
|
||
* SWITCH_FOR_JUMPER
|
||
*
|
||
* THIS IS CALLED OUT OF THE FACTORY SETTING SEQUENCE.
|
||
* IT CHECKS FOR JUMPER COMBINATIONS INDICATING
|
||
* GERMAN OR FRENCH GAMES.
|
||
*
|
||
* THE JUMPERS ARE CONNECTED AS FOLLOWS:
|
||
*
|
||
* GERMAN JUMPER = BIT 15 OF "COINS"
|
||
* FRENCH JUMPER = BIT 14 OF "COINS"
|
||
*
|
||
* IF BOTH JUMPERS ARE IN, OR BOTH ARE MISSING, THEN
|
||
* ITS U.S. DEFAULT....LEAVE EVERYTHING ALONE.
|
||
*
|
||
* IF GERMAN IS MISSING (READ AS A 1) THEN USE
|
||
* GERMAN 1 COINAGE.
|
||
*
|
||
* IF FRENCH IS MISSING THEN USE FRENCH 1 COINAGE.
|
||
*
|
||
**************************************************************************
|
||
;SWITCH_FOR_JUMPER
|
||
; MMTM SP,A0
|
||
; MOVE @COINS,A0 ;GET THE 16 BITS
|
||
; ANDI JUMPERS,A0 ;JUST KEEP THE BITS
|
||
; JRZ USA ;BOTH ARE IN...US!
|
||
;
|
||
; CMPI JUMPERS,A0 ;ARE BOTH MISSING?
|
||
; JRZ USA ;YEP....US.
|
||
;
|
||
; CMPI GERMAN_BIT,A0 ;IS JUST THE GERMAN MISSING?
|
||
; JRNZ NOGERM ;NOPE
|
||
;
|
||
; CALLR DO_GERMAN ;DO THE GERMAN STUFF
|
||
; JRUC SFJX ;AND EXIT
|
||
;*
|
||
;* MUST BE FRENCH
|
||
;*
|
||
;NOGERM
|
||
; CALLR DO_FRENCH ;IF IT IS NOT POSSIBLE....DO IT.
|
||
;USA
|
||
;SFJX
|
||
; MMFM SP,A0
|
||
; RETS
|
||
;
|
||
;DO_FRENCH
|
||
; MMTM SP,A0,A1
|
||
; MOVK ADJPRICE,A0 ;AS MASTER PRICER.
|
||
; MOVI F1SEL,A1 ;USE FRENCH SELECTOR
|
||
; CALLA PUT_ADJ
|
||
; MMFM SP,A0,A1
|
||
; RETS
|
||
;
|
||
;DO_GERMAN
|
||
; MMTM SP,A0,A1
|
||
; MOVK ADJPRICE,A0 ;AS MASTER PRICER.
|
||
; MOVI G1SEL,A1 ;USE GERMAN SELECTOR
|
||
; CALLA PUT_ADJ
|
||
;
|
||
; MOVK ADJDIFF,A0
|
||
; MOVI 1,A1 ;DIFFICULTY 1 FOR GERMANS
|
||
; CALLA PUT_ADJ
|
||
;
|
||
; MOVK ADJBUYIN,A0
|
||
; MOVI 1,A1 ;EASY BUY-IN FOR GERMANS
|
||
; CALLA PUT_ADJ
|
||
;
|
||
; MMFM SP,A0,A1
|
||
; RETS
|
||
|
||
**************************************************************************
|
||
*
|
||
* LD_CTAB
|
||
*
|
||
* THIS IS CALLED TO STORE THE CSELCT VALUES FOR
|
||
* THE COIN SELECTOR STORED AS ADJPRICE.
|
||
*
|
||
**************************************************************************
|
||
LD_CTAB
|
||
mmtm sp,a0,a6,a1
|
||
|
||
calla GET_CSPT ;A6=CSELCT table
|
||
|
||
;{
|
||
.IF 0
|
||
movk 1,a1
|
||
move *a6(16*4),a0
|
||
jrnn lct5 ;Normal 1 credit to start?
|
||
movk 2,a1
|
||
lct5 movk ADJCSTRT,a0
|
||
callr PUT_ADJ
|
||
movk 1,a1
|
||
movk ADJCCONT,a0
|
||
callr PUT_ADJ
|
||
|
||
movk ADJC1,a0 ;1st one to store
|
||
lct8 move *a6+,a1 ;Get word
|
||
abs a1
|
||
callr PUT_ADJ ;Write this one to memory
|
||
addk 1,a0
|
||
cmpi ADJCX,a0
|
||
jrls lct8
|
||
|
||
.ENDIF
|
||
|
||
;}
|
||
|
||
movi ADJLMULT,a0
|
||
move *a6+,a1
|
||
calla PUT_ADJ
|
||
|
||
movi ADJCMULT,a0
|
||
move *a6+,a1
|
||
calla PUT_ADJ
|
||
|
||
movi ADJRMULT,a0
|
||
move *a6+,a1
|
||
calla PUT_ADJ
|
||
|
||
movi ADJXMULT,a0
|
||
move *a6+,a1
|
||
calla PUT_ADJ
|
||
|
||
movi ADJCUNIT,a0
|
||
move *a6+,a1
|
||
calla PUT_ADJ
|
||
|
||
movi ADJBUNIT,a0
|
||
move *a6+,a1
|
||
calla PUT_ADJ
|
||
|
||
movi ADJMUNIT,a0
|
||
move *a6+,a1
|
||
calla PUT_ADJ
|
||
|
||
movi ADJCSTRT,a0
|
||
move *a6+,a1
|
||
calla PUT_ADJ
|
||
|
||
movi ADJCCONT,a0
|
||
move *a6+,a1
|
||
calla PUT_ADJ
|
||
|
||
movi ADJCDIV,a0
|
||
move *a6+,a1
|
||
calla PUT_ADJ
|
||
|
||
movi ADJFRAC,a0
|
||
move *a6+,a1
|
||
calla PUT_ADJ
|
||
|
||
movk ADJVIRGIN,a0 ;THIS SAYS 1ST 8 UNTOUCHED.
|
||
movk 1,a1
|
||
callr PUT_ADJ
|
||
|
||
movk ADJ1ST6,a0 ;THIS SAYS 1ST 6 UNTOUCHED.
|
||
movk 1,a1
|
||
callr PUT_ADJ ;DONE!
|
||
|
||
mmfm sp,a0,a6,a1
|
||
rets
|
||
|
||
**************************************************************************
|
||
*
|
||
* CC_COIN
|
||
* MMTM SP,A7
|
||
* CALLR COIN_PAG
|
||
* MOVI HSR_C,A7
|
||
* CALLA RC_LONG ;GET THE TABLE COUNTER
|
||
* JRZ CCC_X ;ITS DOWN
|
||
* DEC A0 ;1 LESS
|
||
* CALLA WC_LONG
|
||
* CCC_X MMFM SP,A7
|
||
* RETS
|
||
*
|
||
**************************************************************************
|
||
|
||
**************************************************************************
|
||
*
|
||
* L_MESS
|
||
*
|
||
* A8 POINTS AT MESS_MAC FOLLOWED BY MESSAGE TEXT.
|
||
* POP ALL REGGIES LEAVING A8 POINTING AT TEXT.
|
||
* AND JUMP TO THE TEXT PROCESSOR!
|
||
*
|
||
* THE MMFM POPS THE ROUTINE TO CALL INTO A1.
|
||
*
|
||
* YOU ***MUST*** USE JSRP TO GET HERE. WE JUMP TO
|
||
* THE STRING ROUTINE WHICH WILL RETP BACK TO THE CALLER!
|
||
*
|
||
**************************************************************************
|
||
L_MESS_LOOP
|
||
addk BYTE_SIZE,a8 ;PUSH BEYOND THIS BYTE
|
||
L_MESS addk >f,a8 ;Round up word
|
||
srl 4,a8
|
||
sll 4,a8
|
||
|
||
MMFM A8,A1,A6,A9,A10,A11 ;LOAD UP REGGIES FROM A8.
|
||
CLR A0 ;NEVER SLEEP!
|
||
|
||
MOVI L_RET,A7
|
||
MOVE A7,-*A12,L ;PUSH RET ADDR
|
||
JUMP A1 ;JUMP TO THE ROUTINE.
|
||
L_RET MOVB *A8,A0 ;CHECK NEXT BYTE 0=DONE...1=MORE.
|
||
JRNZ L_MESS_LOOP
|
||
RETP
|
||
|
||
**************************************************************************
|
||
*
|
||
* LM_SETUP
|
||
*
|
||
* THIS IS CALLED TO SETUP THE WORLD FOR A STRING
|
||
* OPERATION, BUT NOT PHYSICALLY MAKE THE CALL.
|
||
*
|
||
* THIS ALLOWS TWEAKING OF REGGIES BEFORE THE CALL.
|
||
*
|
||
* LM_FINIS
|
||
*
|
||
* THIS IS CALLED ONCE THE MODIFICATIONS ARE MADE!
|
||
*
|
||
**************************************************************************
|
||
LM_SETUP
|
||
MMFM A8,A1,A6,A9,A10,A11 ;LOAD UP REGGIES FROM A8.
|
||
CLR A0 ;DON'T SLEEP
|
||
RETS
|
||
|
||
LM_FINIS
|
||
JUMP A1 ;THIS RUNS ROUTINE AND
|
||
|
||
**************************************************************************
|
||
*
|
||
* GET_CSTR
|
||
*
|
||
* HERE WE FORM THE CREDITS STRING AND
|
||
* RETURN IT IN THE STRING BUFFER.
|
||
* WE RETURN A8 POINTING AT THIS BUFFER.
|
||
*
|
||
* WE ALSO PUT APPROPRIATE FRACTION ON THE
|
||
* END IF ADJUSTED ACCORDINGLY.
|
||
*
|
||
**************************************************************************
|
||
GET_CSTR
|
||
MOVK ADJFREPL,A0 ;ARE WE IN FREE PLAY?
|
||
CALLA GET_ADJ
|
||
JRZ NOT_FREE
|
||
|
||
MOVI MESS_FREEP,A8 ;RETURN POINTING AT FREE PLAY MESSAGE
|
||
JRUC GET_CX
|
||
|
||
NOT_FREE
|
||
CALLA STR_OBJ ;ALLOCATE AN OBJECT PLEASE
|
||
JRC NO_SOBJ ;NONE TO USE!
|
||
|
||
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.
|
||
*
|
||
MOVK 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
|
||
|
||
MOVE A7,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
|
||
|
||
ADDK BYTE_SIZE,A8
|
||
JRUC KILL_Z
|
||
|
||
GOT_ZERO
|
||
CLR A1
|
||
MOVB A1,*A8 ;KILL THE ZERO
|
||
|
||
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
|
||
|
||
MOVK ADJCUNIT,A0 ;UNITS REQUIRED FOR CREDIT
|
||
CALLA GET_ADJ
|
||
CALLR CAT_A0 ;DENOMINATOR
|
||
|
||
NSFRAC
|
||
MOVE A7,A8 ;MOVE "OBJECT" TO A8
|
||
MOVI STRNGRAM,A7 ;POINT AT STRING RAM
|
||
CLR A0
|
||
MOVB A0,*A7 ;STRINGRAM IS NULL
|
||
CALLA STRCAT ;COPY THE STRING OUT OF OBJECT BLOCK
|
||
MOVE A7,A8
|
||
CALLA STR_FREE ;AND FREE UP THE OBJECT BLOCK
|
||
|
||
GET_CX
|
||
CLRC ;RETURN OK
|
||
GET_CXX
|
||
RETS
|
||
*
|
||
* NO OBJECTS AVAILABLE TO FORM STRING
|
||
*
|
||
NO_SOBJ
|
||
MOVI MESS_NULL,A8
|
||
SETC
|
||
JRUC GET_CXX ;RETURN BLANK STRING!
|
||
|
||
**************************************************************************
|
||
*
|
||
* CAT_A0
|
||
*
|
||
* A0 HAS A BINARY NUMBER. TURN INTO DECIMAL STRING
|
||
* AND CONCATONATE TO THE STRING WE'RE BUILDING IN A7. *
|
||
*
|
||
**************************************************************************
|
||
CAT_A0
|
||
PUSH a8
|
||
MOVE A0,A8 ;CREDIT COUNT IN A8
|
||
CALLA HEXTOASC ;STRING
|
||
CALLA STRCAT ;NOW WE HAVE WHOLE NUMBER.
|
||
MMFM SP,A8
|
||
RETS
|
||
|
||
**************************************************************************
|
||
*
|
||
* ADD_PROMPT
|
||
*
|
||
* THIS IS CALLED ON THE CREDITS PAGE TO ADD A WORD OF
|
||
* WISDOM BELOW THE CREDITS MESSAGE. IT PICKS OUT THE
|
||
* CORRECT MESSAGES AND BLINKS THEM.
|
||
*
|
||
**************************************************************************
|
||
ADD_PROMPT
|
||
MOVI PROMPT_PROC,A7
|
||
CALLA P_FORK ;START UP ANOTHER W/ SAME ID TO FLASH!
|
||
RETP
|
||
|
||
PROMPT_PROC
|
||
MOVK ADJFREPL,A0
|
||
CALLA GET_ADJ
|
||
JRNZ rf4 ;ALWAYS READY FOR 4 PLAYERS!
|
||
|
||
CALLR CRED_P
|
||
JRZ PP1
|
||
|
||
MOVE A0,A1 ;PUT CREDITS IN A1
|
||
MOVK ADJCSTRT,A0 ;GET AMOUNT NEEDED TO START.
|
||
CALLA GET_ADJ
|
||
CMP A0,A1 ;ARE THERE ENOUGH TO START?
|
||
JRLO PP1 ;NOPE...."INSERT COIN"
|
||
*
|
||
* WE HAVE ENOUGH TO START FOR 1....HOW ABOUT 2?
|
||
*
|
||
jrz PP2
|
||
move a0,a2
|
||
add a2,a2
|
||
cmp a1,a2
|
||
jrz RF2
|
||
jrhi PP2
|
||
add a0,a2
|
||
cmp a1,a2
|
||
jrhi RF2
|
||
add a0,a2
|
||
cmp a1,a2
|
||
jrhi rf3
|
||
|
||
|
||
*
|
||
* >1 = READY FOR 2 PLAYERS. PRESS START.
|
||
*
|
||
rf4
|
||
MOVI MESS_READY_4,A1
|
||
JRUC RED_1
|
||
rf3
|
||
MOVI MESS_READY_3,A1
|
||
JRUC RED_1
|
||
RF2
|
||
MOVI MESS_READY_2,A1
|
||
JRUC RED_1
|
||
|
||
PP1
|
||
MOVI MESS_INS_COIN,A0
|
||
CLR A1
|
||
JRUC RED_2
|
||
|
||
PP2
|
||
MOVI MESS_READY_1,A1
|
||
RED_1
|
||
MOVI MESS_PRESS_START,A0
|
||
RED_2
|
||
MOVE A0,*A13(PDATA),L ;HOLD MESSAGES
|
||
MOVE A1,*A13(PDATA+LONG_SIZE),L
|
||
|
||
BLINK_LOOP
|
||
MOVE *A13(PDATA),A8,L ;FIRST MESSAGE
|
||
JSRP L_MESS
|
||
MOVE *A13(PDATA+LONG_SIZE),A8,L ;2ND MESSAGE
|
||
JRZ BL1 ;NOT HOME!
|
||
|
||
JSRP L_MESS
|
||
|
||
BL1
|
||
SLEEPK 10H
|
||
|
||
MOVE *A13(PDATA),A8,L
|
||
CALLR LM_SETUP
|
||
CLR A6 ;BLACK
|
||
JSRP LM_FINIS
|
||
|
||
BL2
|
||
SLEEPK 10H
|
||
JRUC BLINK_LOOP
|
||
|
||
**************************************************************************
|
||
*
|
||
* MESSAGE SECTION
|
||
*
|
||
**************************************************************************
|
||
ROM_NAME
|
||
.byte "TOURNAMENT EDITION REV 4.0 3/23/94",0
|
||
.even
|
||
|
||
FACTORY_TABLE
|
||
|
||
.word 0 ;ADJNULL 0
|
||
.word 1 ;ADJPRICE 1 ;MASTER PRICING
|
||
.word 1 ;ADJLMULT 2
|
||
.word 4 ;ADJCMULT 3
|
||
.word 1 ;ADJRMULT 4
|
||
.word 0 ;ADJXMULT 5
|
||
.word 1 ;ADJCUNIT 6
|
||
.word 0 ;ADJBUNIT 7
|
||
.word 0 ;ADJMUNIT 8
|
||
.word 4 ;ADJCDIV 9
|
||
.word 1 ;ADJFRAC 10 ;NON ZERO SAYS SHOW HALF CREDITS
|
||
.word 2 ;ADJCSTRT 11 ;CREDITS REQUIRED TO START
|
||
.word 2 ;ADJCCONT 12 ;CREDITS REQUIRED TO CONTINUE
|
||
|
||
.word 3 ;ADJDIFF 13 ;Difficulty
|
||
|
||
.word 0 ; 14
|
||
.word 0 ; 15
|
||
.word 1 ;ADJMUSIC 16 ;attract mode music = off
|
||
.word 50 ;ADJMAXC 17 ;MAXIMUM CREDITS
|
||
.word 0 ;ADJFREPL 18 ;NON-ZERO MEANS FREE PLAY
|
||
.word 1 ;ADJVIRGIN 19 ;NON-ZERO MEANS 1ST 8 OF COIN ADJUST BLOCK UNTOUCHED
|
||
.word 8 ;ADJFULLG 20 ;credits needed to purchase full game (4-16)
|
||
.word 1 ;ADJ1ST6 21 ;NON-ZERO MEANS 1ST 6 UNTOUCHED.
|
||
.word 0 ;ADJNOCPAG 22
|
||
.word 1 ;ADJCNTR 23 ;COIN COUNTER MODE
|
||
.word 3 ;ADJSPEED 24 ;game timer speed (1-5)
|
||
.word 1 ;ADJHEADSZ 25 ;player head sizes (1-2)
|
||
.word 1 ;ADJWINMODE 26 ;(winner stays free)
|
||
.word 1 ;ADJCOMPASS 27 ;computer assistance (0=on)
|
||
.word 1 ;ADJTOURNEY 28 ;Tournament mode (0=on)
|
||
**
|
||
|
||
.if 0
|
||
.word 0 ;ADJ_UNUSED 0
|
||
.word 2 ;ADJ_PRICING 1 ;MASTER PRICING
|
||
.word 1 ;ADJ_LEFT_MULT 2
|
||
.word 1 ;ADJ_RIGHT_MULT 4
|
||
.word 4 ;ADJ_CENTER_MULT 3
|
||
.word 0 ;ADJ_EXTRA_MULT 5
|
||
.word 1 ;ADJ_UNITS_CREDIT 6
|
||
.word 0 ;ADJ_UNITS_BONUS 7
|
||
.word 0 ;ADJ_MIN_UNITS 8
|
||
.word 4 ;ADJCDIV 9 ;COINS PER DOLLAR
|
||
.word 1 ;SHOW FRACTIONS 10
|
||
.word 1 ;ADJ_START_CRED 11 ;CREDITS REQUIRED TO START
|
||
.word 1 ;ADJ_CONT_CRED 12 ;CREDITS REQUIRED TO CONTINUE
|
||
.word 3 ;ADJ_DIFFICULTY 13
|
||
.word 5000 ;ADJ_HSRESET 14
|
||
.word 3 ;ADJ_LIVES 15
|
||
.word 0 ;ADJ_AMODE_MUSIC 16
|
||
.word 50 ;MAXIMUM CREDITS 17
|
||
.word 0 ;FREE PLAY 18
|
||
.word 1 ;NON-ZERO MEANS COIN BLOCK (1ST 8) UNTOUCHED 19
|
||
.word 0 ;ZERO MEANS NORMAL GORE ... 1 = SOFTEN IT 20
|
||
.word 1 ;NON-ZERO MEANS 1ST 6 UNTOUCHED. 21
|
||
.word 0 ;NON-ZERO MEANS NO COIN-SPECIFIC MESSAGE ON COIN PAGE 21
|
||
.word 1 ;ADJCNTR 23 ADJUST MECH COIN COUNTER
|
||
.endif
|
||
|
||
* A0 = SLEEP
|
||
* A1 = ROUTINE
|
||
* A6 = COLOR
|
||
* A8 = STRING POINTER
|
||
* A9 = SCREEN ADDRESS
|
||
* A10 = SPACING
|
||
* A11 = FONT
|
||
* A14 = FLAGS
|
||
*
|
||
|
||
MESS_CREDITS
|
||
.byte "CREDITS: ",0
|
||
.even
|
||
|
||
* NORMAL CREDITS SETUP STRING
|
||
*
|
||
MESS_CNUM
|
||
MESS_MAC RD15FONT,SPACING20,CP_CX,135,ROBO_LF,STRCNRM,0
|
||
*
|
||
* "LOW" CREDITS SETUP STRING WHEN EXTRA ADVICE ON PRICING
|
||
* IS BEING ADDED.
|
||
*
|
||
MESS_LOWNUM
|
||
MESS_MAC RD15FONT,SPACING20,CP_CX,135,ROBO_LF,STRCNRM,0
|
||
|
||
MESS_FREEP
|
||
.byte "FREE PLAY",0,0
|
||
.even
|
||
|
||
MESS_READY_1
|
||
MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0
|
||
.byte "READY FOR 1 PLAYER",0,0
|
||
.even
|
||
|
||
MESS_READY_2
|
||
MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0
|
||
.byte "READY FOR 1 - 2 PLAYERS",0,0
|
||
.even
|
||
|
||
MESS_READY_3
|
||
MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0
|
||
.byte "READY FOR 1 - 3 PLAYERS",0,0
|
||
.even
|
||
|
||
MESS_READY_4
|
||
MESS_MAC RD15FONT,SPACING20,CP_CX,155,ROBO_YELLOW,STRCNRM,0
|
||
.byte "READY FOR 1 - 4 PLAYERS",0,0
|
||
.even
|
||
|
||
MESS_INS_COIN
|
||
MESS_MAC RD15FONT,SPACING20,CP_CX,175,ROBO_YELLOW,STRCNRM,0
|
||
|
||
|
||
.byte "INSERT COINS",0,0
|
||
|
||
|
||
.even
|
||
|
||
MESS_PRESS_START
|
||
MESS_MAC RD15FONT,SPACING20,CP_CX,175,ROBO_YELLOW,STRCNRM,0
|
||
.byte "PRESS START",0,0
|
||
.even
|
||
|
||
.if 0
|
||
|
||
**************************************************************************
|
||
*
|
||
* DUMPING SOFTWARE
|
||
*
|
||
**************************************************************************
|
||
DUMP_FS
|
||
CALLR DUMP_PAGE
|
||
CLR A0
|
||
MOVI DUMP_PTR,A7
|
||
CALLA WC_WORD ;SET NUMBER OF DUMPS TO ZERO
|
||
RETS
|
||
|
||
**************************************************************************
|
||
*
|
||
* ADD_DUMP
|
||
*
|
||
* THIS IS CALLED TO RECORD A DUMP. A0 THROUGH A9 ARE
|
||
* RECORDED IN MEMORY.
|
||
*
|
||
**************************************************************************
|
||
DUMP_SIZE .equ 10*C_LONG_SIZE ;9 LONG WORDS.
|
||
DUMP_LAST .equ CMOS+>8000-DUMP_SIZE ;Let em use the whole page!
|
||
MAX_DUMP .equ 8 ;DON'T HOLD MORE THAN 12/PAGE
|
||
|
||
ADD_DUMP
|
||
MMTM SP,B0,B1,B2
|
||
MMTM SP,A0,A1,A7
|
||
CALLR DUMP_PAGE ;SET CMOS PAGE CORRECTLY.
|
||
MOVE A0,B0
|
||
MOVE A7,B2 ;SAVE THESE!
|
||
MOVE A1,B1
|
||
|
||
MOVI DUMP_PTR,A7
|
||
CALLA RC_WORD ;GET THE INDICATOR OF HOW MANY.
|
||
MOVI DUMP_SIZE,A1
|
||
MPYU A0,A1 ;THIS IS OFFSET INTO CMOS FOR THIS ENTRY!
|
||
|
||
ADDI DUMP_DATA,A1 ;NOW A1 POINTS WHERE WE'RE PUTTING THE DATA!
|
||
CMPI DUMP_LAST,A1 ;ARE WE TOO FAR FOR ANOTHER?
|
||
JRHS NO_DUMP ;YEP....SKIP IT
|
||
|
||
INC A0 ;1 MORE OUT THERE!
|
||
CALLA WC_WORD ;CHALK IT!
|
||
|
||
MOVE A1,A7 ;THIS IS POINTER TO STORE DATA.
|
||
MOVE B0,A0 ;THIS IS A0
|
||
CALLA WC_LONGI
|
||
MOVE B1,A0 ;THIS IS A1
|
||
CALLA WC_LONGI
|
||
MOVE A2,A0 ;THIS IS A2
|
||
CALLA WC_LONGI
|
||
MOVE A3,A0 ;THIS IS A3
|
||
CALLA WC_LONGI
|
||
MOVE A4,A0 ;THIS IS A4
|
||
CALLA WC_LONGI
|
||
MOVE A5,A0 ;THIS IS A5
|
||
CALLA WC_LONGI
|
||
MOVE A6,A0 ;THIS IS A6
|
||
CALLA WC_LONGI
|
||
MOVE B2,A0 ;THIS IS A7
|
||
CALLA WC_LONGI
|
||
MOVE A8,A0 ;THIS IS A8
|
||
CALLA WC_LONGI
|
||
MOVE A9,A0 ;THIS IS A9
|
||
CALLA WC_LONGI
|
||
NO_DUMP
|
||
MMFM SP,A0,A1,A7
|
||
MMFM SP,B0,B1,B2
|
||
RETS
|
||
|
||
DUMP_PAGE
|
||
PUSH a1
|
||
MOVI DUMP_SELECT,A1 ;THIS IS DUMP PAGE
|
||
CALLA SET_PAGE ;SET IT PLEASE
|
||
MMFM SP,A1
|
||
RETS
|
||
|
||
DISPDUMP
|
||
CALLR DUMP_PAGE
|
||
MOVI DUMP_PTR,A7
|
||
CALLA RC_WORD ;GET THE INDICATOR OF HOW MANY.
|
||
JRZ NOTHIN_TO_DUMP
|
||
|
||
CLR A9 ;THIS IS CURRENT ONE
|
||
MOVE A0,A8 ;THIS IS THE LAST ONE TO DO
|
||
|
||
DO_ANOTHER_DPAGE
|
||
CALLA CLR_SCRN ;CLEAR SCREEN
|
||
CALLR DUMP_PAGE
|
||
movk 20,a10 ;This is y coordiante of current one!
|
||
MOVI MAX_DUMP,A11 ;THIS IS MAX NUMBER PER PAGE.
|
||
|
||
DO_ANOTHER_DUMP
|
||
JSRP DO_DUMP
|
||
addk 30,a10 ;Kick y up
|
||
INC A9 ;KICK TO NEXT DUMP
|
||
CMP A8,A9 ;UNTIL THEY'RE ALL DONE!
|
||
JRHS DUMP_DONE ;WE'RE NOT ALL DONE YET!
|
||
|
||
DSJS A11,DO_ANOTHER_DUMP ;NOT FOR THIS PAGE EITHER!
|
||
|
||
JSRP WAIT_MUT ;WATCH FOR STICKS!
|
||
JRUC DO_ANOTHER_DPAGE
|
||
|
||
.endif
|
||
|
||
**************************************************************************
|
||
*
|
||
* WAIT_MUT
|
||
*
|
||
* THIS IS LIKE "WAIT_BUT"....WAIT FOR ANY BUTTON EXCEPT
|
||
* THAT IT WILL CLEAR OUT THE DUMPS IF BOTH STICKS ARE PUSHED
|
||
* DOWN.
|
||
*
|
||
**************************************************************************
|
||
WAIT_MUT
|
||
CALLA FORM_SWS ;1ST STATE DOESN'T COUNT
|
||
*
|
||
* RETURN CURRENT STATE IN A0..PREVIOUS STATE IN A1.
|
||
*
|
||
WB1
|
||
SLEEPK 1
|
||
|
||
CALLA FORM_SWS
|
||
MOVE A0,A2
|
||
ANDI 2002H,A2
|
||
CMPI 2002H,A2
|
||
JRNZ WB2 ;NOT "CLEAR"
|
||
|
||
; .REF GETSPEAK
|
||
; CALLA GETSPEAK
|
||
|
||
; SOUND1 COINSND
|
||
; MOVK 10,A0
|
||
; MOVE A0,@BTIME ;RESTUFF BUYIN TIMER
|
||
; callr conttimers_set
|
||
|
||
|
||
; CALLR DUMP_FS ;CLEAR OUT THE DUMPS!
|
||
; CALLR CLR_DUMP_AUD
|
||
JRUC WB1
|
||
|
||
getcoin
|
||
movi coin_snd,a0
|
||
jauc snd_play1ovr
|
||
|
||
|
||
WB2 NOT A1 ;LAST = 0 AND NOW = 1 MEANS EDGE!
|
||
AND A1,A0 ;1'S WHERE WE HAVE POSITIVE EDGE.
|
||
ANDI BUTTONS,A0 ;IS IT A BUTTON?
|
||
JRZ WB1
|
||
|
||
;DO NEW SOUND CALL HERE
|
||
|
||
SOUND1 beep2_snd
|
||
RETP
|
||
|
||
|
||
DUMP_DONE
|
||
RETP ;AND RETURN TO CALLER!
|
||
|
||
NOTHIN_TO_DUMP
|
||
CALLA CLR_SCRN ;PRINT SOMETHING PLEASE
|
||
MOVI MESS_NODUMP,A8
|
||
JSRP L_MESS
|
||
RETP
|
||
|
||
**************************************************************************
|
||
* DO_DUMP
|
||
* A9=DUMP NUMBER TO DO
|
||
* A10=Y POSITION.
|
||
|
||
.if 0
|
||
DO_DUMP
|
||
MMTM A12,A8,A9,A10,A11
|
||
|
||
MOVI DUMP_SIZE,A7
|
||
MPYU A9,A7 ;THIS IS OFFSET INTO CMOS FOR THIS ENTRY!
|
||
|
||
ADDI DUMP_DATA,A7 ;NOW A1 POINTS WHERE WE'RE PUTTING THE DATA!
|
||
*
|
||
* Y IS IN A10
|
||
*
|
||
MOVE A10,A3 ;Y IN A3
|
||
MOVK 30,A2 ;STORE X IN A2
|
||
MOVK 10,A5 ;NUMBER OF WORDS TO DUMP
|
||
NEXT_ELE
|
||
CALLA RC_LONGI ;GET A WORD
|
||
MOVE A0,A4 ;HEX IN A4
|
||
|
||
MOVE A7,*A13(PDATA),L
|
||
MOVE A2,*A13(PDATA+LONG_SIZE),L
|
||
MOVE A3,*A13(PDATA+(2*LONG_SIZE)),L
|
||
MOVE A5,*A13(PDATA+(3*LONG_SIZE)),L
|
||
|
||
JSRP WRITE_HEX ;WRITE IT OUT.....A0 = DATA
|
||
* A10 = Y
|
||
* A11 = X
|
||
MOVE *A13(PDATA),A7,L
|
||
MOVE *A13(PDATA+LONG_SIZE),A2,L
|
||
MOVE *A13(PDATA+(2*LONG_SIZE)),A3,L
|
||
MOVE *A13(PDATA+(3*LONG_SIZE)),A5,L
|
||
|
||
ADDI 48H,A2
|
||
|
||
CMPI 6,A5 ;WHEN WE'RE DOWN TO 4 SKIP TO NEXT LINE
|
||
JRNZ NO_SKIP_NOW
|
||
|
||
ADDK 12,A3 ;PUSH TO 2ND LINE
|
||
MOVI 33,A2 ;RE-MARGIN OVER. (30)
|
||
|
||
NO_SKIP_NOW
|
||
DSJ A5,NEXT_ELE
|
||
|
||
MMFM A12,A8,A9,A10,A11
|
||
RETP
|
||
|
||
.endif
|
||
|
||
**************************************************************************
|
||
*
|
||
* WRITE_HEX
|
||
*
|
||
* A4 = DATA
|
||
* A3 = Y
|
||
* A2 = X
|
||
*
|
||
**************************************************************************
|
||
WRITE_HEX
|
||
MOVI MESS_DUMP,A8
|
||
CALLR LM_SETUP ;SETUP FOR A DUMP!
|
||
MOVE A3,A9 ;MOVE Y DOWN
|
||
SLL 16,A9 ;SHIFT Y INTO PLACE
|
||
ADD A2,A9 ;ADD IN X
|
||
|
||
MOVE A4,A8
|
||
CLR A3 ;NO COMMAS!
|
||
CALLR HTOHXASC ;CONVERT PLEASE!
|
||
JSRP LM_FINIS
|
||
RETP
|
||
|
||
**************************************************************************
|
||
* HTOHXASC - CONVERTS A 32 BIT HEX # TO AN ASCII STRING TERMINATED BY 0
|
||
* A3=NON ZERO IF COMMAS ARE TO BE ADDED!
|
||
* A8=HEX #
|
||
* Rets:
|
||
* A8=PTR TO THE STRING
|
||
|
||
HTOHXASC
|
||
MMTM SP,A1,A2,A9
|
||
CLR A1
|
||
CLR A2 ;COMMA COUNT
|
||
MOVE A1,-*SP ;HERE'S THE NULL TERMINATOR
|
||
MOVK 16,A1 ;DIVISOR FOR HEX
|
||
MOVE A8,A9
|
||
HEXTASC2
|
||
CLR A8
|
||
DIVU A1,A8
|
||
ADDI '0',A9 ;MAKE THE REMAINDER ASCII
|
||
CMPI '9',A9 ;IS IT IN A-F RANGE?
|
||
JRLS HHH1
|
||
ADDI 7,A9 ;MAKE ALPHA!
|
||
HHH1
|
||
MOVE A9,-*SP ;SAVE HERE
|
||
MOVE A8,A9
|
||
JRZ HEXTASC3 ;BR = DONE!
|
||
INC A2
|
||
CMPI 3,A2 ;COMMA CHECK
|
||
JRLO HEXTASC2 ;BR = NO COMMA
|
||
*
|
||
* SEE IF WE'RE DOING COMMAS
|
||
*
|
||
MOVE A3,A3 ;COMMAS?
|
||
JRZ HEXTASC2 ;NOPE....IGNORE!
|
||
|
||
MOVI ',',A2
|
||
MOVE A2,-*SP ;STUFF A COMMA
|
||
CLR A2
|
||
JRUC HEXTASC2
|
||
HEXTASC3
|
||
MOVI STRNGRAM,A1 ;STORE HERE FOR BLOW OUT
|
||
MOVE A1,A8
|
||
|
||
HEXTASC4
|
||
MOVE *SP+,A9
|
||
MOVB A9,*A1
|
||
ADDK 8,A1
|
||
MOVE A9,A9
|
||
JRNZ HEXTASC4
|
||
MMFM SP,A1,A2,A9
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* STRCAT - THIS IS CALLED TO CONCATONATE 2 STRINGS.
|
||
* A7 <--- <A7><A8>
|
||
* THAT IS.......CONCATONATE A8 ONTO THE END OF A7.
|
||
|
||
STRCAT
|
||
MMTM SP,A7,A0,A8
|
||
STRC2
|
||
MOVB *A7,A0 ;WALK DOWN A7 TO ITS ZERO.
|
||
JRZ STRC1 ;WE'RE THERE!
|
||
|
||
ADDK BYTE_SIZE,A7 ;KICK TO NEXT BYTE
|
||
JRUC STRC2
|
||
*
|
||
* NOW A7 POINTS AT ITS ZERO.
|
||
*
|
||
STRC1
|
||
MOVB *A8,A0 ;GET A BYTE FROM 2ND STRING
|
||
MOVB A0,*A7 ;ADD THIS TO 1ST STRING
|
||
ADDK BYTE_SIZE,A7
|
||
ADDK BYTE_SIZE,A8
|
||
MOVE A0,A0 ;DID WE JUST MOVE TERMINATOR?
|
||
JRNZ STRC1 ;NOPE...MOVE ANOTHER
|
||
|
||
MMFM SP,A7,A0,A8
|
||
RETS
|
||
|
||
MESS_DUMP
|
||
MESS_MAC RD7FONT,SPACING07,23,227,ROBO_WHITE,STRLNRM,0
|
||
|
||
MESS_NODUMP
|
||
MESS_MAC RD15FONT,SPACING20,200,128,ROBO_ORANGE,STRCNRM,0
|
||
.byte "NOTHING HERE....PRESS ADVANCE!",0,0
|
||
.even
|
||
|
||
MESS_SLASH
|
||
.byte "/",0
|
||
.even
|
||
|
||
MESS_2SPACE .byte " "
|
||
MESS_NULL .byte 0
|
||
.even
|
||
|
||
SETUP_1_OF_3
|
||
MESS_MAC RD15FONT,SPACING20,CP_CX,CP_13,ROBO_LASER,STRCNRM,0
|
||
SETUP_2_OF_3
|
||
MESS_MAC RD15FONT,SPACING20,CP_CX,CP_23,ROBO_LASER,STRCNRM,0
|
||
SETUP_3_OF_3
|
||
MESS_MAC RD15FONT,SPACING20,CP_CX,CP_33,ROBO_LASER,STRCNRM,0
|
||
|
||
SETUP_1_OF_2
|
||
MESS_MAC RD15FONT,SPACING20,CP_CX,CP_12,ROBO_LASER,STRCNRM,0
|
||
|
||
SETUP_2_OF_2
|
||
MESS_MAC RD15FONT,SPACING20,CP_CX,CP_22,ROBO_LASER,STRCNRM,0
|
||
|
||
SETUP_1_OF_1
|
||
MESS_MAC RD15FONT,SPACING20,CP_CX,CP_11,ROBO_LASER,STRCNRM,0
|
||
|
||
dollar_mes
|
||
RJR_STR ogmd10_ascii,5,0,200,53,SGMD8RED,print_string_C2
|
||
.byte "THIS GAME ACCEPTS DOLLAR BILLS",0,0
|
||
.even
|
||
|
||
CPYR_MES
|
||
RJR_STR sgmd8_ascii,5,0,200,240,SGMD8YEL,print_string_C2
|
||
.byte " COPYRIGHT 1993 MIDWAY MANUFACTURING COMPANY",0,0
|
||
.even
|
||
|
||
MESS_MAC RD7FONT,SPACING07,CP_CX,240,ROBO_WHITE,STRCNRM,0
|
||
.byte " COPYRIGHT 1993 MIDWAY MANUFACTURING COMPANY",0,0
|
||
.even
|
||
|
||
;MEN_MES
|
||
; MESS_MAC RD7FONT,SPACING07,CP_CX+6,20,ROBO_WHITE,STRCNRM,0
|
||
; .byte "LIVES AWARDED AT START",0,0
|
||
; .even
|
||
;MEN_MES2
|
||
; MESS_MAC RD7FONT,SPACING07,CP_CX+6,30,ROBO_WHITE,STRCNRM,0
|
||
; .byte "LIVES AWARDED FOR A CONTINUE",0,0
|
||
; .even
|
||
|
||
|
||
|
||
|
||
|
||
.end
|
||
|