nba-jam-tournament-edition/RECORD.ASM

2999 lines
57 KiB
NASM
Executable File
Raw Permalink Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

******************************************************************************
*
* Software: Jamie Rivett
* Initiated: 9-27-92
*
* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC.
*
*.Last mod - 12/5/92 19:34
******************************************************************************
.file "record.asm"
.title "CMOS records etc"
.width 132
.option b,d,l,t
.mnolist
.include "mproc.equ"
.include "disp.equ"
.include "sys.equ"
.include "gsp.equ"
.include "mac2.asm"
.include "game.equ"
.include "audit.equ"
.include "link.equ"
.include "shawn.hdr"
.include "imgtbl.glo"
.include "bgndtbl.glo"
******************************************************************************
.global sort_wins
.global save_player_records
.global get_player_record
.global find_record
.global player1_data,player2_data,player3_data,player4_data
.global show_player_records
.global clear_player_records
.global message_palette
.global mess_space_width
.global print_string,print_string2
.global print_string_C,print_string_C2
.global message_ascii
.global mess_spacing
.global mess_objid
.global mess_cursx,mess_cursy
.global lgmd_ascii,osgemd_ascii,sgmd8_ascii
.global setup_message
.global message_buffer
.global get_initials_string
.global dec_to_asc,dec_to_pct
.global copy_string,copy_rom_string
.global concat_string,concat_rom_string
.global print_string_R,print_string_R2
******************************************************************************
.ref pal_getf
.ref morf_pal
.ref morfpal1,morfpal2
.ref morfpal3,morfpal4
.ref morfpal5,morfpal6
.ref morfpal7,morfpal8
.ref morfpal9,morfpal10
.ref morfpal11
.ref CYCLE_TABLE
.ref get_teams_pop,sorted_teams
.ref BAKMODS
.ref BGND_UD1
.ref SET_PAGE
.ref WC_BYTE,RC_BYTE
.ref WC_BYTEI,RC_BYTEI
.ref WC_WORD,RC_WORD
.ref WC_WORDI,RC_WORD
.ref WC_LONG,RC_LONG
.ref WC_LONGI,RC_LONG
.ref dpageflip
.ref IRQSKYE
.ref KILBGND
.ref get_all_buttons_cur
.ref get_all_buttons_cur2
.ref get_all_sticks_down2
.ref get_all_buttons_cur2
.ref WIPEOUT
.ref CLR_SCRN
.ref COLRTEMP
.ref obj_del1c
.ref get_all_sticks_down
.ref get_all_sticks_cur,get_all_sticks_cur2
.ref team1,team2
.ref PSTATUS,PSTATUS2
.ref scores
******************************************************************************
.if 0
PR_COUNT equ 0
PR_WON equ PR_COUNT+16
PR_LOST equ PR_WON+16
PR_LASTPLAY equ PR_LOST+16
PR_INIT1 equ PR_LASTPLAY+16
PR_INIT2 equ PR_INIT1+16
PR_INIT3 equ PR_INIT2+16
PR_MONTH equ PR_INIT3+16
PR_DAY equ PR_MONTH+16
PR_TMATEINIT1 equ PR_DAY+16
PR_TMATEINIT2 equ PR_TMATEINIT1+16
PR_TMATEINIT3 equ PR_TMATEINIT2+16
PR_OP1INIT1 equ PR_TMATEINIT3+16
PR_OP1INIT2 equ PR_OP1INIT1+16
PR_OP1INIT3 equ PR_OP1INIT2+16
PR_OP2INIT1 equ PR_OP1INIT3+16
PR_OP2INIT2 equ PR_OP2INIT1+16
PR_OP2INIT3 equ PR_OP2INIT2+16
PR_PTEAM equ PR_OP2INIT3+16
PR_OTEAM equ PR_PTEAM+16
PR_OSCORE equ PR_OTEAM+16
PR_PSCORE equ PR_OSCORE+16
PR_TEAMSDEF equ PR_PSCORE+16
PR_NUMDEF equ PR_TEAMSDEF+32
PR_NUMDEFOLD equ PR_NUMDEF+16
PR_WINSTREAK equ PR_NUMDEFOLD+16
PR_RANK equ PR_WINSTREAK+16
PR_CHECKSUM equ PR_RANK+16
PR_SIZE equ PR_CHECKSUM+16
PKDPR_COUNT equ 0 ;11 bits
PKDPR_WON equ PKDPR_COUNT+11 ;11 bits
PKDPR_LASTPLAY equ PKDPR_WON+11 ;11 bits
PKDPR_INIT1 equ PKDPR_LASTPLAY+11 ; 5 bits
PKDPR_INIT2 equ PKDPR_INIT1+5 ; 5 bits
PKDPR_INIT3 equ PKDPR_INIT2+5 ; 5 bits
PKDPR_MONTH equ PKDPR_INIT3+5 ; 4 bits
PKDPR_DAY equ PKDPR_MONTH+4 ; 5 bits
PKDPR_TMATEINIT1 equ PKDPR_DAY+5 ; 5 bits
PKDPR_TMATEINIT2 equ PKDPR_TMATEINIT1+5 ; 5 bits
PKDPR_TMATEINIT3 equ PKDPR_TMATEINIT2+5 ; 5 bits
PKDPR_OP1INIT1 equ PKDPR_TMATEINIT3+5 ; 5 bits
PKDPR_OP1INIT2 equ PKDPR_OP1INIT1+5 ; 5 bits
PKDPR_OP1INIT3 equ PKDPR_OP1INIT2+5 ; 5 bits
PKDPR_OP2INIT1 equ PKDPR_OP1INIT3+5 ; 5 bits
PKDPR_OP2INIT2 equ PKDPR_OP2INIT1+5 ; 5 bits
PKDPR_OP2INIT3 equ PKDPR_OP2INIT2+5 ; 5 bits
PKDPR_PTEAM equ PKDPR_OP2INIT3+5 ; 5 bits
PKDPR_OTEAM equ PKDPR_PTEAM+5 ; 5 bits
PKDPR_OSCORE equ PKDPR_OTEAM+5 ; 8 bits
PKDPR_PSCORE equ PKDPR_OSCORE+8 ; 8 bits
PKDPR_TEAMSDEF equ PKDPR_PSCORE+8 ;27 bits
PKDPR_WINSTREAK equ PKDPR_TEAMSDEF+27 ; 6 bits
PKDPR_CHECKSUM equ PKDPR_WINSTREAK+6 ; 8 bits (168 bits total)
PKDPR_SIZE equ ((PKDPR_CHECKSUM+8+7)/8)*8 ;must be on byte boundary
RS_RECORD_NUM equ 0
RS_GAMES_PLAYED equ RS_RECORD_NUM+10h
RS_WINS equ RS_GAMES_PLAYED+10h
RS_AVERAGE equ RS_WINS+10h
RS_TEAMSDEF equ RS_AVERAGE+10h
RS_STREAK equ RS_TEAMSDEF+10h
RS_SIZE equ RS_STREAK+10h
.endif
_27BITS equ 7ffffffh
_11BITS equ 011111111111b
_10BITS equ 01111111111b
_8BITS equ 011111111b
_6BITS equ 0111111b
_5BITS equ 011111b
_4BITS equ 01111b
_ATL equ 0
_BOS equ 1
_CHA equ 2
_CHI equ 3
_CLE equ 4
_DAL equ 5
_DEN equ 6
_DET equ 7
_GOL equ 8
_HOU equ 9
_IND equ 10
_LAC equ 11
_LAL equ 12
_MI equ 13
_MIL equ 14
_MIN equ 15
_NJ equ 16
_NY equ 17
_ORL equ 18
_PHI equ 19
_PHX equ 20
_POR equ 21
_SAC equ 22
_SAN equ 23
_SEA equ 24
_UTA equ 25
_WAS equ 26
.bss player1_data, PR_SIZE
.bss player2_data, PR_SIZE
.bss player3_data, PR_SIZE
.bss player4_data, PR_SIZE
.bss temp_record, PR_SIZE
.bss packed_record, ((PKDPR_SIZE+15)/16)*16+32
;word align & pad 32 bits at end
.bss player_stats, PS_SIZE*10h*4
.global player_stats
.bss record_sort_ptrs, 32*NUM_PRECORDS
record_sort_ram equ SCRATCH+8*256*1024
.bss hiscore_type, 16
.global hiscore_type
.text
bounce_snd .word >fc80,10,>8129,0 ;Ball bounce
#******************************************************************************
SUBRP save_player_records
move @team1,a0
move a0,@player1_data+PR_PTEAM
move a0,@player2_data+PR_PTEAM
move a0,@player3_data+PR_OTEAM
move a0,@player4_data+PR_OTEAM
move @team2,a0
move a0,@player1_data+PR_OTEAM
move a0,@player2_data+PR_OTEAM
move a0,@player3_data+PR_PTEAM
move a0,@player4_data+PR_PTEAM
movi player1_data,a4 ;fill player 1's initials
movi player2_data,a5
movi player3_data,a6
movi player4_data,a7
callr copy_inits
movi player2_data,a4 ;fill player 2's initials
movi player1_data,a5
movi player3_data,a6
movi player4_data,a7
callr copy_inits
movi player3_data,a4 ;fill player 3's initials
movi player4_data,a5
movi player1_data,a6
movi player2_data,a7
callr copy_inits
movi player4_data,a4 ;fill player 4's initials
movi player3_data,a5
movi player1_data,a6
movi player2_data,a7
callr copy_inits
move @scores,a0
move @scores+10h,a1
move a0,@player1_data+PR_PSCORE
move a1,@player1_data+PR_OSCORE
move a0,@player2_data+PR_PSCORE
move a1,@player2_data+PR_OSCORE
move a1,@player3_data+PR_PSCORE
move a0,@player3_data+PR_OSCORE
move a1,@player4_data+PR_PSCORE
move a0,@player4_data+PR_OSCORE
cmp a0,a1
jrgt #t2_wins
;#t1_wins
move @player1_data+PR_WON,a0
inc a0
move a0,@player1_data+PR_WON
move @player1_data+PR_WINSTREAK,a0
inc a0
andi _6BITS,a0
jrz #no_wrap1
move a0,@player1_data+PR_WINSTREAK
#no_wrap1
move @player2_data+PR_WON,a0
inc a0
move a0,@player2_data+PR_WON
move @player2_data+PR_WINSTREAK,a0
inc a0
andi _6BITS,a0
jrz #no_wrap2
move a0,@player2_data+PR_WINSTREAK
#no_wrap2
clr a0
move a0,@player3_data+PR_WINSTREAK
move a0,@player4_data+PR_WINSTREAK
move @team2,a0
movk 1,a1
sll a0,a1
move @PSTATUS2,a0 ;if opponent is human then don't
andi 01100b,a0 ;count wins for top five teams
jrz #t2cpu
andni (1<<_UTA) | (1<<_NY) | (1<<_POR) | (1<<_PHX) | (1<<_CHI),a1
#t2cpu
move @player1_data+PR_TEAMSDEF,a0,L
or a1,a0
move a0,@player1_data+PR_TEAMSDEF,L
move @player2_data+PR_TEAMSDEF,a0,L
or a1,a0
move a0,@player2_data+PR_TEAMSDEF,L
jruc #cont1
#t2_wins
move @player3_data+PR_WON,a0
inc a0
move a0,@player3_data+PR_WON
move @player3_data+PR_WINSTREAK,a0
inc a0
andi _6BITS,a0
jrz #no_wrap3
move a0,@player3_data+PR_WINSTREAK
#no_wrap3
move @player4_data+PR_WON,a0
inc a0
move a0,@player4_data+PR_WON
move @player4_data+PR_WINSTREAK,a0
inc a0
andi _6BITS,a0
jrz #no_wrap4
move a0,@player4_data+PR_WINSTREAK
#no_wrap4
clr a0
move a0,@player1_data+PR_WINSTREAK
move a0,@player2_data+PR_WINSTREAK
move @team1,a0
movk 1,a1
sll a0,a1
move @PSTATUS2,a0 ;if opponent is human then don't
andi 011b,a0 ;count wins for top five teams
jrz #t1cpu
andni (1<<_UTA) | (1<<_NY) | (1<<_POR) | (1<<_PHX) | (1<<_CHI),a1
#t1cpu
move @player3_data+PR_TEAMSDEF,a0,L
or a1,a0
move a0,@player3_data+PR_TEAMSDEF,L
move @player4_data+PR_TEAMSDEF,a0,L
or a1,a0
move a0,@player4_data+PR_TEAMSDEF,L
#cont1
calla dec_lastplay
move *a13(PC_DATADDR),a0,L
PUSHP a0
move @PSTATUS,a0
btst 0,a0
jrz #no1
move @player1_data+PR_INIT1,a0
jrn #no1
movi player1_data,a6
calla save_record
#no1
move @PSTATUS,a0
btst 1,a0
jrz #no2
move @player2_data+PR_INIT1,a0
jrn #no2
movi player2_data,a6
calla save_record
#no2
move @PSTATUS,a0
btst 2,a0
jrz #no3
move @player3_data+PR_INIT1,a0
jrn #no3
movi player3_data,a6
calla save_record
#no3
move @PSTATUS,a0
btst 3,a0
jrz #no4
move @player4_data+PR_INIT1,a0
jrn #no4
movi player4_data,a6
calla save_record
#no4
calla get_all_records ;resort players
calla sort_wins ;for new ranking
move @PSTATUS,a0
btst 0,a0
jrz #no1b
move @player1_data+PR_INIT1,a0
jrn #no1b
movi player1_data,a0
move a0,*a13(PC_DATADDR),L ;start of player data
callr get_player_record ;re-calc rank etc..
#no1b
move @PSTATUS,a0
btst 1,a0
jrz #no2b
move @player2_data+PR_INIT1,a0
jrn #no2b
movi player2_data,a0
move a0,*a13(PC_DATADDR),L ;start of player data
callr get_player_record ;re-calc rank etc..
#no2b
move @PSTATUS,a0
btst 2,a0
jrz #no3b
move @player3_data+PR_INIT1,a0
jrn #no3b
movi player3_data,a0
move a0,*a13(PC_DATADDR),L ;start of player data
callr get_player_record ;re-calc rank etc..
#no3b
move @PSTATUS,a0
btst 3,a0
jrz #no4b
move @player4_data+PR_INIT1,a0
jrn #no4b
movi player4_data,a0
move a0,*a13(PC_DATADDR),L ;start of player data
callr get_player_record ;re-calc rank etc..
#no4b
PULLP a0
move a0,*a13(PC_DATADDR),L
rets
copy_inits
move *a5(PR_INIT1),a0 ;get teammates initials
jrnn #not_cpu1
movi 'C'-'A',a0
move a0,*a4(PR_TMATEINIT1)
movi 'P'-'A',a0
move a0,*a4(PR_TMATEINIT2)
movi 'U'-'A',a0
move a0,*a4(PR_TMATEINIT3)
jruc #cont01
#not_cpu1
move a0,*a4(PR_TMATEINIT1)
move *a5(PR_INIT2),a0
move a0,*a4(PR_TMATEINIT2)
move *a5(PR_INIT3),a0
move a0,*a4(PR_TMATEINIT3)
#cont01
move *a6(PR_INIT1),a0 ;get 1st opponents initials
jrnn #not_cpu2
movi 'C'-'A',a0
move a0,*a4(PR_OP1INIT1)
movi 'P'-'A',a0
move a0,*a4(PR_OP1INIT2)
movi 'U'-'A',a0
move a0,*a4(PR_OP1INIT3)
jruc #cont02
#not_cpu2
move a0,*a4(PR_OP1INIT1)
move *a6(PR_INIT2),a0
move a0,*a4(PR_OP1INIT2)
move *a6(PR_INIT3),a0
move a0,*a4(PR_OP1INIT3)
#cont02
move *a7(PR_INIT1),a0 ;get 2nd opponents initials
jrnn #not_cpu3
movi 'C'-'A',a0
move a0,*a4(PR_OP2INIT1)
movi 'P'-'A',a0
move a0,*a4(PR_OP2INIT2)
movi 'U'-'A',a0
move a0,*a4(PR_OP2INIT3)
rets
#not_cpu3
move a0,*a4(PR_OP2INIT1)
move *a7(PR_INIT2),a0
move a0,*a4(PR_OP2INIT2)
move *a7(PR_INIT3),a0
move a0,*a4(PR_OP2INIT3)
rets
#*****************************************************************************
SUBR clear_player_stats
clr a0
movi player_stats,a1
movi PS_SIZE*4,b0
#clear_next
move a0,*a1+
dsj b0,#clear_next
rets
#*****************************************************************************
*
* INPUT: a0 = stat number (use equates in GAME.EQU)
* a1 = player number
*
* TRASHES: a0,a1,a14
*-----------------------------------------------------------------------------
SUBR inc_player_stat
movi PS_SIZE,a14
mpyu a14,a1 ;player number * PS_SIZE
add a1,a0 ;+ stat offset
sll 4,a0 ;x 16 bits
addi player_stats,a0 ;+ base address
move *a0,a14
inc a14
move a14,*a0
rets
#*****************************************************************************
*
* INPUT: a0 = stat number (use equates in GAME.EQU)
* a1 = player number
*
* TRASHES: a0,a1,a14
*-----------------------------------------------------------------------------
SUBR dec_player_stat
movi PS_SIZE,a14
mpyu a14,a1 ;player number * PS_SIZE
add a1,a0 ;+ stat offset
sll 4,a0 ;x 16 bits
addi player_stats,a0 ;+ base address
move *a0,a14
dec a14
move a14,*a0
rets
#*****************************************************************************
*
* INPUT: a6 = * player data
*
*-----------------------------------------------------------------------------
*
* RETURN: a0 = 8 bit checksum value
*
* calculates an 8 bit xor checksum of the player data
*
*-----------------------------------------------------------------------------
SUBRP calc_checksum
PUSH a1
clr a0
move *a6(PR_COUNT),a1
xor a1,a0
move *a6(PR_WON),a1
xor a1,a0
move *a6(PR_LOST),a1
xor a1,a0
move *a6(PR_LASTPLAY),a1
xor a1,a0
move *a6(PR_INIT1),a1
xor a1,a0
move *a6(PR_INIT2),a1
xor a1,a0
move *a6(PR_INIT3),a1
xor a1,a0
move *a6(PR_MONTH),a1
xor a1,a0
move *a6(PR_DAY),a1
xor a1,a0
move *a6(PR_TMATEINIT1),a1
xor a1,a0
move *a6(PR_TMATEINIT2),a1
xor a1,a0
move *a6(PR_TMATEINIT3),a1
xor a1,a0
move *a6(PR_OP1INIT1),a1
xor a1,a0
move *a6(PR_OP1INIT2),a1
xor a1,a0
move *a6(PR_OP1INIT3),a1
xor a1,a0
move *a6(PR_OP2INIT1),a1
xor a1,a0
move *a6(PR_OP2INIT2),a1
xor a1,a0
move *a6(PR_OP2INIT3),a1
xor a1,a0
move *a6(PR_PTEAM),a1
xor a1,a0
move *a6(PR_OTEAM),a1
xor a1,a0
move *a6(PR_OSCORE),a1
xor a1,a0
move *a6(PR_PSCORE),a1
xor a1,a0
move *a6(PR_TEAMSDEF),a1
xor a1,a0
move *a6(PR_TEAMSDEF+10h),a1
xor a1,a0
move *a6(PKDPR_WINSTREAK),a1
xor a1,a0
andi _8BITS,a0
PULL a1
rets
#*****************************************************************************
*
* INPUT: a6 = * player data
* a10 = * cmos record
*
*-----------------------------------------------------------------------------
SUBRP get_temp_record
PUSH a6,a7
movi temp_record,a6
jruc #start
SUBRP get_plr_record
PUSH a6,a7 ;a6 = * player data
#start
movi RECORD_SELECT,A1
calla SET_PAGE
move a10,a7
movi PKDPR_SIZE/8,a3 ;number bytes to fetch
movi packed_record,a2
#next_word
calla RC_BYTEI
movb a0,*a2
addk 8,a2
dsj a3,#next_word
movi packed_record,a2
move *a2(PKDPR_COUNT),a1 ;total plays count
andi _11BITS,a1
move a1,*a6(PR_COUNT)
move *a2(PKDPR_WON),a0
andi _10BITS,a0
move a0,*a6(PR_WON)
sub a0,a1 ;total plays - wins = losses
move a1,*a6(PR_LOST)
move *a2(PKDPR_LASTPLAY),a0
andi _11BITS,a0
move a0,*a6(PR_LASTPLAY)
move *a2(PKDPR_INIT1),a0
andi _5BITS,a0
move a0,*a6(PR_INIT1)
move *a2(PKDPR_INIT2),a0
andi _5BITS,a0
move a0,*a6(PR_INIT2)
move *a2(PKDPR_INIT3),a0
andi _5BITS,a0
move a0,*a6(PR_INIT3)
move *a2(PKDPR_MONTH),a0
andi _4BITS,a0
move a0,*a6(PR_MONTH)
move *a2(PKDPR_DAY),a0
andi _5BITS,a0
move a0,*a6(PR_DAY)
move *a2(PKDPR_TMATEINIT1),a0
andi _5BITS,a0
move a0,*a6(PR_TMATEINIT1)
move *a2(PKDPR_TMATEINIT2),a0
andi _5BITS,a0
move a0,*a6(PR_TMATEINIT2)
move *a2(PKDPR_TMATEINIT3),a0
andi _5BITS,a0
move a0,*a6(PR_TMATEINIT3)
move *a2(PKDPR_OP1INIT1),a0
andi _5BITS,a0
move a0,*a6(PR_OP1INIT1)
move *a2(PKDPR_OP1INIT2),a0
andi _5BITS,a0
move a0,*a6(PR_OP1INIT2)
move *a2(PKDPR_OP1INIT3),a0
andi _5BITS,a0
move a0,*a6(PR_OP1INIT3)
move *a2(PKDPR_OP2INIT1),a0
andi _5BITS,a0
move a0,*a6(PR_OP2INIT1)
move *a2(PKDPR_OP2INIT2),a0
andi _5BITS,a0
move a0,*a6(PR_OP2INIT2)
move *a2(PKDPR_OP2INIT3),a0
andi _5BITS,a0
move a0,*a6(PR_OP2INIT3)
move *a2(PKDPR_PTEAM),a0
andi _5BITS,a0
move a0,*a6(PR_PTEAM)
move *a2(PKDPR_OTEAM),a0
andi _5BITS,a0
move a0,*a6(PR_OTEAM)
move *a2(PKDPR_OSCORE),a0
andi _8BITS,a0
move a0,*a6(PR_OSCORE)
move *a2(PKDPR_PSCORE),a0
andi _8BITS,a0
move a0,*a6(PR_PSCORE)
move *a2(PKDPR_TEAMSDEF),a1,L
andi _27BITS,a1
move a1,*a6(PR_TEAMSDEF),L
move *a2(PKDPR_WINSTREAK),a0
andi _6BITS,a0
move a0,*a6(PR_WINSTREAK)
PUSH a2
clr a0
movk 27,a2
#next_team
srl 1,a1
jrnc #not_def
inc a0 ;teams defeated count ++
#not_def
dsj a2,#next_team
move a0,*a6(PR_NUMDEF) ;number teams defeated
PULL a2
move *a2(PKDPR_CHECKSUM),a0
andi _8BITS,a0
move a0,*a6(PR_CHECKSUM)
move a0,a1
callr calc_checksum
cmp a0,a1
jreq #checksum_ok
.if DEBUG
LOCKUP
eint
.endif
callr clear_record ;bad checksum, so delete record
#checksum_ok
PULL a6,a7
rets
#*****************************************************************************
*
* INPUT: a6 = * player data
* a10 = * cmos record dest
*
*-----------------------------------------------------------------------------
SUBRP put_temp_record
PUSH a6
movi temp_record,a6
jruc #start
SUBRP put_plr_record
PUSH a6
#start
movi RECORD_SELECT,A1
calla SET_PAGE
movi packed_record,a2
move *a6(PR_COUNT),a1
andi _11BITS,a1
move a1,*a2(PKDPR_COUNT)
move *a6(PR_WON),a0
andi _10BITS,a0
move a0,*a2(PKDPR_WON)
sub a0,a1
move a1,*a6(PR_LOST) ;used for calc checksum
move *a6(PR_LASTPLAY),a0
andi _11BITS,a0
move a0,*a2(PKDPR_LASTPLAY)
move *a6(PR_INIT1),a0
andi _5BITS,a0
move a0,*a2(PKDPR_INIT1)
move *a6(PR_INIT2),a0
andi _5BITS,a0
move a0,*a2(PKDPR_INIT2)
move *a6(PR_INIT3),a0
andi _5BITS,a0
move a0,*a2(PKDPR_INIT3)
move *a6(PR_MONTH),a0
andi _4BITS,a0
move a0,*a2(PKDPR_MONTH)
move *a6(PR_DAY),a0
andi _5BITS,a0
move a0,*a2(PKDPR_DAY)
move *a6(PR_TMATEINIT1),a0
andi _5BITS,a0
move a0,*a2(PKDPR_TMATEINIT1)
move *a6(PR_TMATEINIT2),a0
andi _5BITS,a0
move a0,*a2(PKDPR_TMATEINIT2)
move *a6(PR_TMATEINIT3),a0
andi _5BITS,a0
move a0,*a2(PKDPR_TMATEINIT3)
move *a6(PR_OP1INIT1),a0
andi _5BITS,a0
move a0,*a2(PKDPR_OP1INIT1)
move *a6(PR_OP1INIT2),a0
andi _5BITS,a0
move a0,*a2(PKDPR_OP1INIT2)
move *a6(PR_OP1INIT3),a0
andi _5BITS,a0
move a0,*a2(PKDPR_OP1INIT3)
move *a6(PR_OP2INIT1),a0
andi _5BITS,a0
move a0,*a2(PKDPR_OP2INIT1)
move *a6(PR_OP2INIT2),a0
andi _5BITS,a0
move a0,*a2(PKDPR_OP2INIT2)
move *a6(PR_OP2INIT3),a0
andi _5BITS,a0
move a0,*a2(PKDPR_OP2INIT3)
move *a6(PR_PTEAM),a0
andi _5BITS,a0
move a0,*a2(PKDPR_PTEAM)
move *a6(PR_OTEAM),a0
andi _5BITS,a0
move a0,*a2(PKDPR_OTEAM)
move *a6(PR_OSCORE),a0
andi _8BITS,a0
move a0,*a2(PKDPR_OSCORE)
move *a6(PR_PSCORE),a0
andi _8BITS,a0
move a0,*a2(PKDPR_PSCORE)
move *a6(PR_TEAMSDEF),a0,L
andi _27BITS,a0
move a0,*a2(PKDPR_TEAMSDEF),L
move *a6(PR_WINSTREAK),a0
andi _6BITS,a0
move a0,*a2(PKDPR_WINSTREAK)
callr calc_checksum ;8 bit xor checksum
andi _8BITS,a0
move a0,*a2(PKDPR_CHECKSUM)
PUSH a7
move a10,a7
movi PKDPR_SIZE/8,a3 ;number bytes to write
movi packed_record,a2
#next_word
movb *a2,a0
calla WC_BYTEI
addk 8,a2
dsj a3,#next_word
PULL a7
PULL a6
rets
#*****************************************************************************
*
* INPUT: a6 = * player data
*
*-----------------------------------------------------------------------------
*
* RETURN: a10 = * matching CMOS record
* (a10 = 0 if no match found)
*
*-----------------------------------------------------------------------------
SUBRP find_record
movi RECORD_SELECT,A1
calla SET_PAGE
movi NUM_PRECORDS,a11
movi RECORD_ORIGIN,a10
#search_loop
callr get_temp_record ;data in temp_record
callr compare_record
jrne #no_match
rets
#no_match
addi PKDPR_SIZE*2,a10 ;cmos words
dsj a11,#search_loop
clr a10
rets
#*****************************************************************************
*
* INPUT: NONE
*
*-----------------------------------------------------------------------------
*
* RETURN: a10 = * free CMOS record
*
*-----------------------------------------------------------------------------
SUBRP get_free_record
movi RECORD_SELECT,A1
calla SET_PAGE
movi 2048,a8 ;last play count (max)
movi NUM_PRECORDS,a11
movi RECORD_ORIGIN,a10
move a10,a9 ;least used record to date
#search_loop
callr get_temp_record
move @temp_record+PR_COUNT,a0
jrz #free_record
move @temp_record+PR_LASTPLAY,a0
cmp a8,a0 ;a0-a8
jrhs #skip ;skip if a0 >= a8
move a0,a8
move a10,a9 ;least used record to date
#skip ;(lowest lastplay count)
addi PKDPR_SIZE*2,a10 ;cmos words
dsj a11,#search_loop
move a9,a10
rets
#free_record
rets
#*****************************************************************************
*
* INPUT: a6 = * player data
*
*-----------------------------------------------------------------------------
SUBRP compare_record
move @temp_record+PR_COUNT,a1 ;valid record?
jrz #no_match
move *a6(PR_INIT1),a0
move @temp_record+PR_INIT1,a1
cmp a0,a1
jrne #no_match
move *a6(PR_INIT2),a0
move @temp_record+PR_INIT2,a1
cmp a0,a1
jrne #no_match
move *a6(PR_INIT3),a0
move @temp_record+PR_INIT3,a1
cmp a0,a1
jrne #no_match
move *a6(PR_MONTH),a0
move @temp_record+PR_MONTH,a1
cmp a0,a1
jrne #no_match
move *a6(PR_DAY),a0
move @temp_record+PR_DAY,a1
cmp a0,a1
jrne #no_match
rets ;Z set
#no_match
movi 1,a0 ;clear Z
rets
#*****************************************************************************
*
* INPUT: a4 = cmos record number (0 - NUM_RECORDS-1 )
*
* RETURN: a2 = player rank
*
*-----------------------------------------------------------------------------
SUBRP get_plr_rank
PUSH a8
movk 1,a2
movi record_sort_ptrs,a9
#loop
move *a9,a8,L
move *a8(RS_RECORD_NUM),a0
cmp a4,a0
jreq #found_match
addi 20h,a9
inc a2
cmpi NUM_PRECORDS,a2
jrls #loop
#found_match
PULL a8
rets
#*****************************************************************************
*
*
*
*-----------------------------------------------------------------------------
SUBRP get_player_record
move *a13(PC_DATADDR),a6,L ;start of player data
callr find_record
move a10,a10
jrz #no_match
callr get_plr_record
movi NUM_PRECORDS,a4
sub a11,a4 ;record number
callr get_plr_rank
move *a13(PC_DATADDR),a6,L ;start of player data
move a2,*a6(PR_RANK)
rets
#no_match
clr a0
move a0,*a6(PR_COUNT)
move a0,*a6(PR_WON)
move a0,*a6(PR_LOST)
move a0,*a6(PR_LASTPLAY)
move a0,*a6(PR_OSCORE)
move a0,*a6(PR_PSCORE)
move a0,*a6(PR_TEAMSDEF),L
move a0,*a6(PR_WINSTREAK)
move a0,*a6(PR_NUMDEF)
move a0,*a6(PR_NUMDEFOLD)
movi 300,a0
move a0,*a6(PR_RANK)
rets
#*****************************************************************************
*
* INPUT: a6 = * player data
*
*-----------------------------------------------------------------------------
SUBRP save_record
callr find_record
move a10,a10
jrnz #found_match
movk 1,a0 ;1st game
move a0,*a6(PR_COUNT)
movi 50,a0
move a0,*a6(PR_LASTPLAY)
callr get_free_record
callr put_plr_record
rets
#found_match
move *a6(PR_COUNT),a0
cmpi 2047,a0
jrhs #at_max
inc a0 ;play count (check for wrap!!!)
move a0,*a6(PR_COUNT)
#at_max
move *a6(PR_LASTPLAY),a0
addi 50,a0
cmpi 2047,a0
jrle #ok
movi 2047,a0
#ok
move a0,*a6(PR_LASTPLAY) ;zero lastplay count
move *a6(PR_NUMDEF),a0
move a0,*a6(PR_NUMDEFOLD)
callr put_plr_record
rets
#*****************************************************************************
*
* decs lastplay count for all records
*
*-----------------------------------------------------------------------------
SUBRP dec_lastplay
movi NUM_PRECORDS,a11
movi RECORD_ORIGIN,a10
#dec_loop
PUSH a10,a11
callr get_temp_record ;read record
move @temp_record+PR_LASTPLAY,a0
jrz #at_min
dec a0
move a0,@temp_record+PR_LASTPLAY
callr put_temp_record ;write out record
#at_min
PULL a10,a11
addi PKDPR_SIZE*2,a10 ;cmos words
dsj a11,#dec_loop
rets
#*****************************************************************************
SUBR get_all_records
PUSH a12
movi record_sort_ptrs,a12
clr a11
movi RECORD_ORIGIN,a10
movi record_sort_ram,a9
#get_next
PUSH a9,a10,a11,a12
callr get_temp_record ;read record
PULL a9,a10,a11,a12
move a11,*a9(RS_RECORD_NUM)
move @temp_record+PR_WON,a0 ;wins
move a0,*a9(RS_WINS)
jrnz #has_wins
move @temp_record+PR_COUNT,a0 ;games played
move a0,*a9(RS_GAMES_PLAYED)
clr a0
move a0,*a9(RS_AVERAGE)
move a0,*a9(RS_TEAMSDEF)
move a0,*a9(RS_STREAK)
jruc #cont1
#has_wins
movi 1000,a1
mpyu a0,a1 ;wins*1000
move @temp_record+PR_COUNT,a0 ;games played
move a0,*a9(RS_GAMES_PLAYED)
divu a0,a1 ;wins*1000/played
move a1,*a9(RS_AVERAGE)
; move @temp_record+PR_TEAMSDEF,a1,L
; callr calc_num_defeated
move @temp_record+PR_NUMDEF,a0 ;number teams defeated
move a0,*a9(RS_TEAMSDEF)
#cont1
move @temp_record+PR_WINSTREAK,a0
move a0,*a9(RS_STREAK)
move a9,*a12+,L
addi RS_SIZE,a9
addi PKDPR_SIZE*2,a10 ;cmos words
inc a11
cmpi NUM_PRECORDS,a11
jrlo #get_next
PULL a12 ;process SP
rets
#******************************************************************************
*
* INPUT: call get_all_records to build ram copy of records
*
* sorts teams based on wins
* player must have 5 wins
* then sorted on average (wins / games played)
* then different teams defeated
*-----------------------------------------------------------------------------
SUBRP sort_wins
movi NUM_PRECORDS-1,a11
#loop1
movi NUM_PRECORDS-1,a10
movi record_sort_ptrs,a9
clr a14
#loop2
move *a9,a4,L
move *a9(20h),a5,L
move *a4(RS_WINS),a0
move *a5(RS_WINS),a1
cmp a1,a0 ;a0-a1
jrhi #no_swap
jrlo #swap
;same, so compare average
move *a4(RS_AVERAGE),a0
move *a5(RS_AVERAGE),a1
cmp a1,a0 ;a0-a1
jrhi #no_swap
jrlo #swap
;same, so compare teams defeated
move *a4(RS_TEAMSDEF),a0
move *a5(RS_TEAMSDEF),a1
cmp a1,a0 ;a0-a1
jrhs #no_swap
#swap
movk 1,a14
move a5,*a9,L
move a4,*a9(20h),L
#no_swap
;; addi RS_SIZE,a9
addi 20h,a9
dsj a10,#loop2
move a14,a14
jrz #done
dsj a11,#loop1
#done
rets
#******************************************************************************
*
* INPUT: call get_all_records to build ram copy of records
*
* sorts players based on streaks
* then on wins
* then sorted on average (wins / games played)
* then on teams defeated
*-----------------------------------------------------------------------------
SUBRP sort_streak
movi NUM_PRECORDS-1,a11
#loop1
movi NUM_PRECORDS-1,a10
movi record_sort_ptrs,a9
clr a14
#loop2
move *a9,a4,L
move *a9(20h),a5,L
move *a4(RS_STREAK),a0
move *a5(RS_STREAK),a1
cmp a1,a0 ;a0-a1
jrhi #no_swap
jrlo #swap
;same, so compare wins
move *a4(RS_WINS),a0
move *a5(RS_WINS),a1
cmp a1,a0 ;a0-a1
jrhi #no_swap
jrlo #swap
;same, so compare average
move *a4(RS_AVERAGE),a0
move *a5(RS_AVERAGE),a1
cmp a1,a0 ;a0-a1
jrhi #no_swap
jrlo #swap
;same, so compare teams defeated
move *a4(RS_TEAMSDEF),a0
move *a5(RS_TEAMSDEF),a1
cmp a1,a0 ;a0-a1
jrhs #no_swap
#swap
movk 1,a14
move a5,*a9,L
move a4,*a9(20h),L
#no_swap
addi 20h,a9
dsj a10,#loop2
move a14,a14
jrz #done
dsj a11,#loop1
#done
rets
#******************************************************************************
*
* INPUT: call get_all_records to build ram copy of records
*
* sorts teams based on games played
* then sorted on wins
* then sorted on average (wins / games played)
* then different teams defeated
*-----------------------------------------------------------------------------
SUBRP sort_exp
movi NUM_PRECORDS-1,a11
#loop1
movi NUM_PRECORDS-1,a10
movi record_sort_ptrs,a9
clr a14
#loop2
move *a9,a4,L
move *a9(20h),a5,L
move *a4(RS_GAMES_PLAYED),a0
move *a5(RS_GAMES_PLAYED),a1
cmp a1,a0 ;a0-a1
jrhi #no_swap
jrlo #swap
;same, so compare wins
move *a4(RS_WINS),a0
move *a5(RS_WINS),a1
cmp a1,a0 ;a0-a1
jrhi #no_swap
jrlo #swap
;same, so compare average
move *a4(RS_AVERAGE),a0
move *a5(RS_AVERAGE),a1
cmp a1,a0 ;a0-a1
jrhi #no_swap
jrlo #swap
;same, so compare teams defeated
move *a4(RS_TEAMSDEF),a0
move *a5(RS_TEAMSDEF),a1
cmp a1,a0 ;a0-a1
jrhs #no_swap
; jrlo #swap
#swap
movk 1,a14
move a5,*a9,L
move a4,*a9(20h),L
#no_swap
addi 20h,a9
dsj a10,#loop2
move a14,a14
jrz #done
dsj a11,#loop1
#done
rets
#******************************************************************************
*
* INPUT: call get_all_records to build ram copy of records
*
* sort teams based on different teams defeated
* then on wins
* then sorted on average (wins / games played)
*-----------------------------------------------------------------------------
SUBRP sort_champs
movi NUM_PRECORDS-1,a11
#loop1
movi NUM_PRECORDS-1,a10
movi record_sort_ptrs,a9
clr a14
#loop2
move *a9,a4,L
move *a9(20h),a5,L
move *a4(RS_TEAMSDEF),a0
move *a5(RS_TEAMSDEF),a1
cmp a1,a0 ;a0-a1
jrhi #no_swap
jrlo #swap
;same, so compare wins
move *a4(RS_WINS),a0
move *a5(RS_WINS),a1
cmp a1,a0 ;a0-a1
jrhi #no_swap
jrlo #swap
;same, so compare average
move *a4(RS_AVERAGE),a0
move *a5(RS_AVERAGE),a1
cmp a1,a0 ;a0-a1
jrhs #no_swap
; jrlo #swap
#swap
movk 1,a14
move a5,*a9,L
move a4,*a9(20h),L
;;
#no_swap
addi 20h,a9
dsj a10,#loop2
move a14,a14
jrz #done
dsj a11,#loop1
#done
rets
#******************************************************************************
*
* INPUT: call get_all_records to build ram copy of records
*
* sorts teams on average (wins / games played)
* then sorted based on games lost
* then different teams defeated
*-----------------------------------------------------------------------------
SUBRP sort_losses
movi NUM_PRECORDS-1,a11
#loop1
movi NUM_PRECORDS-1,a10
movi record_sort_ptrs,a9
clr a14
#loop2
move *a9,a4,L
move *a9(20h),a5,L
move *a4(RS_GAMES_PLAYED),a0
jrz #swap
cmpi 5,a0
jrlo #swap
move *a5(RS_GAMES_PLAYED),a0
jrz #no_swap
cmpi 5,a0
jrlo #no_swap
move *a4(RS_AVERAGE),a0
move *a5(RS_AVERAGE),a1
cmp a1,a0 ;a0-a1
jrlo #no_swap
jrhi #swap
;same, so comapre losses
move *a4(RS_GAMES_PLAYED),a0
move *a4(RS_WINS),a2
sub a2,a0
move *a5(RS_GAMES_PLAYED),a1
move *a5(RS_WINS),a2
sub a2,a1
cmp a1,a0 ;a0-a1
jrhi #no_swap
jrlo #swap
;same, so compare teams defeated
move *a4(RS_TEAMSDEF),a0
move *a5(RS_TEAMSDEF),a1
cmp a1,a0 ;a0-a1
jrlo #no_swap
jrhi #swap
#swap
movk 1,a14
move a5,*a9,L
move a4,*a9(20h),L
#no_swap
addi 20h,a9
dsj a10,#loop2
move a14,a14
jrz #done
dsj a11,#loop1
#done
rets
#******************************************************************************
*
* INPUT: defeated teams in A1
*
* RETURN: a0 = # teams defeated
*
*------------------------------------------------------------------------------
SUBR calc_num_defeated
PUSH a1,a2
clr a0
movk 27,a2
#next_team
srl 1,a1
jrnc #not_def
inc a0 ;teams defeated count ++
#not_def
dsj a2,#next_team
PULL a1,a2
rets
#*****************************************************************************
*
* clears out all cmos player records
* and puts in defaults for high score table
*
*-----------------------------------------------------------------------------
SUBRP clear_player_records
clr a0
movi PR_SIZE/16,a1
movi temp_record,a2
#clrit
move a0,*a2+
dsj a1,#clrit
movi NUM_PRECORDS,a11
movi RECORD_ORIGIN,a10
#clear_loop
PUSH a10,a11
callr put_temp_record ;write out record
PULL a10,a11
addi PKDPR_SIZE*2,a10 ;cmos words
dsj a11,#clear_loop
movk 23,a11
movi RECORD_ORIGIN,a10
movi #default_records,a9
#init_loop
PUSH a9,a10,a11
movb *a9,a0
subi 'A',a0
move a0,@temp_record+PR_INIT1
movb *a9(8h),a0
subi 'A',a0
move a0,@temp_record+PR_INIT2
movb *a9(10h),a0
subi 'A',a0
move a0,@temp_record+PR_INIT3
move *a9(20h),a0
dec a0
move a0,@temp_record+PR_MONTH
move *a9(30h),a0
dec a0
move a0,@temp_record+PR_DAY
move *a9(40h),a0
move a0,@temp_record+PR_COUNT ;games played
move *a9(50h),a0
move a0,@temp_record+PR_WON ;wins
move *a9(60h),a0
move a0,@temp_record+PR_WINSTREAK
move *a9(70h),a0,L
move a0,@temp_record+PR_TEAMSDEF,L
movi 2047,a0
move a0,@temp_record+PR_LASTPLAY
movk 'C'-'A',a0
move a0,@temp_record+PR_TMATEINIT1
move a0,@temp_record+PR_OP1INIT1
move a0,@temp_record+PR_OP2INIT1
movk 'P'-'A',a0
move a0,@temp_record+PR_TMATEINIT2
move a0,@temp_record+PR_OP1INIT2
move a0,@temp_record+PR_OP2INIT2
movk 'U'-'A',a0
move a0,@temp_record+PR_TMATEINIT3
move a0,@temp_record+PR_OP1INIT3
move a0,@temp_record+PR_OP2INIT3
movk 3,a0 ;chicago
move a0,@temp_record+PR_PTEAM
movk 7,a0 ;detroit
move a0,@temp_record+PR_OTEAM
movi 137,a0
move a0,@temp_record+PR_PSCORE
movi 86,a0
move a0,@temp_record+PR_OSCORE
callr put_temp_record
PULL a9,a10,a11
addi 9*10h,a9
addi PKDPR_SIZE*2,a10 ;cmos words
dsj a11,#init_loop
rets
RECMAC .macro NAME,MONTH,DAY,PLAYED,WINS,STREAK,DEFEATED
.string ":NAME:"
.word :MONTH:,:DAY:
.word :PLAYED:,:WINS:,:STREAK:
.long :DEFEATED:
.endm
#default_records
RECMAC "MDP ",01,13, 20,8, 1, 000000000000001001000000000b ;1
RECMAC "DOZ ",12,31, 16,9, 1, 100000001000000000000000000b ;2
RECMAC "JCV ",06,27, 9,4, 2, 000000100000000000000000000b ;3
RECMAC "JMS ",02,22, 16,6, 1, 000000001000000010000000001b ;4
RECMAC "JFL ",04,16, 15,7, 1, 000000100000000100000000000b ;5
RECMAC "JRN ",06,18, 21,7, 1, 000000010000000000001000000b ;6
RECMAC "GET ",10,19, 20,9, 2, 101000010001000010000100000b ;7
RECMAC "TJC ",10,12, 15,9, 4, 000000000000100000000000000b ;8
RECMAC "GNP ",10,08, 14,8, 2, 001000000100010000100010000b ;9
RECMAC "JWH ",09,20, 13,9, 1, 000000010000100000000110000b ;10
RECMAC "CMM ",07,02, 11,5, 1, 100000100000000000001000000b ;11
RECMAC "MJT ",03,22, 28,17, 1, 000001001001010001000001000b ;12
; RECMAC "MJT ",03,22, 28,17, 1, 111111111111111111111111110b
RECMAC "RJR ",01,17, 14,12, 1, 100001000100100100000100000b ;13
RECMAC "SAL ",02,01, 13,10, 1, 000001001100010000010000000b ;14
RECMAC "TWG ",12,07, 12,9, 1, 100000001100000010000000000b ;15
RECMAC "JMC ",08,05, 19,12, 3, 001000010010010010001000001b ;16
.byte 'S','L','A'+26
.word 6,24
.word 25,15
.word 0
.long 010010011011100110100100110b ;17
; RECMAC "SLX ",06,24, 32,22, 000000001000000000000000000b ;17
RECMAC "WMN ",11,11, 15,8, 4, 001000010010010000001000001b ;18
RECMAC "DIE ",02,23, 12,2, 1, 000000010000000000001000000b ;19
RECMAC "EJB ",02,23, 19,8, 2, 010100010000100010001000000b ;20
RECMAC "CRL ",01,01, 5,5, 5, 000000010001000100001000001b ;21
RECMAC "SAN ",01,01, 5,5, 2, 000000010001000100001000001b ;22
RECMAC "SNO ",01,03, 11,5, 3, 000000010001000100001000001b ;23
.even
#*****************************************************************************
*
* INPUT: a10 = * cmos record to delete
SUBRP clear_record
clr a0
move a0,@temp_record+00h,L
move a0,@temp_record+20h,L
move a0,@temp_record+40h,L
callr put_temp_record ;write out record
rets
#*****************************************************************************
*
* INPUT: a0 = hiscore type
*
* 0 = GREATEST PLAYERS
* 1 = EXPERIENCED PLAYERS
* 2 = GRAND CHAMPIONS
* 3 = MOST POPULAR TEAMS
*
*-----------------------------------------------------------------------------
.asg 24,YOFF
.asg 64,COL0 ;#
.asg COL0+29,COL0b ;1-8
.asg 150,COL1 ;initials
.asg 230,COL2 ;wins
.asg COL2+2,COL3 ;dash
.asg COL3+16,COL4 ;losses
.asg 310,COL5 ;average
SUBR show_hiscore
andi 7,a0
move a0,@hiscore_type
callr get_all_records
calla display_blank
calla WIPEOUT ;CLEAN SYSTEM OUT
movk 1,a0 ;page flipping on
move a0,@dpageflip
movi 4<<10+4<<5+7,a0
move a0,@IRQSKYE
movi SCRNEND,a0 ;[256,405]
move a0,@SCRNLR,L
clr a0
move a0,@WORLDTLX,L
move a0,@WORLDTLY,L
SLEEPK 2
movi #hiscore_mod,a0
move a0,@BAKMODS,L
calla BGND_UD1
movi [10,7],a8 ;START AT COLOR 10, CYCLE 7 COLORS
movi BLUE,a9 ;PAL NAME
movi COLTAB2,a10 ;TABLE TO CYCLE WITH
movk 2,a11 ;RATE OF CYCLE IN TICKS
CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE
; movi [10,7],a8 ;START AT COLOR 10, CYCLE 7 COLORS
; movi REDPAL,a9 ;PAL NAME
; movi COLTAB2,a10 ;TABLE TO CYCLE WITH
; movk 4,a11 ;RATE OF CYCLE IN TICKS
; CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE
movi OSGCYC8,a0
calla pal_getf
movi OSGCYC9,a0
calla pal_getf
movi OSGCYC10,a0
calla pal_getf
.asg 1,SPD
movk SPD,a8
movi OSGCYC1,a9
movi #morf_plist1,a10
movi morfpal1,a11
CREATE0 morf_pal
movk SPD,a8
movi OSGCYC2,a9
movi #morf_plist2,a10
movi morfpal2,a11
CREATE0 morf_pal
movk SPD,a8
movi OSGCYC3,a9
movi #morf_plist3,a10
movi morfpal3,a11
CREATE0 morf_pal
movk SPD,a8
movi OSGCYC4,a9
movi #morf_plist4,a10
movi morfpal4,a11
CREATE0 morf_pal
movk SPD,a8
movi OSGCYC5,a9
movi #morf_plist5,a10
movi morfpal5,a11
CREATE0 morf_pal
movk SPD,a8
movi OSGCYC6,a9
movi #morf_plist6,a10
movi morfpal6,a11
CREATE0 morf_pal
movk SPD,a8
movi OSGCYC7,a9
movi #morf_plist7,a10
movi morfpal7,a11
CREATE0 morf_pal
movk 4,a8
movi OSGCYC8,a9
movi #morf_plist8,a10
movi morfpal8,a11
CREATE0 morf_pal
movk 4,a8
movi OSGCYC9,a9
movi #morf_plist9,a10
movi morfpal9,a11
CREATE0 morf_pal
movk 4,a8
movi OSGCYC10,a9
movi #morf_plist10,a10
movi morfpal10,a11
CREATE0 morf_pal
clr a0
#loopit
move a0,@hiscore_type
movi TYPTEXT,a0 ;delete text
calla obj_del1c
callr print_stuff ;heading and hiscore
move @hiscore_type,a0
jrnz #no_unblank
SLEEPK 7
movk 1,a0
move a0,@DISPLAYON
SLEEPK 2
calla display_unblank
SLEEPK 15
#no_unblank
SLEEP TSEC
movi 4*60,a10
#delay
SLEEPK 1
calla get_all_buttons_cur2
jrnz #exit0
dsj a10,#delay
jruc #exit
#exit0
clr a0
move a0,@SOUNDSUP ;turn all sounds on
SOUND1 bounce_snd
movk 1,a0
.ref SOUNDSUP
move a0,@SOUNDSUP ;turn all sounds off
#exit
move @hiscore_type,a0
inc a0
cmpi 5,a0
jrlt #loopit
RETP
print_stuff
movi #heading1_setup,a2
calla setup_message
movi TYPTEXT,a0
move a0,@mess_objid
move @hiscore_type,a0
sll 5,a0 ;x 32 bits
PUSH a0
addi #headings1,a0
move *a0,a4,L
calla print_string_C2
movi #heading2_setup,a2
calla setup_message
movi TYPTEXT,a0
move a0,@mess_objid
PULL a0
addi #headings2,a0
move *a0,a4,L
calla print_string_C2
move @hiscore_type,a0
sll 5,a0 ;x 32 bits
addi #sort_routines,a0
move *a0,a0,L
call a0
move @hiscore_type,a0
sll 5,a0 ;x 32 bits
addi #print_methods,a0
move *a0,a0,L
call a0
rets
.def COLTAB2
COLTAB2
.word 0079fh,0077eh,0077eh,0035eh,0033eh,0031eh,002feh
.word 002feh,002deh,002beh,002beh,0029eh,0029eh,0027dh,0025dh
.word 0025dh,0023dh,0023dh,0021eh,0023eh,0025eh,0027eh,0029eh
.word 0029eh,002beh,002deh,002feh,0033eh,0035eh,0077eh,0079eh
.word 0079eh,0037eh,0037eh,0035eh,0033eh,0033eh,0031eh,0031eh
.word 002feh,002feh,0131eh,0273eh,03b5eh,04f9fh,063bfh,077ffh
.word 063bfh,04f9fh,03b5eh,0273eh,0131eh,002feh,002feh,0031eh
.word 0031eh,0033eh,0033eh,0035eh,0037eh,0037eh,0079eh,0079eh
.word 0079fh,0077eh,0077eh,0035eh,0033eh,0031eh,002feh
.word 002feh,002deh,002beh,002beh,0029eh,0029eh,0027dh,0025dh
.word 0025dh,0023dh,0023dh,0021eh,0023eh,0025eh,0027eh,0029eh
.word 0029eh,002beh,002deh,002feh,0033eh,0035eh,0077eh,0079eh
.word 0079eh,0037eh,0037eh,0035eh,0033eh,0033eh,0031eh,0031eh
.word 002feh,002feh,0131eh,0273eh,03b5eh,04f9fh,063bfh,077ffh
.word 063bfh,04f9fh,03b5eh,0273eh,0131eh,002feh,002feh,0031eh
.word 0031eh,0033eh,0033eh,0035eh,0037eh,0037eh,0079eh,0079eh
.word -1
#morf_plist1
.long GOLD
.long 63
.long WHITE2PAL
.long GOLD
.long 63
.long WHITEPAL
.long GOLD
.long 0
#morf_plist2
.long GOLD
.long 55
.long WHITE2PAL
.long GOLD
.long 63
.long WHITEPAL
.long GOLD
.long 8
.long 0
#morf_plist3
.long GOLD
.long 48
.long WHITE2PAL
.long GOLD
.long 63
.long WHITEPAL
.long GOLD
.long 15
.long 0
#morf_plist4
.long GOLD
.long 41
.long WHITE2PAL
.long GOLD
.long 63
.long WHITEPAL
.long GOLD
.long 22
.long 0
#morf_plist5
.long GOLD
.long 34
.long WHITE2PAL
.long GOLD
.long 63
.long WHITEPAL
.long GOLD
.long 29
.long 0
#morf_plist6
.long GOLD
.long 27
.long WHITE2PAL
.long GOLD
.long 63
.long WHITEPAL
.long GOLD
.long 36
.long 0
#morf_plist7
.long GOLD
.long 20
.long WHITE2PAL
.long GOLD
.long 63
.long WHITEPAL
.long GOLD
.long 43
.long 0
#morf_plist10
.long LGMDGLD
.long 66
.long LGMDGLDlt
.long LGMDGLD
.long 0
#morf_plist9
.long LGMDGLD
.long 54
.long LGMDGLDlt
.long LGMDGLD
.long 12
.long 0
#morf_plist8
.long LGMDGLD
.long 42
.long LGMDGLDlt
.long LGMDGLD
.long 24
.long 0
******************************************************************************
.even
#print_methods
.long #method1 ;0 (greatest players)
.long #method2b ;1 (grand champions)
.long #method2 ;2 (experienced players)
.long #method1b ;3 (win streak)
.long #method3 ;4 (most popular teams)
.long #method1 ;5
.long #method1 ;6
.long #method1 ;7 (worst players!)
******************************************************************************
*
* prints rank, initials, win-loss, average
*
*-----------------------------------------------------------------------------
#method1
movi LN0_setup,a2
calla setup_message
movi TYPTEXT,a0
move a0,@mess_objid
movk 8,a10
movi record_sort_ptrs,a9
#next_player
PUSH a9,a10
movi GOLD,a0
move a0,@message_palette,L
movk 9,a0
sub a10,a0 ;1-8
movk 8,a1 ;max value
calla dec_to_asc
calla copy_string
movi COL0b,a0
move a0,@mess_cursx
calla print_string_C
movi COL0,a0
move a0,@mess_cursx
movi #str_num,a4
calla print_string2
move *a9,a8,L
move *a8(RS_RECORD_NUM),a0
movi PKDPR_SIZE*2,a1 ;cmos words
mpyu a0,a1
addi RECORD_ORIGIN,a1
PUSH a10
move a1,a10
callr get_temp_record
PULL a0
sll 5,a0 ;x 32 bits
addi #winpals-20h,a0
move *a0,a0,L
move a0,@message_palette,L
movi temp_record+PR_INIT1,a4 ;* src initials
movi message_buffer,a3 ;* string dest
calla get_initials_string
movi COL1,a0
move a0,@mess_cursx
calla print_string_C
move @temp_record+PR_WON,a0
movi 999,a1 ;max value
calla dec_to_asc
calla copy_string
movi COL2,a0
move a0,@mess_cursx
calla print_string_R
movi COL3,a0
move a0,@mess_cursx
movi #str_dash,a4
calla print_string2
move @temp_record+PR_LOST,a0
movi 999,a1 ;max value
calla dec_to_asc
calla copy_string
movi COL4,a0
move a0,@mess_cursx
calla print_string
movi #str_dot,a4
calla copy_rom_string
move *a8(RS_AVERAGE),a0
jrnz #not_zip
movi #str_0,a4
calla copy_rom_string
jruc #skip1
#not_zip
cmpi 1000,a0
jrlo #not_max
movi #str_1000,a4
calla copy_rom_string
movi COL5-9,a0
move a0,@mess_cursx
jruc #skip2
#not_max
movi 999,a1 ;max value
calla dec_to_pct
calla concat_string
#skip1
movi COL5,a0
move a0,@mess_cursx
#skip2
calla print_string
move @mess_cursy,a0
addi YOFF,a0
move a0,@mess_cursy
PULL a9,a10
; addi RS_SIZE,a9
addi 20h,a9
dsj a10,#next_player
rets
#winpals
.long OSGCYC7
.long OSGCYC6
.long OSGCYC5
.long OSGCYC4
.long OSGCYC3
.long OSGCYC2
.long OSGCYC1
.long BLUE
******************************************************************************
*
* prints rank, initials, streak, average
*
*-----------------------------------------------------------------------------
#method1b
movi LN0_setup,a2
calla setup_message
movi TYPTEXT,a0
move a0,@mess_objid
movk 8,a10
movi record_sort_ptrs,a9
#next_player1b
PUSH a9,a10
movi GOLD,a0
move a0,@message_palette,L
movk 9,a0
sub a10,a0 ;1-8
movk 8,a1 ;max value
calla dec_to_asc
calla copy_string
movi COL0b,a0
move a0,@mess_cursx
calla print_string_C
movi COL0,a0
move a0,@mess_cursx
movi #str_num,a4
calla print_string2
move *a9,a8,L
move *a8(RS_RECORD_NUM),a0
movi PKDPR_SIZE*2,a1 ;cmos words
mpyu a0,a1
addi RECORD_ORIGIN,a1
PUSH a10
move a1,a10
callr get_temp_record
PULL a0
sll 5,a0 ;x 32 bits
addi #streakpals-20h,a0
move *a0,a0,L
move a0,@message_palette,L
movi temp_record+PR_INIT1,a4 ;* src initials
movi message_buffer,a3 ;* string dest
calla get_initials_string
movi COL1,a0
move a0,@mess_cursx
calla print_string_C
movi COL3+11,a0
move a0,@mess_cursx
move @temp_record+PR_WINSTREAK,a0
movi 63,a1 ;max value
calla dec_to_asc
calla copy_string
movi #str_wins,a4
calla concat_rom_string
calla print_string_C
.asg 96,OFFX
move @temp_record+PR_WON,a0
movi 999,a1 ;max value
calla dec_to_asc
calla copy_string
movi COL2+OFFX,a0
move a0,@mess_cursx
calla print_string_R
movi COL3+OFFX,a0
move a0,@mess_cursx
movi #str_dash,a4
calla print_string2
move @temp_record+PR_LOST,a0
movi 999,a1 ;max value
calla dec_to_asc
calla copy_string
movi COL4+OFFX,a0
move a0,@mess_cursx
calla print_string
move @mess_cursy,a0
addi YOFF,a0
move a0,@mess_cursy
PULL a9,a10
; addi RS_SIZE,a9
addi 20h,a9
dsj a10,#next_player1b
rets
#str_wins
.string " WINS",0
#streakpals
.long OSGCYC7
.long OSGCYC6
.long OSGCYC5
.long OSGCYC4
.long OSGCYC3
.long OSGCYC2
.long OSGCYC1
.long BLUE
******************************************************************************
*
* prints rank, initials, games played, average
*
*-----------------------------------------------------------------------------
#method2
.asg 153,XCOL1 ;initials
.asg 238,XCOL3 ;plays
.asg 310,XCOL5 ;average
movi LN0_setup,a2
calla setup_message
movi TYPTEXT,a0
move a0,@mess_objid
movk 8,a10
movi record_sort_ptrs,a9
#next_player2
PUSH a9,a10
movi GOLD,a0
move a0,@message_palette,L
movk 9,a0
sub a10,a0 ;1-8
movk 8,a1 ;max value
calla dec_to_asc
calla copy_string
movi COL0b,a0
move a0,@mess_cursx
calla print_string_C
movi COL0,a0
move a0,@mess_cursx
movi #str_num,a4
calla print_string2
move *a9,a8,L
move *a8(RS_RECORD_NUM),a0
movi PKDPR_SIZE*2,a1 ;cmos words
mpyu a0,a1
addi RECORD_ORIGIN,a1
PUSH a10
move a1,a10
callr get_temp_record
PULL a0
sll 5,a0 ;x 32 bits
addi #exppals-20h,a0
move *a0,a0,L
move a0,@message_palette,L
movi temp_record+PR_INIT1,a4 ;* src initials
movi message_buffer,a3 ;* string dest
calla get_initials_string
movi XCOL1,a0
move a0,@mess_cursx
calla print_string_C
move @temp_record+PR_COUNT,a0
movi 999,a1 ;max value
calla dec_to_asc
calla copy_string
movi XCOL3,a0
move a0,@mess_cursx
calla print_string_C
movi #str_dot,a4
calla copy_rom_string
move *a8(RS_AVERAGE),a0
jrnz #not_zip2
movi #str_0,a4
calla copy_rom_string
jruc #skip1b
#not_zip2
cmpi 1000,a0
jrlo #not_max2
movi #str_1000,a4
calla copy_rom_string
movi XCOL5-9,a0
move a0,@mess_cursx
jruc #skip2b
#not_max2
movi 999,a1 ;max value
calla dec_to_pct
calla concat_string
#skip1b
movi XCOL5,a0
move a0,@mess_cursx
#skip2b
calla print_string
move @mess_cursy,a0
addi YOFF,a0
move a0,@mess_cursy
PULL a9,a10
addi 20h,a9
dsj a10,#next_player2
rets
#exppals
.long OSGCYC7
.long OSGCYC6
.long OSGCYC5
.long OSGCYC4
.long OSGCYC3
.long OSGCYC2
.long OSGCYC1
.long BLUE
******************************************************************************
*
* initials only
* champions screen (only prints 3 players)
*
*-----------------------------------------------------------------------------
#method2b
.asg 132,LCOL1
.asg 230,LCOL2
.asg 65,YOFF2
movi LN0b_setup,a2
calla setup_message
movi TYPTEXT,a0
move a0,@mess_objid
movk 3,a10
movi record_sort_ptrs,a9
#next_player2b
PUSH a9,a10
movi LGMDGLD,a0
move a0,@message_palette,L
movi LCOL1-38,a0
move a0,@mess_cursx
movi #str_num,a4
calla print_string_C2
movk 4,a0
sub a10,a0 ;1-3
movk 3,a1 ;max value
calla dec_to_asc
calla copy_string
movi LCOL1,a0
move a0,@mess_cursx
calla print_string_C
move *a9,a8,L
move *a8(RS_RECORD_NUM),a0
movi PKDPR_SIZE*2,a1 ;cmos words
mpyu a0,a1
addi RECORD_ORIGIN,a1
PUSH a10
move a1,a10
callr get_temp_record
movi LCOL2,a0
move a0,@mess_cursx
PULL a0
sll 5,a0 ;x 32 bits
addi #champals-20h,a0
move *a0,a0,L
move a0,@message_palette,L
move @temp_record+PR_NUMDEF,a0
cmpi 27,a0
jrge #is_champ
movi LGMDGLD,a0
move a0,@message_palette,L
movi #str_none,a4
calla print_string_C2
jruc #not_champ
#is_champ
movi temp_record+PR_INIT1,a4 ;* src initials
movi message_buffer,a3 ;* string dest
calla get_initials_string
calla print_string_C
#not_champ
move @mess_cursy,a0
addi YOFF2,a0
move a0,@mess_cursy
PULL a9,a10
addi 20h,a9
dsj a10,#next_player2b
rets
#str_none
.string ". . .",0
.even
#champals
.long OSGCYC8
.long OSGCYC9
.long OSGCYC10
******************************************************************************
*
* prints rank, team name
*
*-----------------------------------------------------------------------------
#method3
.asg 115,TCOL1
movi LN0_setup,a2
calla setup_message
movi TYPTEXT,a0
move a0,@mess_objid
movk 8,a10
movi sorted_teams,a9
#next_team
PUSH a9,a10
movi GOLD,a0
move a0,@message_palette,L
PUSH a9
movk 9,a0
sub a10,a0 ;1-8
movk 8,a1 ;max value
calla dec_to_asc
calla copy_string
movi COL0b,a0
move a0,@mess_cursx
calla print_string_C
movi COL0,a0
move a0,@mess_cursx
movi #str_num,a4
calla print_string2
move a10,a0
sll 5,a0 ;x 32 bits
addi #teampals-20h,a0
move *a0,a0,L
move a0,@message_palette,L
movi TCOL1,a0
move a0,@mess_cursx
PULL a9
move *a9,a0 ;team number (0-26)
sll 5,a0
addi #team_names,a0
move *a0,a4,L
calla print_string2
move @mess_cursy,a0
addi YOFF,a0
move a0,@mess_cursy
PULL a9,a10
addi 10h,a9
dsj a10,#next_team
rets
#teampals
.long OSGCYC7
.long OSGCYC6
.long OSGCYC5
.long OSGCYC4
.long OSGCYC3
.long OSGCYC2
.long OSGCYC1
.long BLUE
******************************************************************************
#sort_routines
.long #sort_wins ;0 (greatest players)
.long #sort_champs ;1 (grand champions)
.long #sort_exp ;2 (experienced players)
.long #sort_streak ;3 (win streaks)
.long #sort_teams ;4 (most popular teams)
.long #sort_wins ;5
.long #sort_wins ;6
.long #sort_losses ;7 (worst players!)
#sort_wins
callr sort_wins
rets
#sort_exp
callr sort_exp
rets
#sort_champs
callr sort_champs
rets
#sort_losses
callr sort_losses
rets
#sort_teams
calla get_teams_pop
rets
#sort_streak
calla sort_streak
rets
LN0_setup
RJR_STR osgemd_ascii,6,0,200,50,GOLD,0
LN0b_setup
RJR_STR lgmd_ascii,6,2,200,50,LGMDGLD,0
#heading1_setup
RJR_STR osgemd_ascii,6,0,200,8,ORANGPAL,0
#heading2_setup
RJR_STR sgmd8_ascii,3,0,200,29+1,SGMD8YEL,0
#hiscore_mod
.long hiscoreBMOD
.word 0,0
.long 0
#headings1
.long #hd1,#hd2,#hd3,#hd4
.long #hd5,#hd6,#hd1,#hd1
#headings2
.long #hd21,#hd22,#hd23,#hd24
.long #hd25,#hd26,#hd21,#hd21
#hd1 .string "GREATEST PLAYERS",0
#hd2 .string "GRAND CHAMPIONS",0
#hd3 .string "EXPERIENCED PLAYERS",0
#hd4 .string "LONGEST WINNING STREAK",0
#hd5 .string "MOST POPULAR TEAMS",0
#hd6 .string "WORST PLAYERS!",0
#hd21 .string "( most games won )",0
#hd22 .string "( defeated all 27 nba teams )",0
#hd23 .string "( most games played )",0
#hd24 .string "( consecutive wins )",0
#hd25 .string "( at this location )",0
#hd26 .string "( worst average )",0
#str_dash
.string "-",0
#str_dot
.string ".",0
#str_1000
.string "1.000",0
#str_0
.string ".000",0
#str_num
.string "#",0
.even
#team_names
.long #t0,#t1,#t2,#t3
.long #t4,#t5,#t6,#t7
.long #t8,#t9,#t10,#t11
.long #t12,#t13,#t14,#t15
.long #t16,#t17,#t18,#t19
.long #t20,#t21,#t22,#t23
.long #t24,#t25,#t26
#t0 .string "ATLANTA HAWKS",0
#t1 .string "BOSTON CELTICS",0
#t2 .string "CHARLOTTE HORNETS",0
#t3 .string "CHICAGO BULLS",0
#t4 .string "CLEVELAND CAVALIERS",0
#t5 .string "DALLAS MAVERICKS",0
#t6 .string "DENVER NUGGETS",0
#t7 .string "DETROIT PISTONS",0
#t8 .string "GOLDEN STATE WARRIORS",0 ;ok
#t9 .string "HOUSTON ROCKETS",0
#t10 .string "INDIANA PACERS",0
#t11 .string "L.A. CLIPPERS",0
#t12 .string "L.A. LAKERS",0
#t13 .string "MIAMI HEAT",0
#t14 .string "MILWAUKEE BUCKS",0
;#t15 .string "MINNESOTA TIMBERWOLVES",0 ;too long
#t15 .string "MINNESOTA TIMBERWLVS",0
#t16 .string "NEW JERSEY NETS",0
#t17 .string "NEW YORK KNICKS",0
#t18 .string "ORLANDO MAGIC",0
#t19 .string "PHILADELPHIA 76ERS",0
#t20 .string "PHOENIX SUNS",0
#t21 .string "PORTLAND TRAILBLAZERS",0
#t22 .string "SACRAMENTO KINGS",0
#t23 .string "SAN ANTONIO SPURS",0
#t24 .string "SEATTLE SUPERSONICS",0
#t25 .string "UTAH JAZZ",0
#t26 .string "WASHINGTON BULLETS",0
.even
#*****************************************************************************
RECORDS_ONSCREEN equ 10
SUBRP show_player_records
calla display_blank
calla WIPEOUT ;CLEAN SYSTEM OUT
movk 1,a0 ;page flipping on
move a0,@dpageflip
movi SCRNEND,a0 ;[256,405]
move a0,@SCRNLR,L
clr a0
move a0,@WORLDTLX,L
move a0,@WORLDTLY,L
.asg 80,COL0
.asg 90,COL1
.asg 170,COL2
.asg 215,COL3
.asg 280,COL4
.asg 310,COL5
.asg 22,YOFF
movi osgemd_ascii,a0
; movi sgmd8_ascii,a0
move a0,@message_ascii,L ;* ascii lookup table
movi TYPTEXT,a0
move a0,@mess_objid
movk 10,a0
move a0,@mess_space_width ;space char width
clr a0
move a0,@mess_spacing ;spacing between chars
; movi GOLD,a0
; movi SGMD8YEL,a0
movi OSGEMD,a0
move a0,@message_palette,L
clr a4
#display_loop
PUSHP a4
callr display_audits
movk 1,a0
move a0,@DISPLAYON
SLEEPK 2
calla display_unblank
movk 6,a10
#loopy
SLEEPK 1
calla get_all_sticks_down2
move a0,a0
jrnz #got_stick
dsj a10,#loopy
#wait_for_input
SLEEPK 1
calla get_all_buttons_cur2
jrnz #exit
#got_stick
PULLP a4
calla get_all_sticks_cur2
btst 1,a0
jrz #no_down
move a4,a1
addi RECORDS_ONSCREEN,a1
cmpi NUM_PRECORDS,a1
jrhs #no_down
addi RECORDS_ONSCREEN,a4
jruc #display_loop
#no_down
btst 0,a0
jrz #no_up
move a4,a4
jrz #no_up
subi RECORDS_ONSCREEN,a4
jruc #display_loop
#no_up
PUSHP a4
jruc #wait_for_input
#exit
PULLP a4
RETP
#*****************************************************************************
*
* INPUT: a4 = starting record (0 - NUM_PRECORDS-1)
*
*-----------------------------------------------------------------------------
SUBRP display_audits
movi TYPTEXT,a0 ;delete text
calla obj_del1c
movi 20,a0
move a0,@mess_cursy ;message cursor pos Y
movi PKDPR_SIZE*2,a1 ;cmos words
mpyu a4,a1
movi RECORD_ORIGIN,a10
add a1,a10
movi RECORDS_ONSCREEN,a6
#search_loop
PUSH a6,a10
PUSH a4
callr get_temp_record ;data in temp_record
movi str_obr,a4
calla copy_rom_string
clr a0
move a0,@mess_cursx ;message cursor pos X
PULL a1
move a1,a0
inc a1
PUSH a1
movi 999,a1 ;max value
calla dec_to_asc
calla concat_string
movi str_cbr,a4
calla concat_rom_string
calla print_string
movi temp_record+PR_INIT1,a4 ;* src initials
movi message_buffer,a3 ;* string dest
calla get_initials_string
movi COL2,a0
move a0,@mess_cursx ;message cursor pos X
move @temp_record+PR_COUNT,a0
jrnz #not_empty
movi str_unused,a4
calla print_string_C2
jruc #skipit
#not_empty
calla print_string_C ;centered
movi COL0,a0
move a0,@mess_cursx ;message cursor pos X
move @temp_record+PR_COUNT,a0
movi 2047,a1 ;max value
calla dec_to_asc
calla copy_string
calla print_string
movi COL4,a0
move a0,@mess_cursx ;message cursor pos X
move @temp_record+PR_LASTPLAY,a0
movi 2047,a1 ;max value
calla dec_to_asc
calla copy_string
calla print_string_R
#skipit
move @mess_cursy,a0 ;message cursor pos Y
addi YOFF,a0
move a0,@mess_cursy ;message cursor pos Y
PULL a4
PULL a6,a10
addi PKDPR_SIZE*2,a10 ;cmos words
dsj a6,#search_loop
rets
str_num .string "#",0
str_obr .string "(",0
str_cbr .string ")",0
str_sp .string " ",0
str_2sp .string " ",0
str_unused
.string "UNUSED",0
#months
.string "JAN",0
.string "FEB",0
.string "MAR",0
.string "APR",0
.string "MAY",0
.string "JUN",0
.string "JUL",0
.string "AUG",0
.string "SEP",0
.string "OCT",0
.string "NOV",0
.string "DEC",0
******************************************************************************
;end