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