; D:TRCE.ASM ;insomnia vb sound data tables ISOMC1 = * ISOMF1 = * ISOMF2 DB 118,118,0,0,67,67,0,0,32,32,0,0,22,22,0,0,13,13,0,0,13 DB 13,0 ISOMC2 DB 162,162,160,160,164,165,160,160,166,166,160,160,168,168,160,160,170,170,160,160,170 DB 170,0 ISOMF3 = * ISOMC3 = * ISOMF4 = * ISOMC4 = * ;sound for ships being put on screen SSF1TB DB 83,113,172,172 SSF2TB DB 84,114,173,173 SSF3TB DB 85,115,174,174 SSPATB DB 65,55,25,25 ; Ship set (on screen) sound SHSSND PROC NOP LDY #4 LDA #167 :LOOP STA AUDC1,Y DEY ! DEY BPL :LOOP LDA SSF1TB,X STA AUDF1 LDA SSF2TB,X STA AUDF2 LDA SSF3TB,X STA AUDF3 LDY SSPATB,X JSR PAUSE LDY #4 LDA #0 :LOOP2 STA AUDC1,Y DEY ! DEY BPL :LOOP2 LDY #5 JSR PAUSE RTS ;sound for end of game EDF1TB DB 172,135,113,84,84 EDF2TB DB 173,136,114,85,85 EDPATB DB 50,25,25,10,10 ENDSND PROC LDA #1 STA AUDCTL LDX #4 :LOOP2 LDY #2 LDA #167 :LOOP STA AUDC1,Y DEY ! DEY BPL :LOOP LDA EDF1TB,X STA AUDF1 LDA EDF2TB,X STA AUDF2 LDY EDPATB,X JSR PAUSE LDY #2 LDA #0 :LOOP3 STA AUDC1,Y DEY ! DEY BPL :LOOP3 LDY #5 JSR PAUSE LDA #8 ;check for consol STA CONSOL ;key depression LDA CONSOL AND #1 BNE :CKOPT PLA ! PLA ;clear this jsr LDA #0 STA AUDCTL JMP REPEAT :CKOPT LDA CONSOL AND #4 BNE :OVER PLA ! PLA ;clear this jsr LDA #0 STA AUDCTL JMP RETTTL :OVER DEX BPL :LOOP2 LDA #0 STA AUDCTL RTS ; Update this load's high score HISCR DB 0,0,0 UHISCR PROC LDX #0 ;compare scr0 to :NEXT LDA SCR0,X ;present hi score CMP HISCR,X BNE :OUT INX CPX #3 BNE :NEXT :OUT BCC :EXIT LDX #2 ;move scr0 to hi :LOOP LDA SCR0,X ;score buffer STA HISCR,X DEX BPL :LOOP :EXIT = * LDA #LOW HISCR ;put hiscr to STA PLACC ;to screen LDA #HIGH HISCR STA PLACC+1 CLC LDA SAVMSC ADC #LOW [3680+6] STA SCNPRT LDA SAVMSC+1 ADC #HIGH [3680+6] STA SCNPRT+1 LDA #%10000000 ;red GR set STA HOLD3 JSR CNVSCR RTS ; range finder checks range & calls ; locate to change dir. index RANGE = $604 ALTER DB 0,0,0,0 RANGER PROC NOP ;this byte set to ; rts to disable ranger LDX ALTCMS ;get next c ship DEX BNE :OVER LDX #3 :OVER DEC ALTER,X ;don't process BEQ :GORAG ;unless 4'th BPL :EXIT LDA #3 ;time thru STA ALTER,X :EXIT RTS :GORAG = * SEC ;if row and col LDA PLROW ;are less than SBC PLROW,X ;compare value BPL :SKEO ;then call locatr EOR #$FF :SKEO CMP RANGE BCC :CKCOL RTS :CKCOL SEC LDA PLCOL SBC PLCOL,X BPL :SKEO2 EOR #$FF :SKEO2 CMP RANGE BCS :EXIT2 JSR LOCATR :EXIT2 RTS ; flip flop 'GAME OVER' and scores GAOVTB DB $27,$21,$2D,$25,0,$2F,$36,$25,$32 FLPGOV PROC CPY RTCLOK+2 BNE :EXIT LDY #1 LDA (STRPAD),Y BEQ PUTSTP JSR BLKSCN LDY #[8+6] LDX #8 :NEXT1 LDA GAOVTB,X ORA #%10000000 STA (STRPAD),Y DEY DEX BPL :NEXT1 JSR SETRTY :EXIT RTS ; Put information strip onto screen PUTSTP = * JSR BLKSCN JSR UHISCR JSR SCRNLY JSR SCNSHP JSR SETRTY RTS ; set y from rtclok for timer use SETRTY PROC LDA RTCLOK+2 CLC ADC #100 TAY RTS ; turn : move 2 pixels ahead then turn TURNWK DB 0 TURN2 PROC PHA ;save new index value LDA #1 STA TURNWK :NEXT LDY INDEX LDX #0 STX MINMV2 LDA VECTBL,Y STA :SUBV+1 LDA VECTBL+1,Y STA :SUBV+2 :SUBV JSR :SUBV ;update soft regs LDA PLROW ;send player plot STA ROWCRS ;out to system LDA PLCOL ;plot routine STA COLCRS LDA #2 JSR SYSPUT DEC TURNWK BPL :NEXT PLA RTS LINK D:TRC1F.ASM