100 SYS700 110 ; 120 ; < < < GRAPHICS V1.0 > > > 130 ; COPYRIGHT 1988 BY ROBERT HUEHN 140 ; HIGH SPEED GRAPHIC ROUTINES 150 ; JAN 1988 160 ; 170 ;ZPAGE PSEUDO REGISTERS 180 R0 =$02 190 R1 =$04 200 R2 =$06 210 R3 =$08 220 R4 =$0A 230 R5 =$0C 240 R6 =$0E 250 R7 =$10 260 R8 =$12 270 R9 =$14 280 ; 290 *=$9000 300 ;JUMP TABLE 310 BMON JMP IBMON 320 BMOFF JMP IBMOFF 330 BMCLR JMP IBMCLR 340 TXCLR JMP ITXCLR 350 PLOT JMP IPLOT 360 DRAW JMP IDRAW 370 ; 380 BITAB =* ;PIXEL MASKS 390 .BYTE 128,64,32,16,8,4,2,1 400 LOTAB =* ;BASE ADDRESSES 410 HITAB =*+1 420 .WORD $A000,$A140,$A280,$A3C0 430 .WORD $A500,$A640,$A780,$A8C0 440 .WORD $AA00,$AB40,$AC80,$ADC0 450 .WORD $AF00,$B040,$B180,$B2C0 460 .WORD $B400,$B540,$B680,$B7C0 470 .WORD $B900,$BA40,$BB80,$BCC0 480 .WORD $BE00 490 ; 500 ;TURN ON BIT MAP AT $A000 510 IBMON =* 520 LDA $DD00 530 AND #$30 540 ORA #$01 550 STA $DD00 560 LDA #$3B 570 STA $D011 580 LDA #$38 590 STA $D018 600 RTS 610 ; 620 ;BACK TO NORMAL TEXT 630 IBMOFF =* 640 LDA $DD00 650 AND #$30 660 ORA #$03 670 STA $DD00 680 LDA #$1B 690 STA $D011 700 LDA #$15 710 STA $D018 720 RTS 730 ; 740 ;CLEAR BIT MAP $A000-BF40 750 IBMCLR =* 760 LDA #0 770 LDX #250 780 CL1 STA $9FFF,X 790 STA $A0F9,X 800 STA $A1F3,X 810 STA $A2ED,X 820 STA $A3E7,X 830 STA $A4E1,X 840 STA $A5DB,X 850 STA $A6D5,X 860 STA $A7CF,X 870 STA $A8C9,X 880 STA $A9C3,X 890 STA $AABD,X 900 STA $ABB7,X 910 STA $ACB1,X 920 STA $ADAB,X 930 STA $AEA5,X 940 STA $AF9F,X 950 STA $B099,X 960 STA $B193,X 970 STA $B28D,X 980 STA $B387,X 990 STA $B481,X 1000 STA $B57B,X 1010 STA $B675,X 1020 STA $B76F,X 1030 STA $B869,X 1040 STA $B963,X 1050 STA $BA5D,X 1060 STA $BB57,X 1070 STA $BC51,X 1080 STA $BD4B,X 1090 STA $BE45,X 1100 DEX 1110 BNE CL1 1120 RTS 1130 ; 1140 ;SET BIT MAP COLOUR AT $8C00 1150 ITXCLR =* 1160 LDA #$BF 1170 LDX #250 1180 COL1 STA $8BFF,X 1190 STA $8CF9,X 1200 STA $8DF3,X 1210 STA $8EED,X 1220 DEX 1230 BNE COL1 1240 RTS 1250 ; 1260 ;FAST LINE DRAW 1270 IDRAW =* 1280 ;PASSED: 1290 X1 =R0 1300 Y1 =R1 1310 X2 =R2 1320 Y2 =R3 1330 ;ALTERED: 1340 DX =R4 ;DELTA X 1350 DY =R5 ;DELTA Y 1360 XI =R5+1 ;L/R FLAG 1370 YI =R6 ;U/D FLAG 1380 BASE =R7 ;BASE OF PIXEL ADDR 1390 M =R6+1 ;PIXEL MASK 1400 C =R8 ;COUNT 1410 R =R9 ; 1420 LDX #0 ;XINC=RIGHT 1430 LDY #0 ;YINC=DOWN 1440 LDA X2 ;CALCULATE DX=X2-X1 1450 SEC 1460 SBC X1 1470 STA DX 1480 LDA X2+1 1490 SBC X1+1 1500 STA DX+1 1510 BCS DR1 1520 DEX ; DX<0, XINC=LEFT 1530 LDA #1 1540 SBC DX 1550 STA DX 1560 LDA #0 1570 SBC DX+1 1580 STA DX+1 1590 DR1 LDA Y2 ;DY=Y2-Y1 1600 SEC 1610 SBC Y1 1620 BCS DR2 1630 DEY ;DY<0, YINC=UP 1640 EOR #$FF ;DY=ABS(DY) 1650 ADC #1 1660 DR2 STA DY 1670 STX XI 1680 STY YI 1690 LDA Y1 ;PLOT (X1,Y1) 1700 AND #7 1710 TAY 1720 EOR Y1 1730 LSR 1740 LSR 1750 TAX 1760 LDA X1 1770 AND #$F8 1780 ADC LOTAB,X 1790 STA BASE ;SAVE BASE 1800 LDA HITAB,X 1810 ADC X1+1 1820 STA BASE+1 1830 LDA X1 1840 AND #7 1850 TAX 1860 LDA BITAB,X 1870 STA M ;SAVE MASK 1880 ORA (BASE),Y 1890 STA (BASE),Y 1900 LDA DX+1 1910 BNE DRI 1920 LDA DX ;(DX>=DY) 1930 CMP DY 1940 BCS DRI 1950 JMP DRII 1960 DRI =*;CASE I -1=DX, 2400 STA R+1;R=R-DX 2410 LDA YI 2420 BMI DR7 2430 INY ;DOWN 2440 CPY #8 2450 BCC DR8 2460 LDY #0 2470 LDA BASE 2480 ADC #$3F 2490 STA BASE 2500 LDA BASE+1 2510 ADC #1 2520 BCC DR18 2530 DR7 DEY ;UP 2540 BPL DR8 2550 LDY #7 2560 LDA BASE 2570 SBC #$40 2580 STA BASE 2590 LDA BASE+1 2600 SBC #1 2610 DR18 STA BASE+1 2620 DR8 LDA (BASE),Y 2630 ORA M 2640 STA (BASE),Y ;PLOT (X,Y) 2650 DEC C 2660 BNE DR3 2670 DEC C+1 2680 BEQ DR3 ;NEXT 2690 DR9 RTS 2700 DRII =* ; -1>SLOPE>1 2710 LDA DY 2720 BEQ DR15 ;SINGLE POINT 2730 STA C ;C=DY 2740 LSR 2750 STA R ;R=DY/2 2760 DR10 LDA YI 2770 BMI DR11 2780 INY ;DOWN 2790 CPY #8 2800 BCC DR12 2810 LDY #0 2820 LDA BASE 2830 ADC #$3F 2840 STA BASE 2850 LDA BASE+1 2860 ADC #1 2870 BCC DR19 2880 DR11 DEY ;UP 2890 BPL DR12 2900 LDY #7 2910 SEC 2920 LDA BASE 2930 SBC #$40 2940 STA BASE 2950 LDA BASE+1 2960 SBC #1 2970 DR19 STA BASE+1 2980 DR12 LDX #0 2990 LDA R ;R=R+DX 3000 CLC 3010 ADC DX 3020 STA R 3030 BCS DR16 3040 INX 3050 SEC 3060 DR16 SBC DY 3070 BCS DR17 3080 DEX 3090 BEQ DR14 3100 DR17 STA R ;R>=DY, R=R-DY 3110 LDA XI 3120 BMI DR13 3130 LSR M ;RIGHT 3140 BCC DR14 3150 ROR M 3160 LDA BASE 3170 ADC #8 3180 STA BASE 3190 BCC DR14 3200 INC BASE+1 3210 BNE DR14 3220 DR13 ASL M ;LEFT 3230 BCC DR14 3240 ROL M 3250 LDA BASE 3260 SBC #7 3270 STA BASE 3280 BCS DR14 3290 DEC BASE+1 3300 DR14 LDA (BASE),Y 3310 ORA M 3320 STA (BASE),Y ;PLOT (X,Y) 3330 DEC C 3340 BNE DR10 ;NEXT 3350 DR15 RTS 3360 ; 3370 ;FAST PLOT 3380 IPLOT =* 3390 ;PASSED: 3400 XC =R0 3410 YC =R1 3420 ;ALTERED: 3430 ;BASE =R7 3440 PTEMP =R6+1 3450 LDA YC 3460 AND #7 3470 STA PTEMP 3480 EOR YC 3490 LSR 3500 LSR 3510 TAX 3520 LDA HITAB,X 3530 ADC XC+1 3540 STA BASE+1 3550 LDA LOTAB,X 3560 STA BASE 3570 LDA XC 3580 AND #7 3590 TAX 3600 EOR XC 3610 ADC PTEMP 3620 TAY 3630 LDA (BASE),Y 3640 ORA BITAB,X 3650 STA (BASE),Y 3660 RTS