0 ;WINDOWS2.ASM
01 ; ..TEST INTO GRAPHICS SCREENS..
02 ; BIT to BIT PAIR Expansion with
03 ; conversion for 4 color Graphics
04 ; with string input capability.
05 ; vs.2 by Dave Culbertson
06 ; (C) Jun 11,1984 CE Softwart
07 ;
08 ;EQUATES
09 DAT = $CB ;ADR OF RESULT STRING.
10 SW = $CD ;FLAG FOR 2 NIBBLES.
11 TMP = $CE ;HOLDS WORKING BYTE.
12 COL = $CF ;COLOR MODIFIER REG.
13 COL1 = $D0 ;COPY OF COLOR MODIFIER.
14 YINR = $D1 ;Y POINTER INNER LOOP.
15 YOUT = $D2 ;Y POINTER OUTER LOOP.
16 CHR = $D3 ;ADR OF SOURCE STRING.
17 PT = $D5 ;PTR INTO CS.
18 INV = $D7 ;INVERSE FLAG.
19 NUM = $D8 ;LEN OF STRING.
20 NUM1 = $D9 ;COPY OF LEN*2.
21 TEA = $DA ;TEMP AREA.
22 PTR = $DB ;PTR TO WORK AREA ($400).
23 CS = 756 ;PAGE PNTR OF CHAR SET.
24 ;
25 *= $4000 ;IGNORE (RELOCATABLE)
26 GET THE VARIABLES
27 ;
28 PLA
29 PLA
30 STA DAT+1
31 PLA
32 STA DAT
33 PLA
34 STA CHR+1
35 PLA
36 STA CHR
37 PLA
38 PLA
39 STA NUM ;GET NUMBER OF CHRS
40 ASL A
41 STA NUM1 ;NUM1=NUM*2
42 PLA
43 PLA
44 AND #3 ;ONLY BITS 1&2 OK.
45 CLC
46 ROR A
47 ROR A
48 ROR A
49 AND #192 ;ONLY PASS BITS 7&8.
50 STA COL ;STORE COLOR CODE.
51 STA COL1 ;AND A COPY.
52 LDA #0 ;POINT TO PAGE 4.
53 STA PTR
54 LDA #4
55 STA PTR+1
56 ; CONVERT FROM CHARACTER TO
57 ; ADR OF PLACE IN CHARACTER SET
58 BE LDA #0 ;CLEAR WORK AREA.
59 TAY
60 BF STA (PTR),Y
61 INY
62 CPY #16
63 BNE BF
64 LDA #255
65 STA INV ;NORMAL MODE.
66 LDY #0 ;Y=0
67 LDA (CHR),Y ;GET THE CHARACTER
68 CMP #128 ;IS A <127?
69 BCC T ;YES GOTO T
70 STY INV ;SET INVERSE.
71 EOR #128
72 ;
73 T CMP #96 ;IS IT LOWERCASE?
74 BCC U ;NO,GOTO U.
75 LDY #3 ;SET OFFSET.
76 BCS Q ;GOTO Q.
77 ;
78 U CMP #64 ;IS IT UPPERCASE?
79 BCC V ;NO,GOTO V.
80 LDY #1 ;SET PAGE 1.
81 BCS Q ;GOTO Q.
82 ;
83 V CMP #32 ;IS IT A SYMBOL?
84 BCC W ;NO,GOTO W.
85 BCS Q ;YES,GOTO Q.
86 ; 1st ISLAND TO BEGINNING.
87 IS CLC
88 BCC BE ;GOTO BEGINNING.
89 ;
90 W LDY #2 ;A GRAPHICS CHR!
91 ;
92 Q AND #31 ;NOW ACC <32!
93 ASL A ;MULTIPLY BY 8!
94 ASL A
95 ASL A
96 STA PT ;INDEX INTO PAGE.
97 CLC ;MOVE PAGE OFFSET.
98 TYA
99 ADC CS ;ADD C.S. TO OFFSET.
0100 STA PT+1 ;STORE IT.
0101 ; MAIN ROUTINE
0102 LDY #0
0103 STY YINR
0104 STY YOUT
0105 S LDX #0
0106 STX SW
0107 LDY YOUT
0108 LDA (PT),Y
0109 STA TMP
0110 B LDY YINR
0111 LDA TMP
0112 BMI C
0113 ;
0114 LDA (PTR),Y
0115 ORA COL
0116 STA (PTR),Y
0117 C CLC
0118 ROR COL
0119 CLC
0120 ROR COL
0121 ASL TMP
0122 INX
0123 CPX #4
0124 BNE B
0125 ;
0126 LDA INV ;CHECK FOR INVERSE?
0127 BEQ D
0128 SEC ;INVERT BITS
0129 SBC (PTR),Y
0130 STA (PTR),Y
0131 D LDA COL1 ;ADJUST FOR NEXT
0132 STA COL
0133 INC YINR
0134 INC SW
0135 LDA SW
0136 CMP #2
0137 BNE B
0138 ;
0139 INC YOUT
0140 LDY YOUT
0141 CPY #8
0142 BNE S
0143 BEQ K ;HOP OVER ISLAND.
0144 ; 2nd ISLAND TO BEGINNING
0145 HOP CLC
0146 BCC IS ;GOTO BEGINNING.
0147 ; CONVERT DAT TO STRING FORMAT.
0148 K LDA DAT ;PUSH DAT ON STACK
0149 PHA
0150 LDA DAT+1
0151 PHA
0152 LDY #0
0153 AG LDA (PTR),Y
0154 STA (DAT),Y
0155 INY
0156 CPY #2
0157 BNE AG
0158 J LDA (PTR),Y
0159 TAX
0160 INY
0161 LDA (PTR),Y
0162 PHA
0163 INY
0164 STY TEA
0165 LDY NUM1
0166 TXA
0167 STA (DAT),Y
0168 PLA
0169 INY
0170 STA (DAT),Y
0171 CLC
0172 LDA DAT
0173 ADC NUM1
0174 STA DAT
0175 BCC G
0176 INC DAT+1
0177 G LDY TEA
0178 CPY #16
0179 BNE J
0180 PLA ;RECOVER & BUMP DAT
0181 STA DAT+1
0182 CLC
0183 PLA
0184 ADC #2
0185 STA DAT
0186 BCC I
0187 INC DAT+1
0188 I INC CHR ;INCREMENT CHR
0189 BNE H
0190 INC CHR+1
0191 H DEC NUM
0192 BNE HOP ;DO NEXT CHARACTER.
0193 RTS