123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- ; HISCORE.S
- ; THIS FILE CONTAINS THE HANDLERS FOR THE INTERFACE TO THE HISCORE
- ; MODULE. "MKHISCOR" AND "MKENTER" INITIATE MODES;
- ; "HISCORE" AND "ENTER" JUST LOOP IN WAIT.
- GLBL XDMAON,XDMAOFF
- GLBL MKHISCOR
- GLBL MKENTER
- GLBL MKLOGO
- GLBL DRAWLOGO
- GLBL HSCRTN
- GLBL HSCROM,HSCSCORE,HSCDIFF
- GLBL HSCRAM
- GLBL TUNER,DLISTB,DLIST9,DLIST8,DLIST7
- GLBL NMIRTN
- GLBL DLI1,PL0SCORE,PL1SCORE,M160X2
- GLBL COLRINIT
- GLBL DLLRAM
- GLBL NULL2,TXTLIST1,DWORDL,DWORDH,DWORDLEN
- GLBL COLORS
- GLBL DPPINIT,CLEARALL
- GLBL PREFRESH
- ; HIGH SCORE: ROM IS AT 800, RAM IS AT 1000
- HSCATRCT EQU $3FFA
- HSCENTER EQU $3FFD
- HSCSTAT EQU $3FF7
- RAMDEF ; ZERO PAGE
- RSEG CODE2
- MKHISCOR LDA #H(DLISTB) ; DON'T SET WRITE MODE ANYMORE
- STA DLLRAM+1
- LDA #L(DLISTB)
- STA DLLRAM+2
- JSR BUILDHSC
- JSR FHISCORE
- JMP HSCATRCT will RTS
- MKENTER MOVE HOWHARD,TEMP4
- JSR BUILDHSC
- JSR FENTER
- JMP HSCENTER will RTS
- ; COME HERE IF 1) NO HSC, 2) HSC IS OVER
- HSCMISS PLA pops two levels out
- PLA
- RTS
- ; SETUP HISCORE PARAMETERS
- BUILDHSC LDA $3900
- CMP #$C6
- BNE HSCMISS
- LDA $3904
- CMP #$FE
- BNE HSCMISS
- DMAOFF
- INITARGS
- LDX #$0F copy into RAM
- COPYHSC0 LDA HSCROM,X
- STA HSCRAM,X
- DEX
- BPL COPYHSC0
- LDA #L(HSCDLI1) ; ENSURE THAT I'M IN VBLANK
- STA DLIADR
- LDA #H(HSCDLI1)
- STA DLIADR+1
- LDA TEMP4 ; DIFFICULTY LEVEL FOR THIS CALL
- TAX
- ASL A ; --CALLED 4 TIMES FROM "LOGO"
- ASL A
- ORA CURRENT
- STA HSCRAM+2
- LDA CURRENT
- BEQ BUILDRTS
- LDA #L(PL1SCORE) ; 2ND PLAYER
- STA HSCRAM+8
- LDA #H(PL1SCORE)
- STA HSCRAM+9
- BUILDRTS
- RTS
- FHISCORE LDY #H(HSCRAM) for HSCSTAT
- JSR HSCSTAT see if cart is here
- BMI HSCMISS if negative, no table for this level
- FENTER ONSCREEN make sure i'm offscreen
- INVBLANK
- JSR DRAWLOGO ; LOAD UP DISPLAY LISTS
- JSR PUTDNAME ; "TEMP4" SET IN "LOGO"
- JSR INITARGS since they're in a dlist
- JSR PREFRESH make sure new colors are stored
- LDY #H(HSCRAM) for the following routine
- LDA #4 four seconds
- STA HSCRAM+14
- REETS RTS
- ; THIS TABLE IS COPIED INTO RAM WHEN HSC IS CALLED. IT'S THE ARGUMENT BLOCK
- ; NEEDED BY THE HSC.
- HSCROM DB $23,$23 ; CARTRIDGE ID NUMBER
- DB $00 ; DIFFICULTY LEVEL
- ; + PLAYER NUMBER (BOTTOM 2 BITS)
- DB $00 ; CONTROLLER TYPE
- DB $00,$00 ; HSC NAME-- IGNORED IF I HAVE A DLIST
- DB $00,$00 ; MAKES HSC COPY 14 MORE SCAN LINES
- ; FOR DISPLAY LIST WITH NAME
- DB L(PL0SCORE),H(PL0SCORE) ; POINTER TO THE SCORE
- ; WILL BE PL0SCORE OR PL1SCORE
- DB L(HSCDLL),H(HSCDLL) ; DLIST LIST POINTER FOR LOGO
- DB L(REETS),H(REETS) ; SOUND ROUTINE
- DB $00 ; SECONDS TO WAIT BEFORE RETURNING
- ; (FOR EACH DIFFICULTY LEVEL)
- HSCDLL DB $8F
- DB H(DLISTB),L(DLISTB) ; NULL LIST; DLI FOR MODE CHANGE
- DB $0D
- DB H(DLISTB),L(DLISTB)
- DB $0F ; USE "MKLOGO" TO DO THIS
- DB H(DLIST9),L(DLIST9)
- DB $0F
- DB H(DLIST8),L(DLIST8)
- DB $09 ; BRINGS NUMBER TO 70 LINES
- DB H(DLISTB),L(DLISTB)
- DB $07 ; DISPLAYS DIFFICULTY NAME
- DB H(DLIST7),L(DLIST7)
- ; DB $82
- ; DB H(DLISTB),L(DLISTB)
- HSCDLI1 LDA #L(HSCDLI2) ; OCCURS AT TOP OF SCREEN
- STA DLIADR
- LDA #H(HSCDLI2)
- STA DLIADR+1
- LDA #$50 ; 160X2, 2 BYTE CHARACTERS
- STA CTRL
- LDA #$E8
- STA CHARBASE
- JMP NMIRTN
- HSCDLI2 LDA #L(HSCDLI1) ; CHANGE BACK FOR HSC DISPLAY
- STA DLIADR
- LDA #H(HSCDLI1) ; CHANGED FROM (HSCDLI2) [ROB 6.19.84]
- STA DLIADR+1
- STA WSYNC
- STA WSYNC
- LDA #$4B
- STA CTRL
- LDA #$39
- STA CHARBASE
- JMP NMIRTN
- ; THIS ROUTINE IS CALLED FROM THE TWO ABOVE ROUTINES TO INSERT
- ; THE DIFFICULTY NAME INTO DLIST7.
- PUTDNAME LDX #11 ; BLANK OUT TXTLIST1
- LDA #NULL2
- HSLOLP0 STA TXTLIST1,X
- DEX
- BNE HSLOLP0
- LDA #$19 ; COLORS FOR TEXT
- STA COLORS+20
- LDA #$15
- STA COLORS+21
- LDA #$1F
- STA COLORS+22
- LDA #L(TXTLIST1)
- STA DLIST7
- LDA #$60
- STA DLIST7+1
- LDA #H(TXTLIST1)
- STA DLIST7+2
- LDA #$B4 ; PALETTE 5, WIDTH 12
- STA DLIST7+3
- LDA #0
- STA DLIST7+6
- LDX TEMP4 ; UPDATE DIFFICULTY WORD
- LDA DWORDL,X ; COPY WORD INTO "TXTLIST2"
- STA TEMP0
- LDA DWORDH,X
- STA TEMP1
- LDA HSWPOS,X
- STA DLIST7+4 ; HPOS
- LDY DWORDLEN,X
- HSDIFFLP LDA (TEMP0),Y
- STA TXTLIST1,Y
- DEY
- BPL HSDIFFLP
- RTS
- ; This routine is called after calls to HSC are done, from LOGO and INIT
- HSCRTN
- ONSCREEN
- INVBLANK
- JSR COLRINIT
- JSR CLEARALL
- JSR DPPINIT reset DPP, turning DMA on
- ; waits for vblank
- LDA #$E8
- STA CHARBASE
- LDA #L(DLI1) we're in vblank
- STA DLIADR
- LDA #H(DLI1)
- STA DLIADR+1
- RTS
- HSWPOS DB 48,32,48,56
- END
|