123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- ; SCORE.S
- ; THIS FILE CONTIANS THE ROUTINES WHICH UPDATE AND DISPLAY THE THREE SCORES--
- ; PLAYER 1, HIGH SCORE, AND PLAYER 2.
- ; THERE'S NO PLAYER 2 SCORE IF "PLAYNUM" IS FALSE.
- ; THIS ROUTINE USES A, X AND Y. THE X REGISTER CONTAINS AN INDEX INTO
- ; THE SCORE VALUE TABLES.
- GLBL ADDSCORE
- ADDSCORE STX STEMPX ; SAVE REGISTERS
- STY STEMPY
- LDA DOITOVER ; NO POINTS IN INSTANT REPLAY !
- BEQ ZSCONT01
- JMP SCOREBYE
- ZSCONT01 LDA CURRENT ; GET OFFSET FROM "PL0SCORE"
- ASL A ; IN Y
- ASL A
- TAY
- ZSCR010 SED ; DECIMAL MODE
- CLC
- LDA LOSCORE,X ; LOW TWO DIGITS OF POINTS
- ADC PL0SCORE+2,Y ; ADD TO THOUSANDS AND HUNDREDS
- STA PL0SCORE+2,Y
- LDA HISCORE,X ; NEXT TWO DIGITS OF SCORE
- ADC PL0SCORE+1,Y
- STA PL0SCORE+1,Y
- LDA #0
- ADC PL0SCORE,Y ; IF THERE'S A CARRY, ADD IT
- STA PL0SCORE,Y
- CLD ; DECIMAL OFF
- ; CHECK TO SEE IF THIS PLAYER RECEIVES AN EXTRA LIFE
- TYA
- SEC
- SBC #1
- TAX ; STARTING INDEX
- CLC
- ADC #5
- STA TEMP6 ; ENDING INDEX
- CKXTRA1 INX
- CPX TEMP6 ; COMPARE ALL 4 REGISTERS
- BEQ ANEXTRA equal to bonus-- give a life
- LDA PL0SCORE,X
- CMP PL0BONUS,X
- BEQ CKXTRA1 ; MIGHT BE HIGH SCORE
- BCC PUTSCORE ; IF HISCORE GREATER, CARRY IS CLEAR
- ; ELSE TIME FOR AN EXTRA LIFE !
- ANEXTRA LDA #27
- JSR TUNIN
- LDX CURRENT
- INC PL0LIVES,X
- INC PLLIVES
- TXA
- PHA
- TYA
- PHA
- JSR STATDISP ; DISPLAY THE EXTRA HEAD
- PLA
- TAY
- PLA
- TAX
- LDA PL0BONUS+1,Y
- CMP #02
- BEQ CKX001
- SED do this in decimal so that it
- ;carries appropriately to millions
- LDA PL0BONUS+1,Y ; ELSE, A MULTIPLE OF 100,000
- CLC
- ADC #$10
- STA PL0BONUS+1,Y
- LDA PL0BONUS,Y
- ADC #0
- STA PL0BONUS,Y
- CLD
- JMP PUTSCORE
- CKX001 LDA #$10 ; AFTER FIRST AWARDING
- STA PL0BONUS+1,Y
- LDA #0
- STA PL0BONUS+2,Y
- ; PUTSCORE -- THIS ROUTINE PUTS THE SCORE AT "SCORE" INTO "CMAP1"
- PUTSCORE
- TYA ; 0 OR 4
- ASL A ;CALCULATE OFFSET 0 OR 8
- TAX ; INDEX INTO CHARACTER MAPS
- TYA
- CLC ;COMPARE VALUE FOR TERMINATION
- ADC #4
- STA TEMP5
- SCORLOOP LDA PL0SCORE,Y ;GET NEXT BYTE OF SCORE
- LSR A
- LSR A
- LSR A
- LSR A ;GET HIGH NYBBLE
- BNE PUTHINUM ;IF NOT ZERO PUT NUMBER FROM HI NYBBLE
- JSR PUTBLANK ;IF ZERO PUT IN BLANK
- LDA PL0SCORE,Y
- AND #$F ;GET LO NYBBLE
- BNE PUTLONUM ;IF NOT ZERO PUT NUMBER FROM LO NYBBLE
- JSR PUTBLANK ;IF ZERO PUT IN BLANK
- INY
- CPY TEMP5 ;4 BYTES OF SCORE
- BMI SCORLOOP
- LDA #NUMCHAR ;PUT UP A ZERO IF NO POINTS YET
- DEX
- JSR WRTCHAR
- SCOREBYE LDX STEMPX
- LDY STEMPY
- RTS ; BYE BYE !
- ** PUTNUMS, ROUTINE TO PUT NUMBERS FROM PLAYERS SCORE INTO CHARACTER MAP **
- PUTNUMS
- LDA PL0SCORE,Y ;GET NEXT BYTE OF SCORE
- LSR A
- LSR A
- LSR A
- LSR A ;GET HI NYBBLE
- ** PUTHINUM, ROUTINE TO PUT HIGH BYTE NUMBERS INTO CHARACTER MAP **
- PUTHINUM
- ASL A
- CLC ;POINT TO NUMBER IN CHARS
- ADC #NUMCHAR
- JSR WRTCHAR ;WRITE CHAR IN CHARACTER MAP
- LDA PL0SCORE,Y
- AND #$F ;GET LO NYBBLE
- ** PUTLONUM, ROUTINE TO PUT LOW BYTE NUMBERS INTO CHARACTER MAP **
- PUTLONUM
- ASL A
- CLC ;POINT TO NUMBER IN CHARS
- ADC #NUMCHAR
- JSR WRTCHAR ;WRITE CHAR IN CHARACTER MAP
- INY
- CPY TEMP5 ;4 BYTE OF SCORE DATA
- BMI PUTNUMS
- JMP SCOREBYE
- ** PUTBLANK, ROUTINE TO PUT A BLANK SPACE INTO NEXT POS IN CMAP1 **
- PUTBLANK
- LDA #NULL2
- ; ACC MUST BE LOW BYTE OF CHARACTER
- WRTCHAR
- STA CMAP1,X ;PUT CHAR IN CHARACTER MAP
- INX
- RTS
|