0100 ; wi de letters 0110 ; BY BILL MORRIS 0120 ; 0130 ONECHAR =$6FE ; TEMPORARY 0140 HALFCHAR =$6FF ; HOLDERS 0150 CHBAS =$2F4 ; CHAR SET POINTER 0160 NUMBERS =$45 ; BORROWED FROM DUP 0170 CAPS =$CC ; SAFE FROM BASIC 0180 CONTROL =$CE 0190 LOWER =$47 ;ALSO BELONGS TO DUP 0200 *=$0600 0210 PLA ; SETUP RETURN TO BASIC 0220 ; LO BYTE OF PAGE # VARIABLES =0 0230 LDA #0 0240 STA $45 ; LO BYTE NUMBERS ADR 0250 STA $CC ; LO BYTE CAPS ADR 0260 STA $CE ; LO BYTE CONTROL CHARS 0270 STA $47 ; LO BYTE LOWER CASE 0280 SEC 0290 LDA $59 ; PAGE # SCREEN MEMORY 0300 SBC #1 0310 STA $48 ; PAGE # LOWER CASE 0320 SBC #1 0330 STA $CF ; PAGE # CONTROL CHARS 0340 SBC #1 0350 STA $CD ; PAGE # CAPS 0360 SBC #1 0370 STA $46 ; PAGE # NUMBERS 0380 LDY #0 ; SET COUNTER 0390 ; BEGIN SPREADING LETTERS, 0400 ;ONE BYTE AT A TIME 0410 START LDA $E000,Y ; COPY NUMBERS 0420 STA (NUMBERS),Y ; STORE THEM 0430 LDA $E100,Y ; COPY CAPS 0440 STA (CAPS),Y ; STORE UNCHANGED 0450 STA ONECHAR ; MAKE EXTRA COPY 0460 LSR A ; SHIFT LEFT 0470 LSR A ; NYBBLE INTO 0480 LSR A ; RIGHT NYBBLE,LEAVING 0490 LSR A ; LEFT NYBBLE EMPTY 0500 STA HALFCHAR ; FILE IT AWAY 0510 LDA ONECHAR ; THAT EXTRA COPY 0520 AND #$0F ; KILL LEFT NYBBLE 0530 JSR BIT3 ; SPREAD RIGHT NYBBLE 0540 STA (CONTROL),Y ; STORE RIGHT 0550 ; HALF OF NEW LETTER 0560 LDA HALFCHAR ; GET OTHER HALF 0570 JSR BIT3 ; SPREAD IT 0580 STA (LOWER),Y ; STORE LEFT HALF 0590 INY ;COUNTER = COUNTER +1 0600 CPY #26*8 ; 8 BYTES TO A LETTER 0610 ; 26 LETTERS TO AN ALPHABET 0620 BNE START ; NEXT Y 0630 FINISH LDA $E000,Y ;STORE 0640 STA (NUMBERS),Y ;MISC. 0650 LDA $E100,Y ;CHARACTERS 0660 STA (CAPS),Y ;UNCHANGED 0670 LDA $E200,Y 0680 STA (CONTROL),Y 0690 LDA $E300,Y 0700 STA (LOWER),Y 0710 INY 0720 CPY #$FF ; DONE 0730 BNE FINISH 0740 LDA $46 ; FIRST PAGE # NEW SET 0750 STA CHBAS ; POKED INTO POINTER 0760 RTS ; RETURN TO BASIC, BYE BYE 0770 ; 0780 ; SUBROUTINE TO SPREAD HALF 0790 ; A BITE INTO THE FULL BYTE 0800 ; 0810 BIT3 TAX ; SAVE A COPY 0820 AND #8 ; SEE IF BIT 3 IS ON 0830 CMP #8 ; 00001000 0840 BNE BIT2; IF NOT GOTO BIT2 0850 TXA ; GET THE COPY 0860 CLC ; 0870 ADC #$B8; BIT 3 OFF, 6 & 7 ON 0880 ; 11000000 0890 JMP CLR2 ; BYPASS NEXT LINE 0900 BIT2 TXA ; GET UNALTERED COPY 0910 CLR2 TAX ; STASH LATEST VERSION 0920 AND #4 ; SEE IF BIT 2 IS ON 0930 CMP #4 ; 00000100 0940 BNE BIT1; IF NOT, THEN BIT1 0950 TXA 0960 CLC 0970 ADC #$2C IF SO, DO THIS 0980 JMP CLR1; 00110000 0990 BIT1 TXA 1000 CLR1 TAX 1010 AND #2 ; BIT 1? 1020 CMP #2 ; 00000010 1030 BNE BIT0 1040 TXA 1050 CLC 1060 ADC #$0A ; BECOMES 1070 JMP CLR0 ; 00001100 1080 BIT0 TXA 1090 CLR0 TAX 1100 AND #1 ; 00000001 1110 CMP #1 1120 BNE BIT86 1130 TXA 1140 CLC 1150 ADC #$02 ; 00000011 1160 JMP CLR86 1170 BIT86 TXA 1180 CLR86 RTS ; RETURN
Back to previous page