cruisin-usa/COIN.ASM

1383 lines
24 KiB
NASM
Executable File

.FILE "COIN.ASM"
*----------------------------------------------------------------------------
*COIN ROUTINES
*
*COPYRIGHT (C) 1994 BY TV GAMES, INC.
*ALL RIGHTS RESERVED
*
*
.include MACS.EQU
.include MPROC.EQU
.include VUNIT.EQU
.include CMOS.EQU
.include SYSID.EQU
.include SYS.EQU
.include GLOBALS.EQU
.include SNDTAB.EQU
.include PALL.EQU
.include OBJECTS.EQU
.include TEXT.EQU
.bss COINOFF,1 ;T -> DONT SHOW "INSERT COINS" MESSAGE
*----------------------------------------------------------------------------
*THESE ROUTINES MUST PRESERVE R3
COIN1:
SOND1 COININ
INCAUD AUD_COIN1
CALL SEND_COINDROP
CALL GET_COIN1_COUNTER
LDP @COIN_COUNTER1
LDI @COIN_COUNTER1,R1
ADDI R0,R1
; INC R1
STI R1,@COIN_COUNTER1
SETDP
CALL GET_COIN1
BU CHECK_CREDITS
COIN2:
SOND1 COININ
INCAUD AUD_COIN2
CALL SEND_COINDROP
;this is a possibly permenant kludge of only having
;1 coin counter
;
LDI @DIPRAM,R0
TSTB DIP_COINCNTR,R0
BZ JAJA3
CALL GET_COIN2_COUNTER
LDP @COIN_COUNTER1
LDI @COIN_COUNTER1,R1
ADDI R0,R1
; INC R1
STI R1,@COIN_COUNTER1
SETDP
BU JAJA5
JAJA3
CALL GET_COIN2_COUNTER
LDP @COIN_COUNTER2
LDI @COIN_COUNTER2,R1
ADDI R0,R1
STI R1,@COIN_COUNTER2
SETDP
JAJA5
CALL GET_COIN2
BU CHECK_CREDITS
COIN3:
SOND1 COININ
INCAUD AUD_COIN2
CALL GET_COIN3_COUNTER
LDP @COIN_COUNTER1
LDI @COIN_COUNTER1,R1
ADDI R0,R1
STI R1,@COIN_COUNTER1
SETDP
CALL GET_COIN3
BU CHECK_CREDITS
COIN4:
SOND1 COININ
INCAUD AUD_COIN4
CALL GET_COIN4_COUNTER
LDP @COIN_COUNTER1
LDI @COIN_COUNTER1,R1
ADDI R0,R1
STI R1,@COIN_COUNTER1
SETDP
CALL GET_COIN4
BU CHECK_CREDITS
SERV_COIN:
SOND1 COININ
INCAUD AUD_SERVICE_CREDITS
READAUD AUD_CREDITS
LDI R0,R1
INC R1
READAUD ADJ_MAX_CREDITS
CMPI R0,R1
LDIGE R0,R1
LDI R1,R2
SETAUD AUD_CREDITS
DIE
CHECK_CREDITS:
;R2 HAS PCREDITS TO INCREMENT
;
CMPI 0,R2 ;ZERO COIN SLOT? THIS will mees up the bonus system
BEQ CHECK_CREDITSX
LDI R2,R1 ;ADD TO PCREDITS
ADDAUD AUD_PCREDITS ;R2 HAS NEW VALUE
LDI R1,R2 ;ADD TO BCREDITS
ADDAUD AUD_BCREDITS ;BONUS COUNTER
READAUD AUD_PCREDITS ;READ BACK THE PCREDITS
LDI R0,R2
CHECK_CREDITSLP
;FIRST CHECK TO SEE IF MORE THAN MIN PCREDITS FOR A CREDIT
CALL GET_MIN_UNITS
CMPI R1,R2
BLT NOINC
SKIP_MIN
CALL GET_UNITS_PER_CREDIT
CMPI R1,R2
BLT NOINC
SUBI R1,R2
SETAUD AUD_PCREDITS
PUSH R2
READAUD AUD_CREDITS
PUSH R2
LDI R0,R1
INC R1
READAUD ADJ_MAX_CREDITS
CMPI R0,R1
LDIGE R0,R1
LDI R1,R2
SETAUD AUD_CREDITS
POP R2
INCAUD AUD_PAID_CREDITS
NOINCCRD
POP R2
BU CHECK_CREDITSLP
NOINC
READAUD AUD_BCREDITS
LDI R0,R2
CALL GET_UNITS_FOR_BONUS
CMPI 0,R1
BEQ NOBONUS
CMPI R1,R2
BLT NOBONUS
LDI 0,R2
LDI AUD_BCREDITS,AR2
CALL AUDIT_WRITE
READAUD AUD_CREDITS ;BONUS CREDIT
LDI R0,R1
ADDI 1,R1 ;Actually give the bonus
READAUD ADJ_MAX_CREDITS
CMPI R0,R1
LDIGE R0,R1
LDI R1,R2
SETAUD AUD_CREDITS
LDI 0,R2
SETAUD AUD_PCREDITS
NOBONUS
CHECK_CREDITSX
DIE
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*GETCOIN
*
*RETURNS
* AR0 PTR TO COIN TABLE ENTRY
*
.global COIN_ENTRY_SIZE
.ref COIN_TABLEI,COIN_TABLEENDI
.def GETCOIN
.def GETCOINTXT
GETCOIN:
LDI ADJ_STANDARD_PRICING,AR2
CALL ADJUSTMENT_READ
CMPI 1,R0
BEQ USE_STANDARD
LDI @CUSTOM_COINTABI,AR0
RETS
USE_STANDARD
LDI ADJ_COINMODE,AR2
CALL ADJUSTMENT_READ
LDI R0,AR0
GET_THIS_COIN:
AND 07Fh,AR0
MPYI COIN_ENTRY_SIZE,AR0
ADDI @COIN_TABLEI,AR0
CMPI @COIN_TABLEENDI,AR0
BLT GETCOINX
LDI @COIN_TABLEI,AR0
GETCOINX
RETS
.def GET_THIS_COINTXT
GET_THIS_COINTXT:
CALL GET_THIS_COIN
ADDI 3,AR0 ;NOTE AR0 now points to the COIN TABLE ENTRY WHERE THE MESSAGE RESIDES
RETS
GETCOINTXT:
CALL GETCOIN
ADDI 3,AR0 ;NOTE AR0 now points to the COIN TABLE ENTRY WHERE THE MESSAGE RESIDES
RETS
*----------------------------------------------------------------------------
*COIN TABLE ENTRY 11 words total
*0 byte coin1,coin2,coin3,coin4
*1 byte units per credit,units for bonus,min units,credits to start
*2 byte credits to continue,show partial credits,NOT USED,NOT USED
*3 word message_string line 1;Must have at lease one message
*4 word message_string line 2; 0 = no message on line 2 or 3
*5 word message_string line 3; 0 = no message on line 3
*6 word message_string coin 1 denaomination NOTE: NULL$ = NOT USED
*7 word message_string coin 2 denaomination NOTE: NULL$ = NOT USED
*8 word message_string coin 3 denaomination NOTE: NULL$ = NOT USED
*9 word message_string coin 4 denaomination NOTE: NULL$ = NOT USED
*10 byte coin1_denom,coin2_denom,coin3_denom,coin4_denom
*NOTE ALL UNUSED BYTES MUST BE SET TO 0
LONGROUT
*----------------------------------------------------------------------------
GET_COIN1:
PUSH AR0
PUSH AR2
PUSH R0
PUSHF R0
CALL GETCOIN
LDI *AR0,R2 ;GET UNITS FOR COIN 1
AND 0FFh,R2 ; byte coin1,coin2,coin3,coin4
POPF R0
POP R0
POP AR2
POP AR0
RETS
*----------------------------------------------------------------------------
GET_COIN2:
PUSH AR0
PUSH AR2
PUSH R0
PUSHF R0
CALL GETCOIN
LDI *AR0,R2 ;GET UNITS FOR COIN 2
LSH -8,R2
AND 0FFh,R2 ; byte coin1,coin2,coin3,coin4
POPF R0
POP R0
POP AR2
POP AR0
RETS
*----------------------------------------------------------------------------
GET_COIN3:
PUSH AR0
PUSH AR2
PUSH R0
PUSHF R0
CALL GETCOIN
LDI *AR0,R2 ;GET UNITS FOR COIN 3
LSH -16,R2
AND 0FFh,R2 ; byte coin1,coin2,coin3,coin4
POPF R0
POP R0
POP AR2
POP AR0
RETS
*----------------------------------------------------------------------------
GET_COIN4:
PUSH AR0
PUSH AR2
PUSH R0
PUSHF R0
CALL GETCOIN
LDI *AR0,R2 ;GET UNITS FOR COIN 4
LSH -24,R2
AND 0FFh,R2 ; byte coin1,coin2,coin3,coin4
POPF R0
POP R0
POP AR2
POP AR0
RETS
*----------------------------------------------------------------------------
GET_UNITS_PER_CREDIT:
PUSH AR0
PUSH AR2
PUSH R0
PUSHF R0
CALL GETCOIN
LDI *+AR0(1),R1 ;GET #MIN UNITS FOR 1 CREDIT
AND 0FFh,R1 ; byte units per credit,units for bonus,min units,credits to start
POPF R0
POP R0
POP AR2
POP AR0
RETS
*----------------------------------------------------------------------------
GET_UNITS_FOR_BONUS:
PUSH AR0
PUSH AR2
PUSH R0
PUSHF R0
CALL GETCOIN
LDI *+AR0(1),R1 ;GET #UNITS FOR 1 CREDIT
LSH -8,R1
AND 0FFh,R1 ; byte units per credit,units for bonus,min units,credits to start
POPF R0
POP R0
POP AR2
POP AR0
RETS
*----------------------------------------------------------------------------
GET_MIN_UNITS:
PUSH AR0
PUSH AR2
PUSH R0
PUSHF R0
CALL GETCOIN
LDI *+AR0(1),R1 ;GET #MIN UNITS FOR 1 CREDIT
LSH -16,R1
AND 0FFh,R1 ; byte units per credit,units for bonus,min units,credits to start
POPF R0
POP R0
POP AR2
POP AR0
RETS
*----------------------------------------------------------------------------
.def GET_CREDITS_TO_START
GET_CREDITS_TO_START:
PUSH AR0
PUSH AR2
PUSH R0
PUSHF R0
CALL GETCOIN
LDI *+AR0(1),R1 ;GET #UNITS FOR 1 CREDIT
LSH -24,R1
AND 0FFh,R1 ; byte units per credit,units for bonus,min units,credits to start
POPF R0
POP R0
POP AR2
POP AR0
RETS
*----------------------------------------------------------------------------
.def GET_CREDITS_TO_CONTINUE
GET_CREDITS_TO_CONTINUE:
PUSH AR0
PUSH AR2
PUSH R0
PUSHF R0
CALL GETCOIN
LDI *+AR0(2),R1 ;GET #UNITS FOR 1 CREDIT
AND 0FFh,R1 ; byte credits to continue,show partial credits,NOT USED,NOT USED
POPF R0
POP R0
POP AR2
POP AR0
RETS
*----------------------------------------------------------------------------
GET_SHOW_PARTIAL:
PUSH AR0
PUSH AR2
PUSH R0
PUSHF R0
CALL GETCOIN
LDI *+AR0(2),R1 ;GET #UNITS FOR 1 CREDIT
LSH -8,R1
AND 0FFh,R1 ; byte credits to continue,show partial credits,NOT USED,NOT USED
POPF R0
POP R0
POP AR2
POP AR0
RETS
*----------------------------------------------------------------------------
GET_COIN1_COUNTER:
PUSH AR0
PUSH AR2
CALL GETCOIN
LDI *+AR0(10),R0 ;GET UNITS FOR COIN 1 DENOMINATION
AND 0FFh,R0 ; byte coin1,coin2,coin3,coin4
POP AR2
POP AR0
RETS
*----------------------------------------------------------------------------
GET_COIN2_COUNTER:
PUSH AR0
PUSH AR2
CALL GETCOIN
LDI *+AR0(10),R0 ;GET UNITS FOR COIN 2 DENOMINATION
LSH -8,R0
AND 0FFh,R0 ; byte coin1,coin2,coin3,coin4
POP AR2
POP AR0
RETS
*----------------------------------------------------------------------------
GET_COIN3_COUNTER:
PUSH AR0
PUSH AR2
CALL GETCOIN
LDI *+AR0(10),R0 ;GET UNITS FOR COIN 3 DENOMINATION
LSH -16,R0
AND 0FFh,R0 ; byte coin1,coin2,coin3,coin4
POP AR2
POP AR0
RETS
*----------------------------------------------------------------------------
GET_COIN4_COUNTER:
PUSH AR0
PUSH AR2
CALL GETCOIN
LDI *+AR0(10),R0 ;GET UNITS FOR COIN 4 DENOMINATION
LSH -24,R0
AND 0FFh,R0 ; byte coin1,coin2,coin3,coin4
POP AR2
POP AR0
RETS
END_LONGROUT
*----------------------------------------------------------------------------
*Reads DIPSW3 to determine the default value of the coin mode
*RETURNS
* AR2= POINTER TO COIN MODE DATA
* R2= COINMODE NUMBER
.def GETCOIN_DEFAULT
.ref COUNTRY_DEFAULTS_ENDI
GETCOIN_DEFAULT:
PUSH AR2
CLRI AR2
LDP @DIPSW
LDI @DIPSW,R2
LDI *AR2,AR2
POP AR2
SETDP
RS 24,R2
NOT R2
LDI 0,R0
LDI 7,RC
RPTB INVBLP
LSH -1,R2
INVBLP ROLC R0
LDI R0,R2
AND 060h,R2
LSH -5,R2
.ref COUNTRY_DEFAULTSI
LDI @COUNTRY_DEFAULTSI,AR2
AND 01Fh,R0
MPYI 4,R0
ADDI R0,AR2
ADDI R2,AR2
CMPI @COUNTRY_DEFAULTS_ENDI,AR2
LDIGT @COUNTRY_DEFAULTSI,AR2
LDI *AR2,R0
SUBI @COIN_TABLEI,R0
LDI COIN_ENTRY_SIZE,R1
CALL DIV_I
LDI R0,R2
LDI *AR2,AR2
RETS
*----------------------------------------------------------------------------
*Set the custom coinage to the standard coin mode selected
.def SET_COINAGE_ADJ
SET_COINAGE_ADJ:
CALL PUSHALL ;Take no chances
CALL GET_COIN1
SETADJ ADJ_COIN1_UNITS
CALL GET_COIN2
SETADJ ADJ_COIN2_UNITS
CALL GET_COIN3
SETADJ ADJ_COIN3_UNITS
CALL GET_COIN4
SETADJ ADJ_COIN4_UNITS
CALL GET_UNITS_PER_CREDIT
LDI R1,R2
SETADJ ADJ_UNITS_PER_CREDIT
CALL GET_UNITS_FOR_BONUS
LDI R1,R2
SETADJ ADJ_BONUS_UNITS
CALL GET_MIN_UNITS
LDI R1,R2
SETADJ ADJ_UNITS_MIN
CALL GET_CREDITS_TO_START
LDI R1,R2
SETADJ ADJ_CREDITS_TO_START
CALL GET_CREDITS_TO_CONTINUE
LDI R1,R2
SETADJ ADJ_CREDITS_TO_CONTINUE
CALL GET_SHOW_PARTIAL
LDI R1,R2
SETADJ ADJ_SHOW_FRAC
CALL GET_COIN1_COUNTER
SETADJ ADJ_COIN1_COUNTER
CALL GET_COIN2_COUNTER
SETADJ ADJ_COIN2_COUNTER
CALL GET_COIN3_COUNTER
SETADJ ADJ_COIN3_COUNTER
CALL GET_COIN4_COUNTER
SETADJ ADJ_COIN4_COUNTER
CALL POPALL
RETS
*----------------------------------------------------------------------------
INIT_CUSTOM_COIN:
LDI 3*8,R5
LDI @CUSTOM_COINTABI,AR3
LDI ADJ_COIN4_UNITS,AR2
CALL INICC ;Set SLOT SETTINGS coin1,coin2,coin3,coin4
LDI ADJ_CREDITS_TO_START,AR2
LDI 3*8,R5 ;Set units per credit,units for bonus,min units,credits to start
CALL INICC
LDI ADJ_SHOW_FRAC,AR2
LDI 1*8,R5 ;Set credits to continue,show partial credits,NOT USED,NOT USED
CALL INICC
LDI @MSG_NULLI,R0 ;Set pointer to the string
STI R0,*AR3++
LDI 0,R0
STI R0,*AR3++
STI R0,*AR3++
LDI @MSG_NULLI,R0 ;Point denomination messages to NULL string
STI R0,*AR3++
STI R0,*AR3++
STI R0,*AR3++
STI R0,*AR3++
LDI 3*8,R5
LDI ADJ_COIN4_COUNTER,AR2
CALL INICC ;Set SLOT SETTINGS coin1,coin2,coin3,coin4
ICCX
RETS
INICC:
LDI 0,R6
INICC_LP
PUSH AR2
CALL ADJUSTMENT_READ
POP AR2
NOP *AR2--
AND 0FFh,R0
LSH R5,R0
OR R0,R6
SUBI 8,R5
BGE INICC_LP
STI R6,*AR3++
RETS
CUSTOM_COINTABI .word CUSTOM_COINTAB
.bss CUSTOM_COINTAB,COIN_ENTRY_SIZE
CUSTOM_COINSTRI .word CUSTOM_COINSTR
.bss CUSTOM_COINSTR,10
bufferi .word buffer
.bss buffer,2
CTS_STRI .word CTS_STR
CTS_STR .string " TO START",0
CTC_STRI .word CTC_STR
CTC_STR .string " TO CONTINUE",0
FCBI .word FCB ;FULL CREDIT BUFFER
.bss FCB,1
PCBI .word PCB ;PARTIAL CREDIT BUFFER
.bss PCB,1
CREDITBUFFI .word CREDITBUFFER
.bss CREDITBUFFER,8
TOSTARTBUFFI .word TOSTARTBUFFER
.bss TOSTARTBUFFER,8
NCBI .word NCB ; '/'
NCB .string "@",0
SPCI .word SPC
SPC .string " ",0
DBLSPCI .word DBLSPC
DBLSPC .string " ",0
CWI .word CW
CW .string "CREDITS",0
CWSI .word CWS
CWS .string "CREDIT",0
SCI .word SCS ;CREDITS TO START (START CREDIT)
.bss SCS,1
MSG_NULLI .word MSG_NULL
MSG_NULL .string "",0
*----------------------------------------------------------------------------
FONT18RED:
.globl font18_white
LDL font18_white,AR2
CALL PAL_FIND_RAW
STI R0,*+AR0(TEXT_PAL)
RETS
FONT18REDDS:
LDL font18_white,AR2
CALL PAL_FIND_RAW
STI R0,*+AR0(TEXT_PAL)
STI R0,*+AR1(TEXT_PAL)
RETS
*----------------------------------------------------------------------------
*
* F P/N CREDITS
*
INSERTCOINSI .word INSERTCOINS
INSERTCOINS .string "INSERT COINS",0
HITSTARTI .word HITSTART
HITSTART .string "PRESS START",0
.bss ICF,1 ;INSERT COIN FLASH
INSERT_COINS:
CALL VOLUME_DISPLAY
CALL MOTION_VALID
LDI @COINOFF,R0
RETSNZ
READADJ ADJ_FREE_PLAY
FLOAT 360,R3
CMPI 1,R0
BEQ FLASH_START
LDI @_ATTR_MODE,R0
AND 1,R0
BZ SHOW_COINAGE
READAUD AUD_PCREDITS
PUSH R0
READAUD AUD_CREDITS
POP R2
ADDI R0,R2
BZ FLASH_INSERTCOINS
;
LDI @_MODE,R0
AND MMODE,R0
CMPI MINSERT_COINS,R0
BEQ FLASH_INSERTCOINS
SHOW_COINAGE
CALL GET_COINAGE_HIGHT ;Sets R3
ADDF 44,R3
MPYF -0.5,R3
FLOAT 345,R0 ;Center of text hight
ADDF R0,R3
READAUD AUD_CREDITS
CALL GET_CREDITS_TO_START
CMPI R1,R0
BLT NO_START
CALLGE FLASH_START
ADDF 22,R3
BU SHOW_CREDITS
NO_START
CALL FLASH_TO_START ;FLASH THE TO START AND TO CONTINUE MESSAGES
ADDF 22,R3
SHOW_CREDITS
READAUD AUD_PCREDITS
PUSH R0
READAUD AUD_CREDITS
POP R2
ADDI R0,R2
BNZ GODO_CREDITS
CALL SHOW_INSERTCOINS
BU DO_COINAGE
GODO_CREDITS
CALL PRINT_CREDITS ;Print the credits message
LDI @CREDITBUFFI,AR2
FLOAT 256,R2
LDI 1,RC
CALL TEXT_ADDDS
CALL FONT18REDDS
ORM TXT_CENTER,*+AR0(TEXT_COLOR)
ORM TXT_CENTER,*+AR1(TEXT_COLOR)
DO_COINAGE
ADDF 22,R3
FLOAT 256,R2
; FLOAT 345,R3
CALL PRINT_COINAGE
INSERT_COINSX
RETS
*----------------------------------------------------------------------------
* This routine FLASHES THE INSERT COINS MESSAGE
*
FLASH_INSERTCOINS:
LDI @ICF,R0
BGT NO_INSERTCOINS
SUBI @NFRAMES,R0
CMPI -30,R0
LDILT 1,R0
STI R0,@ICF
SHOW_INSERTCOINS:
LDI @INSERTCOINSI,AR2
FLOAT 256,R2
LDI 1,RC
CALL TEXT_ADDDS
ORM TXT_CENTER,*+AR0(TEXT_COLOR)
ORM TXT_CENTER,*+AR1(TEXT_COLOR)
CALL FONT18REDDS
BU FLASH_INSERTCOINSX
NO_INSERTCOINS
LDI @ICF,R0
ADDI @NFRAMES,R0
CMPI 30,R0
LDIGT -1,R0
STI R0,@ICF
FLASH_INSERTCOINSX
RETS
*----------------------------------------------------------------------------
* This routine FLASHES THE PRESS START MESSAGE
*
FLASH_START:
LDI BUT_START,R0
STI R0,@BUTTON_STATUS
LDI @ICF,R0
BGT START_SKIP
SUBI @NFRAMES,R0
CMPI -20,R0
LDILT 1,R0
STI R0,@ICF
LDI @HITSTARTI,AR2
FLOAT 256,R2
LDI 1,RC
CALL TEXT_ADDDS
ORM TXT_CENTER,*+AR0(TEXT_COLOR)
ORM TXT_CENTER,*+AR1(TEXT_COLOR)
CALL FONT18REDDS
BU FLASH_STARTX
START_SKIP
ADDI @NFRAMES,R0
CMPI 20,R0
LDIGT -1,R0
STI R0,@ICF
BU FLASH_STARTX
FLASH_STARTX
RETS
*----------------------------------------------------------------------------
*PRINT_COINAGE
*
*Prints up to 3 lines of text that describes credits per coin
*
*INPUT
* R2 (FLOAT) = X screen position in pixels
* R3 (FLOAT) = Y screen position in pixels
FONT10_HIGHT .set 17.0
PRINT_COINAGE:
CALL GETCOINTXT
LDI *AR0,AR2
LDI 1,RC
CALL TEXT_ADDDS
ORM TXT_CENTER,*+AR0(TEXT_COLOR)
ORM TXT_CENTER,*+AR1(TEXT_COLOR)
CALL SET12FONTDS
CALL WHITE10FNT
CALL GETCOINTXT
LDI *+AR0(1),AR2
CMPI 0,AR2
BEQ PRINT_COINAGEX
ADDF FONT10_HIGHT,R3
LDI 1,RC
CALL TEXT_ADDDS
ORM TXT_CENTER,*+AR0(TEXT_COLOR)
ORM TXT_CENTER,*+AR1(TEXT_COLOR)
CALL SET12FONTDS
CALL WHITE10FNT
CALL GETCOINTXT
LDI *+AR0(2),AR2
CMPI 0,AR2
BEQ PRINT_COINAGEX
ADDF FONT10_HIGHT,R3
LDI 1,RC
CALL TEXT_ADDDS
ORM TXT_CENTER,*+AR0(TEXT_COLOR)
ORM TXT_CENTER,*+AR1(TEXT_COLOR)
CALL SET12FONTDS
CALL WHITE10FNT
PRINT_COINAGEX
RETS
*----------------------------------------------------------------------------
*GET_COINAGE_HIGHT
*
*Calculates the hight in pixels of the coinage text for centering
*
*RETURNS
* R3 (FLOAT) = Y screen hight in pixels
GET_COINAGE_HIGHT:
PUSHF R0
PUSH R0
PUSH AR0
CALL GETCOINTXT
LDF FONT10_HIGHT,R3
LDI *+AR0(1),R0
BEQ GCHX
ADDF FONT10_HIGHT,R3
LDI *+AR0(2),R0
BEQ GCHX
ADDF FONT10_HIGHT,R3
GCHX
POP AR0
POP R0
POPF R0
RETS
*----------------------------------------------------------------------------
.globl osg10fnt_white
WHITE10FNT:
LDL osg10fnt_white,AR2
CALL PAL_FIND_RAW
STI R0,*+AR0(TEXT_PAL)
STI R0,*+AR1(TEXT_PAL)
RETS
*----------------------------------------------------------------------------
*PRINT_CREDITS
*
*Prints the CREDITS message including partial credits if the mode is on.
*
PRINT_CREDITS:
CLRI R7
STI R7,@CREDITBUFFER ;STRING BUFFER
CALL GET_SHOW_PARTIAL
LDI R1,R4
READAUD AUD_CREDITS ;DO WE HAVE ANY CREDITS?
LDI R0,R2
BNZ DO_CREDITS ;Yes, then go print them
CMPI 1,R4 ;No, then check partial credits on?
BEQ CHKPCREDITS ;Yes, then go print the partial credits
DO_CREDITS
LDI 1,R7
LDI @FCBI,AR2
CALL _itoa
LDI @CREDITBUFFI,AR0
LDI @FCBI,AR1
CALL STRCAT
LDI @CREDITBUFFI,AR0
LDI @DBLSPCI,AR1
CALL STRCAT
CHKPCREDITS
READAUD AUD_PCREDITS ;Are there any patial credits?
LDI R0,R2
BZ NO_PCREDITS ;No, then skip this
CMPI 0,R4 ;Is partial credits on?
BEQ NO_PCREDITS ;No, then skip this
LDI 1,R7
LDI @PCBI,AR2
CALL _itoa
LDI @CREDITBUFFI,AR0
LDI @PCBI,AR1
CALL STRCAT
LDI @CREDITBUFFI,AR0
LDI @NCBI,AR1
CALL STRCAT
CALL GET_UNITS_PER_CREDIT
LDI R1,R2
LDI @SCI,AR2
CALL _itoa
LDI @CREDITBUFFI,AR0
LDI @SCI,AR1
CALL STRCAT
LDI @CREDITBUFFI,AR0
LDI @SPCI,AR1
CALL STRCAT
NO_PCREDITS
LDI @CREDITBUFFI,AR0
LDI @CWI,AR1
READAUD AUD_CREDITS ;DO WE HAVE ONLY 1 CREDIT?
CMPI 1,R0
LDILE @CWSI,AR1 ;ONLY HAVE ON CREDIT USE SINGULAR "CREDIT"
CALL STRCAT
;
RETS
*----------------------------------------------------------------------------
*FLASH_TO_START
*
*Flash the messages N CREDTIS TO START/N CREDITS TO CONTINUE MESSAGE
FLASH_TO_START:
LDI @ICF,R0
BGT NO_TOSTART
SUBI @NFRAMES,R0
CMPI -45,R0
LDILT 1,R0
STI R0,@ICF
CALL TOSTART_STRING
BU PRINT_TOSTART
NO_TOSTART
LDI @ICF,R0
ADDI @NFRAMES,R0
CMPI 45,R0
LDIGT -1,R0
STI R0,@ICF
CALL GET_CREDITS_TO_START
LDI R1,R0
CALL GET_CREDITS_TO_CONTINUE
LDI R1,R2
CMPI R0,R2
BEQ FLASH_TOSTARTX
CALL TOCONT_STRING
PRINT_TOSTART
LDI @TOSTARTBUFFI,AR2
FLOAT 256,R2
LDI 1,RC
CALL TEXT_ADDDS
ORM TXT_CENTER,*+AR0(TEXT_COLOR)
ORM TXT_CENTER,*+AR1(TEXT_COLOR)
CALL FONT18REDDS
FLASH_TOSTARTX
RETS
*----------------------------------------------------------------------------
TOSTART_STRING:
CLRI R7
STI R7,@TOSTARTBUFFER ;STRING BUFFER
CALL GET_CREDITS_TO_START
LDI R1,R2
LDI 1,R7
LDI @FCBI,AR2
CALL _itoa
LDI @TOSTARTBUFFI,AR0
LDI @FCBI,AR1
CALL STRCAT
LDI @TOSTARTBUFFI,AR0
LDI @SPCI,AR1
CALL STRCAT
LDI @TOSTARTBUFFI,AR0
LDI @CWI,AR1
CALL GET_CREDITS_TO_START
CMPI 1,R1
LDIEQ @CWSI,AR1 ;ONLY HAVE ON CREDIT USE SINGULAR "CREDIT"
CALL STRCAT
LDI @TOSTARTBUFFI,AR0
LDI @CTS_STRI,AR1
CALL STRCAT
RETS
*----------------------------------------------------------------------------
TOCONT_STRING:
CLRI R7
STI R7,@TOSTARTBUFFER ;STRING BUFFER
CALL GET_CREDITS_TO_CONTINUE
LDI R1,R2
LDI 1,R7
LDI @FCBI,AR2
CALL _itoa
LDI @TOSTARTBUFFI,AR0
LDI @FCBI,AR1
CALL STRCAT
LDI @TOSTARTBUFFI,AR0
LDI @SPCI,AR1
CALL STRCAT
LDI @TOSTARTBUFFI,AR0
LDI @CWI,AR1
CALL GET_CREDITS_TO_CONTINUE
CMPI 1,R1
LDIEQ @CWSI,AR1 ;ONLY HAVE ON CREDIT USE SINGULAR "CREDIT"
CALL STRCAT
LDI @TOSTARTBUFFI,AR0
LDI @CTC_STRI,AR1
CALL STRCAT
RETS
*----------------------------------------------------------------------------
*VOLUME DISPLAY
*
*
.bss VOLUME_ACTIVE,1
.bss VOLUME_COUNT,4
VOLUME_TXT .string "VOLUME",0
VOLUME_DISPLAY:
LDI @VOLUME_ACTIVE,R0
RETSZ
DEC R0
STI R0,@VOLUME_ACTIVE
LDI @_MODE,R0
AND MMODE,R0
CMPI MDIAG,R0
RETSEQ
READADJ ADJ_VOLUME
FLOAT R0,R2
MPYF 0.11764,R2 ;30/255
FIX R2
LDL VOLUME_COUNT,AR2
CALL _itoa
FLOAT 180,R2
FLOAT 310,R3
LDI 1,RC
CALL TEXT_ADDDS
CALL FONT18REDDS
LDL VOLUME_TXT,AR2
FLOAT 60,R2
FLOAT 310,R3
LDI 1,RC
CALL TEXT_ADDDS
CALL FONT18REDDS
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*
*
*
*
*
INSERT_MORE_COINS:
PUSH R4
READADJ ADJ_FREE_PLAY
CMPI 1,R0
BEQ INSERT_COINSXM
CALL PRINT_TOCONT
READAUD AUD_CREDITS
LDI R0,R1
READAUD AUD_PCREDITS
ADDI R0,R1
BNZ ISMCC
CALL FLASH_INSERTCOINSM
BU INSERT_COINSXM
ISMCC
CALL PRINT_CREDITS
LDI @CREDITBUFFI,AR2
FLOAT 256,R2
FLOAT 237,R3
LDI 1,RC
CALL TEXT_ADDDS
ORM TXT_CENTER,*+AR0(TEXT_COLOR)
ORM TXT_CENTER,*+AR1(TEXT_COLOR)
INSERT_COINSXM
POP R4
RETS
*----------------------------------------------------------------------------
FLASH_INSERTCOINSM:
LDI @ICF,R0
BGT NO_INSERTCOINSM
SUBI @NFRAMES,R0
CMPI -30,R0
LDILT 1,R0
STI R0,@ICF
LDI @INSERTCOINSI,AR2
FLOAT 256,R2
FLOAT 237,R3
LDI 1,RC
CALL TEXT_ADDDS
ORM TXT_CENTER,*+AR0(TEXT_COLOR)
ORM TXT_CENTER,*+AR1(TEXT_COLOR)
BU FLASH_INSERTCOINSXM
NO_INSERTCOINSM
LDI @ICF,R0
ADDI @NFRAMES,R0
CMPI 30,R0
LDIGT -1,R0
STI R0,@ICF
FLASH_INSERTCOINSXM
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
PRINT_TOCONT:
CALL TOCONT_STRING
LDI @TOSTARTBUFFI,AR2
FLOAT 256,R2
FLOAT 200,R3
LDI 1,RC
CALL TEXT_ADDDS
ORM TXT_CENTER,*+AR0(TEXT_COLOR)
ORM TXT_CENTER,*+AR1(TEXT_COLOR)
TOCONTX
RETS
*----------------------------------------------------------------------------
.bss CMOS_WP_WORD_SHADOW,1
.bss COIN_COUNTER1,1
.bss COIN_COUNTER2,1
.bss COUNTER_IDX,1
.bss COUNTER_MODE,1
*----------------------------------------------------------------------------
*
*IT TAKES 75ms - 100ms FOR STOBING THE COIN COUNTERS
*
*IF (COUNTER_IDX >= 6) {
* IF (COUNTER_MODE)
*
*
*
*}
*ELSE
* COUNTER_IDX++
*
*
*
*
COIN_COUNTER:
LDP @COUNTER_IDX
LDI @COUNTER_IDX,R0
INC R0
STI R0,@COUNTER_IDX
SETDP
CMPI 8,R0
RETSLT
LDP @COUNTER_IDX
CLRI R0
STI R0,@COUNTER_IDX
LDP @COUNTER_MODE
LDI @COUNTER_MODE,R0
BZ CLEARIT
CLRI R0
STI R0,@COUNTER_MODE
LDP @CMOS_WP_WORD_SHADOW
LDI @CMOS_WP_WORD_SHADOW,R0
ANDN 0F00h,R0
LDP @COIN_COUNTER1
LDI @COIN_COUNTER1,R1
DEC R1
BLT NOINC1
STI R1,@COIN_COUNTER1
OR 100h,R0
NOINC1
LDP @COIN_COUNTER2
LDI @COIN_COUNTER2,R1
DEC R1
BLT NOINC2
STI R1,@COIN_COUNTER2
OR 200h,R0
NOINC2
DINT
LDP @CMOS_WP_WORD
STI R0,@CMOS_WP_WORD
LDP @CMOS_WP_WORD_SHADOW
STI R0,@CMOS_WP_WORD_SHADOW
EINT
SETDP
RETS
CLEARIT
LDI 1,R0
STI R0,@COUNTER_MODE
DINT
LDP @CMOS_WP_WORD_SHADOW
LDI @CMOS_WP_WORD_SHADOW,R0
ANDN 0F00h,R0
STI R0,@CMOS_WP_WORD_SHADOW
LDP @CMOS_WP_WORD
STI R0,@CMOS_WP_WORD
EINT
SETDP
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
MOTIONDIS SPTR "MOTION OFF"
MOTION_VALID:
.globl CHECK_MOTION_DIP
.globl CHECK_MOTION_PRESENT
CALL CHECK_MOTION_DIP
RETSNZ ;RETURN IF NON MOVING
CALL CHECK_MOTION_PRESENT
RETSEQ ;RETURN IF ALL OK
LDI @MOTIONDIS,AR2
FLOAT 256,R2
FLOAT 305,R3
LDI 1,RC
CALL TEXT_ADDDS
ORM TXT_CENTER,*+AR0(TEXT_COLOR)
ORM TXT_CENTER,*+AR1(TEXT_COLOR)
RETS
*----------------------------------------------------------------------------
.END