; ENABLE VBI¢ ; ¢ LDA #0 ; RESET CLOCK¢ STA 18 ; TIMERS¢ STA 19¢ STA 20¢ LDA #6¢ LDY #VBI&255¢ LDX #VBI/256¢ JMP $E45C¢VBI¢; SAVE REGISTERS¢ PHA¢ TYA¢ PHA¢ TXA¢ PHA¢¢ LDA 20 ; CHECK TO SEE¢ AND #7 ; IF COLOURS¢ BNE NOUPDAT ; SHOULD BE UPDATED¢ LDA UPDAT¢ CLC¢ ADC #16¢ STA UPDAT¢NOUPDAT¢ LDA #1 ; SET SIZES FOR PM¢ STA $D008¢ STA $D009¢ STA $D00A¢ STA $D00B¢¢ LDA #100 ; PUT IT ON THE¢ STA $D000 ; MIDDLE OF THE¢ CLC ; SCREEN (WELL,¢ ADC #16 ; APPROX. ANYWAY)¢ STA $D001¢ ADC #16¢ STA $D002¢ ADC #16¢ STA $D003¢¢ DEC WCOL ; COLOUR EFFECT¢ BNE COLNO¢ LDA #4¢ STA WCOL¢ LDA 704¢ PHA¢ LDA 705¢ STA 704¢ LDA 706¢ STA 705¢ LDA 707¢ STA 706¢ PLA¢ STA 707¢COLNO¢ LDA #47 ; SET WIDE AND¢ STA $D400 ; DOUBLE RES.¢ STA 559¢¢ LDA DIDIT ; CHECK TO SEE¢ BEQ DOVBIG ; IF SCROLLER¢ JMP NOVBIG ; SHOULD START¢DOVBIG¢ LDX BYT1 ; IS CHARACTER¢ CPX #8 ; COMPLETED YET ?¢ BNE FINTHIS ; NO, THEN DO SO¢ LDY #0 ; RESET COUNTER¢ STY BYT1 ; AND FIND THE¢ LDA ($80),Y ; NEXT CHARACTER¢ CMP #$9B ; IS IT THE END ?¢ BNE SKRESPM ; NO...¢ LDA #VSCR&255 ; RESET SCROLLER¢ STA $80¢ LDA #VSCR/256¢ STA $81¢ LDA ($80),Y ; NOW LETS DO SOME¢SKRESPM ; CALCULATING¢ STA $82 ; TO FIND THE ¢ STY $83 ; RIGHT DATA FOR¢ ASL $82 ; THE CHARACTER¢ ROL $83 ; CHARACTER * 8¢ ASL $82¢ ROL $83¢ ASL $82¢ ROL $83¢ LDA $83¢ CLC¢ ADC #$AA ; AND ADD THE¢ STA $83 ; ADDRESS OF FONT¢¢ INC $80 ; INCREASE POINTER¢ BNE FINTHIS ; FOR STRING¢ INC $81¢FINTHIS¢ LDY BYT1 ; NOW FINISH¢ ; ANOTHER BYTE¢ LDA #0 ; PUT BLANKS AT¢ STA PMA+512+94 ; THE END OF PM¢ STA PMA+640+94¢ STA PMA+768+94¢ STA PMA+896+94¢¢ LDA ($82),Y ; LOAD IT FROM¢ EOR #255 ; FONT¢¢ STA DIST ; NOW LET'S ENLARGE¢ ROL DIST ; IT, AND USE¢ BCS NONO1 ; 2 BITS IN EACH¢ LDA #240 ; PM¢ STA PMA+512+94¢NONO1¢ ROL DIST¢ BCS NONO2¢ LDA PMA+512+94¢ ORA #15¢ STA PMA+512+94¢NONO2¢ ROL DIST¢ BCS NONO3¢ LDA #240¢ STA PMA+640+94¢NONO3¢ ROL DIST¢ BCS NONO4¢ LDA PMA+640+94¢ ORA #15¢ STA PMA+640+94¢NONO4¢ ROL DIST¢ BCS NONO5¢ LDA #240¢ STA PMA+768+94¢NONO5¢ ROL DIST¢ BCS NONO6¢ LDA PMA+768+94¢ ORA #15¢ STA PMA+768+94¢NONO6¢ ROL DIST¢ BCS NONO7¢ LDA #240¢ STA PMA+896+94¢NONO7¢ ROL DIST¢ BCS NONO8¢ LDA PMA+896+94¢ ORA #15¢ STA PMA+896+94¢NONO8¢ DEC BYT1+1 ; HAS IT SCROLLED¢ BNE WAIT1 ; BY YET ?¢ LDA #8¢ STA BYT1+1¢ INC BYT1¢WAIT1¢; NOW MOVE THE PM'S UP¢ LDY #8¢HOLDVB¢ INY¢ LDA PMA+512,Y¢ DEY¢ STA PMA+512,Y¢ INY¢ LDA PMA+640,Y¢ DEY¢ STA PMA+640,Y¢ INY¢ LDA PMA+768,Y¢ DEY¢ STA PMA+768,Y¢ INY¢ LDA PMA+896,Y¢ DEY¢ STA PMA+896,Y¢ INY¢ CPY #94¢ BNE HOLDVB¢NOVBIG¢ LDA VPOS ; WOW, CAN'T¢ AND #15 ; REMEMBER IF THIS¢ EOR #15 ; IS NEEDED OR NOT¢ STA MPOS ; SO I LEFT IT¢¢ LDA 20¢ AND #1¢ BNE NIC1¢ INC CNTR¢NIC1¢¢ LDA CNTR+1¢ CLC¢ ADC #16¢ STA CNTR+1¢¢ LDA #0¢ STA 77 ; ATTRACT OFF¢ STA DLN ; RESET DL COUNTER¢¢;UPDATE SCROLL MESSAGES 1 AND 2¢ LDA DIDIT+1 ; START NOW ?¢ BNE SDL1 ; NO, WAIT A BIT¢ LDA HPOS ; DO SCROLLER¢ SEC ; AT SPEED OF 2¢ SBC #2¢ STA HPOS¢ BCS SDL1¢ AND #7¢ STA HPOS¢ LDA BOT+1 ; CHECK IF END OF¢ STA $D5 ; SCROLL IS REACHED¢ LDA BOT+2¢ STA $D6¢ LDY #25¢ LDA ($D5),Y¢ CMP #255 ; NO, IT HAS NOT¢ BNE CS1¢ LDA #SC1&255 ; RESET IT¢ STA BOT+1¢ LDA #SC1/256¢ STA BOT+2¢ LDA #0 ; START NEXT SCROLL¢ STA DIDIT+2¢CS1¢ INC BOT+1¢ BNE SDL1¢ INC BOT+2¢SDL1¢¢ LDA DIDIT+2 ; SAME AS ABOVE¢ BNE SDL2 ; WELL, ALMOST¢ DEC HPOS+2¢ BNE SDL2¢ LDA #8¢ STA HPOS+2¢ LDA TOP+1¢ STA $D5¢ LDA TOP+2¢ STA $D6¢ LDY #25¢ LDA ($D5),Y¢ CMP #255¢ BNE CS2¢ LDA #SC2&255¢ STA TOP+1¢ LDA #SC2/256¢ STA TOP+2¢ LDA #0¢ STA DIDIT¢CS2¢ INC TOP+1¢ BNE SDL2¢ INC TOP+2¢SDL2¢¢ LDA DIDIT+3 ; SHOULD BIG SCROLL¢ BEQ DOHP3 ; START ?¢¢ LDA 19 ; NO, LET'S WAIT¢ CMP #3 ; FOR TIMER 19¢ BNE SDL3¢ LDA #0 ; NOW IT IS TIME¢ STA DIDIT+3 ; TO START¢DOHP3¢ LDA HPOS+1 ; MOVE AT SPEED¢ SEC ; 3.¢ SBC #3¢ STA HPOS+1¢ BCS SDL3¢ AND #3¢ STA HPOS+1¢¢ LDA MODE+25 ; UPDATE THE TOP¢ STA $D5 ; OF BIGSCROLL¢ LDA MODE+26 ; AND CHECK¢ STA $D6¢ LDY #48+6¢ LDA ($D5),Y¢ CMP #255 ; IF SCREEN HAS¢ BNE CS3 ; SCROLLED TWO¢ LDA #SHOW&255 ; SCREENS, RESET IT¢ STA MODE+1¢ LDA #SHOW/256¢ STA MODE+2¢CS3 LDA TOGGL ; COPY CHAR EVERY¢ EOR #255 ; OTHER VBL¢ STA TOGGL¢ BEQ CS03¢¢ JSR COPYCHAR¢CS03¢ INC MODE+1¢ BNE NOMH1¢ INC MODE+2¢NOMH1¢ LDY #3¢MIDSCR¢ DEY ; LET US MAKE¢ DEY ; THE REST OF THE¢ LDA MODE,Y ; LINES FOLLOW¢ CLC ; THE TOP ONE¢ ADC #96¢ INY¢ INY¢ INY¢ STA MODE,Y¢ DEY¢ DEY¢ LDA MODE,Y¢ ADC #0¢ INY¢ INY¢ INY¢ STA MODE,Y¢ INY¢ CPY #9*3¢ BNE MIDSCR¢SDL3¢ LDY VPOS ; UPDATE VERTICAL¢ LDA VTAB,Y ; JUMP IN TABLE¢ CMP #255 ; START AGAIN¢ BNE NVRES ; IF END REACHED¢ LDY #0¢ STY VPOS¢ LDA VTAB,Y¢NVRES¢ STA $D405¢ INC VPOS¢; RESTORE REGISTERS AND EXIT¢EXITVBL¢ PLA¢ TAX¢ PLA¢ TAY¢ PLA¢ JMP $E45F¢COPYCHAR¢ LDA BYTE ; IS THE CHAR¢ BNE NONYET ; BEEN DONE YET ?¢ LDA #8 ; GET A NEW ONE¢ STA BYTE¢ LDY #0¢ LDA ($CB),Y ; IS SCROLLER¢ CMP #$9B ; FINISHED¢ BNE NRESBIG¢ LDA #0 ; RESET SCROLLER¢ STA DIDIT+1¢ LDA #BSCR&255¢ STA $CB¢ LDA #BSCR/256¢ STA $CC¢ LDA ($CB),Y¢NRESBIG¢ STY $D6 ; SAME AS VERTICAL¢ STA $D5 ; SCROLLER ABOVE¢ ASL $D5¢ ROL $D6¢ ASL $D5¢ ROL $D6¢ ASL $D5¢ ROL $D6¢ LDA $D6¢ CLC¢ ADC #$A4¢ STA $D6¢DO8STK¢ LDA ($D5),Y ; NOW COPY 8 BITS¢ STA TDAT,Y¢ INY¢ CPY #8¢ BNE DO8STK¢¢ INC $CB¢ BNE NONYET¢ INC $CC¢¢NONYET¢ LDX #3 ; UPDATE AT THE¢ LDY #0 ; END OF THE¢ STY YCNT ; SCREEN¢DO8B¢ INX¢ LDA MODE,X¢ STA $D5¢ INX¢ LDA MODE,X¢ STA $D6¢ LDY YCNT¢¢ LDA TDAT,Y¢ ROL A¢ STA TDAT,Y¢ BCC NNN1¢ LDA #0¢ STA TM1¢ BEQ NNN2¢NNN1¢ LDA #1¢ STA TM1¢NNN2¢ LDY #48¢ LDA TM1¢ STA ($D5),Y¢ INY¢ STA ($D5),Y¢ LDY #0¢ STA ($D5),Y¢ INY¢ STA ($D5),Y¢ INC YCNT¢ INX¢ CPX #27¢ BNE DO8B¢¢ DEC BYTE¢ RTS¢