;vbi.asm›››vbi› lda #low dli1› sta 512› lda #high dli1› sta 513› lda pauseflag› bne :jnscroll› lda #0› sta scrollflag+1› lda scrollflag› sta oscrollflag› bne *+2+3›:jnscroll› jmp :noscroll› bpl scroll1› lda #255› sta scrollflag+1›scroll1› clc› lda scrollpos› adc scrollflag› sta scrollpos› sta bytepos› lda scrollpos+1› adc scrollflag+1› sta scrollpos+1› sta bytepos+1›;boundry check› lda scrollpos+1› bmi :out1› bne :okbn1› lda scrollpos› cmp #12› bcs :okbn1›:out1› lda #12› sta scrollpos› lda #0› sta scrollpos+1› sta fishspeed ;&&› beq :okbn2 ;always›:okbn1› sec› lda scrollpos› sbc #low [1022*4-48*4]› lda scrollpos+1› sbc #high [1022*4-48*4]› bcc :okbn2› lda #low [1022*4-48*4]› sta scrollpos› lda #high [1022*4-48*4]› sta scrollpos+1› lda #0› sta fishspeed›:okbn2› lda scrollpos› and #3› sta :tmpvbi› sec› lda #3› sbc :tmpvbi› sta HSCROL› lsr bytepos+1› ror bytepos› lsr bytepos+1› ror bytepos›:update› ldx #21*3› ldy #21›:lpvbi1› clc› lda adrtabl,y› adc bytepos› sta scrolltab+1,x› lda adrtabh,y› adc bytepos+1› sta scrolltab+2,x› dex› dex› dex › dey› bpl :lpvbi1› lda #0› sta scrollflag›:noscroll›;animate waves› inc wavecounter› lda wavecounter› and #3› bne :nodraw› lda wavecounter› and #63› tax› ldy #0›:lp88› lda wavetab1,x› sta wave1,y› lda wavetab2,x› sta wave2,y› inx› iny› cpy #4› bne :lp88›:nodraw›;alternate pmbase› lda wavecounter› and #1 ;alternates every vbi› bne *+5› jmp :base2›***********************************›;on first, third, etc vbi, draw›;fish and enable "pmmem"1›:base1› lda #high pmmem› sta 54279› lda bigflag ;0=norm 1=big› lsr a ;set carry for later add› lda bigflag› sta SIZEP0› sta SIZEP1› adc #1;1=norm 3=big› sta SIZEP2› lda fishx› sta HPOSP0› sta HPOSP2› clc› adc #8› ldy bigflag ;if big,2nd player is farther right› beq *+4› adc #8› sta HPOSP1› lda noeraseflag› bne :noer› ldx #16› stx :cntr› ldy ofishy› lda #0›:lpdfish› sta play0,y› sta play1,y› sta play2,y› ldx obigflag› beq :not1big› sta play0+1,y› sta play1+1,y› sta play2+1,y› sta play0+2,y› sta play1+2,y› sta play2+2,y› iny ! iny›:not1big› iny› dec :cntr› bne :lpdfish›:noer› ldx #16› stx :cntr› lda fishd›;multiply by 16 › asl a ! asl a ! asl a ! asl a› tax›;x will be 0 to 16›;add 0,16,0,32› stx :tmpvbi› lda deadflag› beq :readtrig› lda #1› bne :pick1›:readtrig› lda 644› eor #1› ora autotail›:pick1› lsr a ! ror a ! ror a ! ror a ;*32› clc› adc :tmpvbi› tax › ldy bigflag› sty obigflag› ldy fishy› sty ofishy› lda deadflag› bne *+5› jmp :lpd2fish›› include DEAD.ASM››;draw alive fish›:lpd2fish› lda fishdata1,x› sta play0,y› lda fishdata2,x› sta play1,y› lda fishdata3,x› sta play2,y› lda bigflag› beq :not2big› lda fishdata1,x› sta play0+1,y› sta play0+2,y› lda fishdata2,x› sta play1+1,y› sta play1+2,y› lda fishdata3,x› sta play2+1,y› sta play2+2,y› iny ! iny›:not2big› iny› inx› dec :cntr› bne :lpd2fish›;set fish colors (alive)› lda #198-32› sta COLPM0› sta COLPM1› lda #202-32› sta COLPM2›:donefish›;move baby fish 1 & 2› lda baby1x› cmp #1› beq :nm12› lda baby2x› cmp #1› beq :nm12› ldx #83›:lpbaby› lda missile+2,x› sta missile,x› inx› bne :lpbaby› lda #0› sta missile+255› lda baby1x› beq :db1› inc baby1x› beq :db1› inc baby1x› beq :db1› inc baby1x› beq :db1› inc baby1x›:db1› lda baby2x› beq :db2› inc baby2x› beq :db2› inc baby2x› beq :db2› inc baby2x› beq :db2› inc baby2x›:db2›:nm12› ldx baby1x› stx HPOSM1› inx› inx› stx HPOSM0› ldx baby2x› stx HPOSM3› inx› inx› stx HPOSM2› jmp :donepm›***********************************›;second, fourth vbi draw crab (players 0 and 1)›:base2› lda #high pmmem2› sta 54279›;set crab colors› lda #68-16› sta COLPM0› sta COLPM1›;and piranha colors› lda #150-32› sta COLPM2› sta COLPM3› lda #0› sta SIZEP2›;set crab position› lda crabx› sta HPOSP0› lda bigcflag› sta SIZEP0› sta SIZEP1› asl a› asl a› asl a› clc› adc #8› adc crabx› sta HPOSP1›;set piranha position› clc› lda pirx› sta HPOSP2› adc #8› sta HPOSP3›;erase old crab› ldy ocraby› ldx #24› lda obigcflag› beq *+4› ldx #24*2› lda #0›:lpercr› sta play0b,y› sta play1b,y› iny› dex› bne :lpercr ›;erase old piranha› ldy opiry› ldx #24› lda #0›:lperpi› sta play2b,y› sta play3b,y› iny› dex› bne :lperpi ›;draw new crab› lda #16› sta :cntr› lda wavecounter› and #4+8 ! asl a ! asl a ! asl a› tax› ldy craby› sty ocraby ›:lpdrcr› lda crabdata,x› sta play0b,y› lda crabdata+16,x› sta play1b,y› lda bigcflag› beq :no3big› lda crabdata,x› sta play0b+1,y› lda crabdata+16,x› sta play1b+1,y› iny›:no3big› iny› inx› dec :cntr› bne :lpdrcr›;draw new piranha› lda #24› sta :cntr› lda wavecounter› and #8 ! asl a ! asl a ! asl a› ldy pird› bpl :pirleft› ora #128›:pirleft› tax› ldy piry› sty opiry ›:lpdrpi› lda pirdata,x› sta play2b,y› lda pirdata+32,x› sta play3b,y› iny› inx› dec :cntr› bne :lpdrpi›;move baby fish 3 & 4› lda baby3x› cmp #1› beq :nm34› lda baby4x› cmp #1› beq :nm34› ldx #83›:lp2baby› lda missile2+2,x› sta missile2,x› inx› bne :lp2baby› lda #0› sta missile2+255› lda baby3x› beq :db3› inc baby3x› beq :db3› inc baby3x› beq :db3› inc baby3x› beq :db3› inc baby3x›:db3› lda baby4x› beq :db4› inc baby4x› beq :db4› inc baby4x› beq :db4› inc baby4x› beq :db4› inc baby4x›:db4›:nm34› ldx baby3x› stx HPOSM1› inx› inx› stx HPOSM0› ldx baby4x› stx HPOSM3› inx› inx› stx HPOSM2›:donepm›***********************************› jsr dosound››;animate fins› lda wavecounter› and #16› lsr a› clc› adc #7› tax› ldy #7›:l001› lda rdata1,x› sta rh1,y› sta rh2,y› lda ldata1,x› sta lh1,y› sta lh2,y› dex› dey› bpl :l001››;exitvbi››:exitvbi equ *+1› jmp $FFFF››:tmpvbi db 0 ;temp vbi storage›:tmp2vbi db 0 ;ditto›:cntr db 0;used in vbi routine››