Classic Computer Magazine Archive PROGRAM LISTING: 85-01/WIDETEXT.ASM


0100 ;   wi	de letters
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