Classic Computer Magazine Archive PROGRAM LISTING: 84-12/WINDOWS2.ASM


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 

Back to previous page