
PROGRAM LISTING: 85-10/GUP.ASM
10 ; G.U.P.
20 ;
30 ; (THE SOURCE CODE
40 ; FOR THE POPULAR
50 ; GRAPHICS UTILITY
60 ; PUBLISHED IN THE
70 ; JUNE 1985 ISSUE OF ANTIC.)
80 ;
90 ; BY DAREK MIHOCKA
0100 ; (c) 1985, ANTIC PUBLISHING
0110 ;
0120 ;
0130 ;
0140 START = $4000
0150 *= START
0160 JSR INIT
0170 .WORD RANDOM
0180 .WORD SQUARE
0190 .WORD DRAWTO
0200 .WORD LINE
0210 .WORD CIRCLE
0220 .WORD COLOR
0230 .WORD GRAPHICS
0240 .WORD C128
0250 .WORD CIRF
0260 .WORD TEXTPLOT
0270 .WORD ONEPLOT
0280 .WORD COLORN
0290 .WORD SETCOLOR
0300 ;FUTURE EXPANSION
0310 .WORD END
0320 .WORD END
0330 TITLE .SBYTE " GRAPHICS UTILITY PACKAGE. DAREK MIHOCKA"
0340 ;ZERO PAGE VARIABLES
0350 XLOC = 203
0360 YLOC = 204
0370 COL = 205
0380 OFFSET = 206
0390 ONEORMANY = 207
0400 XLOCOFFSET = 208
0410 HBYTES = 209
0420 ;THE FOLLOWING ARE TEMPORARY
0430 ;VARIABLES STORED IN FR0
0440 REG1 = 212
0450 REG2 = 214
0460 REG3 = 216
0470 SLOPE = 218
0480 MASK = 220
0490 XMAX = 221
0500 YMAX = 222
0510 XTEMP = 223
0520 YTEMP = 224
0530 IDEAL = 225
0540 RAD = 227
0550 ORAD = 228
0560 RADS = 229
0570 XC = 230
0580 YC = 231
0590 YTEMP2 = 232
0600 STRHI = 233
0610 STRLO = 234
0620 STRLEN = 235
0630 LCOUNT = 236
0640 ;THE SUPERFAST PLOT
0650 PLOT LDA XLOC
0660 AND #$07 ;0-7
0670 ORA OFFSET ;8n
0680 TAX ;=MASK OFFSET
0690 LDA YLOC
0700 AND #3
0710 TAY
0720 LDA MASKTABLE,X
0730 AND ONEORMANY ;0 MAKES MANY
0740 STA MASK
0750 EOR #255
0760 AND COLOR,Y
0770 STA COL
0780 ;ENTER HERE FOR MORE SPEED
0790 MINIPLOT LDX YLOC
0800 CPX #192
0810 BCS PLOTFIN
0820 LDA XLOC
0830 YDIV
0840 LDY #2
0850 BEQ MEM87
0860 LSR A
0870 DEY
0880 BEQ MEM87
0890 LSR A
0900 DEY
0910 BEQ MEM87
0920 LSR A
0930 MEM87 TAY
0940 MEM88
0950 LDA SCR.TABLE,X
0960 STA REG2
0970 LDA SCR.TABLE+$C0,X
0980 MEM89
0990 STA REG2+1
1000 LDA (REG2),Y
1010 AND MASK
1020 ORA COL
1030 STA (REG2),Y ;THE PLOT
1040 PLOTFIN RTS
1050 XINT .WORD 0
1060 COLOR .WORD $FFFF,$FFFF
1070 MUL .WORD 0
1080 ;MASK FOR PLOT
1090 MASKTABLE .BYTE 0,0,0,0,0,0,0,0,15,240,15,240,15,240,15,240,$3F,$CF,$F3,$FC,$3F,$CF,$F3,$FC
1100 .BYTE $7F,$BF,$DF,$EF,$F7,$FB,$FD,$FE
1110 HLINMACH
1120 LDA XMAX ;NO ENTRY FROM BASIC
1130 CMP XLOC ;MAKE SURE
1140 BEQ FINI.2 ;XLOC<XMAX
1150 BCS HLIN2
1160 LDX XLOC
1170 STX XMAX
1180 STA XLOC
1190 HLIN2 LDA XMAX
1200 AND MASKFORHLIN
1210 STA XTEMP
1220 LDA XLOC
1230 AND MASKFORHLIN
1240 CMP XTEMP
1250 BEQ HLIN4.4
1260 CMP XLOC
1270 BEQ HLIN3.2
1280 ADC HBYTES
1290 STA YTEMP ;XLOC/4+1
1300 HLIN2.2
1310 JSR PLOT
1320 INC XLOC
1330 LDA XLOC
1340 CMP XMAX
1350 FINI.2
1360 BEQ HLIN4.4
1370 CMP XTEMP
1380 BEQ HLIN4.4
1390 CMP YTEMP
1400 BNE HLIN2.2
1410 HLIN3.2
1420 LDA #0
1430 STA ONEORMANY
1440 JSR PLOT
1450 LDA XLOC
1460 CLC
1470 ADC HBYTES
1480 STA XLOC
1490 JMP HLIN3.5
1500 HLIN3.3
1510 INC REG2
1520 BNE HLIN3.4
1530 INC REG2+1
1540 HLIN3.4
1550 LDA COL
1560 STA (REG2),Y
1570 LDA XLOC
1580 CLC
1590 ADC HBYTES
1600 STA XLOC
1610 HLIN3.5
1620 CMP XTEMP
1630 BNE HLIN3.3
1640 LDA #$FF
1650 STA ONEORMANY
1660 HLIN4.4
1670 JSR PLOT
1680 LDA XLOC
1690 CMP XMAX
1700 BEQ FINI
1710 INC XLOC
1720 JMP HLIN4.4
1730 FINI
1740 RTS
1750 MASKFORHLIN .BYTE 0
1760 SQUARE PLA ;A=USR(BOX,A,B,C,D)
1770 PLA
1780 PLA
1790 STA XMIN
1800 PLA
1810 PLA
1820 STA YLOC
1830 PLA
1840 PLA
1850 STA XMAX
1860 PLA
1870 PLA
1880 STA YMAX
1890 SQRMACH
1900 LDA XMIN
1910 CMP XMAX
1920 BCC S01
1930 LDX XMAX
1940 STX XMIN
1950 STA XMAX
1960 S01 LDA YLOC
1970 CMP YMAX
1980 BCC S02
1990 LDX YMAX
2000 STX YLOC
2010 STA YMAX
2020 S02
2030 LDA XMIN
2040 STA XLOC
2050 JSR HLIN2
2060 INC YLOC
2070 LDA YLOC
2080 CMP YMAX
2090 BNE S02
2100 LDA XMIN
2110 STA XLOC
2120 JSR HLIN2
2130 END2 RTS
2140 YMIN .WORD 0
2150 XMIN .WORD 0
2160 DRAWTO PLA ;BASIC DR.
2170 STA NARG
2180 INC NARG
2190 INC NARG
2200 LDA TYMAX
2210 PHA
2220 LDA #0
2230 PHA
2240 LDA TXMAX
2250 PHA
2260 LDA #0
2270 PHA
2280 LDA NARG
2290 PHA
2300 LINE
2310 PLA ;LINE X,Y,A,B...
2320 LSR A
2330 BEQ END2
2340 CMP #1
2350 BNE LINE3
2360 JMP PLOT
2370 LINE3 STA NARG
2380 DEC NARG
2390 PLA
2400 PLA
2410 STA XLOC
2420 PLA
2430 PLA
2440 STA YLOC
2450 STA IDEAL+1
2460 JMP ARGLOOPINIT
2470 ARGLOOP
2480 LDA TXMAX
2490 STA XLOC
2500 LDA TYMAX
2510 STA YLOC
2520 STA IDEAL+1
2530 ARGLOOPINIT
2540 PLA
2550 STA NEGSL
2560 PLA
2570 STA XMAX
2580 STA TXMAX
2590 PLA
2600 PLA
2610 STA YMAX
2620 STA TYMAX
2630 JSR DRAWTOMACH
2640 DEC NARG
2650 BNE ARGLOOP
2660 RTS
2670 NARG .WORD 0
2680 TXMAX .WORD 0
2690 TYMAX .WORD 0
2700 DRAWTOMACH LDA YMAX
2710 CMP YLOC
2720 BNE DIV1 ;SAME Y?
2730 JMP HLINMACH ;YES, DO HLIN
2740 DIV1
2750 LDA XMAX
2760 CMP XLOC
2770 BNE DIV2 ;SAME X?
2780 JMP VLINMACH ;YES, DO VLIN
2790 DIV2 BCS DIV22
2800 LDX XLOC
2810 STX XMAX
2820 STA XLOC
2830 LDA YLOC
2840 LDY YMAX
2850 STA YMAX
2860 STY YLOC
2870 STY IDEAL+1
2880 LDA XMAX
2890 DIV22 SEC
2900 SBC XLOC
2910 STA DIV ;DIVISOR
2920 PHA
2930 LDA YLOC
2940 STA IDEAL+1
2950 LDA #0
2960 STA G128
2970 STA NEGSL
2980 PLA
2990 BPL DIV.OK
3000 STA G128
3010 LSR DIV
3020 DIV.OK
3030 INC DIV
3040 LDA YMAX
3050 SEC
3060 SBC YLOC
3070 BCS DIV23
3080 PHA
3090 LDA #1
3100 STA NEGSL
3110 PLA
3120 EOR #255
3130 DIV23 CLC ;DIVIDEND
3140 ADC #1
3150 STA LOBYT
3160 LDA #0
3170 JSR DIV3 ;M=Y/X
3180 PHA
3190 STA LOBYT
3200 LDA QUT
3210 STA SLOPE+1 ;M-HI BYTE
3220 LDA #0
3230 STA LOBYT
3240 PLA
3250 CLC
3260 ADC #0
3270 JSR DIV3
3280 LDA QUT
3290 STA SLOPE ;M-LO BYTE
3300 LDA #128 ;XLOC+1
3310 STA IDEAL ;TO ROUND OFF
3320 LDA #$E6
3330 STA INYLOC
3340 STA INYLOC2
3350 LDA G128
3360 BEQ L128
3370 CLC
3380 ROR SLOPE+1
3390 ROR SLOPE
3400 L128
3410 LDA SLOPE+1
3420 STA MSMALL
3430 CMP #1
3440 BNE L129
3450 LDA SLOPE
3460 STA MSMALL
3470 ;IF SLOPE <=1 THEN MSMALL=0
3480 L129
3490 LDA NEGSL
3500 BEQ FIRSTPLOT
3510 LDA SLOPE
3520 EOR #255
3530 STA SLOPE
3540 LDA SLOPE+1
3550 EOR #255
3560 STA SLOPE+1
3570 LDA #$C6
3580 STA INYLOC
3590 STA INYLOC2
3600 FIRSTPLOT LDA MSMALL
3610 BEQ CHECK1
3620 JSR PLOT
3630 NEXTIDEAL CLC ;CALCULATE
3640 LDA IDEAL ;IDEAL POS.
3650 ADC SLOPE
3660 STA IDEAL
3670 LDA IDEAL+1
3680 ADC SLOPE+1
3690 STA IDEAL+1
3700 LDA YLOC
3710 CMP IDEAL+1
3720 BEQ CHECK1
3730 INYLOC2 INC YLOC
3740 DRAWLOOP LDA YLOC
3750 CMP IDEAL+1
3760 BEQ CHECK1 ;Y=IDEAL?
3770 CMP YMAX
3780 BEQ CHECK1 ;Y=MAX?
3790 JSR PLOT
3800 INYLOC INC YLOC
3810 JMP DRAWLOOP
3820 CHECK1
3830 JSR PLOT
3840 LDA XLOC
3850 CMP XMAX
3860 BEQ DRDONE
3870 INC XLOC
3880 JMP NEXTIDEAL
3890 DRDONE RTS
3900 DIV .WORD 0
3910 QUT .WORD 0
3920 LOBYT .WORD 0
3930 REMDR .WORD 0
3940 NEGSL .WORD 0
3950 MSMALL .BYTE 0
3960 DIV3
3970 LDY #8
3980 SEC
3990 SBC DIV
4000 DLOOP
4010 PHP
4020 ROL QUT
4030 ASL LOBYT
4040 ROL A
4050 PLP
4060 BCC WORDDD
4070 SBC DIV
4080 JMP DNEXT
4090 WORDDD ADC DIV
4100 DNEXT DEY
4110 BNE DLOOP
4120 BCS DLAST
4130 ADC DIV
4140 CLC
4150 DLAST ROL QUT
4160 RTS
4170 VLINMACH LDA YLOC
4180 CMP YMAX
4190 BCC VLIN22
4200 LDY YMAX
4210 STA YMAX
4220 STY YLOC
4230 VLIN22 JSR PLOT
4240 LDA YLOC
4250 CMP YMAX
4260 BEQ VEND
4270 VLINLOOP INC YLOC
4280 JSR PLOT
4290 LDA YLOC
4300 CMP YMAX
4310 BNE VLINLOOP
4320 VEND RTS
4330 CIRCLE
4340 PLA ;A=USR(CIRCLE,X,Y,R)
4350 PLA
4360 PLA
4370 STA XC
4380 PLA
4390 PLA
4400 STA YC
4410 PLA
4420 STA IDEAL
4430 STA IDEAL+1
4440 PLA
4450 STA RAD
4460 BEQ VEND
4470 CIRMACH
4480 STA DIV ;DIV=RAD
4490 LDA #128
4500 STA LOBYT
4510 LDA #0
4520 JSR DIV3
4530 PHA
4540 LDA #0
4550 STA LOBYT
4560 LDA QUT
4570 STA SLOPE+1 ;HI BYTE OF /
4580 PLA
4590 JSR DIV3
4600 LDA QUT
4610 STA SLOPE ;LO BYTE
4620 LDA #255
4630 STA LCOUNT
4640 YLOOP
4650 LDA IDEAL
4660 CLC
4670 ADC SLOPE
4680 STA IDEAL
4690 LDA IDEAL+1
4700 ADC SLOPE+1
4710 STA IDEAL+1
4720 TAX
4730 BIT IDEAL+1
4740 BMI VEND ;FINISHED?
4750 INC LCOUNT
4760 LDA YC
4770 SEC
4780 SBC LCOUNT
4790 STA YLOC
4800 LDA CIRWORD,X
4810 STA MUL
4820 LDA #0
4830 STA LOBYT
4840 LDX #8
4850 MULOOP LSR MUL
4860 BCC NOADD
4870 CLC
4880 ADC RAD
4890 NOADD ROR A
4900 ROR LOBYT
4910 DEX
4920 BNE MULOOP
4930 CIRCLESTRETCH.1 NOP
4940 CIRCLESTRETCH.2 NOP
4950 STA RADS
4960 LDA CIRF
4970 BEQ RING
4980 LDA XC
4990 CLC
5000 ADC RADS
5010 STA XMAX
5020 LDA XC
5030 SEC
5040 SBC RADS
5050 STA XLOC
5060 JSR HLIN2 ;UPPER LINE
5070 LDA YC
5080 CLC
5090 ADC LCOUNT
5100 STA YLOC
5110 LDA XC
5120 SEC
5130 SBC RADS
5140 STA XLOC
5150 JSR HLIN2 ;LOWER LINE
5160 JMP YLOOP
5170 RING
5180 LDA LCOUNT
5190 BNE RING2
5200 LDA YC
5210 STA YLOC
5220 LDA XC
5230 CLC
5240 ADC RADS
5250 STA XLOC
5260 JSR PLOT
5270 LDA XC
5280 SEC
5290 SBC RADS
5300 STA XLOC
5310 JSR PLOT
5320 RING4 LDA RADS
5330 STA ORAD
5340 JMP YLOOP
5350 RING2
5360 LDA YC
5370 CLC
5380 ADC LCOUNT
5390 STA YLOC
5400 JSR RING3
5410 LDA YC
5420 SEC
5430 SBC LCOUNT
5440 STA YLOC
5450 JSR RING3
5460 JMP RING4
5470 RING3 LDA XC
5480 SEC ;DOES THE LEFT
5490 SBC ORAD ;SIDE OF
5500 STA XLOC ;THE RING
5510 LDA XC
5520 SEC
5530 SBC RADS
5540 STA XMAX
5550 JSR HLINMACH
5560 LDA XC
5570 CLC ;DOES THE RIGHT
5580 ADC ORAD ;SIDE OF
5590 STA XMAX ;THE RING
5600 LDA XC
5610 CLC
5620 ADC RADS
5630 STA XLOC
5640 JSR HLINMACH ;DRAWIT
5650 RTS
5660 CIRF .WORD 1
5670 NUMDIV .BYTE 0
5680 ;DATA FOR OFFSET TO BIT MASK
5690 TABOFFSET .BYTE 0,0,0,16,24,16,24,16,24,8,8,8,0,0,24,16
5700 ;DATA FOR CIRCLE RATIO
5710 TABRATIO .BYTE 255,0,1,255,255,255,255,255,255,1,1,1,255,255,1,0
5720 GRAPHICS
5730 PLA ;BASIC GR. (0-63)
5740 PLA
5750 PLA
5760 STA GRMODE
5770 AND #$0F
5780 TAX
5790 LDA TABOFFSET,X
5800 STA OFFSET
5810 LDA #$EA
5820 STA CIRCLESTRETCH.1
5830 STA CIRCLESTRETCH.2 ;NOP'S
5840 LDA TABRATIO,X
5850 BEQ NOSTRETCH
5860 CMP #255
5870 BEQ GR8
5880 CMP #2
5890 BEQ STRETCH2
5900 STRETCH1 LDA #$4A
5910 STA CIRCLESTRETCH.1
5920 JMP NOSTRETCH
5930 STRETCH2 LDA #$4A
5940 STA CIRCLESTRETCH.2
5950 JMP STRETCH1
5960 GR8 LDA #$0A
5970 JMP STRETCH1+2
5980 NOSTRETCH
5990 LDA BYTAB,X
6000 STA BYTES
6010 LDA TABHLIN,X
6020 STA MASKFORHLIN
6030 LDA DTAB,X
6040 STA YDIV+1 ;£ OF ROT'S
6050 STA NUMDIV
6060 LDA HBTAB,X
6070 STA HBYTES ;£OF PIXELS/BYTE
6080 TXA
6090 CMP #12
6100 BPL OK12
6110 LDA GRMODE
6120 JSR GRAPHICSMACH ;EXIT TO OS
6130 LDA GRMODE
6140 AND #$0F
6150 CMP #9
6160 BMI CALC
6170 LDA #4
6180 STA 703 ;SUPPRESS GR.0
6190 BNE CALC
6200 OK12 LDA GRMODE
6210 AND #$30
6220 STA TEMP
6230 LDA GRMODE
6240 AND #3 ;SUB 12
6250 TAX
6260 PHA ;SAVE X
6270 LDA GTAB,X
6280 ORA TEMP
6290 JSR GRAPHICSMACH ;DO GR.
6300 PLA ;GET X
6310 TAX
6320 LDA ATAB,X
6330 STA ANTICMOD+1
6340 LDX GRMODE
6350 LDY #202
6360 ANTICLOOP LDA (REG2),Y
6370 AND #$BF ;LDA FROM DL
6380 CMP ANTICMOD ;NEW MODE?
6390 BNE NEXTANTIC
6400 LDA (REG2),Y
6410 AND #$F0
6420 ORA ANTICMOD+1 ;CHANGE MODE
6430 STA (REG2),Y
6440 NEXTANTIC DEY
6450 BNE ANTICLOOP
6460 CALC
6470 LDX #8
6480 CALC.COL
6490 LDA SETCOLOR,X
6500 STA 704,X
6510 DEX
6520 BPL CALC.COL
6530 LDA 88
6540 CLC
6550 ADC XLOCOFFSET
6560 STA IDEAL
6570 STA SCR.TABLE
6580 LDA 89
6590 STA IDEAL+1
6600 STA SCR.TABLE+$C0
6610 LDY #1
6620 CALCLOOP CLC
6630 LDA IDEAL
6640 ADC BYTES
6650 STA IDEAL
6660 STA SCR.TABLE,Y
6670 LDA IDEAL+1
6680 ADC #0
6690 STA IDEAL+1
6700 STA SCR.TABLE+$C0,Y
6710 INY
6720 CPY #192
6730 BNE CALCLOOP
6740 RTS
6750 ;IMITATE GR.12-15 WITH 0 OR 8
6760 GTAB .BYTE 0,0,8,8
6770 ANTICMOD .WORD 0
6780 ATAB .BYTE 4,5,12,14
6790 GRMODE .WORD 0
6800 BYTAB .BYTE 40,20,20,10,10,20,20,40,40,40,40,40,40,40,20,40
6810 ;BYTES PER SCREEN
6820 TABHLIN .BYTE 255,255,255,$FC,$F8,$FC,$F8,$FC,$F8,$FE,$FE,$FE,255,255,$F8,$FC
6830 BYTES .WORD 0
6840 C128
6850 TDLO = 544 ;TIMER 5
6860 PLA
6870 PLA
6880 STA TDLO+1 ;TIME DELAY HI
6890 PLA
6900 STA TDLO ;TIME DELAY LO
6910 PLA
6920 PLA
6930 TAX ;COLOR REGISTER
6940 LDA #255
6950 STA 558
6960 CLOOP
6970 LDA 54283
6980 CLC
6990 ADC 20
7000 ASL A
7010 STA 54282
7020 STA 53266,X
7030 LDA 558
7040 BNE CLOOP
7050 RTS
7060 GRAPHICSMACH PHA
7070 LDX #$60
7080 LDA #255&CCLOSE
7090 STA ICCOM,X
7100 JSR CIO
7110 LDX #$60
7120 LDA #255&COPEN
7130 STA ICCOM,X
7140 LDA #SCREENNAME&255
7150 STA ICBADR,X
7160 LDA #SCREENNAME/256
7170 STA ICBADR+1,X
7180 PLA
7190 STA ICAUX2,X
7200 AND #$F0
7210 EOR #$1C
7220 STA ICAUX1,X
7230 JSR CIO
7240 LDA 560
7250 STA REG2
7260 LDA 561
7270 STA REG2+1
7280 LDY #7
7290 LDA (REG2),Y
7300 STA ANTICMOD
7310 RTS
7320 CIO = $E456
7330 ICCOM = $0342
7340 ICBADR = $0344
7350 ICAUX1 = $034A
7360 ICAUX2 = $034B
7370 COPEN = 3
7380 CCLOSE = 12
7390 SCREENNAME .BYTE "S:"
7400 CIRWORD
7410 ;THE CIRCLE DATA. HERE GOES:
7420 .BYTE 153,153,153,153,153,153,153,153,153,153,153,152,152,152,152,152,152,152,151,151
7430 .BYTE 151,151,151,150,150,150,150,150,149,149,149,148,148,148,147,147,147,146,146,146
7440 .BYTE 145,145,144,144,144,143,143,142,142,141,141,140,140,139,138,138,137,137,136,135
7450 .BYTE 135,134,134,133,132,131,131,130,129,128,128,127,126,125,124,123,123,122,121,120
7460 .BYTE 119,118,117,116,115,114,113,111,110,109,108,107,105,104,103,102,100,99,97,96
7470 .BYTE 94,93,91,90,88,86,84,82,81,79,76,74,72,70,67,65,62,60,57,53
7480 .BYTE 50,46,43,38,33,27,19,0
7490 TEXTPLOT
7500 PLA
7510 PLA
7520 PLA
7530 STA XLOC
7540 PLA
7550 PLA
7560 STA YLOC
7570 PLA
7580 STA STRHI
7590 PLA
7600 STA STRLO
7610 PLA
7620 PLA
7630 STA STRLEN
7640 DEC STRLEN
7650 LDY #0
7660 TEXT.1
7670 LDA STRLO
7680 STA REG2
7690 LDA STRHI
7700 STA REG2+1
7710 LDA (REG2),Y
7720 STY YTEMP
7730 PHA ; STORE LETTER
7740 AND #$60
7750 LSR A
7760 LSR A
7770 LSR A
7780 LSR A
7790 LSR A
7800 TAY ;CONVERSION
7810 LDA CONV,Y
7820 STA XTEMP
7830 PLA
7840 AND #$9F
7850 ORA XTEMP ;DONE!
7860 STA SLOPE
7870 LDA #0
7880 STA SLOPE+1
7890 CLC
7900 ROL SLOPE
7910 ROL SLOPE+1
7920 ROL SLOPE
7930 ROL SLOPE+1
7940 ROL SLOPE
7950 ROL SLOPE+1
7960 LDA SLOPE
7970 STA REG2
7980 LDA SLOPE+1
7990 CLC
8000 ADC #57344/256
8010 STA REG2+1 ;REG2=CHS+8*ASC
8020 LDY #7
8030 TEXT.2 STY YTEMP2
8040 TYA
8050 CLC
8060 ADC YLOC
8070 TAX
8080 LDA XLOC
8090 LSR A
8100 LSR A
8110 CLC
8120 MEM88.1
8130 ADC SCR.TABLE,X
8140 STA REG1
8150 LDA SCR.TABLE+$C0,X
8160 ADC #0
8170 MEM89.1
8180 STA REG1+1 ;REG1=SCR.BYTE
8190 LDA XLOC
8200 AND #$03
8210 TAX
8220 CLC
8230 LDY YTEMP2
8240 LDA (REG2),Y
8250 STA REG3
8260 LDA #0
8270 STA REG3+1
8280 TEXT.3
8290 ROR REG3
8300 ROR REG3+1
8310 DEX
8320 BPL TEXT.3
8330 LDY #0
8340 LDA TEXT.CLEAR
8350 AND (REG1),Y
8360 EOR REG3
8370 STA (REG1),Y
8380 INY
8390 LDA TEXT.CLEAR
8400 AND (REG1),Y
8410 EOR REG3+1
8420 STA (REG1),Y
8430 LDY YTEMP2
8440 DEY
8450 BPL TEXT.2
8460 INC XLOC
8470 INC XLOC
8480 INC XLOC
8490 INC XLOC
8500 LDA XLOC
8510 CMP #152
8520 BCC TEXT.5
8530 SEC
8540 SBC #152
8550 STA XLOC
8560 LDA YLOC
8570 CLC
8580 ADC #8
8590 STA YLOC
8600 CMP #184
8610 BCC TEXT.5
8620 TEXT.5
8630 LDY YTEMP
8640 CPY STRLEN
8650 BEQ TEXT.4
8660 INY
8670 JMP TEXT.1
8680 TEXT.4
8690 RTS
8700 TEXT.CLEAR .WORD 255
8710 CONV .BYTE $40,$00,$20,$60
8720 G128 .WORD 0
8730 DTAB .BYTE 0,0,0,2,3,2,3,2,3,1,1,1,0,0,3,2
8740 ;LOG2 OF HBTAB
8750 HBTAB .BYTE 1,1,1,4,8,4,8,4,8,2,2,2,1,1,8,4
8760 ;PIXELS PER BYTE
8770 TEMP .WORD 0
8780 ONEPLOT
8790 PLA ;BASIC ENTRY - PLOT
8800 PLA
8810 PLA
8820 STA XLOC
8830 PLA
8840 PLA
8850 STA YLOC
8860 JMP PLOT
8870 COLORN
8880 PLA ;A=USR(SET,A1,A2,A3,A4)
8890 LDX #4
8900 LDY #0
8910 COLOR.2
8920 PLA
8930 PLA
8940 STA COLOR,Y
8950 INY
8960 DEX
8970 BNE COLOR.2
8980 RTS
8990 RANDOM
9000 PLA
9010 LDX #3
9020 RND.LOOP
9030 LDA 53770
9040 STA COLOR,X
9050 DEX
9060 BPL RND.LOOP
9070 RTS
9080 INIT
9090 LDA 88
9100 STA REG1
9110 LDA 89
9120 STA REG1+1
9130 LDY #39
9140 INITLOOP
9150 LDA TITLE,Y
9160 STA (REG1),Y
9170 DEY
9180 BPL INITLOOP
9190 LDA #255
9200 STA ONEORMANY
9210 LDA #$24
9220 STA 710
9230 RTS
9240 SETCOLOR
9250 *= *+9
9260 SCR.TABLE
9270 *= *+384
9280 END
Back to previous page