; D:TRC1B.ASM ; Check trig P0FLG DB 0 ;previous speed flag TRIG PROC LDX STRIG0 STX MVFSTE+1 BEQ :OVER LDY P0FLG BEQ NWSPD5 RTS :OVER LDY P0FLG BNE NWSPD6 RTS ; change speed from fast to slow NWSPD5 = * STX P0FLG LDA #RNFRQS ;new sound STA FRQSTO STA SAUDF2 RTS NWSPD6 = * ;from slow to fast STX P0FLG LDA #RNFRQF STA FRQSTO STA SAUDF2 RTS ; Update stick direction value ;opposite direction value of stick STKCPL DB 0 ;direction value in index form eg. 0,1,2,3 INDEX DB 0,0,0,0 ;minimum movement allowed before dir. change register MINMV2 DB $FF ;data table to convert OS stick value to index DIRVAL DB $E,$D,$7,$B CPLTBL DB $D,$E,$B,$7 FRQSTO DB 0 ;audio freq. base value SSTICK DB 0 ;current stick in OS format STICK PROC LDX #03 ; LDA MINMV2 ;min. move 2 pix ; BPL SKIPY ;skip new dir if + :NEXT LDA DIRVAL,X CMP STICK0 BNE STKOUT ;skip if not UDRL CMP STKCPL BEQ STKOUT ;skip if opp. dir CMP SSTICK BEQ STKOUT ;skip if curr dir STA SSTICK LDA CPLTBL,X STA STKCPL TXA ASL A JSR TURN2 ;advance 2 pix STA INDEX LDA FRQSTO ;new direction STA SAUDF2 ;restart sound ; LDA #1 ;set for min move ; STA MINMV2 STKOUT DEX BPL :NEXT SKIPY RTS ; movement routines for player and computer SYSPUT = $F5B7 PLROW DB 0,0,0,0 ;plot row coord PLCOL DB 0,0,0,0 ;plot column coord PVPRG DB 0,0,0,0 ;P/M vert. coord PHPRG DB 0,0,0,0 ;P/M horiz. coord WORK DB 0,0 ;work space for various routines ; vector table to update position registers VECTBL DW MOVEUP,MOVEDN,MOVERT,MOVELT ; vector table to P/M graphics ram update PIVTBL DW P0UP,P0DN,P0RT,P0LT,P1UP,P1DN,P1RT,P1LT,P2UP,P2DN,P2RT,P2LT,P3UP,P3DN,P3RT,P3LT ; P/M data PDUP DB 0,0,0,0,0,$14,$14,8,0 PDDN DB 0,8,$14,$14,0,0,0,0,0 PDRT DB 0,0,0,6,1,6,0,0,0 PDLT DB 0,0,0,$30,$40,$30,0,0,0 CDUP DB 0,0,0,0,0,$14,$08,8,0 CDDN DB 0,8,$08,$14,0,0,0,0,0 CDRT DB 0,0,0,4,3,4,0,0,0 CDLT DB 0,0,0,$10,$60,$10,0,0,0 ; move computer ship. x reg set with ; index to choose which ship to move MVCOMP PROC LDY INDEX,X LDA VECTBL,Y STA SUBVC8+1 ;ongosub LDA VECTBL+1,Y STA SUBVC8+2 SUBVC8 JSR SUBVC8 ;to update position registers JSR HVHSET TXA ASL A ! ASL A ! ASL A STA WORK TYA ! CLC ADC WORK TAY LDA PIVTBL,Y ;ongosub STA SUBVC9+1 LDA PIVTBL+1,Y STA SUBVC9+2 SUBVC9 JSR SUBVC9 ;update P/M graphics ram JSR MYPLOT ;send point out to my plot proc RTS ; player move routine MVPLYR PROC LDX #0 LDA MINMV2 BMI :OVER DEC MINMV2 BPL :EXIT :OVER = * LDY INDEX LDA VECTBL,Y STA SUBVC3+1 LDA VECTBL+1,Y STA SUBVC3+2 SUBVC3 JSR SUBVC3 ;to update position registers LDA PIVTBL,Y STA SUBVC4+1 LDA PIVTBL+1,Y STA SUBVC4+2 SUBVC4 JSR SUBVC4 ;update P/M graphics ram TAY LDA PLROW ;send player plot STA ROWCRS ; out to system LDA PLCOL ; plot routine STA COLCRS LDA BRKKEY ;move break key to STA SBRKKY ;shadow for pause LDA #1 ;before sysput STA BRKKEY ;catches it TYA JSR SYSPUT LDA PHPRG STA HPOSP0 :EXIT RTS ; set horiz pos reg & row col's. x set ; with which ship to set HVHSET PROC LDA PHPRG,X STA HPOSP0,X LDA PLROW,X STA ROWPUT LDA PLCOL,X STA COLPUT RTS ;update row and column proc MOVEUP DEC PLROW,X DEC PVPRG,X RTS MOVEDN INC PLROW,X INC PVPRG,X RTS MOVERT INC PLCOL,X INC PHPRG,X RTS MOVELT DEC PLCOL,X DEC PHPRG,X RTS ; definition of P/M graphics ram update ; proc. named after my wife PAMMY MACRO PLAYER_DATA,GRAPHICS_RAM,BIT_VALUE %L = * LDY PVPRG,X LDX #8 ?%K LDA %1,X STA %2,Y INY DEX BPL ?%K LDA #%3 RTS ENDM P0UP PAMMY PDUP,GRP0,2 P0DN PAMMY PDDN,GRP0,2 P0RT PAMMY PDRT,GRP0,2 P0LT PAMMY PDLT,GRP0,2 P1UP PAMMY CDUP,GRP1,3 P1DN PAMMY CDDN,GRP1,3 P1RT PAMMY CDRT,GRP1,3 P1LT PAMMY CDLT,GRP1,3 P2UP PAMMY CDUP,GRP2,3 P2DN PAMMY CDDN,GRP2,3 P2RT PAMMY CDRT,GRP2,3 P2LT PAMMY CDLT,GRP2,3 P3UP PAMMY CDUP,GRP3,3 P3DN PAMMY CDDN,GRP3,3 P3RT PAMMY CDRT,GRP3,3 P3LT PAMMY CDLT,GRP3,3 ;process sounds.decrement soft freq regs ; X carries 0,1. Y=0,4 to access audf2,4 or 1,3 SAUDF1 DB 0,0 ;shadow audio freq1 SAUDF2 DB 0,0 PROSND PROC TXA ASL A ASL A TAY SEC LDA SAUDF1,X SBC #FDECV ;freq decrement value BCS :OVER DEC SAUDF2,X :OVER = * STA SAUDF1,X PHA LDA TRIGGR ;if vblank sound active BNE :EXIT ;don't over write its audio chan. PLA STA AUDF1,Y LDA SAUDF2,X STA AUDF2,Y LDA #168 STA AUDC2 RTS :EXIT PLA ! RTS ; vblank move player control rtn ALT DB 1 ;move every other vblank MVPLYI PROC CLD DEC ALT ;move fast enable BPL :EXIT ; + 1 set to 0 so MVFSTE LDX #1 ;will move each vblk STX ALT JSR TRIG JSR STICK LDX #0 JSR PROSND JSR MVPLYR JSR CLLTST :EXIT JMP VBSND ; move computer during timr4 interupt ;computer ships move one at a time please alternate ALTCMS DB 0,0,0,0 CMVEN DB 0,0,0,0 ;computer ship move enable MVCMP PROC LDX ALTCMS ; move 1 each int DEX AUTOX BNE :OVER ; 1..3 p/m LDX #3 :OVER STX ALTCMS LDA CMVEN,X BNE :EXIT JSR SCORCP JSR MVCOMP :EXIT = * RTS INCLUDE D:MYPLOT.ASM LINK D:TRC1C.ASM