;TRC1F.ASM ; SCORE KEEPING LOGIC ZSUPP = $94 ;holds zero suppression SCNPRT = $84 ;holds screen print addr PLACC = $82 ;holds player accum addr HOLD3 DB 0 SCR0 DB 0,0,0 ;player score buffers SCR1 DB 0,0,0 ; This proc calls compute score then ; prints the scores SCRSCN PROC ;compute & print JSR CPTSCR ;player score SCRNLY = * LDA #LOW SCR0 STA PLACC LDA #HIGH SCR0 STA PLACC+1 CLC LDA SAVMSC ADC #LOW [3680+13] STA SCNPRT LDA SAVMSC+1 ADC #HIGH [3680+13] STA SCNPRT+1 LDA #%01000000 ;blue GR set STA HOLD3 JSR CNVSCR JSR AWRDBO RTS XREG DB 0 ;save areas YREG DB 0 CNVSCR PROC JSR ZEROSP LDX #5 ;Print scores left to right STX XREG ;testing for leading zeros LDY #2 STY YREG :NEXT LDY YREG LDA XREG ; zero suppression CMP ZSUPP BCC SUPP1 LDA (PLACC),Y AND #%00001111 CLC ADC #$10 ORA HOLD3 LDY XREG STA (SCNPRT),Y SUPP1 = * DEC XREG LDY YREG LDA XREG ;check zero supp CMP ZSUPP BCC SUPP2 LDA (PLACC),Y LSR A ! LSR A ! LSR A ! LSR A CLC ADC #$10 ORA HOLD3 LDY XREG STA (SCNPRT),Y SUPP2 = * DEC XREG DEC YREG BPL :NEXT RTS ; on death of comp. ship add his point ; value to player X set with cptr reg ; to process CPTSCR PROC TXA ! ASL A ! TAX CLC ! SED LDA CPPTVA+1,X ADC SCR0+2 STA SCR0+2 LDA CPPTVA,X ADC SCR0+1 STA SCR0+1 LDA #0 ADC SCR0 STA SCR0 CLD RTS ; Zero suppress scores ZEROSP PROC LDX #0 LDY #0 :NEXT LDA (PLACC),Y AND #%11110000 BNE :EXIT INX LDA (PLACC),Y AND #%00001111 BNE :EXIT INX INY CPY #3 BNE :NEXT DEX ;display first digit :EXIT = * STX ZSUPP RTS ; award bonus ship. compare bonus value ; to players score award if less and ; update bonus level BONUS DB 0,0,0 AWRDBO PROC LDX #0 :NEXT LDA SCR0,X CMP BONUS,X BCC :EXIT INX CPX #3 BNE :NEXT SED ! CLC LDA BONUS+1 ADC BONBSE ;set next bonus level STA BONUS+1 LDA #0 ADC BONUS STA BONUS CLC LDA SHIPS ADC #1 STA SHIPS CLD LDA #1 ;trigger extra STA TRIGGR+1 ;ship VB sound LDA #0 STA CURPTR+1 STA AUDCTL STA AUDC2 LDA #%01010000 ;set audctl STA VBACTL+1 ;return value JMP AWRDBO :EXIT = * JSR SCNSHP RTS ; put ship count to screen SCNSHP PROC LDA #$33 ;put 's' on strip LDY #1 STA (STRPAD),Y LDA SHIPS BPL :OKVAL LDA #0 STA SHIPS :OKVAL AND #$0F CLC ADC #$10 LDY #3 STA (STRPAD),Y LDA SHIPS LSR A ! LSR A ! LSR A ! LSR A BNE PRNUM LDA #0 LDY #2 STA (STRPAD),Y RTS PRNUM CLC ADC #$10 LDY #2 STA (STRPAD),Y RTS EPROC ; clear info strip & setup w/ one player info BLKSCN PROC LDY #19 ; blank screen LDA #0 :NEXT = * STA (STRPAD),Y DEY BPL :NEXT RTS ; decrement ship count DCSHIP PROC LDA SHIPS SEC ! SED SBC #1 STA SHIPS CLD RTS ; check break key for pause in play request SBRKKY DB 1 BPAUSE PROC LDA SBRKKY BNE :EXIT LDY #LOW XITVBV LDX #HIGH XITVBV LDA #7 JSR SETVBV LDX #6 LDA #0 :NEXT STA AUDC1,X DEX ! DEX BPL :NEXT LDA #1 STA SBRKKY STA BRKKEY :LOOP LDA BRKKEY BNE :LOOP LDY #LOW MVPLYI LDX #HIGH MVPLYI LDA #7 JSR SETVBV LDA #1 STA BRKKEY :EXIT RTS ASSERT * < TTLDL END