; TRC1D.ASM ; scanner main ctl ; scanner vector table. different ; proc per direction SCNTB DW SCANU,SCAND,SCANR,SCANL SCANNR PROC ;on gosub rtn LDX ALTCMS ;ldx with which ship DEX AUTOX2 BNE :OVER LDX #3 :OVER LDY INDEX,X ;ldy with ships direction LDA SCNTB,Y STA SUBVC6+1 LDA SCNTB+1,Y STA SUBVC6+2 SUBVC6 JSR SUBVC6 RTS ; Scan rtn's. all rtns will follow ; pattern described for this one SCANU PROC JSR SENU ;check ahead CMP #0 ;if senu returns a ;0 in A no object ahead BEQ :EXIT ;exit path clear SCANRL JSR SENR ;path blocked check right STA XVC2+1 ;store result in cmp byte below JSR SENL ;ckeck left XVC2 CMP #0 ;compare results BEQ :BOCLR ;both ways clear ask locator CMP #0 ;check results of sence left BNE URT ;branch to go right ULT LDA #L ;go left STA INDEX,X ;set new dir. :EXIT RTS URT LDA #R STA INDEX,X ;set new dir. RTS :BOCLR JSR LOCATR RTS SCAND PROC JSR SEND CMP #0 BEQ :EXIT JMP SCANRL :EXIT RTS SCANL PROC JSR SENL CMP #0 BEQ :EXIT SCANUD JSR SENU STA XVC+1 JSR SEND XVC CMP #0 BEQ :BOCLR CMP #0 BNE DIRUL LDN LDA #D STA INDEX,X :EXIT RTS DIRUL LDA #U STA INDEX,X RTS :BOCLR JSR LOCATR RTS SCANR PROC JSR SENR CMP #0 BEQ :EXIT JMP SCANUD :EXIT RTS STOX DB 0 ; these sensor subs sense ahead left and ; right they return a 0 on clear a pos. ; num on contact SENU PROC LDA PLCOL,X STA COLGET LDA PLROW,X SEC SBC #4 STA ROWGET STX STOX JSR MYGET CMP #0 BNE :EXIT DEC COLGET JSR MYGET CMP #0 BNE :EXIT INC COLGET INC COLGET JSR MYGET CMP #0 BNE :EXIT DEC COLGET INC ROWGET JSR MYGET CMP #0 BNE :EXIT INC ROWGET JSR MYGET :EXIT LDX STOX RTS SEND PROC LDA PLCOL,X STA COLGET LDA PLROW,X CLC ADC #4 STA ROWGET STX STOX JSR MYGET CMP #0 BNE :EXIT DEC COLGET JSR MYGET CMP #0 BNE :EXIT INC COLGET INC COLGET JSR MYGET CMP #0 BNE :EXIT DEC COLGET DEC ROWGET JSR MYGET CMP #0 BNE :EXIT DEC ROWGET JSR MYGET :EXIT LDX STOX RTS SENR PROC LDA PLCOL,X CLC ADC #4 STA COLGET LDA PLROW,X STA ROWGET STX STOX JSR MYGET CMP #0 BNE :EXIT DEC ROWGET JSR MYGET CMP #0 BNE :EXIT INC ROWGET INC ROWGET JSR MYGET CMP #0 BNE :EXIT DEC ROWGET DEC COLGET JSR MYGET CMP #0 BNE :EXIT DEC COLGET JSR MYGET :EXIT LDX STOX RTS SENL PROC LDA PLCOL,X SEC SBC #4 STA COLGET LDA PLROW,X STA ROWGET STX STOX JSR MYGET CMP #0 BNE :EXIT DEC ROWGET JSR MYGET CMP #0 BNE :EXIT INC ROWGET INC ROWGET JSR MYGET CMP #0 BNE :EXIT DEC ROWGET INC COLGET JSR MYGET CMP #0 BNE :EXIT INC COLGET JSR MYGET :EXIT LDX STOX RTS ; Locator logic, follow players ship ; called if computer ship needs new dir. & ; both ways are clear. Computer ship 1 ; always picks random direction LOCATR PROC CPX #2 BCS CONTL ; do rndm for ship #1 LDA INDEX,X CMP #3 BCC CHGLR LDA RANDOM AND #1 BEQ ADJU BNE ADJD CHGLR LDA RANDOM AND #1 BEQ ADJL BNE ADJR :EXIT RTS CONTL LDA INDEX,X ;do locate for CMP #3 ;ship 2 or 3 BCC ADJLR ;curr dir u or d SEC ;curr dir l or r LDA PLROW SBC PLROW,X BCC ADJU BEQ :EXIT ;if = row no change ADJD LDA #2 STA INDEX,X RTS ADJU LDA #0 STA INDEX,X RTS ADJLR SEC LDA PLCOL SBC PLCOL,X BCC ADJL BEQ :EXIT2 ;exit if c ship col=ply ADJR LDA #4 STA INDEX,X :EXIT2 RTS ADJL LDA #6 STA INDEX,X RTS LINK D:TRC1E.ASM