123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256 |
- * 1415 280384
- *
- ** HISCORE.S
- ** ASTEROIDS FOR THAT DAMN ATARI 3600, OR IS IT 7000, I FORGET. *
- ** WRONG!! IT'S THE ATARI 7800 PRO SYSTEM. TA DA! *
- ** THIS FILE CONTAINS THE HANDLERS FOR THE INTERFACE TO THE HISCORE CART *
- ** UPDATED TO HSC REV 7.X *
- * HSCINIT -- INITIALIZE HIGH SCORE CART DATA. DOES HSCSTAT.
- * RETURNS > 0 IF NO HSC EXISTS, < 0 IF ENTRY NOT FOUND, ZERO IF OK
- HSCINIT:
- JSR HSCSETDM ;SET UP DIFF/MODE LEVEL ARGUMENT
- HSCINIT2:
- LDA #$C6 ;CHECK EXISTANCE.
- CMP $3900
- BNE NOHSC
- LDA #$FE
- CMP $3904
- BNE NOHSC
- LDX #$0E ;COPY HSC ROM INTO RAM ARGUMENT BLOCK
- HSCCOPY:
- LDA HSCROM,X
- STA HSCRAM,X
- DEX
- BPL HSCCOPY
- LDA TEMP ;INSTALL LEVEL ARGUMENT
- ASL
- ASL
- STA HSCRAM+2
- ; LDX #L(HSCRAM) ;WHY BOTHER; HSC TRASHES X ANYWAY
- LDY #HSCRAM >> 8
- JMP HSCSTAT
- NOHSC:
- LDA #1 ;POSITIVE NUMBER = NO HIGH SCORE
- RTS
- * HSSUCK -- SUCK IN HIGH SCORE, IF AVAILABLE. IF NOT ZAP IT OUT.
- HSCSUCK:
- JSR ZEROHS ;FIRST ZAP IT OUT
- JSR HSCINIT ;SUCK IN HIGH SCORE, IF AVAILABLE
- BNE NOHSC
- LDX #3
- SUCKHSIN:
- LDA HSCRAM+$F,X
- STA HISCORE,X
- DEX
- BPL SUCKHSIN
- RTS
- * HSCSHOW -- DISPLAY ONE DIFF/MODE LEVEL
- HSCSHOW:
- JSR HSCINIT2 ;USE INIT2 SO NOT TO DISTURB TEMP VAL
- BNE NOHSC
- LDX HSCRAM+4 ;COMPUTE DISPLAY TIMES FOR EACH LEVEL
- CPX #5 ;USE MINIMUM TIME IF >= 5 ENTRIES
- BCC ZNHSOK
- LDX #5
- ZNHSOK:
- LDA HSTIME,X ;TABLE LOOKUP FOR DISPLAY TIME
- STA HSCRAM+$E
- LDA TEMP ;TEMP CONTAINS THE DIFF/MODE LEVEL
- ASL ; SHIFT UP FOR ARG FORMAT
- ASL
- STA HSCRAM+2
- JSR HSCDM ;PUT UP OUR OWN DIFFICULTY/MODE NAMES
- JSR ONTITLE ;PUT UP THE LOGO
- JSR WAITLOAD ;WAIT FOR LOADER TO UPDATE
- LDA #$60 ;TURN OFF DMA NOW, SO WE DON'T GET
- STA CTRL ; A GLITCHY SCREEN IN BETWEEN
- LDA #$40 ;TELL NMI HANDLER TO DO FANCY
- STA NMICTRL ; ALTERNATING READ MODES ON CTRL
- ; JSR OLDBUTON ;GO BACK TO ONE BUTTON MODE
- ; LDX #L(HSCRAM)
- LDY #HSCRAM>>8
- JSR HSCATRCT
- ; JSR NEWBUTON ;REVERT TO WHATEVER MODE WAS BEFORE
- RTS
- * HSCDOENT -- DO CALLS TO HSCENTER FOR ALL PLAYERS WHAT NEEDS IT
- HSCDOENT:
- JSR HSCINIT ;SET UP HSC
- BEQ ZHSENTOK ;DOES THE HSC EXIST?
- BPL NOHSC ;NO. DO NOTHING.
- ZHSENTOK:
- LDA HSCRAM+2 ;SET UP TEMP TO DM VALUE
- LSR
- LSR
- STA TEMP
- JSR HSCDM ;PUT UP DIFF/MODE INDICATORS
- JSR ONTITLE ;PUT UP THE LOGO
- LDA MODE ;SET UP ENTER DELAY FOR THIS MODE
- LSR
- BCC ZNOWAIT ;ON EVEN MODES, DON'T WAIT HERE.
- LDA #10 ;ON ODD MODES, WAIT 10 SECONDS. THERE
- STA HSCRAM+$E ; IS ONLY ONE SCORE BEING ENTERED.
- ZNOWAIT:
- LDA MODE ;IF IN ONE PLAYER MODE JUST
- BMI ZHSCENT ; DO THIS ONE.
- LDX #0 ;PICK HIGHER OF THE TWO FIRST!
- ZCOMPLOP:
- LDA SCORE,X ; COMPARE EACH DIGIT OF P1 SCORE
- CMP SCORE+4,X ; AGAINST EACH DIGIT OF P2 SCORE
- BEQ ZP2EQU ; P1 EQUALS P2, MOVE ON TO NEXT DIGIT
- BCS ZPNGO ; P1 > P2, LET P1 ENTER
- ZP2GO: ; P2 > P1, LET P2 ENTER
- INC HSCRAM+2 ; TOGGLE PLAYER BIT TO P2
- LDA #SCORE2 & 255 ; CHANGE TO P2 SCORE
- STA HSCRAM+8
- ZPNGO:
- LDA MODE ;IN TEAMPLAY MODE, USE COMBINED SCORE
- CMP #1
- BNE ZHSCENT
- LDA #COMBSCOR & 255
- STA HSCRAM+8 ;LOW ADDR OF SCORE PTR. HI ADDR = 0 ZP
- ZHSCENT:
- JSR WAITLOAD ;WAIT FOR LOADER TO UPDATE
- LDA #$60 ;TURN OFF DMA NOW, SO WE DON'T GET
- STA CTRL ; A GLITCHY SCREEN IN BETWEEN
- LDA #$40 ;TELL NMI HANDLER TO DO FANCY
- STA NMICTRL ; ALTERNATING READ MODES ON CTRL
- ; JSR OLDBUTON ;GO BACK TO ONE BUTTON MODE
- ; LDX #L(HSCRAM)
- LDY #HSCRAM >> 8
- JSR HSCENTER
- ; JSR NEWBUTON ;REVERT TO WHATEVER MODE WAS BEFORE
- LDA HSCRAM+$E ;CHECK DELAY TIME:
- BNE ZHSCRTS ; IF NOT ZERO, WE'RE DONE.
- LDA #10 ;SET DELAY TIME TO FINAL DELAY.
- STA HSCRAM+$E
- LDA HSCRAM+2 ;CHECK PLAYER BIT TO SEE WHICH PLAYER
- LSR
- BCC ZP2GO ;IF WE JUST DID P1, THEN DO P2
- ZP1GO:
- LDA #SCORE & 255 ;GO BACK TO P1 SCORE
- STA HSCRAM+8
- DEC HSCRAM+2 ;GO BACK TO P1 JOYSTICK
- JMP ZHSCENT
- ZP2EQU:
- INX ; MOVE ON TO NEXT DIGIT
- CPX #4 ; 4 DIGITS OF SCORE TO COMPARE
- BEQ ZPNGO ; IF WE HAVE DONE ALL COMPARES, DFLT P1
- BNE ZCOMPLOP ; IF NOT, DO NEXT COMPARE
- * HSCDM -- PUT UP DIFF/MODE ICONS ACCORDING TO VALUE OF TEMP
- HSCDM:
- LDA TEMP
- AND #$03 ;GET DIFF BITS
- CLC
- ADC #10
- TAY
- LDX #10
- JSR DOICON
- LDA TEMP
- LSR ;GET MODE BITS
- LSR
- BEQ HSCZAPM ;ONLY DISPLAY TEAM AND COMPETITVE PLAY
- CLC
- ADC #15
- TAY
- INX ;10+1=11
- JSR DOICON
- ZHSCRTS:
- RTS
- HSCZAPM:
- LDA #$FF ;ZAP OUT STATUS OF MODE ICON
- STA STATUS+11
- RTS
- * HSCSETDM -- SET DIFF/MODE LEVEL ARGUMENT BASED ON DIFF AND MODE
- HSCSETDM:
- LDA MODE ;COMPUTE DIFF/MODE LEVEL VALUE BYTE
- BPL ZHSCMOK
- LDA #0
- ZHSCMOK:
- ASL
- ASL
- CLC
- ADC DIFF
- STA TEMP ;SAVE IT WHERE WE CAN INSERT LATER
- RTS
- * GO TO OLD ONE-BUTTON MODE FOR WAT'S HISCORE CART
- ;OLDBUTON LDA #$FF
- ;ZOLDSTOR STA SWCHB
- ; RTS
- * GO BACK TO PREVIOUS STATE
- ;NEWBUTON LDA ONEBUT
- ; BPL ZOLDSTOR
- ; THIS TABLE IS COPIED INTO RAM WHEN HSC IS CALLED. IT'S THE ARGUMENT BLOCK
- ; NEEDED BY THE HSC.
- HSCROM:
- .DC.B $49,$6C ; CARTRIDGE ID NUMBER
- .DC.B $00 ; DIFFICULTY LEVEL
- ; + PLAYER NUMBER (BOTTOM 2 BITS)
- .DC.B $01 ; CONTROLLER TYPE
- .DC.B $00,$00 ; GAME NAME; WE USE OUR OWN LOGO.
- .DC.B $00,$00 ; DIFFICULTY NAME; WE USE OUR OWN.
- .DC.W SCORE ; POINTER TO THE SCORE
- .DC.W HSCDLL ; POINTER TO DLL
- .DC.W LOGOBARS ;SOUND ROUTINE. WE USE THIS TO TWINKLE
- ; OUR LOGO BARS WHILE OFF SCREEN.
- .DC.B $00 ; SECONDS TO WAIT BEFORE RETURNING
- ; (FOR EACH DIFFICULTY LEVEL)
- * HSCDLL -- DLL FOR HSC DISPLAY. MERELY A RE-ARRANGED VERSION OF DLLTAB W/DLIS
- HSCDLL:
- .DC.B $8F
- .DC.B BLANKDL>>8,BLANKDL&255 ;DLI + 16 BLANK LINES
- .DC.B $4F
- .DC.B (GAMEDL07+4)>>8,(GAMEDL07+4)&255 ;NO DLI + MODE
- .DC.B $4F
- .DC.B (GAMEDL04+4)>>8,(GAMEDL04+4)&255 ;NO DLI + TOP OF LOGO
- .DC.B $4F
- .DC.B (GAMEDL05+4)>>8,(GAMEDL05+4)&255 ;NO DLI + BOTTOM OF LOGO
- .DC.B $4F
- .DC.B (GAMEDL11+4)>>8,(GAMEDL11+4)&255 ;NO DLI + DIFF LEVEL
- * HSTIME -- TIME TO DISPLAY EACH ENTRY FOR A GIVEN TOTAL NUMBER OF ENTRIES.
- HSTIME:
- .DC.B 0,10,6,5,4,3
|