; D:TRCD.ASM ; Special program equates SLOWSP = 180 ;speed values INTMSP = 120 FASTSP = 70 FAST = 1 ;high speed value RNFRQS = 43 ;audio values RNFRQF = 33 ;frequency decrement value: used to rev up engines FDECV = 35 ; Score keeping logic ZSUPP = $88 SCNPRT = $84 PLACC = $82 SCR0 DB 0,0,0 ;BCD score buffers SCR1 DB 0,0,0 SCRSCN PROC ; CONVERT SCORE PLAYER 1 LDA #LOW SCR1 ;score to print STA PLACC LDA #HIGH SCR1 STA PLACC+1 CLC LDA SAVMSC ADC #LOW [3680 + 6] STA SCNPRT ;place on screen to put score LDA SAVMSC+1 ADC #HIGH [3680 + 6] STA SCNPRT+1 LDA #%01000000 ;blue GR set STA WORK JSR CNVSCR ; CONVERT PLAYER 2 LDA #LOW SCR0 STA PLACC LDA #HIGH SCR0 STA PLACC+1 CLC LDA SAVMSC ADC #LOW [3680+12] STA SCNPRT LDA SAVMSC+1 ADC #HIGH [3680+12] STA SCNPRT+1 LDA #%10000000 ;red GR set STA WORK JSR CNVSCR RTS XREG DB 0 YREG DB 0 ; This proc puts score addressed in PLACC ; to the screen using data from the zero ; suppression module to zero suppress CNVSCR PROC JSR ZEROSP LDX #5 STX XREG LDY #2 STY YREG :NEXT LDY YREG LDA XREG ; zero suppression CMP ZSUPP BCC :SKIP LDA (PLACC),Y AND #%00001111 CLC ADC #$10 ORA WORK LDY XREG STA (SCNPRT),Y :SKIP = * DEC XREG LDY YREG LDA XREG ;check zero supp CMP ZSUPP BCC :SKIP2 LDA (PLACC),Y LSR A ! LSR A ! LSR A ! LSR A CLC ADC #$10 ORA WORK LDY XREG STA (SCNPRT),Y :SKIP2 = * DEC XREG DEC YREG BPL :NEXT RTS ; This proc clears the score buffers ; and clears the screen CLRSCR PROC CLC LDA SAVMSC ADC #LOW [3680+6] STA SCNPRT LDA SAVMSC+1 ADC #HIGH [3680+6] STA SCNPRT+1 LDX #5 LDA #0 :LOOP STA SCR0,X DEX BPL :LOOP LDY #13 ; blank screen LDA #0 :LOOP2 = * STA (SCNPRT),Y DEY BPL :LOOP2 JSR SCRSCN RTS ; conformation sound to any key press ; in the title screen mode CLF2 DB 20,20,20 CSPAU1 DB 03,03,03 CSPAU2 DB 1,2,2 TACSND PROC ; game parm alter sound LDX #2 :LOOP LDA #168 STA AUDC3 LDA CLF2,X STA AUDF3 LDY CSPAU1,X JSR PAUSE LDY CSPAU2,X BEQ :SKIP LDA #0 STA AUDC3 JSR PAUSE :SKIP = * DEX BPL :LOOP RTS ; Zero suppress scores ZEROSP PROC LDX #0 LDY #0 :NEXT LDA (PLACC),Y AND #%11110000 BNE :OUT INX LDA (PLACC),Y AND #%00001111 BNE :OUT INX INY CPY #3 BNE :NEXT DEX ;display first digit :OUT = * STX ZSUPP RTS ;Sound for winner F1 DB 50,76,37,29,33 SPAU1 DB 3,3,3,3,3 SPAU2 DB 1,1,1,1,1 COLRS DB 188,180,188,180,188,180,188 SCRSND PROC LDA #0 STA AUDCTL LDA #6 STA WORK :NEXT = * LDX #4 :LOOP LDA #168 STA AUDC1 LDA F1,X STA AUDF1 LDY SPAU1,X JSR PAUSE LDY SPAU2,X BEQ :SKIP ;dont zero audc1 LDA #0 STA AUDC1 JSR PAUSE :SKIP = * DEX BPL :LOOP LDX WORK LDA COLRS,X FANCOL STA FANCOL+1 LDY #13 JSR PAUSE DEC WORK BPL :NEXT RTS ; Zero hori. pos. addr's for P/M ZHPOS PROC LDX #3 LDA #0 :LOOP STA HPOSP0,X DEX BPL :LOOP RTS ; Print round count to screen PRNDS DS 1 ; screen printable round count PRTRDS PROC LDY #3 SED LDA PRNDS CLC ADC #1 STA PRNDS CLD AND #%00001111 CLC ADC #$10 STA (STRPAD),Y LDA PRNDS LSR A! LSR A! LSR A! LSR A BNE PTNUM ; if not zero put LDA #0 JMP PUTBL PTNUM CLC ADC #$10 PUTBL DEY STA (STRPAD),Y RTS ; Display list interupt routine DLIRTN = * PHA TXA PHA DLCL1 LDA #52 EOR COLRSH AND DRKMSK TAX DLCL0 LDA #116 EOR COLRSH AND DRKMSK STA WSYNC STA COLPF1 STX COLPF2 LDA #212 EOR COLRSH AND DRKMSK STA COLPF0 PLA TAX PLA RTI ; Winner detemination and annoucement WINNER PROC LDX #0 ;compare both score accumulators :NEXT LDA SCR1,X CMP SCR0,X BCC SCR1WN BNE SCR0WN INX CPX #3 BNE :NEXT RTS SCR0WN = * LDA #LOW [DLCL0+1] ;set display list STA FANCOL+1 ;interupt color flipper LDA #HIGH [DLCL0+1] STA FANCOL+2 JSR SCRSND LDA #116 STA DLCL0+1 RTS SCR1WN = * LDA #LOW [DLCL1+1] STA FANCOL+1 LDA #HIGH [DLCL1+1] STA FANCOL+2 JSR SCRSND LDA #52 STA DLCL1+1 RTS ; ****** Rounds Control for 2 plyr mode ****** ; Round control changes screens ; & keeps track of rounds SRNDS DB 0 ;holds round count RNDCTL PROC LDA #0 STA DMACTL STA SDMCTL LDA PDLSTL ;change dlist to STA SDLSTL ;mode 7 screen LDA PDLSTH STA SDLSTH LDA #%00101010 STA SDMCTL LDA RNDS STA SRNDS ; shadow rounds LDY #1 LDA #$32 ; Put 'R' on screen STA (STRPAD),Y LDA #0 ;zero printable round count STA PRNDS JSR PRTRDS JSR CLRSCR :NEXT JSR PLYTWO LDA #1 CMP SRNDS ; if last round BEQ :SKIP ; skip round count update JSR PRTRDS DEC SRNDS BNE :NEXT :SKIP JSR KILSND JSR WINNER JSR ZHPOS RTNTTL = * LDA #0 ;return to title screen STA DMACTL STA SDMCTL STA COLOR2 ;set color for name strip STA COLPF2 LDA #LOW TTLDL STA SDLSTL LDA #HIGH TTLDL STA SDLSTH LDA #%00101010 STA SDMCTL RTS END START