4339 lines
85 KiB
NASM
Executable File
4339 lines
85 KiB
NASM
Executable File
***************************************************************
|
||
*
|
||
* Software: LARRY DeMAR, EUGENE JARVIS
|
||
* Modified: Shawn Liptak 8/6/91 - Multi color fonts
|
||
* Jason Skiles 12/14/93 - Use STRING.ASM calls
|
||
* Jason Skiles 1/17/94 - Hold most recent index in CMOS
|
||
*
|
||
* COPYRIGHT (C) 1991 WILLIAMS ELECTRONICS GAMES, INC.
|
||
*
|
||
*.Last mod - 1/17/94 11:59
|
||
****************************************************************
|
||
|
||
.file "hstd.asm"
|
||
.title "robo high-score-to-date management"
|
||
.width 132
|
||
.option b,d,l,t
|
||
.mnolist
|
||
|
||
.include "audit.equ"
|
||
.include "mproc.equ"
|
||
.include "display.equ"
|
||
.include "sys.equ"
|
||
.include "game.equ"
|
||
.include "link.equ"
|
||
.include "macros.h"
|
||
.include "plyr.equ"
|
||
.include "gsp.equ"
|
||
|
||
.include "crowdimg.glo"
|
||
.include "fontsimg.glo"
|
||
.include "bgndtbl.glo"
|
||
.include "miscimg.glo"
|
||
.include "ropeimg.glo"
|
||
.include "sound.h"
|
||
|
||
.TEXT
|
||
|
||
; - confine cursor to end and del once all inits are in
|
||
|
||
* IN THIS MODULE
|
||
|
||
|
||
.DEF GET_HSCR
|
||
.DEF RC_BYTEI
|
||
.DEF RC_BYTE
|
||
.DEF RC_WORD
|
||
.DEF RC_LONG
|
||
.DEF RC_LONGI
|
||
.DEF WC_BYTE
|
||
.DEF WC_BYTEI
|
||
.DEF WC_WORD
|
||
.DEF WC_WORDI
|
||
.DEF WC_LONG
|
||
.DEF WC_LONGI
|
||
.DEF PT_ENTRY
|
||
.DEF INIT_TB
|
||
.DEF INIT_TAB ;GEORGES POWER UP ENTRY
|
||
.DEF P_FORK
|
||
.DEF VAL_TAB
|
||
.DEF ROM_PTRS
|
||
.DEF BEATEN_TAB_ENTRIES
|
||
.DEF INTER_TAB_ENTRIES
|
||
.DEF TAG_TAB_ENTRIES
|
||
|
||
.DEF INTER_TAB
|
||
.DEF TAG_TAB
|
||
|
||
.DEF STREAK_TAB
|
||
.DEF BEATEN_TAB
|
||
.DEF DO_BEATEN_GAME
|
||
; .DEF ISHSTD,GETINIT,GETINIT1,GETINIT2,INITTIM
|
||
.DEF SET_PAGE
|
||
; .DEF A2_CHECK
|
||
.DEF DEC_HSR,INIT_HSR,GET_HSC
|
||
.def not_blank
|
||
|
||
******************************************************************************
|
||
* EXTERNAL REFERENCES
|
||
|
||
.ref ADD_VOICE,message_palette,get_but_val_down,dec_to_asc
|
||
.ref dec_to_asc_new_entry,MATCH_TIMERS,civanic,GET_ADJ
|
||
.ref which_player,mess_z,ANIM_CROWD,DEF_PAGE,print_message
|
||
.ref message_buffer,howard_wins,GET_AUD,RNDRNG0,mess_line_spacing
|
||
.ref pal_getf,AUD,BEGINOBJ_TBL,print_string_C2,SHADOW01
|
||
.ref SHADOW02,mess_space_width,SPEAR,mess_objid,print_string_R
|
||
.ref BINBCD,message_ascii,get_stick_val_cur,p1oldwinstreak
|
||
.ref mess_spacing,mess_cursx,print_string,mess_cursy
|
||
.ref print_string_with_z,setup_message,KILL_AUD,osgemd_ascii
|
||
.ref get_stick_val_down,setup_back_anim,font9_ascii,CYCLE_TABLE
|
||
.ref BCDBIN,copy_string,IGNORE_CHAR_WIDTH,message_buffer2
|
||
.ref triple_sound,change_image,digits_tbl,wsf14_ascii
|
||
.ref p2oldwinstreak,print_string2,current_round
|
||
.ref mess_cursx2,font9A_ascii
|
||
.ref font18_ascii
|
||
.ref print_string_C,belt_type
|
||
.if 0
|
||
.ref prog_specials,are_special_inits
|
||
.endif
|
||
|
||
|
||
******************************************************************************
|
||
|
||
.TEXT
|
||
|
||
;Sound headers
|
||
|
||
BEEPSND .WORD >F3FE,>10,>80A2,0 ;LOW BEEP
|
||
|
||
|
||
BSSX starting_num,16
|
||
BSSX entered_inits, (8*6)*2
|
||
; .bss entered_message, (16*4)*2
|
||
.bss last_hscore_ndx, 16
|
||
.bss last_streak_ndx, 16
|
||
.bss not_blank,16
|
||
BSSX auto_init,16
|
||
|
||
**************************************************************************
|
||
*
|
||
* HIGH SCORE TABLE DEFINITIONS
|
||
*
|
||
**************************************************************************
|
||
|
||
STREAK_TABLE_VISIBLE equ 18
|
||
PIN_SPEED_TAB_VISIBLE equ 9
|
||
BEATEN_TAB_VISIBLE equ 30
|
||
INTER_TAB_VISIBLE equ 30
|
||
TAG_TAB_VISIBLE EQU 18
|
||
|
||
STREAK_TAB
|
||
.LONG STREAK_TABLE_ORIGIN ;LOCATION OF TABLE
|
||
.WORD STREAK_TABLE_ENTRIES-1 ;NUMBER IN THE TABLE (DON'T COUNT ZERO FILLER)
|
||
.WORD STREAK_TABLE_VISIBLE ;unused?
|
||
.WORD STREAK_TABLE_SELECT ;BITS TO SELECT IT
|
||
.LONG STREAK_ROM_TABLE ;ROM IMAGE OF TABLE
|
||
.WORD STREAK_TABLE_ENTRIES/5 ;RESET TABLE IF 1/5 OR MORE BAD
|
||
|
||
SUBR PIN_SPEED_TAB
|
||
.LONG PIN_SPEED_TAB_ORIGIN ;LOCATION OF TABLE
|
||
.WORD PIN_SPEED_TAB_ENTRIES-1 ;NUMBER IN THE TABLE (DON'T COUNT ZERO FILLER)
|
||
.WORD PIN_SPEED_TAB_VISIBLE ;unused ?
|
||
.WORD PIN_SPEED_TAB_SELECT ;BITS TO SELECT IT
|
||
.LONG PIN_SPEED_TAB_ROM_TABLE ;ROM IMAGE OF TABLE
|
||
.WORD PIN_SPEED_TAB_ENTRIES/5 ;RESET TABLE IF 1/5 OR MORE BAD
|
||
|
||
|
||
BEATEN_TAB
|
||
.LONG BEATEN_TAB_ORIGIN ;LOCATION OF TABLE
|
||
.WORD BEATEN_TAB_ENTRIES-1 ;NUMBER IN THE TABLE (DON'T COUNT ZERO FILLER)
|
||
.WORD BEATEN_TAB_VISIBLE ;unused?
|
||
.WORD BEATEN_TAB_SELECT ;BITS TO SELECT IT
|
||
.LONG BEATEN_ROM_TABLE ;ROM IMAGE OF TABLE
|
||
.WORD BEATEN_TAB_ENTRIES/5 ;RESET TABLE IF 1/5 OR MORE BAD
|
||
|
||
INTER_TAB
|
||
.LONG INTER_TAB_ORIGIN ;LOCATION OF TABLE
|
||
.WORD INTER_TAB_ENTRIES-1 ;NUMBER IN THE TABLE (DON'T COUNT ZERO FILLER)
|
||
.WORD INTER_TAB_VISIBLE ;unused?
|
||
.WORD INTER_TAB_SELECT ;BITS TO SELECT IT
|
||
.LONG INTER_ROM_TABLE ;ROM IMAGE OF TABLE
|
||
.WORD INTER_TAB_ENTRIES/5 ;RESET TABLE IF 1/5 OR MORE BAD
|
||
|
||
TAG_TAB
|
||
.LONG TAG_TAB_ORIGIN ;LOCATION OF TABLE
|
||
.WORD TAG_TAB_ENTRIES-1 ;NUMBER IN THE TABLE (DON'T COUNT ZERO FILLER)
|
||
.WORD TAG_TAB_VISIBLE ;unused?
|
||
.WORD TAG_TAB_SELECT ;BITS TO SELECT IT
|
||
.LONG TAG_ROM_TABLE ;ROM IMAGE OF TABLE
|
||
.WORD TAG_TAB_ENTRIES/5 ;RESET TABLE IF 1/5 OR MORE BAD
|
||
|
||
|
||
P_FORK
|
||
MMTM SP,A1
|
||
MOVE *A13(PROCID),A1 ;PASS OUR ID TO FORKED PROCESS
|
||
CALLA GETPRC ;MAKE THE PROCESS
|
||
MMFM SP,A1
|
||
RETS
|
||
|
||
**************************************************************************
|
||
*
|
||
* AUTO HIGH SCORE TABLE RESET HANDLING
|
||
*
|
||
**************************************************************************
|
||
*
|
||
* DEC_HSR
|
||
*
|
||
* THIS IS CALLED WITH EACH START OR CONTINUE FOR
|
||
* A PLAYER. IT REMOVES 1 FROM THE HSTD COUNTER UNLESS
|
||
* ITS ALREADY SITTING AT ZERO.
|
||
*
|
||
**************************************************************************
|
||
DEC_HSR
|
||
MMTM SP,A0
|
||
CALLR GET_HSC ;THIS IS EASY...GET THE COUNTER
|
||
JRZ DECHX ;ITS ZERO....NO ACTION.
|
||
DEC A0 ;REMOVE A TICK
|
||
CALLR PUT_HSC ;PUT IT BACK JAK
|
||
DECHX MMFM SP,A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
*
|
||
* DELAY_HSRESET
|
||
*
|
||
* THIS IS CALLED WHEN A NEW ENTRY IS MADE IN THE ALL TIME
|
||
* HIGH SCORE TABLE. IF WE'RE CLOSE TO A HIGH SCORE
|
||
* RESET, WE PUT IT OFF AWHILE SO HE CAN SHOW HIS FRIENDS
|
||
* FOR A FEW DAYS.
|
||
*
|
||
**************************************************************************
|
||
HS_MIN EQU 750 ;ALWAYS 750 PLAYS BEFORE REMOVING A FRESH
|
||
* ;NAME.
|
||
DELAY_HSRESET:
|
||
MMTM SP,A0
|
||
CALLR GET_HSC ;THIS IS EASY...GET THE COUNTER
|
||
CMPI HS_MIN,A0 ;IS IT TOO LOW
|
||
JRHS DHX ;NOPE...NO ACTION
|
||
|
||
MOVI HS_MIN,A0 ;STOP THE RESET!
|
||
CALLR PUT_HSC ;THIS MANY PLAYS TILL RESET!
|
||
DHX:
|
||
MMFM SP,A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
*
|
||
* INIT_HSR
|
||
*
|
||
* THIS IS CALLED TO INITIALIZE THE HIGH SCORE RESET
|
||
* COUNTER TO ITS ADJUSTED VALUE.
|
||
*
|
||
**************************************************************************
|
||
INIT_HSR
|
||
MMTM SP,A0
|
||
MOVI ADJHSRES,A0
|
||
CALLA GET_ADJ ;GET THE ADJUSTED VALUE
|
||
CALLR PUT_HSC ;SET IT TO THIS VALUE
|
||
MMFM SP,A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
*
|
||
* PUT_HSC
|
||
*
|
||
* THIS IS CALLED TO SET THE HIGH SCORE RESET COUNTER
|
||
* TO THE VALUE IN A0.
|
||
*
|
||
**************************************************************************
|
||
PUT_HSC
|
||
MMTM SP,A7,A0
|
||
CALLR HSR_PAGE ;HIGH SCORE PAGE
|
||
|
||
MOVI HRESET_COUNTER,A7 ;POINT AT
|
||
CALLR WC_LONGI ;WRITE OUR PARAMETER
|
||
NOT A0 ;NEGATE IT.
|
||
CALLR WC_LONG ;AND WRITE IN SUBSEQUENT SPOT.
|
||
CALLA DEF_PAGE ;FLIP PAGE
|
||
MMFM SP,A7,A0 ;AND RETURN
|
||
RETS
|
||
|
||
**************************************************************************
|
||
*
|
||
* GET_HSC
|
||
*
|
||
* THIS IS CALLED TO FETCH THE HIGH SCORE COUNTER IN A0.
|
||
* IF IT IS INVALID, IT WILL IMMEDIATELY BE RESET TO THE
|
||
* ADJUSTED VALUE AND THIS IS WHAT WILL BE RETURNED
|
||
* IN A0. Z set if 0
|
||
*
|
||
**************************************************************************
|
||
GET_HSC
|
||
MMTM SP,A7,A1
|
||
CALLR HSR_PAGE ;POINT PAGE AT HSR
|
||
|
||
MOVI HRESET_COUNTER,A7 ;POINT AT
|
||
CALLR RC_LONGI ;READ THE VALUE
|
||
MOVE A0,A1 ;STASH IT
|
||
CALLR RC_LONG ;READ VERIFIER
|
||
NOT A0 ;SEE IF ITS VALID
|
||
CMP A0,A1
|
||
JRZ GET_HSCX ;IT IS....RETURN IT.
|
||
|
||
CALLR INIT_HSR ;REFRESH IT WITH FACTORY VALUE
|
||
*
|
||
* NOW RETURN THE FACTORY VALUE IN CASE IT DIDN'T TAKE
|
||
*
|
||
MOVI ADJHSRES,A0
|
||
CALLA GET_ADJ ;GET THE ADJUSTED VALUE
|
||
|
||
GET_HSCX
|
||
CALLA DEF_PAGE ;FLIP PAGE AWAY FROM US
|
||
MOVE A0,A0 ;SET Z FLAG BASED ON COUNTER
|
||
MMFM SP,A7,A1
|
||
RETS
|
||
|
||
HSR_PAGE
|
||
MMTM SP,A1
|
||
MOVI HSR_SELECT,A1
|
||
CALLR SET_PAGE
|
||
MMFM SP,A1
|
||
RETS
|
||
|
||
#*********************************************************************
|
||
* Check validity of high score and win streak tables.
|
||
*
|
||
|
||
SUBR table_cmos_check
|
||
|
||
movi PIN_SPEED_TAB,a8
|
||
callr VAL_TAB
|
||
movi STREAK_TAB,a8
|
||
callr VAL_TAB
|
||
|
||
movi BEATEN_TAB,a8
|
||
callr VAL_TAB
|
||
|
||
movi INTER_TAB,a8
|
||
callr VAL_TAB
|
||
|
||
movi TAG_TAB,a8
|
||
callr VAL_TAB
|
||
rets
|
||
|
||
#*********************************************************************
|
||
* Display high score table
|
||
*
|
||
|
||
SUBR print_inter
|
||
|
||
push a5
|
||
movi #hscore_mes2,a2
|
||
calla print_message
|
||
|
||
MOVI [10,0],A0
|
||
MOVI [21,0],A1
|
||
|
||
movi MVEBAR_R,a2
|
||
movi 1799H,a3
|
||
movi DMAWNZ,a4
|
||
movi CLSNEUT,a5
|
||
CLR A6
|
||
CLR A7
|
||
calla BEGINOBJ
|
||
|
||
MOVI [13,0],A0
|
||
MOVI [21+9,0],A1
|
||
|
||
movi SHADOW01,a2
|
||
movi 1799H,a3
|
||
movi DMAWNZ,a4
|
||
movi CLSNEUT,a5
|
||
CLR A6
|
||
CLR A7
|
||
calla BEGINOBJ
|
||
CREATE FLASH_PID,JUDDER_SHADOW
|
||
|
||
pull a9
|
||
move a9,@starting_num
|
||
movi HS_SIZE,a7
|
||
mpyu a7,a9
|
||
addi INTER_TAB_ORIGIN,a9
|
||
move a9,a8
|
||
|
||
movi 3,a7 ;draw 3
|
||
|
||
movi [51-9,8],a9
|
||
movi [58+5,10],a10
|
||
|
||
#loop
|
||
movi GOLD,a11
|
||
movi AUD_INTER,A0
|
||
calla GET_AUD
|
||
MOVE @starting_num,A5
|
||
cmp a1,a5
|
||
jrne #gold
|
||
movi BLUE,a11
|
||
#gold
|
||
PUSH a3,a7,a8,a9,a10,a11
|
||
movi INTER_TAB_SELECT,a1 ;set the read page
|
||
callr SET_PAGE
|
||
movi special_copy,a5
|
||
callr draw_beaten_table_entry
|
||
PULL a3,a7,a8,a9,a10,a11
|
||
|
||
move @starting_num,a5
|
||
inc a5
|
||
move a5,@starting_num
|
||
|
||
dec a7
|
||
jrz #done
|
||
|
||
addi HS_SIZE,a8
|
||
addi [46h,0],a9
|
||
addi [46h,0],a10
|
||
jruc #loop
|
||
#done
|
||
callr hscore_colcyc
|
||
callr hscore_colcyc2
|
||
RETP
|
||
|
||
#hscore_mes2
|
||
JAM_STR osgemd_ascii,10,0,200,10,BLUE,print_string_C2
|
||
.byte "INTERCONTINENTAL CHAMPS",0,0
|
||
.even
|
||
|
||
|
||
#**********************
|
||
|
||
SUBR print_beaten
|
||
|
||
push a5
|
||
movi #hscore_mes,a2
|
||
calla print_message
|
||
|
||
MOVI [10,0],A0
|
||
MOVI [21,0],A1
|
||
|
||
movi MVEBAR_R,a2
|
||
movi 1799H,a3
|
||
movi DMAWNZ,a4
|
||
movi CLSNEUT,a5
|
||
CLR A6
|
||
CLR A7
|
||
calla BEGINOBJ
|
||
|
||
MOVI [13,0],A0
|
||
MOVI [21+9,0],A1
|
||
|
||
movi SHADOW01,a2
|
||
movi 1799H,a3
|
||
movi DMAWNZ,a4
|
||
movi CLSNEUT,a5
|
||
CLR A6
|
||
CLR A7
|
||
calla BEGINOBJ
|
||
CREATE FLASH_PID,JUDDER_SHADOW
|
||
|
||
pull a9
|
||
move a9,@starting_num
|
||
movi HS_SIZE,a7
|
||
mpyu a7,a9
|
||
addi BEATEN_TAB_ORIGIN,a9
|
||
move a9,a8
|
||
|
||
movi 3,a7 ;draw 3
|
||
|
||
movi [51-9,8],a9
|
||
movi [58+5,10],a10
|
||
|
||
#loop
|
||
movi GOLD,a11
|
||
movi AUD_BEATEN,A0
|
||
calla GET_AUD
|
||
MOVE @starting_num,A5
|
||
cmp a1,a5
|
||
jrne #gold
|
||
movi BLUE,a11
|
||
#gold
|
||
PUSH a3,a7,a8,a9,a10,a11
|
||
movi BEATEN_TAB_SELECT,a1 ;set the read page
|
||
callr SET_PAGE
|
||
movi special_copy,a5
|
||
callr draw_beaten_table_entry
|
||
PULL a3,a7,a8,a9,a10,a11
|
||
|
||
move @starting_num,a5
|
||
inc a5
|
||
move a5,@starting_num
|
||
|
||
dec a7
|
||
jrz #done
|
||
|
||
addi HS_SIZE,a8
|
||
addi [46h,0],a9
|
||
addi [46h,0],a10
|
||
jruc #loop
|
||
#done
|
||
; callr hscore_colcyc
|
||
; callr hscore_colcyc2
|
||
RETP
|
||
|
||
SUBR JUDDER_SHADOW
|
||
MOVI SHADOW_ANIM,A1
|
||
calla setup_back_anim
|
||
JSRP ANIM_CROWD
|
||
DIE
|
||
|
||
CANI_GOTO equ 0 + 8000h
|
||
|
||
SHADOW_ANIM
|
||
WL 1,SHADOW02
|
||
WL 1,SHADOW01
|
||
WL CANI_GOTO,SHADOW_ANIM
|
||
|
||
#hscore_mes
|
||
JAM_STR osgemd_ascii,10,0,200,10,BLUE,print_string_C2
|
||
.byte "WORLD CHAMPIONS",0,0
|
||
.even
|
||
|
||
|
||
SUBR STOP_ALL_OBJS
|
||
MOVI OBJLST,A8
|
||
CLR A1
|
||
JRUC DO_EACH_OBJ_STOP
|
||
STOP_THIS_OBJ
|
||
MOVE A1,*A8(OYVEL),L
|
||
DO_EACH_OBJ_STOP
|
||
MOVE *A8,A8,L
|
||
JRNZ STOP_THIS_OBJ
|
||
RETS
|
||
|
||
SUBR MOVE_ALL_OBJS_UP
|
||
MOVI OBJLST,A8
|
||
MOVI RUBYPAL,A0
|
||
CALLA pal_getf
|
||
MOVI [-2,0],A1
|
||
JRUC DO_EACH_OBJ
|
||
MOVE_THIS_OBJ_UP
|
||
MOVE *A8(OPAL),A2
|
||
CMP A2,A0
|
||
JREQ DO_EACH_OBJ
|
||
MOVE *A8(OZPOS),A2
|
||
CMPI 1798H,A2
|
||
JRGT DO_EACH_OBJ
|
||
MOVE A1,*A8(OYVEL),L
|
||
DO_EACH_OBJ
|
||
MOVE *A8,A8,L
|
||
JRNZ MOVE_THIS_OBJ_UP
|
||
RETS
|
||
|
||
SUBR DELETE_ANY_OFF_TOP
|
||
MOVI OBJLST,A8
|
||
MOVI [-30,0],A3
|
||
JRUC DO_EACH_OBJ_NEXT
|
||
DELETE_OR_NOT
|
||
MOVE *A8(OYVAL),A2,L
|
||
CMP A3,A2
|
||
JRGT DO_EACH_OBJ_NEXT
|
||
MOVE *A8,A9,L
|
||
CALLA DELOBJA8
|
||
MOVE A9,A8
|
||
JRNZ DELETE_OR_NOT
|
||
RETS
|
||
DO_EACH_OBJ_NEXT
|
||
MOVE *A8,A8,L
|
||
JRNZ DELETE_OR_NOT
|
||
RETS
|
||
|
||
|
||
#*********************************************************************
|
||
* Display high score table
|
||
*
|
||
|
||
SUBR print_tag
|
||
|
||
movi tag_mes,a2
|
||
calla print_message
|
||
|
||
MOVI [10,0],A0
|
||
MOVI [21,0],A1
|
||
|
||
movi MVEBAR_R,a2
|
||
movi 1799H,a3
|
||
movi DMAWNZ,a4
|
||
movi CLSNEUT,a5
|
||
CLR A6
|
||
CLR A7
|
||
calla BEGINOBJ
|
||
|
||
MOVI [13,0],A0
|
||
MOVI [21+9,0],A1
|
||
|
||
movi SHADOW01,a2
|
||
movi 1799H,a3
|
||
movi DMAWNZ,a4
|
||
movi CLSNEUT,a5
|
||
CLR A6
|
||
CLR A7
|
||
calla BEGINOBJ
|
||
|
||
movi FLASH_PID,A0
|
||
CLR A1
|
||
NOT A1
|
||
CALLA KILALL
|
||
|
||
CREATE FLASH_PID,JUDDER_SHADOW
|
||
|
||
movi 9,a7 ;draw 9
|
||
movk 1,a3
|
||
|
||
movi TAG_TAB_ORIGIN+HS_SIZE,a8
|
||
movi [40,8],a9
|
||
movi [38,64+8],a10
|
||
|
||
#loop
|
||
movi GOLD,a11
|
||
movi AUD_TAG,A0
|
||
calla GET_AUD
|
||
addk 1,a1
|
||
srl 1,a1
|
||
CMP a1,A3
|
||
jrne #notblue
|
||
movi BLUE,a11
|
||
#notblue
|
||
PUSH A3,a7,a8,a9,a10,a11
|
||
movi TAG_TAB_SELECT,a1 ;set the read page
|
||
callr SET_PAGE
|
||
movi special_copy,a5
|
||
movi SEC,a2
|
||
MOVI [118H,0],a1
|
||
MOVI 0110H,A6
|
||
callr draw_tag_table_entry
|
||
PULL A3,a7,a8,a9,a10,a11
|
||
|
||
INC A3
|
||
dec a7
|
||
jrz #done
|
||
|
||
addi HS_SIZE*2,a8
|
||
addi [23,0],a9
|
||
addi [23,0],a10
|
||
jruc #loop
|
||
|
||
#done
|
||
RETP
|
||
|
||
tag_mes
|
||
JAM_STR osgemd_ascii,10,0,200,10,BLUE,print_string_C2
|
||
.byte "TAG TEAM CHAMPIONS",0,0
|
||
.even
|
||
|
||
#*********************************************************************
|
||
* Display high score table
|
||
*
|
||
|
||
SUBR print_hscores
|
||
|
||
movi #hscore_mes,a2
|
||
calla print_message
|
||
|
||
|
||
MOVI [10,0],A0
|
||
MOVI [21,0],A1
|
||
|
||
movi MVEBAR_R,a2
|
||
movi 1799H,a3
|
||
movi DMAWNZ,a4
|
||
movi CLSNEUT,a5
|
||
CLR A6
|
||
CLR A7
|
||
calla BEGINOBJ
|
||
|
||
MOVI [13,0],A0
|
||
MOVI [21+9,0],A1
|
||
|
||
movi SHADOW01,a2
|
||
movi 1799H,a3
|
||
movi DMAWNZ,a4
|
||
movi CLSNEUT,a5
|
||
CLR A6
|
||
CLR A7
|
||
calla BEGINOBJ
|
||
|
||
movi FLASH_PID,A0
|
||
CLR A1
|
||
NOT A1
|
||
CALLA KILALL
|
||
|
||
CREATE FLASH_PID,JUDDER_SHADOW
|
||
|
||
|
||
movi 9,a7 ;draw 9
|
||
movk 1,a3
|
||
|
||
movi PIN_SPEED_TAB_ORIGIN+HS_SIZE,a8
|
||
movi [40,8],a9
|
||
movi [38,64+8],a10
|
||
|
||
#loop
|
||
movi GOLD,a11
|
||
movi AUD_PINSPEED,A0
|
||
calla GET_AUD
|
||
CMP a1,A3
|
||
jrne #notblue
|
||
movi BLUE,a11
|
||
#notblue
|
||
PUSH A3,a7,a8,a9,a10,a11
|
||
movi PIN_SPEED_TAB_SELECT,a1 ;set the read page
|
||
callr SET_PAGE
|
||
movi special_copy,a5
|
||
movi SEC,a2
|
||
MOVI [82H,0],a1
|
||
MOVI 120,A6
|
||
callr draw_pinspeed_table_entry
|
||
PULL A3,a7,a8,a9,a10,a11
|
||
|
||
INC A3
|
||
dec a7
|
||
jrz #done
|
||
|
||
addi HS_SIZE,a8
|
||
addi [23,0],a9
|
||
addi [23,0],a10
|
||
jruc #loop
|
||
|
||
#done
|
||
RETP
|
||
|
||
#hscore_mes
|
||
JAM_STR osgemd_ascii,10,0,200,10,BLUE,print_string_C2
|
||
.byte "FASTEST PINDOWN TIMES",0,0
|
||
.even
|
||
|
||
|
||
#*********************************************************************
|
||
* Display win streaks table
|
||
*
|
||
|
||
SUBR print_winstreaks
|
||
|
||
movi #streak_mes,a2
|
||
calla print_message
|
||
|
||
MOVI [10,0],A0
|
||
MOVI [21,0],A1
|
||
|
||
movi MVEBAR_R,a2
|
||
movi 1799H,a3
|
||
movi DMAWNZ,a4
|
||
movi CLSNEUT,a5
|
||
CLR A6
|
||
CLR A7
|
||
calla BEGINOBJ
|
||
|
||
MOVI [13,0],A0
|
||
MOVI [21+9,0],A1
|
||
|
||
movi SHADOW01,a2
|
||
movi 1799H,a3
|
||
movi DMAWNZ,a4
|
||
movi CLSNEUT,a5
|
||
CLR A6
|
||
CLR A7
|
||
calla BEGINOBJ
|
||
|
||
movi FLASH_PID,A0
|
||
CLR A1
|
||
NOT A1
|
||
CALLA KILALL
|
||
|
||
CREATE FLASH_PID,JUDDER_SHADOW
|
||
|
||
movi 18,a7 ;draw 18
|
||
MOVK 1,A3
|
||
; clr a3
|
||
|
||
movi STREAK_TABLE_ORIGIN+HS_SIZE,a8
|
||
movi [40,8],a9
|
||
movi [38,44],a10
|
||
|
||
#loop
|
||
movi GOLD,a11
|
||
movi AUD_WINSTREAK,A0
|
||
calla GET_AUD
|
||
cmp a1,a3
|
||
jrne #gold
|
||
movi BLUE,a11
|
||
#gold
|
||
PUSH A3,a7,a8,a9,a10,a11
|
||
movi STREAK_TABLE_SELECT,a1
|
||
callr SET_PAGE
|
||
movi copy_string,a5
|
||
MOVI [6aH,0],a1
|
||
movi WINS,a2
|
||
MOVI 80,A6
|
||
callr draw_winstreak_table_entry
|
||
PULL A3,a7,a8,a9,a10,a11
|
||
INC A3
|
||
dec a7
|
||
jrz #done
|
||
cmpi 9,a7
|
||
jreq reset_position
|
||
|
||
addi HS_SIZE,a8
|
||
addi [23,0],a9
|
||
addi [23,0],a10
|
||
jruc #loop
|
||
|
||
reset_position
|
||
addi HS_SIZE,a8
|
||
movi [40,208+5],a9
|
||
movi [38,244+5],a10
|
||
jruc #loop
|
||
|
||
#done
|
||
RETP
|
||
|
||
|
||
#streak_mes
|
||
JAM_STR osgemd_ascii,10,0,200,10,BLUE,print_string_C2
|
||
.byte "LONGEST WINNING STREAKS",0,0
|
||
.even
|
||
|
||
special_copy
|
||
movi message_buffer,a2
|
||
movi message_buffer2,a3
|
||
move *a3+,*a2+
|
||
movi ".",a1
|
||
movb a1,*a2
|
||
addi 8,a2
|
||
movb *a3,*a2
|
||
addi 8,a2
|
||
addi 16,a3
|
||
clr a1
|
||
movb a1,*a2
|
||
MOVK 15,A0
|
||
move a0,@mess_spacing
|
||
MOVK 1,A0
|
||
MOVE A0,@IGNORE_CHAR_WIDTH
|
||
rets
|
||
|
||
.bss work_buffer,8*10
|
||
|
||
#*********************************************
|
||
*
|
||
SUBRP strip_white
|
||
PUSH a0,a1,a2
|
||
movi work_buffer,a0 ; Pointer to work buffer
|
||
subk 1,a3
|
||
sll 3,a3 ; Set pointer to end of buffer
|
||
move a3,a1
|
||
addi work_buffer,a1
|
||
#ff_loop
|
||
movb *a0,a2 ; Get char
|
||
cmpi 20h,a2 ; Is it a space ?
|
||
jrnz #first_found ; br = no
|
||
move a2,a2 ; Is it 0 ?
|
||
jrz #first_found ; br = yes
|
||
addk 8,a0 ; Increment front pointer
|
||
jruc #ff_loop ; Go check next char
|
||
|
||
#first_found
|
||
#fl_loop
|
||
movb *a1,a2 ; Get char
|
||
move a2,a2 ; Is it 0 ?
|
||
jrz #get_prev
|
||
cmpi 20h,a2 ; Is it a space ?
|
||
jrnz #last_found ; br = yes
|
||
#get_prev
|
||
cmpi work_buffer,a1 ; Are we at beginning ?
|
||
jrz #last_found ; br = yes
|
||
subk 8,a1 ; Decrement pointer
|
||
jruc #fl_loop ; Go check previous char
|
||
|
||
#last_found
|
||
addk 8,a1
|
||
movi message_buffer,a2 ; Where we are gonna put it
|
||
cmp a0,a1 ; back pointer > front pointer ?
|
||
jrgt #copy_loop ; br = yes
|
||
movi work_buffer,a0 ; reset front pointer
|
||
move a3,a1
|
||
addi work_buffer,a1
|
||
#copy_loop
|
||
movb *a0,a14 ; Get char
|
||
movb a14,*a2 ; Write to message buffer
|
||
addk 8,a0 ; Increment front pointer
|
||
cmp a0,a1 ; front = back ?
|
||
jrz #copy_done ; br = yes
|
||
addk 8,a2 ; Increment dest pointer
|
||
jruc #copy_loop ; Go do next char
|
||
|
||
#copy_done
|
||
addk 8,a2 ; Increment dest pointer
|
||
clr a1 ; NULL terminate the string
|
||
move a1,*a2
|
||
|
||
PULL a0,a1,a2
|
||
rets
|
||
|
||
#*******************************
|
||
* Display a table entry (initials and score)
|
||
* >a8=*entry, a9=[Y,Xleft] of initials, a10=[Y,Xright] of score, a11=pal
|
||
* >a0=draw high score message? (0|1)
|
||
|
||
SUBRP draw_tag_table_entry
|
||
PUSH A7
|
||
|
||
push a8
|
||
PUSH A5
|
||
PUSH A6
|
||
move a10,a0
|
||
sll 16,a0
|
||
ADD A1,A0
|
||
move a10,a1
|
||
srl 16,a1
|
||
sll 16,a1
|
||
addi [4,0],a1
|
||
movi 1000H,a3
|
||
movi DMAWNZ,a4
|
||
movi CLSNEUT,a5
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJW
|
||
PULL A6
|
||
PULL A5
|
||
pull a8
|
||
|
||
move a8,a7
|
||
callr RC_LONG ;read the score
|
||
calla BCDBIN
|
||
callr val_to_dec_tenths_asc
|
||
|
||
movk 2,a0
|
||
move a0,@mess_spacing
|
||
CLR A0
|
||
MOVE A0,@IGNORE_CHAR_WIDTH
|
||
movi font18_ascii,a0
|
||
move a0,@message_ascii,L
|
||
movi 10,a0
|
||
move a0,@mess_space_width
|
||
move a10,a0
|
||
sll 16,a0
|
||
srl 16,a0
|
||
add A6,a0
|
||
move a0,@mess_cursx
|
||
move a10,a0
|
||
srl 16,a0
|
||
move a0,@mess_cursy
|
||
movi WGSF_W_P1,a0
|
||
move a0,@message_palette,L
|
||
calla print_string_R
|
||
|
||
;initials
|
||
movi work_buffer,a1
|
||
move a8,a7
|
||
addi HS_INITS,a7
|
||
movi 5,a2
|
||
|
||
#initloop
|
||
callr RC_BYTEI
|
||
movb a0,*a1
|
||
addk 8,a1
|
||
dsj a2,#initloop
|
||
|
||
movk 5,a3
|
||
callr strip_white
|
||
|
||
clr a0 ;null-terminate it
|
||
movb a0,*a1
|
||
|
||
movi osgemd_ascii,a0
|
||
move a0,@message_ascii,L
|
||
movi 10,a0
|
||
move a0,@mess_space_width
|
||
clr a0
|
||
move a0,@mess_spacing
|
||
MOVE A0,@IGNORE_CHAR_WIDTH
|
||
move a10,a0
|
||
sll 16,a0
|
||
srl 16,a0
|
||
addk 30,a0
|
||
move a0,@mess_cursx
|
||
move a10,a0
|
||
srl 16,a0
|
||
move a0,@mess_cursy
|
||
move a11,@message_palette,L
|
||
calla print_string_C
|
||
|
||
|
||
push a8
|
||
move a10,a0
|
||
sll 16,a0
|
||
addi [52h,0],a0
|
||
|
||
move a10,a1
|
||
srl 16,a1
|
||
sll 16,a1
|
||
|
||
move a11,b0
|
||
movi OSGEMD_AND,a2
|
||
movi 1799H,a3
|
||
movi DMAWNZ,a4
|
||
movi CLSNEUT,a5
|
||
CLR A6
|
||
CLR A7
|
||
calla BEGINOBJP
|
||
pull a8
|
||
|
||
;initials second set
|
||
movi work_buffer,a1
|
||
move a8,a7
|
||
addi HS_INITS+HS_SIZE,a7
|
||
movi 5,a2
|
||
|
||
#initloop2
|
||
callr RC_BYTEI
|
||
movb a0,*a1
|
||
addk 8,a1
|
||
dsj a2,#initloop2
|
||
|
||
movk 5,a3
|
||
callr strip_white
|
||
|
||
clr a0 ;null-terminate it
|
||
movb a0,*a1
|
||
|
||
movi osgemd_ascii,a0
|
||
move a0,@message_ascii,L
|
||
movi 10,a0
|
||
move a0,@mess_space_width
|
||
clr a0
|
||
move a0,@mess_spacing
|
||
MOVE A0,@IGNORE_CHAR_WIDTH
|
||
move a10,a0
|
||
sll 16,a0
|
||
srl 16,a0
|
||
addi 155,a0
|
||
move a0,@mess_cursx
|
||
move a10,a0
|
||
srl 16,a0
|
||
move a0,@mess_cursy
|
||
move a11,@message_palette,L
|
||
calla print_string_C
|
||
|
||
move a9,a0
|
||
sll 16,a0
|
||
subi [8,0],a0
|
||
move a9,a1
|
||
srl 16,a1
|
||
sll 16,a1
|
||
addi [2,0],a1
|
||
movi SPEAR,a2
|
||
movi 1000H,a3
|
||
movi DMAWNZ,a4
|
||
movi CLSNEUT,a5
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJW
|
||
|
||
move a9,a0
|
||
sll 16,a0
|
||
addi [13,0],a0
|
||
move a9,a1
|
||
srl 16,a1
|
||
sll 16,a1
|
||
addi [2,0],a1
|
||
movi SPEAR,a2
|
||
movi 1001H,a3
|
||
movi DMAWNZ,a4
|
||
movi CLSNEUT,a5
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJW
|
||
|
||
PULL A7
|
||
|
||
movi "#",a0
|
||
movb a0,@message_buffer
|
||
addk 8,a1
|
||
|
||
MOVK 10,A0
|
||
SUB A7,A0
|
||
calla BINBCD ;dec number in A0
|
||
move a0,a1
|
||
movi message_buffer+8,a2
|
||
calla dec_to_asc_new_entry
|
||
|
||
clr a0
|
||
move a0,*a2+
|
||
|
||
movi wsf14_ascii,a0
|
||
move a0,@message_ascii,L
|
||
movi 7,a0
|
||
move a0,@mess_space_width
|
||
clr a0
|
||
move a0,@mess_spacing
|
||
MOVE A0,@IGNORE_CHAR_WIDTH
|
||
move a9,a0
|
||
sll 16,a0
|
||
srl 16,a0
|
||
move a0,@mess_cursx
|
||
move a9,a0
|
||
srl 16,a0
|
||
move a0,@mess_cursy
|
||
movi WSF_W_P,a0
|
||
move a0,@message_palette,L
|
||
movi 1003h,a0
|
||
move a0,@mess_z,L
|
||
calla print_string_with_z
|
||
|
||
rets
|
||
|
||
|
||
dot
|
||
.string ".",0
|
||
.even
|
||
zero
|
||
.string "0",0
|
||
.even
|
||
|
||
; A0 = binary value
|
||
.ref concat_string
|
||
.ref concat_rom_string
|
||
|
||
SUBRP val_to_dec_tenths_asc
|
||
PUSH a1,a2,a3,a4,a5,a6
|
||
|
||
movi 10,a3
|
||
move a0,a1
|
||
divu a3,a1
|
||
move a1,a0
|
||
|
||
movi 10,a3
|
||
move a0,a1
|
||
divu a3,a1
|
||
|
||
movi 10,a2
|
||
move a0,a3
|
||
modu a2,a3
|
||
|
||
PUSH a3
|
||
move a1,a0
|
||
movi 1000,a1
|
||
calla dec_to_asc
|
||
calla copy_string
|
||
movi dot,a4
|
||
calla concat_rom_string
|
||
PULL a3
|
||
move a3,a0
|
||
jrz #is_zero
|
||
movi 10,a1
|
||
calla dec_to_asc
|
||
calla concat_string
|
||
jruc #conv_done
|
||
#is_zero
|
||
movi zero,a4
|
||
calla concat_rom_string
|
||
#conv_done
|
||
|
||
PULL a1,a2,a3,a4,a5,a6
|
||
rets
|
||
|
||
|
||
#*******************************
|
||
* Display a table entry (initials and score)
|
||
* >a8=*entry, a9=[Y,Xleft] of initials, a10=[Y,Xright] of score, a11=pal
|
||
* >a0=draw high score message? (0|1)
|
||
|
||
SUBRP draw_pinspeed_table_entry
|
||
|
||
PUSH A7
|
||
|
||
push a8
|
||
PUSH A5
|
||
PUSH A6
|
||
move a10,a0
|
||
sll 16,a0
|
||
ADD A1,A0
|
||
move a10,a1
|
||
srl 16,a1
|
||
sll 16,a1
|
||
addi [4,0],a1
|
||
movi 1000H,a3
|
||
movi DMAWNZ,a4
|
||
movi CLSNEUT,a5
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJW
|
||
PULL A6
|
||
PULL A5
|
||
pull a8
|
||
|
||
move a8,a7
|
||
callr RC_LONG ;read the score
|
||
calla BCDBIN
|
||
callr val_to_dec_tenths_asc
|
||
|
||
movk 2,a0
|
||
move a0,@mess_spacing
|
||
CLR A0
|
||
MOVE A0,@IGNORE_CHAR_WIDTH
|
||
movi font18_ascii,a0
|
||
move a0,@message_ascii,L
|
||
movi 10,a0
|
||
move a0,@mess_space_width
|
||
move a10,a0
|
||
sll 16,a0
|
||
srl 16,a0
|
||
add A6,a0
|
||
move a0,@mess_cursx
|
||
move a10,a0
|
||
srl 16,a0
|
||
move a0,@mess_cursy
|
||
movi WGSF_W_P1,a0
|
||
move a0,@message_palette,L
|
||
calla print_string_R
|
||
|
||
;initials
|
||
movi message_buffer,a1
|
||
move a8,a7
|
||
addi HS_INITS,a7
|
||
movi 3,a2
|
||
|
||
#initloop
|
||
callr RC_BYTEI
|
||
movb a0,*a1
|
||
addk 8,a1
|
||
dsj a2,#initloop
|
||
|
||
callr RC_BYTEI
|
||
push a0
|
||
|
||
clr a0 ;null-terminate it
|
||
movb a0,*a1
|
||
|
||
movi osgemd_ascii,a0
|
||
move a0,@message_ascii,L
|
||
movi 10,a0
|
||
move a0,@mess_space_width
|
||
clr a0
|
||
move a0,@mess_spacing
|
||
MOVE A0,@IGNORE_CHAR_WIDTH
|
||
move a10,a0
|
||
sll 16,a0
|
||
srl 16,a0
|
||
addi 17h,a0
|
||
move a0,@mess_cursx
|
||
move a10,a0
|
||
srl 16,a0
|
||
move a0,@mess_cursy
|
||
move a11,@message_palette,L
|
||
calla print_string_C
|
||
|
||
move a9,a0
|
||
sll 16,a0
|
||
subi [8,0],a0
|
||
move a9,a1
|
||
srl 16,a1
|
||
sll 16,a1
|
||
addi [2,0],a1
|
||
movi SPEAR,a2
|
||
movi 1000H,a3
|
||
movi DMAWNZ,a4
|
||
movi CLSNEUT,a5
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJW
|
||
|
||
move a9,a0
|
||
sll 16,a0
|
||
addi [13,0],a0
|
||
move a9,a1
|
||
srl 16,a1
|
||
sll 16,a1
|
||
addi [2,0],a1
|
||
movi SPEAR,a2
|
||
movi 1001H,a3
|
||
movi DMAWNZ,a4
|
||
movi CLSNEUT,a5
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJW
|
||
|
||
pull a0
|
||
|
||
SUBI "A",a0
|
||
sll 5,a0
|
||
addi WHICH_NAMES,A0
|
||
MOVE *A0,A2,L
|
||
|
||
move a9,a0
|
||
sll 16,a0
|
||
addi [302,0],a0
|
||
move a9,a1
|
||
srl 16,a1
|
||
sll 16,a1
|
||
addi [7,0],a1
|
||
movi 1001H,a3
|
||
movi DMAWNZ,a4
|
||
movi CLSNEUT,a5
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJW
|
||
|
||
PULL A7
|
||
|
||
movi "#",a0
|
||
movb a0,@message_buffer
|
||
addk 8,a1
|
||
|
||
MOVK 10,A0
|
||
SUB A7,A0
|
||
calla BINBCD ;dec number in A0
|
||
move a0,a1
|
||
movi message_buffer+8,a2
|
||
calla dec_to_asc_new_entry
|
||
|
||
clr a0
|
||
move a0,*a2+
|
||
|
||
movi wsf14_ascii,a0
|
||
move a0,@message_ascii,L
|
||
movi 7,a0
|
||
move a0,@mess_space_width
|
||
clr a0
|
||
move a0,@mess_spacing
|
||
MOVE A0,@IGNORE_CHAR_WIDTH
|
||
move a9,a0
|
||
sll 16,a0
|
||
srl 16,a0
|
||
move a0,@mess_cursx
|
||
move a9,a0
|
||
srl 16,a0
|
||
move a0,@mess_cursy
|
||
movi WSF_W_P,a0
|
||
move a0,@message_palette,L
|
||
movi 1003h,a0
|
||
move a0,@mess_z,L
|
||
calla print_string_with_z
|
||
|
||
rets
|
||
|
||
#*******************************
|
||
SUBRP draw_winstreak_table_entry
|
||
|
||
PUSH A7
|
||
|
||
push a8
|
||
PUSH A5
|
||
PUSH A6
|
||
move a10,a0
|
||
sll 16,a0
|
||
ADD A1,A0
|
||
move a10,a1
|
||
srl 16,a1
|
||
sll 16,a1
|
||
addi [4,0],a1
|
||
movi 1000H,a3
|
||
movi DMAWNZ,a4
|
||
movi CLSNEUT,a5
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJW
|
||
PULL A6
|
||
PULL A5
|
||
pull a8
|
||
|
||
move a8,a7
|
||
callr RC_LONG ;read the score
|
||
calla BCDBIN
|
||
movi 9999999,a1
|
||
calla dec_to_asc ;convert to ASCII
|
||
CLR A0
|
||
move a0,@mess_spacing
|
||
call a5
|
||
|
||
clr a0
|
||
MOVE A0,@IGNORE_CHAR_WIDTH
|
||
movi font18_ascii,a0
|
||
move a0,@message_ascii,L
|
||
movi 10,a0
|
||
move a0,@mess_space_width
|
||
move a10,a0
|
||
sll 16,a0
|
||
srl 16,a0
|
||
add A6,a0
|
||
move a0,@mess_cursx
|
||
move a10,a0
|
||
srl 16,a0
|
||
move a0,@mess_cursy
|
||
movi WGSF_W_P1,a0
|
||
move a0,@message_palette,L
|
||
calla print_string_C
|
||
|
||
;initials
|
||
; movi message_buffer,a1
|
||
movi work_buffer,a1
|
||
move a8,a7
|
||
addi HS_INITS,a7
|
||
movi 3,a2
|
||
|
||
#initloop
|
||
callr RC_BYTEI
|
||
movb a0,*a1
|
||
addk 8,a1
|
||
dsj a2,#initloop
|
||
|
||
movk 3,a3
|
||
callr strip_white
|
||
|
||
clr a0 ;null-terminate it
|
||
movb a0,*a1
|
||
|
||
movi osgemd_ascii,a0
|
||
move a0,@message_ascii,L
|
||
movi 10,a0
|
||
move a0,@mess_space_width
|
||
clr a0
|
||
move a0,@mess_spacing
|
||
MOVE A0,@IGNORE_CHAR_WIDTH
|
||
move a10,a0
|
||
sll 16,a0
|
||
srl 16,a0
|
||
addi 17h,a0
|
||
move a0,@mess_cursx
|
||
move a10,a0
|
||
srl 16,a0
|
||
move a0,@mess_cursy
|
||
move a11,@message_palette,L
|
||
calla print_string_C
|
||
|
||
move a9,a0
|
||
sll 16,a0
|
||
subi [8,0],a0
|
||
move a9,a1
|
||
srl 16,a1
|
||
sll 16,a1
|
||
addi [2,0],a1
|
||
movi SPEAR,a2
|
||
movi 1000H,a3
|
||
movi DMAWNZ,a4
|
||
movi CLSNEUT,a5
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJW
|
||
|
||
move a9,a0
|
||
sll 16,a0
|
||
SUBi [10,0],a0
|
||
move a9,a1
|
||
srl 16,a1
|
||
sll 16,a1
|
||
addi [2,0],a1
|
||
movi BARBUTT,a2
|
||
movi 1001H,a3
|
||
movi DMAWNZ,a4
|
||
movi CLSNEUT,a5
|
||
clr a6
|
||
clr a7
|
||
MOVI DPLT_R_P,B0
|
||
calla BEGINOBJWP
|
||
PULL A7
|
||
|
||
; movi "#",a0
|
||
; movb a0,@message_buffer
|
||
; addk 8,a1
|
||
|
||
MOVK 19,A0
|
||
SUB A7,A0
|
||
calla BINBCD ;dec number in A0
|
||
move a0,a1
|
||
; movi message_buffer+8,a2
|
||
movi message_buffer,a2
|
||
calla dec_to_asc_new_entry
|
||
|
||
clr a0
|
||
move a0,*a2+
|
||
|
||
movi wsf14_ascii,a0
|
||
move a0,@message_ascii,L
|
||
movi 7,a0
|
||
move a0,@mess_space_width
|
||
clr a0
|
||
move a0,@mess_spacing
|
||
MOVE A0,@IGNORE_CHAR_WIDTH
|
||
move a9,a0
|
||
sll 16,a0
|
||
srl 16,a0
|
||
subi 4,a0
|
||
move a0,@mess_cursx
|
||
move a9,a0
|
||
srl 16,a0
|
||
move a0,@mess_cursy
|
||
movi WSF_W_P,a0
|
||
move a0,@message_palette,L
|
||
movi 1003h,a0
|
||
move a0,@mess_z,L
|
||
calla print_string_with_z
|
||
|
||
rets
|
||
|
||
WHICH_NAMES
|
||
.LONG HART
|
||
.LONG RAZOR
|
||
.LONG UNDER
|
||
.LONG YOKO
|
||
.LONG SHAWN
|
||
.LONG BAMBAM
|
||
.LONG DOINK
|
||
.LONG 0
|
||
.LONG LEX
|
||
|
||
which_crouton
|
||
.long CRUT_BH
|
||
.long CRUT_RR
|
||
.long CRUT_UN
|
||
.long CRUT_YK
|
||
.long CRUT_SM
|
||
.long CRUT_BM
|
||
.long CRUT_DK
|
||
.long CRUT_LX
|
||
|
||
SUBR draw_each_inter_table_entry
|
||
|
||
movi HS_SIZE,a7
|
||
mpyu a7,a9
|
||
addi INTER_TAB_ORIGIN,a9
|
||
move a9,a8
|
||
|
||
movi [126H,8],a9
|
||
movi [13BH,10],a10
|
||
|
||
movi GOLD,a11
|
||
movi AUD_INTER,A0
|
||
calla GET_AUD
|
||
MOVE @starting_num,A5
|
||
cmp a1,a5
|
||
jrne #gold2
|
||
movi BLUE,a11
|
||
#gold2
|
||
movi INTER_TAB_SELECT,a1 ;set the read page
|
||
callr SET_PAGE
|
||
movi special_copy,a5
|
||
JRUC draw_beaten_table_entry
|
||
|
||
SUBR draw_each_beaten_table_entry
|
||
|
||
movi HS_SIZE,a7
|
||
mpyu a7,a9
|
||
addi BEATEN_TAB_ORIGIN,a9
|
||
move a9,a8
|
||
|
||
movi [126H,8],a9
|
||
movi [13BH,10],a10
|
||
|
||
movi GOLD,a11
|
||
movi AUD_BEATEN,A0
|
||
calla GET_AUD
|
||
MOVE @starting_num,A5
|
||
cmp a1,a5
|
||
jrne #gold
|
||
movi BLUE,a11
|
||
#gold
|
||
movi BEATEN_TAB_SELECT,a1 ;set the read page
|
||
callr SET_PAGE
|
||
movi special_copy,a5
|
||
|
||
#*******************************
|
||
* Display a table entry (initials and score)
|
||
* >a8=*entry, a9=[Y,Xleft] of initials, a10=[Y,Xright] of score, a11=pal
|
||
* >a0=draw high score message? (0|1)
|
||
|
||
SUBR draw_beaten_table_entry
|
||
|
||
push a7
|
||
push a9,a10
|
||
move a8,a7
|
||
callr RC_LONG ;read the score
|
||
move a0,a9
|
||
|
||
jrnz no_reset_blank
|
||
movk 1,a0
|
||
move a0,@not_blank
|
||
no_reset_blank
|
||
|
||
movk 8,a10
|
||
clr a3
|
||
pull a1
|
||
push a1
|
||
move a1,a0
|
||
sll 16,a0
|
||
clr b4
|
||
addi [2,0],a1
|
||
next_icon
|
||
srl 1,a9
|
||
jrnc no_icon
|
||
mmtm sp,a0,a1,a3,a8,a11
|
||
move a3,a4
|
||
sll 5,a4
|
||
addi which_crouton,a4
|
||
move *a4,a2,L
|
||
movi 1000H,a3
|
||
movi DMAWNZ,a4
|
||
movi CLSNEUT,a5
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJW
|
||
movi 01000100h,a3
|
||
move a3,*a8(OSCALE),L
|
||
mmfm sp,a0,a1,a3,a8,a11
|
||
addi [30h,0],a0
|
||
inc b4
|
||
no_icon
|
||
srl 3,a9
|
||
inc a3
|
||
dec a10
|
||
jrnz next_icon
|
||
|
||
mmtm sp,a0,a1,a3,a8,a11
|
||
movi 8,b5
|
||
sub b4,b5
|
||
;loop will attempt to create 2^32 number of dots!!!!!
|
||
;Soooooo - don't do it!!!!
|
||
jrz #no_dots
|
||
move b5,a10
|
||
addi [10,0],a0
|
||
next_dot
|
||
; movi CRUTPLT_G,a2
|
||
movi OSGEMD_DOT,a2
|
||
movi 1000H,a3
|
||
movi DMAWNZ,a4
|
||
movi CLSNEUT,a5
|
||
clr a6
|
||
clr a7
|
||
push a0,a1
|
||
calla BEGINOBJW
|
||
pull a0,a1
|
||
addi [30h,0],a0
|
||
dec a10
|
||
jrnz next_dot
|
||
#no_dots
|
||
mmfm sp,a0,a1,a3,a8,a11
|
||
|
||
pull a9,a10
|
||
|
||
;initials
|
||
do_just_init
|
||
movi message_buffer,a1
|
||
move a8,a7
|
||
addi HS_INITS,a7
|
||
movi 5,a2
|
||
|
||
#initloop
|
||
callr RC_BYTEI
|
||
movb a0,*a1
|
||
addk 8,a1
|
||
dsj a2,#initloop
|
||
|
||
clr a0 ;null-terminate it
|
||
movb a0,*a1
|
||
|
||
movi osgemd_ascii,a0
|
||
move a0,@message_ascii,L
|
||
movi 10,a0
|
||
move a0,@mess_space_width
|
||
clr a0
|
||
move a0,@mess_spacing
|
||
MOVE A0,@IGNORE_CHAR_WIDTH
|
||
move a9,a0
|
||
sll 16,a0
|
||
srl 16,a0
|
||
addi 50,a0
|
||
move a0,@mess_cursx
|
||
move a9,a0
|
||
srl 16,a0
|
||
move a0,@mess_cursy
|
||
move a11,@message_palette,L
|
||
movi 1003h,a0
|
||
move a0,@mess_z,L
|
||
calla print_string_with_z
|
||
|
||
push a1
|
||
move a9,a0
|
||
sll 16,a0
|
||
subi [8,0],a0
|
||
move a9,a1
|
||
srl 16,a1
|
||
sll 16,a1
|
||
addi [2,0],a1
|
||
movi SPEAR,a2
|
||
movi 1000H,a3
|
||
movi DMAWNZ,a4
|
||
movi CLSNEUT,a5
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJW
|
||
|
||
move a9,a0
|
||
sll 16,a0
|
||
addi [13,0],a0
|
||
move a9,a1
|
||
srl 16,a1
|
||
sll 16,a1
|
||
addi [2,0],a1
|
||
movi SPEAR,a2
|
||
movi 1001H,a3
|
||
movi DMAWNZ,a4
|
||
movi CLSNEUT,a5
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJW
|
||
pull a1
|
||
|
||
pull a7
|
||
|
||
movi "#",a0
|
||
movb a0,@message_buffer
|
||
addk 8,a1
|
||
move @starting_num,a0
|
||
|
||
calla BINBCD ;dec number in A0
|
||
move a0,a1
|
||
movi message_buffer+8,a2
|
||
calla dec_to_asc_new_entry
|
||
|
||
clr a0
|
||
move a0,*a2+
|
||
|
||
movi wsf14_ascii,a0
|
||
move a0,@message_ascii,L
|
||
movi 7,a0
|
||
move a0,@mess_space_width
|
||
clr a0
|
||
move a0,@mess_spacing
|
||
MOVE A0,@IGNORE_CHAR_WIDTH
|
||
move a9,a0
|
||
sll 16,a0
|
||
srl 16,a0
|
||
move a0,@mess_cursx
|
||
move a9,a0
|
||
srl 16,a0
|
||
move a0,@mess_cursy
|
||
movi WSF_W_P,a0
|
||
move a0,@message_palette,L
|
||
movi 1003h,a0
|
||
move a0,@mess_z,L
|
||
calla print_string_with_z
|
||
|
||
rets
|
||
|
||
|
||
#*******************************
|
||
* high score page color cyclers
|
||
*
|
||
|
||
SUBR hscore_colcyc
|
||
|
||
movi [10,7],a8 ;START AT COLOR 10, CYCLE 7 COLORS
|
||
movi BLUE,a9 ;PAL NAME
|
||
movi COLTAB2,a10 ;TABLE TO CYCLE WITH
|
||
movk 3,a11 ;RATE OF CYCLE IN TICKS
|
||
CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE
|
||
|
||
rets
|
||
|
||
COLTAB2
|
||
.word 0033eh,0135fh,02b7fh,03f9fh,053bfh,06bdfh,07fffh
|
||
.word 06bdfh,053bfh,03f9fh,0277fh,0135fh,00f3fh,00b1fh,002ffh
|
||
.word 002dfh,002ffh,002ffh,0031fh,0031fh,0033fh,002fdh,002dch
|
||
.word 0029ah,00259h,00237h,00258h,00259h,0027ah,0029bh,002bch
|
||
.word 0025ah,001f7h,001b5h,00172h,00194h,001d6h,00218h,0065ah
|
||
.word 0069ch,00ebch,01addh,022fdh,02f1eh,0375eh,0437fh,04f9fh
|
||
.word 03b7fh,0275fh,0133fh,0033fh,002feh,002ddh,002bch,0029bh
|
||
.word 0025ah,00239h,00218h,00259h,0027bh,002bch,002feh,0033fh
|
||
|
||
.word 0033eh,0135fh,02b7fh,03f9fh,053bfh,06bdfh,07fffh
|
||
.word 06bdfh,053bfh,03f9fh,0277fh,0135fh,00f3fh,00b1fh,002ffh
|
||
|
||
SUBR hscore_colcyc2
|
||
|
||
movi [10,7],a8 ;START AT COLOR 10, CYCLE 7 COLORS
|
||
movi RUBYPAL,a9 ;PAL NAME
|
||
movi COLTAB3,a10 ;TABLE TO CYCLE WITH
|
||
movk 3,a11 ;RATE OF CYCLE IN TICKS
|
||
CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE
|
||
|
||
rets
|
||
|
||
COLTAB3
|
||
|
||
.word 07c01h,07c63h,07d08h,07d8ch,07e10h,07eb5h,07f39h
|
||
.word 07e94h,07e10h,07d6bh,07ce7h,07c42h,07421h,06c00h,06400h
|
||
.word 05c00h,06400h,06800h,07000h,07400h,07c00h,07400h,06c00h
|
||
.word 06000h,05800h,05c00h,06000h,06400h,06800h,06c00h,07000h
|
||
.word 06400h,05c00h,05000h,04800h,05000h,05800h,06000h,06c00h
|
||
.word 06c21h,07063h,070c6h,07508h,0754ah,079adh,079efh,07e52h
|
||
.word 07defh,07dadh,0794ah,078e7h,07884h,07842h,07800h,07000h
|
||
.word 06c00h,06400h,06000h,06400h,06c00h,07000h,07800h,07c00h
|
||
|
||
.word 07c01h,07c63h,07d08h,07d8ch,07e10h,07eb5h,07f39h
|
||
.word 07e94h,07e10h,07d6bh,07ce7h,07c42h,07421h,06c00h,06400h
|
||
|
||
|
||
#*****************************************************************************
|
||
* Checks to see if the expired player made the table, and takes care of all
|
||
* the details if he did.
|
||
*
|
||
|
||
STRUCTPD
|
||
LONG #cursorimg ;UHL cursor *img
|
||
LONG #hiliteimg ;UHL hilite letter *img
|
||
WORD #stick ;UHW stick to read
|
||
LONG #which_tab
|
||
LONG #which_entry
|
||
LONG #which_level
|
||
WORD #which_aud
|
||
|
||
|
||
|
||
WHICH_TO_OR
|
||
.LONG 1H
|
||
.LONG 10H
|
||
.LONG 100H
|
||
.LONG 1000H
|
||
.LONG 10000H
|
||
.LONG 100000H
|
||
.LONG 1000000H
|
||
.LONG 10000000H
|
||
|
||
DO_BEATEN_GAME
|
||
move a10,a1
|
||
sll 4,a1
|
||
addi which_player,a1
|
||
move *a1,a9
|
||
CMPI 8,A9
|
||
JRNE AVOID_NUMBER_8
|
||
DEC A9
|
||
AVOID_NUMBER_8
|
||
SLL 5,A9
|
||
ADDI WHICH_TO_OR,A9
|
||
MOVE *A9,A9,L
|
||
|
||
move a10,a1 ;clear out intials for end game table
|
||
MOVE a1,a2
|
||
sll 5,a1
|
||
sll 4,a2
|
||
add a2,a1
|
||
addi entered_inits,a1
|
||
clr a11
|
||
move a11,*a1+,L
|
||
movb a11,*a1
|
||
|
||
movi FIND_LOW_TABLE_LEVEL,a11
|
||
movi BEATEN_TAB,a5
|
||
movi AUD_BEATEN,A3
|
||
MOVE @belt_type,a1
|
||
jrnz found_right_table
|
||
movi INTER_TAB,A5
|
||
movi AUD_INTER,A3
|
||
found_right_table
|
||
movi enter_initials_beaten,a10
|
||
movi SPECIAL_ENTRY,a7
|
||
jruc create_initial_input
|
||
|
||
SUBR DO_TAG_GAME
|
||
|
||
move a10,a1 ;clear out intials for end game table
|
||
MOVE a1,a2
|
||
sll 5,a1
|
||
sll 4,a2
|
||
add a2,a1
|
||
addi entered_inits,a1
|
||
clr a11
|
||
move a11,*a1+,L
|
||
movb a11,*a1
|
||
|
||
movi FIND_LOW_TABLE_LEVEL,a11
|
||
movi TAG_TAB,a5
|
||
movi AUD_TAG,A3
|
||
movi enter_initials_beaten,a10
|
||
movi do_entry_time,a7
|
||
jruc create_initial_input
|
||
|
||
|
||
SUBR pin_speed_check
|
||
|
||
;skip this check if I'm a drone.
|
||
move a8,A0
|
||
CMPI 2,A0
|
||
JRGE #retp
|
||
|
||
;skip this check if the match took three rounds
|
||
move @current_round,a14
|
||
cmpi 3,a14
|
||
jreq #retp
|
||
|
||
SLL 5,A0
|
||
ADDI MATCH_TIMERS,A0
|
||
MOVE *A0,A9,L
|
||
jrle #retp
|
||
|
||
movi FIND_LOW_TABLE_LEVEL,a11
|
||
movi PIN_SPEED_TAB,a5
|
||
movi enter_initials_top_20,a10
|
||
movi do_entry_time,a7
|
||
movi AUD_PINSPEED,a3
|
||
jruc create_initial_input
|
||
|
||
SUBR winstreak_check
|
||
|
||
move a8,a9
|
||
sll 4,a9
|
||
addi p1oldwinstreak,a9
|
||
move *a9,a9
|
||
movi FIND_HIGH_TABLE_LEVEL,a11
|
||
movi STREAK_TAB,a5
|
||
movi enter_initials_streak,a10
|
||
movi do_entry,a7
|
||
movi AUD_WINSTREAK,a3
|
||
|
||
create_initial_input
|
||
move a8,a1
|
||
addi HI_INPUT_PID,a1
|
||
calla GETPRC
|
||
move a5,*a0(#which_tab),L
|
||
move a8,*a0(#stick)
|
||
move a10,*a0(#which_entry),L
|
||
move a11,*a0(#which_level),L
|
||
move a3,*a0(#which_aud)
|
||
|
||
#retp RETP
|
||
|
||
SUBR do_that_cycle
|
||
movi [02h,1],a8 ;cycle color A
|
||
movi FNT9RED_P,a9 ;pal name
|
||
movi fnt9_red_white,a10 ;use the LFLASH table
|
||
movk 6,a11 ;cycle speed
|
||
CREATE CYCPID,CYCLE_TABLE
|
||
|
||
movi [02h,1],a8 ;cycle color A
|
||
movi FNT9WHT2P,a9 ;pal name
|
||
movi fnt9_blue_white,a10 ;use the LFLASH table
|
||
movk 6,a11 ;cycle speed
|
||
CREATE CYCPID,CYCLE_TABLE
|
||
callr hscore_colcyc
|
||
callr hscore_colcyc2
|
||
rets
|
||
|
||
do_entry
|
||
;convert score and wins to BCD
|
||
move a9,a0
|
||
calla BINBCD
|
||
move a0,a9
|
||
do_entry_time
|
||
move a9,a0
|
||
|
||
clr a3
|
||
move *a13(#which_tab),a8,L
|
||
callr CHECK_SCORE
|
||
|
||
jrz #done_jake_hack
|
||
|
||
no_we_can_come_back
|
||
;they made one of the tables. first update AUD_LSCORE
|
||
move a0,a1
|
||
move *a13(#which_aud),a0
|
||
calla KILL_AUD
|
||
calla AUD
|
||
|
||
SPECIAL_ENTRY
|
||
movk 1,a14
|
||
move a14,@auto_init
|
||
MOVE *A13(#stick),a1
|
||
MOVE a1,a2
|
||
sll 5,a1
|
||
sll 4,a2
|
||
add a2,a1
|
||
addi entered_inits,a1
|
||
move *a1,a0,L
|
||
JRNZ NO_NEED_TO_ENTER
|
||
|
||
clr a14
|
||
move a14,@auto_init
|
||
|
||
CREATE0 howard_wins
|
||
|
||
PUSHP a9
|
||
|
||
MOVE *A13(#which_entry),A1,L
|
||
GETPC A7
|
||
ADDI 040h,A7
|
||
MOVE A7,-*A12,L ;PUSH RET ADDR
|
||
JUMP A1
|
||
|
||
PULLP a9
|
||
|
||
MOVI 0B8H,A0
|
||
CALLA triple_sound
|
||
|
||
MOVE *A13(#stick),a1
|
||
MOVE a1,a2
|
||
sll 5,a1
|
||
sll 4,a2
|
||
add a2,a1
|
||
addi entered_inits,a1
|
||
NO_NEED_TO_ENTER
|
||
move a9,a0
|
||
move *a13(#which_tab),a8,L
|
||
cmpi BEATEN_TAB,a8
|
||
JREQ SPECIAL_ADDITION
|
||
CMPI INTER_TAB,A8
|
||
JREQ SPECIAL_ADDITION
|
||
CMPI TAG_TAB,A8
|
||
JRNE normal_addition
|
||
CALLR TAG_ENTRY
|
||
jruc #done
|
||
SPECIAL_ADDITION
|
||
callr SPECIAL_ADD_ENTRY
|
||
CALLR SORT_BEATEN_TABLE
|
||
jruc #done
|
||
|
||
normal_addition
|
||
callr ADD_ENTRY
|
||
#done
|
||
|
||
movi CYCPID,a0
|
||
movi -1,a1
|
||
calla KILALL
|
||
DIE
|
||
|
||
#done_jake_hack
|
||
movi 17,a0
|
||
move *a13(#which_tab),a8,L
|
||
cmpi TAG_TAB,a8
|
||
jreq no_we_can_come_back
|
||
|
||
movi CYCPID,a0
|
||
movi -1,a1
|
||
calla KILALL
|
||
DIE
|
||
|
||
fnt9_blue_white
|
||
.word 0001fH,07FFFH
|
||
.word -1
|
||
|
||
fnt9_red_white
|
||
.word 07C00H,07FFFH
|
||
.word -1
|
||
|
||
*****************************************************************************
|
||
* proc pointer + #stick = stick (0:1)
|
||
|
||
; SUBR enter_message
|
||
; clr a0
|
||
; movb a0,@entered_message
|
||
; movb a0,@entered_message+40h
|
||
; movi entered_message,a4
|
||
; move a4,a5
|
||
; movi entered_message+(15*8),a6
|
||
; PUSHP a4,a5,a6
|
||
;
|
||
; movi #entermess_mes,a2
|
||
; PUSHP a2
|
||
; jruc #go
|
||
|
||
SUBR enter_initials_beaten
|
||
|
||
movi entered_inits,a4
|
||
move a4,a5
|
||
movi entered_inits+(5*8),a6
|
||
movi #enterinita_mess,a3
|
||
movi #enterinit5_mes,a2
|
||
move *a13(#stick),a0
|
||
move a0,a0
|
||
jrz #enter_mess_set_3
|
||
movi entered_inits+030h,a4
|
||
move a4,a5
|
||
movi entered_inits+(5*8)+030h,a6
|
||
movi #enterinitb_mess,a3
|
||
movi #enterinit6_mes,a2
|
||
#enter_mess_set_3
|
||
clr a14
|
||
move a14,*a4,L ;clear out initials
|
||
move a14,*a4(018h) ;clear out initials
|
||
PUSHP a4,a5,a6
|
||
PUSHP a2
|
||
move a3,a2
|
||
calla setup_message
|
||
|
||
move *a13(#stick),a0
|
||
addi CLSNEUT|TYPTEXT|00A3h,a0
|
||
move a0,@mess_objid
|
||
|
||
move *a2+,a0,L ;print method
|
||
move a2,a4 ;* text string
|
||
call a0
|
||
jruc #go
|
||
|
||
SUBR enter_initials_streak
|
||
|
||
CLR A2
|
||
MOVE A2,@IGNORE_CHAR_WIDTH
|
||
|
||
movi #enterinit7_mes,a2
|
||
move *a13(#stick),a0
|
||
jrz just_add_to_id
|
||
movi #enterinit8_mes,a2
|
||
just_add_to_id
|
||
PUSH A0
|
||
calla setup_message
|
||
PULL A0
|
||
addi CLSNEUT|TYPTEXT|00A3h,a0
|
||
move a0,@mess_objid
|
||
|
||
move *a2+,a0,L ;print method
|
||
move a2,a4 ;* text string
|
||
call a0
|
||
|
||
move @mess_cursx2,a0
|
||
addi 8,a0
|
||
move a0,@mess_cursx
|
||
|
||
movk 2,a0
|
||
move a0,@mess_spacing
|
||
|
||
move @p1oldwinstreak,a0
|
||
move *a13(#stick),a2
|
||
jrz got_right_streak
|
||
move @p2oldwinstreak,a0
|
||
got_right_streak
|
||
movi 9999999,a1
|
||
calla dec_to_asc ;convert to ASCII
|
||
CALLA copy_string
|
||
calla print_string
|
||
|
||
movi entered_inits,a4
|
||
move a4,a5
|
||
movi entered_inits+(3*8),a6
|
||
movi #enterinita_mess,a3
|
||
movi #enterinit1_mes,a2
|
||
move *a13(#stick),a0
|
||
move a0,a0
|
||
jrz #enter_mess_set_1
|
||
movi entered_inits+030h,a4
|
||
move a4,a5
|
||
movi entered_inits+(3*8)+030h,a6
|
||
movi #enterinitb_mess,a3
|
||
movi #enterinit2_mes,a2
|
||
#enter_mess_set_1
|
||
clr a14
|
||
move a14,*a4,L ;clear out initials
|
||
move a14,*a4(018h) ;clear out initials
|
||
PUSHP a4,a5,a6
|
||
PUSHP a2
|
||
move a3,a2
|
||
calla setup_message
|
||
|
||
move *a13(#stick),a0
|
||
addi CLSNEUT|TYPTEXT|00A3h,a0
|
||
move a0,@mess_objid
|
||
|
||
move *a2+,a0,L ;print method
|
||
move a2,a4 ;* text string
|
||
call a0
|
||
jruc #go
|
||
|
||
*********************************
|
||
SUBR enter_initials_top_20
|
||
|
||
movi font9A_ascii,a0
|
||
move a0,@message_ascii,L
|
||
|
||
move @MATCH_TIMERS,a0,L
|
||
movi 35,a3
|
||
movi FNT9WHT2P,a11
|
||
move *a13(#stick),a2
|
||
jrz got_right_time
|
||
move @MATCH_TIMERS+32,a0,L
|
||
movi FNT9RED_P,a11
|
||
movi 270,a3
|
||
got_right_time
|
||
addi CLSNEUT|TYPTEXT|00A3h,a2
|
||
move a2,@mess_objid
|
||
move a11,@message_palette,L
|
||
movi 16,a2
|
||
move a2,@mess_cursy
|
||
move a3,@mess_cursx
|
||
calla BCDBIN
|
||
callr val_to_dec_tenths_asc
|
||
clr a0
|
||
move A0,@IGNORE_CHAR_WIDTH
|
||
move a0,@mess_spacing
|
||
calla print_string
|
||
|
||
move @mess_cursx2,a0
|
||
addi 6,a0
|
||
move a0,@mess_cursx
|
||
|
||
movi #enterinit9_mes,a4
|
||
calla print_string2
|
||
|
||
movi entered_inits,a4
|
||
move a4,a5
|
||
movi entered_inits+(3*8),a6
|
||
movi #enterinita_mess,a3
|
||
movi #enterinit3_mes,a2
|
||
move *a13(#stick),a0
|
||
move a0,a0
|
||
jrz #enter_mess_set
|
||
movi entered_inits+030h,a4
|
||
move a4,a5
|
||
movi entered_inits+(3*8)+030h,a6
|
||
movi #enterinitb_mess,a3
|
||
movi #enterinit4_mes,a2
|
||
#enter_mess_set
|
||
clr a14
|
||
move a14,*a4,L ;clear out initials
|
||
move a14,*a4(018h) ;clear out initials
|
||
PUSHP a4,a5,a6
|
||
PUSHP a2
|
||
move a3,a2
|
||
|
||
calla setup_message
|
||
|
||
move *a13(#stick),a0
|
||
addi CLSNEUT|TYPTEXT|00A3h,a0
|
||
move a0,@mess_objid
|
||
|
||
move *a2+,a0,L ;print method
|
||
move a2,a4 ;* text string
|
||
call a0
|
||
#go
|
||
|
||
PULLP a2
|
||
movk 13,a0
|
||
move a0,@mess_line_spacing
|
||
|
||
calla setup_message
|
||
|
||
move *a13(#stick),a0
|
||
addi CLSNEUT|TYPTEXT|00A3h,a0
|
||
move a0,@mess_objid
|
||
|
||
move *a2+,a0,L ;print method
|
||
move a2,a4 ;* text string
|
||
call a0
|
||
|
||
callr draw_letter_grid ;draw the letter grid
|
||
|
||
move *a13(#stick),a1
|
||
jrnz #right_type
|
||
TBL_OBJ #cursor ;create cursor
|
||
jruc #cursor_type_set
|
||
#right_type
|
||
TBL_OBJ #cursor2 ;create cursor
|
||
#cursor_type_set
|
||
clr a0
|
||
move a0,*a8(ODOFF),L
|
||
movi 0101h,a0
|
||
move a0,*a8(OCONST)
|
||
movi #block_size,a0
|
||
move a0,*a8(OSIZEX)
|
||
move a0,*a8(OSIZEY)
|
||
move a8,*a13(#cursorimg),L
|
||
|
||
move *a13(#stick),a1
|
||
jrnz #right_hilite
|
||
TBL_OBJ #hilite1 ;create hilite letter
|
||
jruc #hilite_set
|
||
#right_hilite
|
||
TBL_OBJ #hilite2 ;create hilite letter
|
||
#hilite_set
|
||
|
||
move a8,*a13(#hiliteimg),L
|
||
|
||
clr a9
|
||
callr new_cursor_pos ;place them & set char img/pal
|
||
|
||
|
||
;reg use (loop)
|
||
; a4 *first initial ram
|
||
; a5 *next initial ram
|
||
; a6 *last initial ram
|
||
; a8 scratch
|
||
; a9 cursor position (0-29)
|
||
;a10 hold count for repeat motion
|
||
;a11 debounce timer
|
||
|
||
PULLP a4,a5,a6
|
||
|
||
movi 65,a11
|
||
move a11,*a4
|
||
|
||
callr print_init_string
|
||
|
||
clr a11
|
||
MOVI 700H,B5
|
||
clr b3
|
||
|
||
#loop
|
||
;this timer is done the hard way cos its 1:30 in the morning and I dont
|
||
;have the energy to be clever
|
||
movk 1,b1
|
||
cmpi 150*5,b5
|
||
jrgt no_need_for_timer
|
||
mmtm sp,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10
|
||
move b5,b7
|
||
movi 150,b1
|
||
divs b1,b7
|
||
move b3,b3
|
||
jrnz we_already_have_it
|
||
movi [83+40,0],a0
|
||
move *a13(#stick),a1
|
||
jrz which_edge_set
|
||
movi [322+40,0],a0
|
||
which_edge_set
|
||
movi [16,0],a1 ;y pos
|
||
movi FNT9_5,a2
|
||
movi 104+200,a3 ;z pos
|
||
movi DMAWNZ|M_SCRNREL,a4 ;DMA flags
|
||
move *a13(#stick),a5
|
||
addi CLSNEUT|TYPTEXT|00A3h,a5 ;object ID
|
||
clr a6 ;x vel
|
||
clr a7 ;y vel
|
||
movi FNT9WHT_P,b0
|
||
calla BEGINOBJWP
|
||
move a8,b3
|
||
|
||
push b3,b5
|
||
; CREATE0 do_next_tick
|
||
; movi 0B7H,a0
|
||
MOVI 0AH,A0
|
||
calla triple_sound
|
||
pull b3,b5
|
||
we_already_have_it
|
||
move b3,a8
|
||
move b7,a0
|
||
sll 5,a0
|
||
addi digits_tbl,a0
|
||
move *a0,a0,L ;* image
|
||
move *a8(OIMG),a1,L
|
||
cmp a0,a1
|
||
jreq no_change
|
||
move *a8(OCTRL),a1
|
||
calla change_image
|
||
push b3,b5
|
||
; create0 do_next_tick
|
||
; movi 0B7H,a0
|
||
MOVI 0AH,A0
|
||
calla triple_sound
|
||
pull b3,b5
|
||
no_change
|
||
|
||
mmfm sp,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10
|
||
no_need_for_timer
|
||
|
||
DEC B5 ;have a limit we'll wait
|
||
JRZ #done2
|
||
move b3,a2
|
||
MOVE B5,A0
|
||
PUSHP A0,a2,a4,a5,a6
|
||
SLEEPK 1
|
||
PULLP A0,a2,a4,a5,a6
|
||
MOVE A0,B5
|
||
move a2,b3
|
||
|
||
;button check
|
||
move *a13(#stick),a0
|
||
calla get_but_val_down
|
||
move a0,a0
|
||
jrz #stick_check
|
||
|
||
;new press. add a letter.
|
||
move a9,a0
|
||
cmpi 28,a0
|
||
jreq #deletechar ;backspace?
|
||
|
||
cmpi 29,a0
|
||
jreq #done2 ;EOL?
|
||
|
||
cmp a5,a6
|
||
jreq #stick_check ;room for another char?
|
||
|
||
sla 3,a0 ;x8
|
||
addi #init_table2,a0
|
||
movb *a0,*a5
|
||
addk 8,a5
|
||
clr a0
|
||
movb a0,*a5 ;always keep a terminator in there.
|
||
jruc #added
|
||
|
||
#deletechar
|
||
cmp a4,a5
|
||
jreq #stick_check ;no chars to delete!
|
||
subk 8,a5
|
||
clr a0
|
||
movb a0,*a5
|
||
callr print_init_string
|
||
jruc #stick_check
|
||
|
||
#added
|
||
movi 0b1h,a0
|
||
push b3,b5
|
||
calla triple_sound
|
||
pull b3,b5
|
||
|
||
;character added.
|
||
callr print_init_string
|
||
|
||
;if that was the last character, move the cursor to the END char.
|
||
cmp a5,a6
|
||
jrne #stick_check
|
||
|
||
movi 29,a9
|
||
callr new_cursor_pos
|
||
|
||
#stick_check
|
||
dec a11 ;debounce check
|
||
jrp #loop ;too soon?
|
||
|
||
move *a13(#stick),a0
|
||
calla get_stick_val_down
|
||
move a0,a0
|
||
jrz #no_new_stick
|
||
|
||
movi #tstatic-#debounce_time,a10
|
||
movi #debounce_time,a11
|
||
jruc #adjust
|
||
|
||
#no_new_stick
|
||
dec a10
|
||
jrnz #loop ;holding and waiting
|
||
|
||
;whee! time to repeat-move
|
||
move *a13(#stick),a0
|
||
calla get_stick_val_cur
|
||
movi #tmoving,a10
|
||
#adjust
|
||
X16 a0
|
||
addi #joytab,a0
|
||
move *a0,a0
|
||
|
||
add a0,a9
|
||
jrn #too_low
|
||
cmpi 30,a9
|
||
jrge #too_high
|
||
jruc #just_right
|
||
|
||
#too_low
|
||
addi 30,a9
|
||
jruc #just_right
|
||
#too_high
|
||
subi 30,a9
|
||
jruc #just_right
|
||
|
||
#just_right
|
||
;adjust cursor and character position
|
||
move a0,a0
|
||
jrz no_motion_sound
|
||
movi 0c7h,a0
|
||
move *a13(#stick),a1
|
||
jrz motion_sound_set
|
||
inc a0
|
||
motion_sound_set
|
||
push b3,b5
|
||
calla triple_sound
|
||
pull b3,b5
|
||
no_motion_sound
|
||
callr new_cursor_pos
|
||
move a9,a0
|
||
|
||
cmpi 28,a0
|
||
jreq #space_it
|
||
|
||
cmpi 29,a0
|
||
jreq #space_it
|
||
|
||
cmp a6,a5
|
||
jreq #loop
|
||
|
||
sla 3,a0
|
||
addi #init_table2,a0
|
||
movb *a0,*a5
|
||
clr a0
|
||
movb a0,*a5(8) ;always keep a terminator in there.
|
||
callr print_init_string
|
||
jruc #loop
|
||
|
||
#backspace_it
|
||
sla 3,a0
|
||
addi #init_table2,a0
|
||
subk 8,a5
|
||
movb *a0,*a5
|
||
addk 8,a5
|
||
|
||
clr a0
|
||
movb a0,*a5 ;always keep a terminator in there.
|
||
callr print_init_string
|
||
jruc #loop
|
||
|
||
#space_it
|
||
clr a0
|
||
movb a0,*a5 ;always keep a terminator in there.
|
||
callr print_init_string
|
||
jruc #loop
|
||
|
||
#done2
|
||
callr are_inits_dirty
|
||
jrnz replace_dirty_inits
|
||
; jrz #not_dirty
|
||
; move a4,a5
|
||
; clr a0
|
||
; movb a0,*a5
|
||
; callr print_init_string
|
||
; movi 28,a9
|
||
; callr new_cursor_pos
|
||
; jruc #stick_check
|
||
;#not_dirty
|
||
.if 0
|
||
calla are_special_inits
|
||
jrnz #not_special_inits
|
||
JSRP prog_specials
|
||
#not_special_inits
|
||
.endif
|
||
|
||
MOVI 0cbh,A0
|
||
MOVE *A13(#stick),a1
|
||
jrz select_set
|
||
inc a0
|
||
select_set
|
||
push b3,b5
|
||
CALLA triple_sound
|
||
pull b3,b5
|
||
|
||
pushp a4
|
||
PUSHP A6
|
||
sleep 30
|
||
PULLP A6
|
||
pullp a4
|
||
|
||
;; move *a13(#stick),a0
|
||
; addi CLSNEUT|TYPTEXT|00A5h,a0
|
||
; calla obj_del1c
|
||
;
|
||
; move *a13(#stick),a0
|
||
; addi CLSNEUT|TYPTEXT|00A3h,a0
|
||
; calla obj_del1c
|
||
|
||
move *a4,a0,L
|
||
jrnz #initials_have_content
|
||
replace_dirty_inits
|
||
movk 6,a0
|
||
calla RNDRNG0
|
||
sll 5,a0
|
||
addi #random_initials,a0
|
||
move *a0,A0,L
|
||
move a0,*a4,L
|
||
CLR A1
|
||
MOVB A1,*A4(020H)
|
||
|
||
#initials_have_content
|
||
PUSH a0
|
||
move *a13(#stick),a0
|
||
addi CLSNEUT|TYPTEXT|00A5h,a0
|
||
calla obj_del1c
|
||
|
||
move *a13(#stick),a0
|
||
addi CLSNEUT|TYPTEXT|00A3h,a0
|
||
calla obj_del1c
|
||
PULL a0
|
||
|
||
CMPI "TJM",a0
|
||
jrne no_worry_about_disaster
|
||
|
||
push a0
|
||
movi 129h,a0
|
||
move @HCOUNT,a1
|
||
srl 1,a1
|
||
jrnc we_now_which
|
||
inc a0
|
||
we_now_which
|
||
CALLA ADD_VOICE
|
||
pull a0
|
||
no_worry_about_disaster
|
||
|
||
CMPI "SMJ",a0
|
||
jrne no_worry_about_yes_indeedly
|
||
push a0
|
||
movi 214h,a0
|
||
CALLA ADD_VOICE
|
||
pull a0
|
||
|
||
no_worry_about_yes_indeedly
|
||
PUSH A6
|
||
SUB A4,A6
|
||
CMPI 18H,A6
|
||
JRNE A_FIVE_INITIALER
|
||
|
||
MOVE *A13(#stick),a1
|
||
sll 4,a1
|
||
addi which_player,a1
|
||
move *a1,a9
|
||
ADDI "A",A9
|
||
MOVB A9,*A4(18H)
|
||
|
||
A_FIVE_INITIALER
|
||
PULL A6
|
||
|
||
RETP
|
||
|
||
;do_next_tick
|
||
; SLEEP 12
|
||
; MOVI 0B8H,A0
|
||
; CALLA triple_sound
|
||
; DIE
|
||
|
||
#random_initials
|
||
.byte "MJT",0
|
||
.byte "JYT",0
|
||
.byte "SAL",0
|
||
.byte "JMS",0
|
||
.byte "JAZ",0
|
||
.byte "RJR",0
|
||
.byte "MJL",0
|
||
|
||
#dw_table
|
||
.long 00001ab1h ; FUQ
|
||
.long 00001aa3h ; FUC
|
||
.long 00001aabh ; FUK
|
||
.long 000822b1h ; PHUQ
|
||
.long 000822abh ; PHUK
|
||
.long 000822a3h ; PHUC
|
||
.long 010ace79h ; PUSSY
|
||
.long 0102b933h ; PENIS
|
||
.long 0024d068h ; BITCH
|
||
.long 0009b2b4h ; SLUT
|
||
.long 0009a134h ; SHIT
|
||
.long 0001d5d4h ; CUNT
|
||
.long 0001b134h ; CLIT
|
||
.long 0001bc6bh ; COCK
|
||
.long 000994e1h ; SEGA
|
||
.long 0
|
||
|
||
; A4 = *beginning of string
|
||
; A0 = character to add
|
||
;
|
||
; Returns
|
||
; Z - Not dirty word
|
||
; NZ - Dirty word
|
||
;
|
||
SUBR are_inits_dirty
|
||
PUSH a0,a1,a2,a4,a5,a6
|
||
move a4,a6
|
||
subk 8,a6
|
||
#recheck
|
||
addk 8,a6
|
||
move a6,a4
|
||
movb *a6,a2
|
||
jrz #not_dirty_word
|
||
clr a1
|
||
#get_inits_loop
|
||
movb *a4,a2
|
||
; jrz #gi_done
|
||
jrz #recheck
|
||
cmpi 20h,a2
|
||
jrz #not_alpha
|
||
cmpi 21h,a2
|
||
jrz #not_alpha
|
||
cmpi 19h,a2
|
||
jrz #not_alpha
|
||
sll 5,a1
|
||
subi 40h,a2
|
||
andi 1fh,a2
|
||
or a2,a1
|
||
callr #check_it
|
||
#not_alpha
|
||
addk 8,a4
|
||
jruc #get_inits_loop
|
||
#gi_done
|
||
|
||
#check_it
|
||
PUSH a4
|
||
movi #dw_table,a4
|
||
clr a0
|
||
#check_dw_loop
|
||
move *a4+,a5,L
|
||
; jrz #not_dirty_word
|
||
jrz #check_done
|
||
cmp a1,a5
|
||
jrz #is_dirty
|
||
jruc #check_dw_loop
|
||
#check_done
|
||
PULL a4
|
||
rets
|
||
|
||
#is_dirty
|
||
PULL a4,a14 ; This sucks don't change this
|
||
movk 1,a0 ; or it will break
|
||
jruc #aid_exit
|
||
#not_dirty_word
|
||
clr a0
|
||
#aid_exit
|
||
move a0,a0
|
||
PULL a0,a1,a2,a4,a5,a6
|
||
rets
|
||
|
||
|
||
|
||
****************************************
|
||
* moves the cursor and hilite char to their new positions.
|
||
|
||
SUBRP new_cursor_pos
|
||
|
||
;x pos = #grid_x + #block_size * (index mod 6)
|
||
move a9,a1
|
||
movk 5,a0
|
||
modu a0,a1
|
||
movi #block_size,a0
|
||
mpyu a0,a1
|
||
move *a13(#stick),a3
|
||
SLL 6,A3
|
||
ADDI WHERE_BLOCK,A3
|
||
MOVE *A3(010h),A14
|
||
add a14,a1
|
||
move *a13(#cursorimg),a8,L
|
||
move a1,*a8(OXPOS)
|
||
move *a13(#hiliteimg),a8,L
|
||
move a1,*a8(OXPOS)
|
||
|
||
;y pos = #grid_y + #block_size * (index / 6)
|
||
move a9,a1
|
||
movk 5,a2
|
||
divu a2,a1
|
||
movi #block_size,a0
|
||
mpyu a0,a1
|
||
move *a3(030h),a14
|
||
add a14,a1
|
||
move *a13(#cursorimg),a8,L
|
||
move a1,*a8(OYPOS)
|
||
move *a13(#hiliteimg),a8,L
|
||
move a1,*a8(OYPOS)
|
||
|
||
;adjust the character image
|
||
move a9,a0
|
||
sla 3,a0 ;x8
|
||
addi #init_table1,a0
|
||
movb *a0,a0
|
||
X32 a0
|
||
addi font9_ascii,a0
|
||
move *a0,a0,L
|
||
jrnz #good_image
|
||
movi OSGEMD_DOT,a0
|
||
#good_image
|
||
move *a13(#hiliteimg),a8,L
|
||
calla civanic
|
||
movi FNT9YEL_P,a0
|
||
calla pal_getf
|
||
move a0,*a8(OPAL)
|
||
move *a8(OSIZEX),a14 ;center it
|
||
subi #block_size,a14
|
||
sra 1,a14
|
||
move a14,*a8(ODXOFF)
|
||
move *a8(OSIZEY),a14
|
||
subi #block_size,a14
|
||
sra 1,a14
|
||
move a14,*a8(ODYOFF)
|
||
|
||
rets
|
||
|
||
|
||
****************************************
|
||
* deletes the old displayed init string (if any) and makes a new one.
|
||
|
||
SUBRP print_init_string
|
||
|
||
push b5,b3
|
||
PUSH a0,a1,a2,a3,a4,a5,a6,a7,a8
|
||
PUSH a4
|
||
move *a13(#stick),a0
|
||
addi CLSNEUT|TYPTEXT|00A5h,a0
|
||
calla obj_del1c
|
||
|
||
movi #currentinit1_mes,a2
|
||
move *a13(#stick),a3
|
||
jrz #current_mess_set
|
||
movi #currentinit2_mes,a2
|
||
#current_mess_set
|
||
|
||
calla setup_message
|
||
|
||
move *a13(#stick),a0
|
||
addi CLSNEUT|TYPTEXT|00A5h,a0
|
||
move a0,@mess_objid
|
||
|
||
PULL a4
|
||
calla print_string_C2
|
||
|
||
PULL a0,a1,a2,a3,a4,a5,a6,a7,a8
|
||
pull b5,b3
|
||
|
||
rets
|
||
|
||
****************************************
|
||
* draw the letter grid
|
||
|
||
SUBRP draw_letter_grid
|
||
|
||
movi FNT9YEL_P,a0
|
||
calla pal_getf
|
||
move a0,a11
|
||
|
||
move *a13(#stick),A1
|
||
SLL 6,A1
|
||
ADDI WHERE_BLOCK,A1
|
||
MOVE *A1+,A0,L
|
||
MOVE *A1,A1,L
|
||
MOVE A0,B2
|
||
SUBI [#block_size,0],B2
|
||
|
||
movi #init_table1,a9
|
||
movi 30,a10
|
||
jruc #draw_loop
|
||
|
||
#draw_incy
|
||
MOVE B2,A0
|
||
addi [#block_size,0],a1
|
||
#draw_incx
|
||
addi [#block_size,0],a0
|
||
|
||
#draw_loop
|
||
movb *a9,a2
|
||
addk 8,a9
|
||
X32 a2
|
||
addi font9_ascii,a2
|
||
move *a2,a2,L
|
||
jrnz #draw_okimg
|
||
|
||
;bad image
|
||
movi OSGEMD_DOT,a2
|
||
|
||
#draw_okimg
|
||
clr a3
|
||
movi DMAWNZ,a4
|
||
move *a13(#stick),a5
|
||
addi CLSNEUT|TYPTEXT|00A3h,a5
|
||
clr a6
|
||
clr a7
|
||
PUSH a0,a1
|
||
movi FNT9YEL_P,b0
|
||
calla BEGINOBJP
|
||
PULL a0,a1
|
||
move a11,*a8(OPAL) ;set the palette
|
||
|
||
;center the image in its' box
|
||
move *a8(OSIZEX),a14
|
||
subi #block_size,a14
|
||
sra 1,a14
|
||
move a14,*a8(ODXOFF)
|
||
|
||
move *a8(OSIZEY),a14
|
||
subi #block_size,a14
|
||
sra 1,a14
|
||
move a14,*a8(ODYOFF)
|
||
|
||
dec a10
|
||
jrz #draw_done
|
||
|
||
move a10,a6
|
||
movi 5,a7
|
||
modu a7,a6
|
||
jrz #draw_incy
|
||
jruc #draw_incx
|
||
|
||
#draw_done
|
||
rets
|
||
|
||
****************************************
|
||
* enter inits config stuff
|
||
crap_off .equ 5
|
||
WHERE_BLOCK
|
||
.LONG [32+crap_off,0] ;X
|
||
.LONG [59,0] ;Y
|
||
|
||
.LONG [273+crap_off,0] ;X
|
||
.LONG [59,0] ;Y
|
||
|
||
#init_table1 .STRING "ABCDEFGHIJKLMNOPQRSTUVWXYZ!",>10,>11,>12
|
||
#init_table2 .STRING "ABCDEFGHIJKLMNOPQRSTUVWXYZ!",>20,>11,>12
|
||
|
||
#grid_x equ 200 ;x position of letter grid
|
||
#grid_y equ 100 ;y position of letter grid
|
||
#block_size equ 18 ;x & y spacing of letter grid
|
||
|
||
#tstatic equ 30 ;ticks before repeat motion begins
|
||
#tmoving equ 10 ;ticks between repeat motions
|
||
#debounce_time equ 8 ;min ticks between stick changes
|
||
|
||
#enterinit_mod
|
||
.long wwfselbkBMOD ;wrestler select map
|
||
.word -44,0
|
||
.long 0
|
||
|
||
#currentinit1_mes
|
||
JAM_STR osgemd_ascii,10,1,77+crap_off,204,BLUE,print_string_C2
|
||
.byte "A",0
|
||
.even
|
||
|
||
#currentinit2_mes
|
||
JAM_STR osgemd_ascii,10,1,315+crap_off,204,RUBYPAL,print_string_C2
|
||
.byte "A",0
|
||
.even
|
||
|
||
#enterinita_mess
|
||
JAM_STR font9_ascii,8,0,76+crap_off,179,FNT9WHT2P,print_string_C2
|
||
.byte "ENTER INITIALS",0,0
|
||
.even
|
||
|
||
#enterinitb_mess
|
||
JAM_STR font9_ascii,8,0,286+crap_off+29,179,FNT9RED_P,print_string_C2
|
||
.byte "ENTER INITIALS",0,0
|
||
.even
|
||
|
||
#enterinit1_mes
|
||
JAM_STR font9_ascii,4,0,77+crap_off,38,FNT9WHT2P,print_string_C2
|
||
.byte "WIN STREAK !",0,0
|
||
.even
|
||
|
||
#enterinit2_mes
|
||
JAM_STR font9_ascii,4,0,317+crap_off,38,FNT9RED_P,print_string_C2
|
||
.byte "WIN STREAK !",0,0
|
||
.even
|
||
|
||
#enterinit3_mes
|
||
JAM_STR font9_ascii,4,0,77+crap_off,38,FNT9WHT2P,print_string_C2
|
||
.byte "FAST VICTORY",0,0
|
||
.even
|
||
|
||
#enterinit4_mes
|
||
JAM_STR font9_ascii,4,0,317+crap_off,38,FNT9RED_P,print_string_C2
|
||
.byte "FAST VICTORY",0,0
|
||
.even
|
||
|
||
#enterinit5_mes
|
||
JAM_STR font9_ascii,4,0,77+crap_off,38,FNT9WHT2P,print_string_C2
|
||
.byte "BEATEN GAME",0,0
|
||
.even
|
||
|
||
#enterinit6_mes
|
||
JAM_STR font9_ascii,4,0,317+crap_off,38,FNT9RED_P,print_string_C2
|
||
.byte "BEATEN GAME",0,0
|
||
.even
|
||
|
||
#enterinit7_mes
|
||
JAM_STR font9_ascii,4,0,45+crap_off,16,FNT9WHT2P,print_string_C2
|
||
.byte "WINS : ",0,0
|
||
.even
|
||
|
||
#enterinit8_mes
|
||
JAM_STR font9_ascii,4,0,285+crap_off,16,FNT9RED_P,print_string_C2
|
||
.byte "WINS : ",0,0
|
||
.even
|
||
|
||
#enterinit9_mes
|
||
.byte "SEC.",0,0
|
||
.even
|
||
|
||
#entermess_mes
|
||
JAM_STR osgemd_ascii,10,0,200+crap_off,10,BLUE,print_string_C2
|
||
.byte "ENTER A MESSAGE",0,0
|
||
.even
|
||
|
||
#cursor .word 0,0,10 ;X, Y, Z
|
||
.long jmeter ;IMG
|
||
.word DMACAL ;CTRL
|
||
.word CLSNEUT|TYPTEXT|00A3h
|
||
.long 0,0 ;XVEL, YVEL
|
||
.even
|
||
|
||
#cursor2 .word 0,0,10 ;X, Y, Z
|
||
.long #jmeter2 ;IMG
|
||
.word DMACAL ;CTRL
|
||
.word CLSNEUT|TYPTEXT|00A4h
|
||
.long 0,0 ;XVEL, YVEL
|
||
.even
|
||
|
||
#jmeter2
|
||
.word 175,13,2,2
|
||
.long 040427fcH
|
||
.word 02000H
|
||
.long #jmeter2_p
|
||
|
||
#jmeter2_p
|
||
.word 5
|
||
.word 00H,7d00H,07F60H,01E0H,00H
|
||
|
||
#hilite1 .word 0,0,20 ;X, Y, Z
|
||
.long FNT9_A
|
||
.word DMAWNZ ;CTRL
|
||
.word CLSNEUT|TYPTEXT|00A3h
|
||
.long 0,0 ;XVEL, YVEL
|
||
.even
|
||
|
||
#hilite2 .word 0,0,20 ;X, Y, Z
|
||
.long FNT9_A
|
||
.word DMAWNZ ;CTRL
|
||
.word CLSNEUT|TYPTEXT|00A4h
|
||
.long 0,0 ;XVEL, YVEL
|
||
.even
|
||
|
||
#joytab ;RLDU
|
||
.word 0 ;0000
|
||
.word -5 ;0001
|
||
.word 5 ;0010
|
||
.word 0 ;0011
|
||
.word -1 ;0100
|
||
.word -6 ;0101
|
||
.word 4 ;0110
|
||
.word -1 ;0111
|
||
.word 1 ;1000
|
||
.word -4 ;1001
|
||
.word 6 ;1010
|
||
.word 1 ;1011
|
||
.word 0 ;1100
|
||
.word -5 ;1101
|
||
.word 5 ;1110
|
||
.word 0 ;1111
|
||
|
||
********************************
|
||
*INITIAL ENTRY JOYSTICK TABLE
|
||
|
||
*INITIAL MATRIX
|
||
|
||
|
||
**************************************************************************
|
||
*
|
||
* CHECK_INITS
|
||
*
|
||
* A1 POINTS AT A SET OF INITIALS ENTERED. RETURN .EQ.
|
||
* IF THEY'RE ALL SPACES (OR ZERO).
|
||
*
|
||
**************************************************************************
|
||
CHECK_INITS:
|
||
MMTM SP,A0,A1,A2
|
||
MOVI NUM_INITS,A2
|
||
CHECK_NEXT:
|
||
MOVB *A1,A0 ;GET AN INITIAL
|
||
JRZ SPACE_FOUND ;NULL IS A SPACE
|
||
CMPI SPACE,A0 ;IS IT A REAL SPACE?
|
||
JRNZ LET_FOUND
|
||
SPACE_FOUND:
|
||
ADDI BYTE_SIZE,A1
|
||
DSJS A2,CHECK_NEXT
|
||
CLR A2 ;SET Z BIT ON FALL THROUGH
|
||
|
||
LET_FOUND:
|
||
MMFM SP,A0,A1,A2
|
||
RETS
|
||
|
||
**************************************************************************
|
||
*
|
||
* CHECK_SCORE
|
||
*
|
||
* THIS IS CALLED WITH A SCORE IN A0 TO SEE IF IT
|
||
* IS HIGH ENOUGH TO MAKE THE TABLE.
|
||
*
|
||
* THE OTHER PLAYER'S SCORE IS PASSED IN A2. IF
|
||
* THE PLAYER MAKES THE LAST POSITION OF THE TABLE,
|
||
* THEN HIS SCORE IS COMPARED AGAINST THE OTHER SCORE
|
||
* IT MUST BE HIGHER THAN THE OTHER SCORE, OTHERWISE
|
||
* HE WILL ENTER HIS INITIALS, BUT THERE WILL BE NO
|
||
* PLACE TO PUT THEM WHEN HIS BUDDY IS DONE ENTERING HIS!
|
||
*
|
||
* THIS ROUTINE CALLS FIND_TABLE_LEVEL WHICH RETURNS
|
||
* THE POINT IN THE TABLE THAT THE PASSED SCORE WOULD
|
||
* LAND. THIS VALUE MUST BE LESS THAN OR EQUAL TO
|
||
* THE "TB_VISIBLE" VALUE FOR THE TABLE. THIS WOULD
|
||
* MEAN THAT WE WANT TO GET THE PLAYER'S INITIALS.
|
||
*
|
||
* A8 CONTAINS ROM POINTER FOR TABLE TO CHECK.
|
||
* RETURN A0 = 0 (AND .EQ.) IF SCORE ISN'T HIGH ENOUGH
|
||
* AND A0 = POSITION IN TABLE IF SCORE MAKES IT.
|
||
*
|
||
**************************************************************************
|
||
SUBR CHECK_SCORE
|
||
MMTM SP,A1,A3,A9,A10
|
||
MOVE A0,A3 ;STASH SCORE IN A3
|
||
move *a13(#which_level),a10,L
|
||
call a10
|
||
|
||
; CALLR FIND_TABLE_LEVEL ;SEE WHERE WE LAND IN THIS TABLE
|
||
|
||
JRZ ANSWER_IN_A0 ;ZERO.....GUY DIDN'T MAKE IT
|
||
MOVE *A8(TB_VISIBLE),A1,W ;GET THE NUMBER "ENTERED"
|
||
CMP A1,A0 ;A0 MUST BE LESS OR EQUAL
|
||
JRLO ANSWER_IN_A0 ;NOT LAST ENTRY...RETURN SUCCESS
|
||
|
||
; JRHI DIDNT_MAKE_HSTD
|
||
*
|
||
* GUY IS GOING FOR LAST POSITION.....SEE IF HIS BUDDY IS
|
||
* GOING TO NOSE HIM OUT:
|
||
*
|
||
* ^^^^^^^^^^ not anymore !! ^^^^^^^
|
||
; CMP A2,A3 ;HI MUST BE HIGHER THAN BUDDY
|
||
; JRHI ANSWER_IN_A0
|
||
;
|
||
;DIDNT_MAKE_HSTD:
|
||
CLR A0 ;RETURN FAILURE
|
||
ANSWER_IN_A0:
|
||
MOVE A0,A0 ;SET EQ BIT ACCORDINGLY
|
||
MMFM SP,A1,A3,A9,A10
|
||
RETS
|
||
|
||
SORT_BEATEN_TABLE
|
||
PUSH A1
|
||
MOVE *A13(#which_tab),A8,L
|
||
; MOVI BEATEN_TAB,A8
|
||
CALLR ROM_PTRS
|
||
MOVE *A13(#which_aud),A0
|
||
; MOVI AUD_BEATEN,A0
|
||
CALLA GET_AUD
|
||
MOVE A1,A0
|
||
PULL A1
|
||
MOVE A0,A6
|
||
CALLR TEST_NUM_ICON
|
||
MOVE A3,A5
|
||
|
||
MOVK 1,A0
|
||
MOVI BEATEN_TAB_ENTRIES,A10
|
||
TEST_NEXT_BEATEN_ENTRY
|
||
CALLR TEST_NUM_ICON
|
||
CMP A3,A5
|
||
JRGE THIS_IS_IT
|
||
INC A0
|
||
DSJS A10,TEST_NEXT_BEATEN_ENTRY
|
||
NO_MOVEMENT
|
||
RETS
|
||
|
||
THIS_IS_IT
|
||
CMP A0,A6
|
||
JREQ NO_MOVEMENT
|
||
MOVE A6,A10
|
||
MOVE A10,A3
|
||
|
||
MOVE *A13(#which_tab),A8,L
|
||
CALLR ROM_PTRS
|
||
PUSH A0,A1
|
||
MOVE *A13(#which_aud),A0
|
||
CALLA GET_AUD
|
||
MOVE A1,A0
|
||
CALLR GET_HSCR
|
||
MOVE A1,A4
|
||
PULL A0,A1
|
||
PUSH A0,A1
|
||
MOVE A0,A1
|
||
MOVE *A13(#which_aud),A0
|
||
calla KILL_AUD
|
||
calla AUD
|
||
PULL A0,A1
|
||
MMTM SP,A0,A1,A2,A3,A4,A7,A9,A10
|
||
JRUC COPY_DOWN_LOOP
|
||
|
||
TEST_NUM_ICON
|
||
PUSH A1
|
||
CALLR GET_HSCR
|
||
CLR A3
|
||
MOVK 8,A4
|
||
TEST_NEXT_NYBBLE
|
||
SRL 1,A1
|
||
JRNC NO_IN_A3
|
||
INC A3
|
||
NO_IN_A3
|
||
SRL 3,A1
|
||
DSJS A4,TEST_NEXT_NYBBLE
|
||
PULL A1
|
||
RETS
|
||
|
||
COMPARE_INITIALS
|
||
MOVK 1,A0 ;START AT 1 AND WORK UP.
|
||
CALLR VAL_TAB ;FIX THE TABLE IN CASE ITS BROKEN.
|
||
JRC #NOT_MATCHED
|
||
COMPARE_NEXT
|
||
CALLR COMPARE_INITS
|
||
JRNC MATCHED
|
||
INC A0
|
||
CMP A10,A0
|
||
JRNE COMPARE_NEXT
|
||
CLR A0
|
||
MATCHED
|
||
MOVE A0,A0
|
||
RETS
|
||
#NOT_MATCHED
|
||
MOVI -1,A0
|
||
RETS
|
||
|
||
COMPARE_INITS
|
||
PUSH A0
|
||
MOVE A1,A6
|
||
CALLA PT_ENTRY
|
||
ADDI HS_INITS,A7 ;POINT AT FIRST INITIAL
|
||
MOVI NUM_INITS,A2 ;THIS IS NUMBER OF INITIALS
|
||
#INIT_COPY_LOOP
|
||
CALLR RC_BYTEI
|
||
MOVE A0,A5
|
||
JRNZ #NOT_BLANK
|
||
MOVI SPACE,A5 ;REPLACE BLANKS WITH SPACES
|
||
#NOT_BLANK:
|
||
MOVB *A6,A11
|
||
JRNZ #NOT_A_SPACE
|
||
MOVI SPACE,A11 ;REPLACE BLANKS WITH SPACES
|
||
MOVB A11,*A6
|
||
#NOT_A_SPACE
|
||
CMP A5,A11
|
||
JRNE NOT_MATCHED
|
||
ADDK 8,A6
|
||
DSJ A2,#INIT_COPY_LOOP
|
||
PULL A0
|
||
CALLR GET_HSCR
|
||
OR A1,A4
|
||
CLRC
|
||
RETS
|
||
NOT_MATCHED
|
||
PULL A0
|
||
SETC
|
||
RETS
|
||
|
||
SPECIAL_ADD_ENTRY
|
||
MMTM SP,A0,A1,A2,A3,A4,A7,A9,A10
|
||
CALLR ROM_PTRS ;SETUP FOR THIS TABLE
|
||
MOVE A0,A4
|
||
PUSH A1
|
||
CALLR COMPARE_INITIALS
|
||
JRNZ INSERT_HERE
|
||
JRN DIDNT_MAKE_IT
|
||
MOVE A10,A0
|
||
|
||
INSERT_HERE
|
||
PUSH A0
|
||
MOVE A0,A1
|
||
MOVE *A13(#which_aud),A0
|
||
calla KILL_AUD
|
||
calla AUD
|
||
PULL A0
|
||
PULL A1
|
||
MOVE A10,A3
|
||
SETC
|
||
JRUC COPY_DONE
|
||
|
||
TAG_ENTRY:
|
||
MMTM SP,A0,A1,A2,A3,A4,A7,A9,A10
|
||
CALLR ROM_PTRS ;SETUP FOR THIS TABLE
|
||
MOVE A0,A4 ;STASH THE SCORE A SEC.
|
||
CLR A2 ;DONT WORRY ABOUT OTHER GUY AT THIS POINT
|
||
CALLR CHECK_SCORE ;DOES THE REQUEST MAKE IT?
|
||
SETC ;ANTICIPATE FAILURE
|
||
JRZ SPECIAL_DIDNT_MAKE_IT ;DON'T KNOW WHY I GOT THESE INITS.
|
||
MOVE A10,A3 ;LAST GUY IN TABLE IS DESTINATION
|
||
JRUC COPY_DOWN_LOOP
|
||
SPECIAL_DIDNT_MAKE_IT
|
||
MOVK 17,A0
|
||
MOVE A10,A3 ;LAST GUY IN TABLE IS DESTINATION
|
||
JRUC COPY_DOWN_LOOP
|
||
|
||
**************************************************************************
|
||
*
|
||
* ADD_ENTRY
|
||
*
|
||
* THIS IS CALLED AFTER "ENTER YOUR INITIALS" TO
|
||
* ADD AN ENTRY TO THE TABLE. A0 CONTAINS THE
|
||
* SCORE OF THE PLAYER. A1 CONTAINS A POINTER
|
||
* TO THE FETCHED INITIALS. THE INITIALS ARE
|
||
* STORED AS CONSECUTIVE BYTES IN CONVENTIONAL
|
||
* (1 BYTE TAKES 1 BYTE SPACE) RAM.
|
||
*
|
||
* A8 contains a the table to store the entry in.
|
||
*
|
||
* RETURN CARRY SET IF IT DIDN'T MAKE IT INTO REQUESTED TABLE
|
||
*
|
||
**************************************************************************
|
||
ADD_ENTRY:
|
||
MMTM SP,A0,A1,A2,A3,A4,A7,A9,A10
|
||
CALLR ROM_PTRS ;SETUP FOR THIS TABLE
|
||
MOVE A0,A4 ;STASH THE SCORE A SEC.
|
||
CLR A2 ;DONT WORRY ABOUT OTHER GUY AT THIS POINT
|
||
CALLR CHECK_SCORE ;DOES THE REQUEST MAKE IT?
|
||
SETC ;ANTICIPATE FAILURE
|
||
JRZ DIDNT_MAKE_IT ;DON'T KNOW WHY I GOT THESE INITS.
|
||
*
|
||
* A0 NOW HAS THE PLACE FOR THE NEW GUY.
|
||
* MOVE THE ENTIRE TABLE DOWN 1 UNIT.
|
||
*
|
||
MOVE A10,A3 ;LAST GUY IN TABLE IS DESTINATION
|
||
|
||
COPY_DOWN_LOOP:
|
||
MOVE A3,A2 ;GUY BEFORE HIM IS SOURCE
|
||
DEC A2 ;A2 NOW HAS SOURCE
|
||
CMP A0,A2 ;IS SOURCE LOWER THAN OUR SLOT?
|
||
JRLO COPY_DONE ;IT IS...DON'T MOVE HIM.
|
||
|
||
CALLR COPY_ENTRY ;COPY A2 ENTRY TO A3
|
||
DEC A3 ;MOVE DOWN TO ONE BEFORE
|
||
JRUC COPY_DOWN_LOOP
|
||
|
||
COPY_DONE:
|
||
CALLR PUT_SCORE_FOR_ENTRY ;SCORE IN A4 WRITTEN TO ENTRY A0
|
||
*
|
||
* INITAIAL POINTER IS IN A1
|
||
* TABLE OFFSET IN A0
|
||
*
|
||
CALLR PT_ENTRY ;GET ENTRY POINTER IN A7
|
||
ADDI HS_INITS,A7 ;POINT AT FIRST INITIAL
|
||
MOVI NUM_INITS,A2 ;THIS IS NUMBER OF INITIALS
|
||
MMTM SP,A0 ;SAVE A0
|
||
|
||
INIT_COPY_LOOP:
|
||
MOVB *A1,A0 ;GET AN INITIAL
|
||
JRNZ NOT_BLANK
|
||
MOVI SPACE,A0 ;REPLACE BLANKS WITH SPACES
|
||
NOT_BLANK:
|
||
CALLR WC_BYTEI ;WRITE THE BYTE AND INCREMENT
|
||
ADDI BYTE_SIZE,A1 ;A1 TO NEXT BYTE PLEASE
|
||
DSJ A2,INIT_COPY_LOOP
|
||
|
||
MMFM SP,A0 ;GET BACK ENTRY NUMBER
|
||
CALLR FORM_HS_CKSUM_AND_STORE ;FOR CHECKSUM FOR THIS ENTRY AND STORE!
|
||
CLRC ;RETURN SUCCESS!
|
||
|
||
DIDNT_MAKE_IT
|
||
MMFM SP,A0,A1,A2,A3,A4,A7,A9,A10
|
||
RETS
|
||
|
||
#**************************************************************************
|
||
*
|
||
* FIND_TABLE_LEVEL
|
||
*
|
||
* THIS IS CALLED TO COMPARE THE SCORE IN A0 TO
|
||
* THE TABLE POINTED TO BY A8.
|
||
*
|
||
* RETURN PHYSICALLY WHERE IT FITS IN A0, AND
|
||
* SET THE Z FLAG ACCORDINGLY
|
||
*
|
||
**************************************************************************
|
||
FIND_HIGH_TABLE_LEVEL
|
||
MMTM SP,A1,A2,A3
|
||
CALLR ROM_PTRS ;SETUP FOR THIS TABLE
|
||
CALLR VAL_TAB ;FIX THE TABLE IN CASE ITS BROKEN.
|
||
JRC #FTL_FAIL ;CAN'T VALIDATE..SAY SCORE DIDN'T MAKE IT
|
||
|
||
MOVE A0,A2 ;KEEP SCORE IN A2
|
||
MOVK 1,A0 ;START AT 1 AND WORK UP.
|
||
|
||
#CHECK_NEXT_SCORE:
|
||
CALLR GET_HSCR ;FETCH A0 ENTRY'S SCORE IN A1
|
||
CMP A1,A2 ;HOW DO WE FARE AGAINST A1?
|
||
JRGE #FOUND_THE_SPOT ;WE FOUND THE SPOT
|
||
INC A0 ;KEEP MOVING DOWN TILL WE FIT
|
||
CMP A10,A0 ;ARE WE LOOKING AT THE LAST ONE?
|
||
JRLS #CHECK_NEXT_SCORE
|
||
|
||
#FTL_FAIL:
|
||
CLR A0 ;WE'RE NOT HIGH ENOUGH RETURN FAILURE
|
||
|
||
#FOUND_THE_SPOT:
|
||
MOVE A0,A0 ;MAKE SURE YOU SET THE FLAGS
|
||
MMFM SP,A1,A2,A3
|
||
RETS
|
||
|
||
#**************************************************************************
|
||
*
|
||
* FIND_TABLE_LEVEL
|
||
*
|
||
* THIS IS CALLED TO COMPARE THE SCORE IN A0 TO
|
||
* THE TABLE POINTED TO BY A8.
|
||
*
|
||
* RETURN PHYSICALLY WHERE IT FITS IN A0, AND
|
||
* SET THE Z FLAG ACCORDINGLY
|
||
*
|
||
**************************************************************************
|
||
SUBR FIND_LOW_TABLE_LEVEL
|
||
MMTM SP,A1,A2,A3
|
||
CALLR ROM_PTRS ;SETUP FOR THIS TABLE
|
||
CALLR VAL_TAB ;FIX THE TABLE IN CASE ITS BROKEN.
|
||
JRC #FTL_FAIL ;CAN'T VALIDATE..SAY SCORE DIDN'T MAKE IT
|
||
|
||
MOVE A0,A2 ;KEEP SCORE IN A2
|
||
MOVK 1,A0 ;START AT 1 AND WORK UP.
|
||
|
||
#CHECK_NEXT_SCORE:
|
||
CALLR GET_HSCR ;FETCH A0 ENTRY'S SCORE IN A1
|
||
CMP A1,A2 ;HOW DO WE FARE AGAINST A1?
|
||
JRLO #FOUND_THE_SPOT
|
||
; JRHI #FOUND_THE_SPOT ;WE FOUND THE SPOT
|
||
INC A0 ;KEEP MOVING DOWN TILL WE FIT
|
||
CMP A10,A0 ;ARE WE LOOKING AT THE LAST ONE?
|
||
JRLS #CHECK_NEXT_SCORE
|
||
|
||
#FTL_FAIL:
|
||
CLR A0 ;WE'RE NOT HIGH ENOUGH RETURN FAILURE
|
||
|
||
#FOUND_THE_SPOT:
|
||
MOVE A0,A0 ;MAKE SURE YOU SET THE FLAGS
|
||
MMFM SP,A1,A2,A3
|
||
RETS
|
||
|
||
|
||
**************************************************************************
|
||
*
|
||
* GET_HSCR
|
||
*
|
||
* THIS IS CALLED TO FETCH THE SCORE FROM CMOS FOR
|
||
* A GIVEN ENTRY.
|
||
*
|
||
* ENTRY NUMBER PASSED IN A0.
|
||
* SCORE RETURNED IN A1.
|
||
*
|
||
**************************************************************************
|
||
GET_HSCR
|
||
MMTM SP,A7,A0
|
||
CALLR PT_ENTRY ;POINT A7 AT ENTRY
|
||
ADDI HS_SCORE,A7 ;INDEX SCORE PART.
|
||
CALLR RC_LONG ;FETCH THE LONG WORD INTO A0
|
||
MOVE A0,A1 ;MOVE TO A1
|
||
MMFM SP,A7,A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
*
|
||
* PUT_SCORE_FOR_ENTRY
|
||
*
|
||
* THIS IS CALLED TO WRITE OUT THE SCORE FOR A GIVEN ENTRY.
|
||
* ENTRY SPECIFIED BY A0.
|
||
* SCORE PASSED IN A4.
|
||
*
|
||
**************************************************************************
|
||
PUT_SCORE_FOR_ENTRY
|
||
MMTM SP,A7,A0
|
||
CALLR PT_ENTRY ;POINT A7 AT ENTRY
|
||
ADDI HS_SCORE,A7 ;INDEX SCORE PART.
|
||
MOVE A4,A0 ;MOVE SCORE TO A0
|
||
CALLR WC_LONG ;WRITE OUT THE LONG WORD
|
||
MMFM SP,A7,A0
|
||
RETS
|
||
|
||
**************************************************************************
|
||
*
|
||
* LOW LEVEL HSTD PROCESSING
|
||
*
|
||
**************************************************************************
|
||
*
|
||
* FOR HIGH SCORE ROUTINES
|
||
*
|
||
* A8 = ROM POINTER FOR A GIVEN TABLE STATS
|
||
* A9 = RAM POINTER FOR CMOS DATA
|
||
* A10 = NUMBER OF ENTRIES IN THE TABLE
|
||
*
|
||
* A0 = PARTICULAR ENTRY TO DEAL WITH
|
||
* 0 = FILL ENTRY (POINTER ROUTINES POINT HERE IF ERROR)
|
||
* 1 = HIGHEST SCORE IN TABLE
|
||
* N = NTH SCORE
|
||
*
|
||
* A1 = OUTPUT OF CHECKSUM ROUTINE (BYTE)
|
||
*
|
||
* A7 = POINTER TO CURRENT ENTRY
|
||
*
|
||
* A4,A5,A6 SCRATCH
|
||
*
|
||
**************************************************************************
|
||
*
|
||
* FORM_HS_CKSUM
|
||
*
|
||
* THIS IS CALLED TO FORM THE CHECKSUM FOR THE SCORE
|
||
* NUMBER IN A0. (RAM POINTER ASSUMED IN A9).
|
||
* CHECKSUM IS RETURNED IN A1. THIS IS A *BYTE*.
|
||
*
|
||
* CHECKSUM IS COMPUTED AS THE COMPLEMENT OF THE SIMPLE SUM
|
||
* OF THE BYTES IN THE ENTRY.
|
||
*
|
||
* THIS ROUTINE RETURNS WITH THE Z BIT SET (.EQ.) IF THE
|
||
* CHECKSUM FOR THIS ENTRY MATCHES.
|
||
*
|
||
**************************************************************************
|
||
FORM_HS_CKSUM:
|
||
MMTM SP,A0,A4,A6,A7
|
||
CALLR PT_ENTRY ;A7 = POINTER TO CURRENT ENTRY
|
||
MMTM SP,A7 ;SAVE POINTER TO ENTRY
|
||
MOVI HS_BYTES_TO_CHECK,A4 ;COUNT DOWN THE BYTES
|
||
CLR A1 ;KEEP SUM IN A1
|
||
ADD_A_BYTE:
|
||
CALLR 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 BYTE
|
||
ANDI BYTE_MASK,A1 ;MASK SO ITS COOL
|
||
MMFM SP,A7 ;GET POINTER BACK
|
||
ADDI HS_CKBYTE,A7 ;POINT AT CHECKBYTE
|
||
CALLR RC_BYTE ;READ IN THE BYTE
|
||
CMP A0,A1 ;COMPARE WHAT'S THERE TO WHAT WE GOT
|
||
MMFM SP,A0,A4,A6,A7 ;Z BIT RETURNS COMPARE
|
||
RETS ;A1 RETURNS CKSUM
|
||
|
||
**************************************************************************
|
||
*
|
||
* FORM_HS_CKSUM_AND_STORE
|
||
*
|
||
* THIS IS USED TO SET THE CHECKSUM FOR THE CURRENT
|
||
* ENTRY (A0) TO THE CORRECT VALUE.
|
||
*
|
||
**************************************************************************
|
||
FORM_HS_CKSUM_AND_STORE:
|
||
MMTM SP,A0,A7
|
||
CALLR FORM_HS_CKSUM ;GET THE CKSUM IN A1, POINTER IN A7
|
||
CALLR PT_ENTRY ;POINT AT THE VALUE
|
||
ADDI HS_CKBYTE,A7 ;POINT AT CHECKBYTE
|
||
MOVE A1,A0 ;GET CHECKBYTE TO A0
|
||
CALLR WC_BYTE ;WRITE OUT THE BYTE
|
||
MMFM SP,A0,A7
|
||
RETS
|
||
|
||
**************************************************************************
|
||
*
|
||
* PT_ENTRY
|
||
*
|
||
* THIS IS CALLED TO POINT AT A GIVEN ENTRY OF
|
||
* THE HIGH SCORE TABLE. THIS ROUTINE BASES
|
||
* ACTIVITY ON ROM POINTER IN A8. IT FETCHES
|
||
* FRESH COPIES OF THE A9 RAM POINTER AND THE
|
||
* A10 ENTRY COUNTER. IT RETURNS THE ENTRY
|
||
* POINTER IN A7.
|
||
*
|
||
* A0 SPECIFIES WHICH ENTRY TO POINT AT
|
||
* A8,A9,A10 AND SYSCTRL ASSUMED SET PROPERLY
|
||
* A7 RETURNED POINTING TO THAT ENTRY
|
||
*
|
||
**************************************************************************
|
||
PT_ENTRY:
|
||
CMP A10,A0 ;A10 IS MAX VALUE
|
||
JRLS POINTER_IN_RANGE
|
||
|
||
.IF DEBUG
|
||
LOCKUP
|
||
.ENDIF
|
||
|
||
MOVE A9,A7 ;RETURN ZERO OFFSET IN FIELD
|
||
RETS
|
||
|
||
POINTER_IN_RANGE:
|
||
MOVI HS_SIZE,A7 ;SIZE OF ENTRY
|
||
MPYU A0,A7 ;OFFSET OF ENTRY
|
||
ADD A9,A7 ;ADD IN THE BASE
|
||
RETS
|
||
|
||
**************************************************************************
|
||
*
|
||
* ROM_PTRS
|
||
*
|
||
* THIS IS CALLED TO LOAD UP THE ROM STRUCTURE
|
||
* DATA INTO REGISTERS.
|
||
*
|
||
* THIS ALSO SETS UP STATUS WORD TO SELECT THE CMOS
|
||
* BANK SELECT FOR WHERE THE PARTICULAR TABLE RESIDES.
|
||
*
|
||
* INPUT A8=HSTD STRUCTURE ROM POINTER.
|
||
*
|
||
* OUTPUT A9 = CMOS RAM POINTER TO BASE OF TABLE
|
||
* OUTPUT A10= LAST ENTRY IN TABLE. TABLE WILL
|
||
* HAVE A10+1 ENTRIES SINCE ENTRY
|
||
* 0 IS A FILLER.
|
||
*
|
||
**************************************************************************
|
||
ROM_PTRS:
|
||
MMTM SP,A0,A1 ;SCRATCH REGGIES
|
||
MOVE *A8(TB_POINTER),A9,L ;GET CMOS POINTER
|
||
MOVE *A8(TB_COUNT),A10,W ;GET NUMBER OF ENTRIES
|
||
MOVE *A8(TB_PAGE_BITS),A1 ;GET OUR CMOS PAGE BITS
|
||
|
||
CALLR SET_PAGE
|
||
|
||
MMFM SP,A0,A1 ;SCRATCH REGGIES
|
||
RETS
|
||
|
||
**************************************************************************
|
||
*
|
||
* SET_PAGE
|
||
*
|
||
* This is called to set the CMOS page to the bits
|
||
* contained in A1.
|
||
*
|
||
**************************************************************************
|
||
SET_PAGE
|
||
; MMTM SP,A0,A1
|
||
; ANDI CMOS_PAGE_SELECT_BITS,A1 ;KILL SIGN EXTEND..SAVE BITS
|
||
; PUSHST ;SAVE INTERRUPT STATUS
|
||
; DINT ;STOP INTERRUPTS
|
||
; MOVE @SYSCOPY,A0,W ;GET THE RAM COPY
|
||
; ANDNI CMOS_PAGE_SELECT_BITS,A0 ;REMOVE THE CURRENT PAGE SELECT
|
||
; OR A1,A0 ;ADD IN OUR BITS
|
||
; MOVE A0,@SYSCOPY,W ;PUT THEM BACK IN THE RAM COPY
|
||
;; MOVE A0,@SYSCTRL,W ;NOW THE HARDWARE
|
||
; POPST ;OK TO RE-START INTS
|
||
; MMFM SP,A0,A1
|
||
RETS
|
||
|
||
**************************************************************************
|
||
*
|
||
* INIT_TAB
|
||
*
|
||
* This entrypoint is called at power up to
|
||
* clear out "today's" high score table. We do
|
||
* this job, and then we do the job on the
|
||
* all time table for high score reset if
|
||
* necessary.
|
||
*
|
||
**************************************************************************
|
||
INIT_TAB
|
||
RETS
|
||
|
||
#*************************************************************************
|
||
*
|
||
* INIT_HSTRING
|
||
*
|
||
* Initializes the special name of the top scorer on the table.
|
||
|
||
SUBR INIT_HSTRING
|
||
MOVI AUD_WINSTREAK,A0
|
||
CALLA KILL_AUD
|
||
MOVI AUD_PINSPEED,A0
|
||
CALLA KILL_AUD
|
||
MOVI AUD_BEATEN,A0
|
||
CALLA KILL_AUD
|
||
MOVI AUD_TAG,A0
|
||
CALLA KILL_AUD
|
||
rets
|
||
|
||
|
||
#*************************************************************************
|
||
*
|
||
* INIT_TB
|
||
*
|
||
* THIS IS CALLED TO SETUP A HIGH SCORE TABLE WITH
|
||
* FACTORY ENTRIES.
|
||
*
|
||
* A8 = ROM TABLE POINTER
|
||
*
|
||
**************************************************************************
|
||
SUBR INIT_TB
|
||
|
||
MMTM SP,A5,A6,A7,A0
|
||
CALLR ROM_PTRS ;STUFF TABLE DATA
|
||
MOVE *A8(TB_FACTORY),A6,L ;GET THE FACTORY TABLE
|
||
MOVE A10,A5 ;NUMBER OF VALID ENTRIES
|
||
INC A5 ;1 MORE TO HOLD ZERO ENTRY
|
||
MOVI HS_SIZE_IN_BYTES,A1 ;SIZE OF 1 ENTRY
|
||
MPYU A1,A5 ;A7 HAS NUMBER OF WORDS TO MOVE
|
||
MOVE A9,A7 ;CMOS POINTER IN A7
|
||
|
||
INIT_TB_1
|
||
MOVB *A6,A0 ;GET A BYTE FROM ROM
|
||
ADDI BYTE_SIZE,A6 ;KICK ROM POINTER
|
||
CALLR WC_BYTEI ;WRITE THE BYTE AND INCREMENT
|
||
DSJS A5,INIT_TB_1 ;UNTIL THEY'RE ALL THERE.
|
||
|
||
MOVE A10,A0 ;POINT AT LAST ENTRY
|
||
INIT_TB_2
|
||
CALLR FORM_HS_CKSUM_AND_STORE ;SET ITS CHECKSUM
|
||
DEC A0 ;MOVE DOWN
|
||
JRNN INIT_TB_2 ;SET EACH ONE INCLUDING ZERO
|
||
MMFM SP,A5,A6,A7,A0
|
||
|
||
RETS
|
||
|
||
#*************************************************************************
|
||
*
|
||
* COPY_ENTRY
|
||
*
|
||
* THIS IS CALLED TO COPY 1 ENTRY OF THE TABLE TO A
|
||
* DIFFERENT LOCATION IN THE TABLE.
|
||
*
|
||
* A8,A9,A10,SYSCTRL ASSUMED TO BE SETUP ALREADY
|
||
* A2 = SOURCE ENTRY (NUMBER)
|
||
* A3 = DESTINATION ENTRY (NUMBER)
|
||
*
|
||
**************************************************************************
|
||
COPY_ENTRY:
|
||
MMTM SP,A0,A4,A5,A6,A7
|
||
MOVI HS_SIZE_IN_BYTES,A4 ;ENTRY SIZE IN BYTES
|
||
MOVE A2,A0 ;FIRST POINT FOR A0
|
||
CALLR PT_ENTRY
|
||
MOVE A7,A6 ;A6 = SOURCE POINTER
|
||
MOVE A3,A0
|
||
CALLR PT_ENTRY ;A5 = DESTINATION
|
||
MOVE A7,A5
|
||
COPY_LOOP:
|
||
*
|
||
* IN THIS LOOP WE MOVE A BYTE AT A TIME.
|
||
* SINCE THE WORD AND LONG DO THE SHIFTING AND
|
||
* MASKING AND CALL MULTIPLE ROUTINES, THIS IS
|
||
* THE MOST EFFICIENT MODE OF OPERATION.
|
||
*
|
||
MOVE A6,A7 ;SOURCE IN CMOS REGGIE
|
||
CALLR RC_BYTEI ;FETCH A WORD
|
||
MOVE A7,A6
|
||
MOVE A5,A7 ;DESTINATION
|
||
CALLR WC_BYTEI ;WRITE IT
|
||
MOVE A7,A5 ;BACK TO DEST REGGIE
|
||
DSJ A4,COPY_LOOP ;UNTIL ALL WORDS ARE COPIED
|
||
MMFM SP,A0,A4,A5,A6,A7
|
||
RETS
|
||
|
||
**************************************************************************
|
||
*
|
||
* VAL_TAB
|
||
*
|
||
* THIS ROUTINE IS CALLED WHEN WE ARE INTERESTED IN
|
||
* THE HSTD TABLE DATA. A8 CONTAINS THE ROM POINTER
|
||
* FOR THE TABLE. FOR ANY ENTRIES THAT WE THROW
|
||
* OUT, WE MOVE THE REST OF THE TABLE UP, AND CREATE
|
||
* A NEW ENTRY AT THE END OF THE TABLE.
|
||
*
|
||
* A2 = 0 ON OUTSIDE CALL.
|
||
* A2 = 1 ON RECURSIVE CALL (THE CHECK AFTER RE-INIT)
|
||
*
|
||
* THERE ARE 3 CHECKS MADE FOR EACH ENTRY:
|
||
*
|
||
* 1) IS CHECKSUM CORRECT.
|
||
* 2) IS SCORE ALL NUMERIC
|
||
* 3) ARE INITIALS ALL VALID ENTRIES.
|
||
*
|
||
* OUTPUT CC = TABLE OK
|
||
* CS = PROBLEM THAT CAN'T BE RECTIFIED
|
||
* (PROBABLY BAD RAM)
|
||
*
|
||
* A2 = 0 ...table ok, or cleaned up
|
||
* A2 otherwise meanes table initialized
|
||
*
|
||
**************************************************************************
|
||
VAL_TAB
|
||
CLR A2 ;indicate first call in
|
||
CALLR DO_VALIDATE ;validate
|
||
RETS
|
||
|
||
DO_VALIDATE
|
||
MMTM SP,A0,A1,A3,A4,A5,A6,A7
|
||
CALLR ROM_PTRS ;SETUP FOR TABLE
|
||
MOVI 1,A0 ;ITERATE THROUGH THE ENTRIES
|
||
CLR A1 ;COUNT ERRORS
|
||
|
||
CHECK_A0_ENTRY:
|
||
CALLR CHECK_ENTRY ;IS THE ENTRY OK?
|
||
JRNC VT_1 ;YEP.
|
||
|
||
CALLR REMOVE_ENTRY ;REMOVE THIS ENTRY
|
||
INC A1
|
||
MOVE *A8(TB_ERROR_COUNT),A3 ;GET THRESHOLD
|
||
CMP A3,A1 ;ARE WE THERE?
|
||
JRLO CHECK_A0_ENTRY ;NOPE...CHECK MOVE UP ENTRY AT A0
|
||
*
|
||
* TABLE IS MESSED UP....RE-INITIALIZE IT PLEASE
|
||
*
|
||
MOVE A2,A2 ;IS THIS RECURSIVE CHECK AFTER INIT?
|
||
JRNZ CANT_VALIDATE ;THEN RETURN FAILURE
|
||
|
||
CALLR INIT_TB ;INIT THIS TABLE PLEASE
|
||
CALLR INIT_HSTRING
|
||
MOVK 1,A2 ;INDICATE RECURSIVE CALL
|
||
CALLR DO_VALIDATE ;IS IT ALRIGHT NOW?
|
||
MMFM SP,A0,A1,A3,A4,A5,A6,A7
|
||
RETS
|
||
*
|
||
* LAST ENTRY WAS VALID...MOVE TO NEXT
|
||
*
|
||
VT_1:
|
||
INC A0 ;KICK IT
|
||
CMP A10,A0 ;STILL IN TABLE?
|
||
JRLS CHECK_A0_ENTRY ;YEP....CHECK THIS ENTRY
|
||
|
||
CLRC ;RETURN VALID!
|
||
MMFM SP,A0,A1,A3,A4,A5,A6,A7
|
||
RETS
|
||
|
||
CANT_VALIDATE:
|
||
SETC ;RETURN FAILURE!
|
||
MMFM SP,A0,A1,A3,A4,A5,A6,A7
|
||
RETS
|
||
|
||
**************************************************************************
|
||
*
|
||
* CHECK_ENTRY
|
||
*
|
||
* THIS IS CALLED TO CHECK THE ENTRY INDICATED BY A0.
|
||
*
|
||
* CC = OK
|
||
* CS = ENTRY BAD
|
||
*
|
||
**************************************************************************
|
||
CHECK_ENTRY
|
||
MMTM SP,A0,A1,A2,A3,A7
|
||
CALLR FORM_HS_CKSUM ;CHECK OUT CKSUM FIRST
|
||
JRNZ CHECK_FAIL ;BAD CHECKSUM....ITS BAD
|
||
*
|
||
* CHECKSUM OK...CHECK SCORE
|
||
*
|
||
CALLR GET_HSCR ;SCORE IN A1
|
||
MOVE A1,A3 ;SAVE COPY OF SCORE
|
||
|
||
CHECK_DIGIT:
|
||
MOVE A1,A2 ;COPY FOR NEXT NIBBLE
|
||
ANDI 0FH,A2 ;MASK THE NIBBLE
|
||
CMPI 9,A2
|
||
JRHI CHECK_FAIL ;NIBBLE TOO HIGH
|
||
SRL 4,A1 ;SHIFT DOWN TO NEXT NIBBLE
|
||
JRNZ CHECK_DIGIT
|
||
|
||
DEC A0 ;MAKE SURE WE ARE LOWER THAN PREVIOUS SCORE!
|
||
JREQ FIRST_ENT ;WE'RE THE 1ST IN THE TABLE
|
||
|
||
CALLR GET_HSCR ;GET THE SCORE FOR THE GUY BEFORE US
|
||
; CMP A1,A3 ;OURS MUST BE LOWER OR SAME
|
||
; JRHI CHECK_FAIL ;OURS IS BIGGER....REMOVE US
|
||
|
||
FIRST_ENT:
|
||
INC A0 ;RESTORE THE ENTRY NUMBER
|
||
*
|
||
* SCORE OK...CHECK INITIALS
|
||
*
|
||
CALLR PT_ENTRY ;POINT A7 AT ENTRY
|
||
ADDI HS_INITS,A7 ;POINT AT FIRST INITIAL
|
||
MOVI NUM_INITS,A2 ;THIS IS NUMBER OF INITIALS
|
||
|
||
NEXT_LETTER:
|
||
CALLR RC_BYTEI ;FETCH A BYTE
|
||
|
||
CALLR VERIFY_LETTER ;SEE IF ITS VALID.
|
||
JRC CHECK_FAIL ;NOT A LETTER...BYTE
|
||
|
||
DSJ A2,NEXT_LETTER
|
||
|
||
CLRC ;RETURN PASS
|
||
MMFM SP,A0,A1,A2,A3,A7
|
||
RETS
|
||
|
||
CHECK_FAIL:
|
||
SETC
|
||
MMFM SP,A0,A1,A2,A3,A7
|
||
RETS
|
||
|
||
|
||
**************************************************************************
|
||
*
|
||
* VERIFY_LETTER
|
||
*
|
||
* THIS IS CALLED FOR EACH INITIAL LETTER TO SEE
|
||
* IF ITS VALID.
|
||
*
|
||
* CC = VALID
|
||
* CS = NOT VALID
|
||
*
|
||
**************************************************************************
|
||
|
||
VERIFY_LETTER:
|
||
ANDI BYTE_MASK,A0 ;KEEP JUST THE BYTE
|
||
|
||
CMPI '.',A0 ;SPACE?
|
||
JREQ VERIFY_PASS ;ITS OK.
|
||
|
||
CMPI '!',A0 ;SPACE?
|
||
JREQ VERIFY_PASS ;ITS OK.
|
||
|
||
CMPI '%',A0 ;SPACE?
|
||
JREQ VERIFY_PASS ;ITS OK.
|
||
|
||
CMPI '?',A0 ;SPACE?
|
||
JREQ VERIFY_PASS ;ITS OK.
|
||
|
||
CMPI SPACE,A0 ;SPACE?
|
||
JREQ VERIFY_PASS ;ITS OK.
|
||
|
||
CMPI LET_A,A0 ;BETWEEN A-Z?
|
||
JRLO VERIFY_FAIL
|
||
|
||
CMPI LET_Z,A0
|
||
JRHI VERIFY_FAIL
|
||
|
||
VERIFY_PASS:
|
||
CLRC
|
||
RETS
|
||
|
||
VERIFY_FAIL:
|
||
SETC
|
||
RETS
|
||
|
||
**************************************************************************
|
||
*
|
||
* REMOVE_ENTRY
|
||
*
|
||
* THIS IS CALLED TO REMOVE A BAD ENTRY FROM THE TABLE.
|
||
* IT DELETES THE ENTRY INDICATED BY A0.
|
||
*
|
||
* IT BUBBLES THE REST OF THE TABLE UP 1 UNIT.
|
||
*
|
||
* IT THEN PUTS THE LOWEST SCORE FROM THE ROM TABLE
|
||
* WITH INITIALS IN THAT ENTRY.
|
||
*
|
||
**************************************************************************
|
||
REMOVE_ENTRY:
|
||
MMTM SP,A0,A1,A2,A6,A7
|
||
MOVE A0,A3 ;THIS IS DEST
|
||
MOVE A3,A2 ;SOURCE IS 1 BELOW
|
||
|
||
BUBBLE_ANOTHER:
|
||
INC A2 ;NOW WE'RE SET FOR A COPY...
|
||
|
||
CMP A10,A2 ;IS SOURCE OUT OF RANGE?
|
||
JRHI BUBBLE_DONE ;YEP....WE'RE AT THE BOTTOM (A3)
|
||
|
||
CALLR COPY_ENTRY
|
||
INC A3
|
||
JRUC BUBBLE_ANOTHER
|
||
|
||
BUBBLE_DONE:
|
||
MOVE A3,A0 ;THIS IS BOTTOM OF TABLE
|
||
CALLR PT_ENTRY ;A7 POINTS AT CMOS BLOCK
|
||
|
||
MOVE *A8(TB_FACTORY),A6,L ;GET FACTORY TABLE
|
||
MOVI HS_ROM_SIZE,A1 ;SIZE OF ENTRY
|
||
MPYU A10,A1 ;TIMES NUMBER OF VALID ENTRIES..POINTS AT LAST.
|
||
ADD A1,A6 ;NOW WE POINT AT END OF ROM TABLE
|
||
MOVI HS_SIZE_IN_BYTES,A2 ;SIZE OF ENTRY
|
||
|
||
REPLACE_LOOP:
|
||
MOVB *A6,A0 ;MOVE A ROM BYTE TO A0
|
||
ADDI BYTE_SIZE,A6
|
||
CALLR WC_BYTEI ;WRITE THE WORD AND INCREMENT
|
||
DSJ A2,REPLACE_LOOP ;UNTIL THEY'RE ALL THERE.
|
||
|
||
MOVE A10,A0 ;POINT AT "LAST" ENTRY
|
||
CALLR FORM_HS_CKSUM_AND_STORE ;STORE THE CHECKBYTE
|
||
MMFM SP,A0,A1,A2,A6,A7 ;AND RETURN
|
||
RETS
|
||
|
||
**************************************************************************
|
||
*
|
||
* CMOS UTILITIES
|
||
*
|
||
**************************************************************************
|
||
|
||
**************************************************************************
|
||
*
|
||
* FOR ALL OF THESE CMOS ROUTINES.
|
||
*
|
||
* A7 = POINTER TO MEMORY
|
||
* A0 = DATA TO/FROM MEMORY
|
||
*
|
||
**************************************************************************
|
||
*
|
||
* **** IMPORTANT NOTE ON WORD AND LONG WORD PACKING ****
|
||
*
|
||
* NOTE THAT REQUESTS FOR WORDS RETURN THE 2 BYTES PACKED
|
||
* INTO A WORD AS <1ST BYTE><2ND BYTE>. THIS IS NOT
|
||
* THE SAME WAY THAT THE GSP HANDLES A WORD POINTED AT
|
||
* WITH A POINTER.
|
||
*
|
||
* LONG WORDS WORK SIMILARLY:
|
||
*
|
||
* MSB LSB
|
||
* <1ST BYTE> <2ND BYTE> <3RD BYTE> <4TH BYTE>
|
||
*
|
||
* TOUGH LUCK INTEL HACKERS!
|
||
*
|
||
*
|
||
* RC_BYTE
|
||
* WC_BYTE
|
||
*
|
||
* These 2 routines are the only routines that ever touch
|
||
* CMOS ram. This is done to localize the effect of
|
||
* changes in the architecture. All efforts to deal with
|
||
* CMOS should come through these routines. Locking
|
||
* hardware will be easily added in the future (as well
|
||
* as different memory mapping).
|
||
|
||
|
||
|
||
RC_BYTE
|
||
; move @SYSCOPY,a0
|
||
; sll 32-2,a0
|
||
; srl 32-2,a0
|
||
; sll 15,a0 ;Page offset
|
||
; add a7,a0
|
||
movb *a7,a0
|
||
sll 32-8,a0
|
||
srl 32-8,a0
|
||
rets
|
||
|
||
WC_BYTE
|
||
; MOVE A1,-*SP,L
|
||
; move @SYSCOPY,a1
|
||
; sll 32-2,a1
|
||
; srl 32-2,a1
|
||
; sll 15,a1 ;Page offset
|
||
; add a7,a1
|
||
; move a7,a1
|
||
move a0,@CMOSWE
|
||
movb a0,*a7
|
||
; MMFM SP,A1
|
||
rets
|
||
|
||
|
||
**************************************************************************
|
||
*
|
||
* RC_BYTEI
|
||
*
|
||
* READ BYTE POINTED TO BY A7...INCREMENT POINTER TO
|
||
* "NEXT" BYTE.
|
||
*
|
||
**************************************************************************
|
||
RC_BYTEI:
|
||
CALLR RC_BYTE
|
||
ADDI C_BYTE_SIZE,A7 ;WORDS SEPARATE CMOS BYTES.
|
||
MOVE A0,A0 ;RETURN FLAGS ACCORDINGLY
|
||
RETS
|
||
|
||
RC_WORD:
|
||
MMTM SP,A1,A7 ;USE A1 TO COMBINE BYTES
|
||
CALLR RC_BYTEI ;GET A BYTE
|
||
MOVE A0,A1 ;SAVE IN A1
|
||
ANDI BYTE_MASK,A1 ;MASK ONLY BYTE
|
||
SLL 8,A1 ;SHIFT TO HIGH BYTE
|
||
CALLR RC_BYTE ;GET THE 2ND BYTE
|
||
ANDI BYTE_MASK,A0
|
||
OR A1,A0 ;A0 HAS THE WORD
|
||
MMFM SP,A1,A7
|
||
RETS
|
||
|
||
RC_WORDI:
|
||
CALLR RC_WORD
|
||
ADDI C_WORD_SIZE,A7 ;LONG SEPARATE CMOS WORDS.
|
||
MOVE A0,A0 ;RETURN FLAGS ACCORDINGLY
|
||
RETS
|
||
|
||
RC_LONG:
|
||
MMTM SP,A1,A7 ;USE A1 TO COMBINE BYTES
|
||
CALLR RC_WORDI ;GET A WORD
|
||
MOVE A0,A1 ;SAVE IN A1
|
||
ANDI WORD_MASK,A1 ;MASK ONLY WORD
|
||
SLL 16,A1 ;SHIFT TO HIGH WORD
|
||
CALLR RC_WORD ;GET THE 2ND WORD
|
||
ANDI WORD_MASK,A0
|
||
OR A1,A0 ;A0 HAS THE LONG WORD
|
||
MMFM SP,A1,A7
|
||
RETS
|
||
|
||
RC_LONGI:
|
||
CALLR RC_LONG
|
||
ADDI C_LONG_SIZE,A7 ;DOUBLE THE DISTANCE FOR BRAIN DAMIJ
|
||
MOVE A0,A0 ;RETURN FLAGS ACCORDINGLY
|
||
RETS
|
||
|
||
WC_BYTEI:
|
||
CALLR WC_BYTE
|
||
ADDI C_BYTE_SIZE,A7
|
||
RETS
|
||
|
||
WC_WORD:
|
||
MMTM SP,A0,A1,A7
|
||
MOVE A0,A1 ;MAKE COPY OF WORD
|
||
SRL 8,A0 ;GET HIGH BYTE IN A0
|
||
CALLR WC_BYTEI ;WRITE THE HIGH BYTE
|
||
MOVE A1,A0 ;NOW GET THE LOW BYTE BACK
|
||
CALLR WC_BYTE ;WRITE IT
|
||
MMFM SP,A0,A1,A7 ;AND RESTORE ALL WE TOUCHED
|
||
RETS
|
||
|
||
WC_WORDI:
|
||
CALLR WC_WORD
|
||
ADDI C_WORD_SIZE,A7
|
||
RETS
|
||
|
||
WC_LONG:
|
||
MMTM SP,A0,A1,A7
|
||
MOVE A0,A1 ;MAKE COPY OF LONG
|
||
SRL 16,A0 ;GET HIGH WORD IN A0
|
||
CALLR WC_WORDI ;WRITE THE HIGH WORD
|
||
MOVE A1,A0 ;NOW GET THE LOW WORD BACK
|
||
CALLR WC_WORD ;WRITE IT
|
||
MMFM SP,A0,A1,A7 ;AND RESTORE ALL WE TOUCHED
|
||
RETS
|
||
|
||
WC_LONGI:
|
||
CALLR WC_LONG
|
||
ADDI C_LONG_SIZE,A7
|
||
RETS
|
||
|
||
*****************************************************************************
|
||
*****************************************************************************
|
||
*****
|
||
***** DEFAULT ROM HSTD TABLES AND TABLE DEFINITIONS
|
||
*****
|
||
*****************************************************************************
|
||
*****************************************************************************
|
||
|
||
TB_POINTER EQU 0 ;LONG-POINTER TO BEGINNING OF TABLE
|
||
TB_COUNT EQU TB_POINTER+LONG_SIZE ;WORD....# IN THE TABLE.
|
||
TB_VISIBLE EQU TB_COUNT+WORD_SIZE ;WORD....NUMBER DISPLAYED
|
||
TB_PAGE_BITS EQU TB_VISIBLE+WORD_SIZE ;WORD....STATUS WORD FOR CMOS PAGE
|
||
TB_FACTORY EQU TB_PAGE_BITS+WORD_SIZE ;LONG....ROM STARTUP TABLE
|
||
TB_ERROR_COUNT EQU TB_FACTORY+LONG_SIZE ;WORD....NUM ERRORS TO RE-INIT
|
||
|
||
|
||
;SCRM .MACRO a,b
|
||
SCRM .MACRO a
|
||
.byte :a:/>1000000,:a:/>10000&>ff,:a:/>100&>ff,:a:&>ff
|
||
; .byte ":b:",0
|
||
.ENDM
|
||
|
||
STREAK_ROM_TABLE
|
||
SCRM >22122145 ;****ZERO ENTRY...NOT SEEN!
|
||
.BYTE "EPJA.",0
|
||
ROM_ENTRY_SIZE EQU $-STREAK_ROM_TABLE
|
||
SCRM >11
|
||
.BYTE "MJTA.",0
|
||
SCRM >10
|
||
.BYTE "SALB.",0
|
||
SCRM >9
|
||
.BYTE "JMSC.",0
|
||
SCRM >9
|
||
.BYTE "JYTD.",0
|
||
SCRM >8
|
||
.BYTE "MJLE.",0
|
||
SCRM >8
|
||
.BYTE "JAKF.",0
|
||
SCRM >7
|
||
.BYTE "OEGA.",0
|
||
SCRM >7
|
||
.BYTE "SL A.",0
|
||
SCRM >7
|
||
.BYTE "MDPA.",0
|
||
|
||
SCRM >6
|
||
.BYTE "GBSA.",0
|
||
SCRM >6
|
||
.BYTE "DJTA.",0
|
||
SCRM >6
|
||
.BYTE "EPJA.",0
|
||
SCRM >5
|
||
.BYTE "BIFA.",0
|
||
SCRM >5
|
||
.BYTE "UNKA.",0
|
||
SCRM >5
|
||
.BYTE "UTBA.",0
|
||
SCRM >4
|
||
.BYTE "CRLA.",0
|
||
SCRM >4
|
||
.BYTE "TDGA.",0
|
||
SCRM >4
|
||
.BYTE "ASBA.",0
|
||
STREAK_TABLE_ENTRIES EQU ($-STREAK_ROM_TABLE)/ROM_ENTRY_SIZE
|
||
|
||
PIN_SPEED_TAB_ROM_TABLE
|
||
|
||
SCRM >7000 ;****ZERO ENTRY...NOT SEEN!
|
||
.BYTE "EPJA.",0
|
||
SCRM >6000
|
||
.BYTE "MJTI.",0
|
||
SCRM >6100
|
||
.BYTE "SALI.",0
|
||
SCRM >6200
|
||
.BYTE "JMSG.",0
|
||
SCRM >6300
|
||
.BYTE "JYTF.",0
|
||
SCRM >6400
|
||
.BYTE "JAKE.",0
|
||
SCRM >6500
|
||
.BYTE "OEGD.",0
|
||
SCRM >6600
|
||
.BYTE "MJLC.",0
|
||
SCRM >6700
|
||
.BYTE "UTBB.",0
|
||
SCRM >6800
|
||
.BYTE "ASBA.",0
|
||
|
||
PIN_SPEED_TAB_ENTRIES EQU ($-PIN_SPEED_TAB_ROM_TABLE)/ROM_ENTRY_SIZE
|
||
|
||
BEATEN_ROM_TABLE
|
||
SCRM >22122145 ;****ZERO ENTRY...NOT SEEN!
|
||
.BYTE "EPJAB",0
|
||
B_ROM_ENTRY_SIZE EQU $-BEATEN_ROM_TABLE
|
||
SCRM >11101
|
||
.BYTE "MIKE ",0
|
||
SCRM >1001
|
||
.BYTE "JAMIT",0
|
||
SCRM >100
|
||
.BYTE "TEAL ",0
|
||
SCRM >1000
|
||
.BYTE "DINK ",0
|
||
SCRM >10000
|
||
.BYTE "JAKE ",0
|
||
SCRM >100000
|
||
.BYTE "DRJ ",0
|
||
SCRM >1000000
|
||
.BYTE "CHICK",0
|
||
SCRM >10000000
|
||
.BYTE "SHAWN",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
BEATEN_TAB_ENTRIES EQU ($-BEATEN_ROM_TABLE)/B_ROM_ENTRY_SIZE
|
||
|
||
INTER_ROM_TABLE
|
||
SCRM >22122145 ;****ZERO ENTRY...NOT SEEN!
|
||
.BYTE "EPJAB",0
|
||
I_ROM_ENTRY_SIZE EQU $-INTER_ROM_TABLE
|
||
SCRM >111
|
||
.BYTE "MARK ",0
|
||
SCRM >101
|
||
.BYTE "SAL ",0
|
||
SCRM >100
|
||
.BYTE "JASON",0
|
||
SCRM >1000
|
||
.BYTE "LICK ",0
|
||
SCRM >10000
|
||
.BYTE "JAKE ",0
|
||
SCRM >100000
|
||
.BYTE "DIESL",0
|
||
SCRM >1000000
|
||
.BYTE "FUJI ",0
|
||
SCRM >10000000
|
||
.BYTE "SHAWN",0
|
||
SCRM >1000000
|
||
.BYTE "BIFF ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
SCRM >0000000
|
||
.BYTE " ",0
|
||
INTER_TAB_ENTRIES EQU ($-INTER_ROM_TABLE)/I_ROM_ENTRY_SIZE
|
||
|
||
TAG_ROM_TABLE
|
||
SCRM >22122145 ;****ZERO ENTRY...NOT SEEN!
|
||
.BYTE "EPJAB",0
|
||
T_ROM_ENTRY_SIZE EQU $-TAG_ROM_TABLE
|
||
SCRM >9000
|
||
.BYTE "BOON ",0
|
||
SCRM >9000
|
||
.BYTE "SAL ",0
|
||
SCRM >9500
|
||
.BYTE "ERMAC",0
|
||
SCRM >9500
|
||
.BYTE "KANO ",0
|
||
SCRM >10000
|
||
.BYTE "SONYA",0
|
||
SCRM >10000
|
||
.BYTE "GENE ",0
|
||
SCRM >10500
|
||
.BYTE "MIKE ",0
|
||
SCRM >10500
|
||
.BYTE "SHAWN",0
|
||
SCRM >11000
|
||
.BYTE "JASON",0
|
||
SCRM >11000
|
||
.BYTE "JOSH ",0
|
||
SCRM >11500
|
||
.BYTE "JOHN ",0
|
||
SCRM >11500
|
||
.BYTE "JAKE ",0
|
||
SCRM >12000
|
||
.BYTE "JOE ",0
|
||
SCRM >12000
|
||
.BYTE "EDWIN",0
|
||
SCRM >12500
|
||
.BYTE "BILL ",0
|
||
SCRM >12500
|
||
.BYTE "MARKP",0
|
||
SCRM >13000
|
||
.BYTE "STEVE",0
|
||
SCRM >13000
|
||
.BYTE "TONY ",0
|
||
TAG_TAB_ENTRIES EQU ($-TAG_ROM_TABLE)/T_ROM_ENTRY_SIZE
|
||
|
||
|
||
******************************************************************************
|
||
|
||
.end
|
||
|