100 REM 'HIRES' CIRCLE - POLYGON 110 REM SOURCE FILE BY ANTHONY BRYANT 120 SYS 700 130 .OPT N 140 ; 150 ; 160 ;"HIRES" VARIABLES BY G.KIZIAK 170 X1 = $C027 ;CURRENT POSITION 180 Y1 = $C029 190 X2 = $C02B ;NEW POSITION 200 Y2 = $C02D 210 XC = $C02F ;CIRC CENTRE (ALSO BOX) 220 YC = $C031 230 HM = $C035 ;HIRES/MULTI FLAG 240 ; 250 ; 260 ;"HIRES" INTERNAL SUBROUTINES 270 IGETI =$C17C ;INTERNAL GET INTEGER 280 IEGET =$C187 ;INTERNAL EAT & GET X,Y 290 MOVE =$C26E ;'MOVE' RTN 300 IMOV =$C271 ;INTERNAL MOVETO X1,Y1 310 IPLT =$C375 ;INTERNAL PLOT 320 IDRW =$C42B ;INTERNAL DRAWTO 330 ; 340 ;ZERO PAGE LABELS 350 THETA = $57 ;THE ANGLE (0-90DEG) 360 YSIGN = $58 ;DEPENDENT ON QUADRANT 370 XSIGN = $59 ; " " 380 ; 390 *=$8000 ;423 BYTES 400 ; 410 XR .WOR 0 ;X RADIUS 420 YR .WOR 0 ;Y RADIUS 430 ARCST .WOR 0 ;ARC START (DEG) 440 ARCEND .WOR 360;ARC END ANGL (DEG) 450 DELTA .BYT 5 ;POLY(null)N INCR (DEG) 460 ; 470 ;SUBROUTINE GET ANGLE (DEG) INTEGER 480 ;ACCURACY TO 1 DEG (HEX 5A=90DEG) 490 GETAN PHA ;SAVE ACC 500 JSR $0079 510 BEQ NOMORE 520 JSR $AEFD ;EAT "," 530 CMP #"," 540 BEQ NOMORE ;ANOTHER "," ! 550 PLA ;THROW AWAY ACC 560 JMP IGETI ;GET INTEGER TO .A & .X 570 NOMORE PLA 580 RTS ;RESULT IN .A & .X 590 ; 600 ;SUBROUTINE MOVETO XC,YC 610 MOVC LDX #3 620 LDA X2,X 630 STA XC,X 640 DEX 650 BPL MOVC+2 660 RTS 670 ; 680 ;SUBROUTINE MOVETO XR,YR 690 MOVR LDX #3 700 LDA X2,X 710 STA XR,X 720 DEX 730 BPL MOVR+2 740 RTS 750 ; 760 ;SYS CIRCLE,XC,YC,XR,YR[,SA,EA,INC] 770 CIRCLE = * 780 JSR IEGET 790 JSR MOVC ;MOVETO XC,YC 800 JSR IEGET 810 JSR MOVR ;MOVETO XR,YR 820 LDA #0 830 LDX #0 ;DEFAULT ARCST 840 JSR GETAN ;GET SA (DEGREES) 850 STA ARCST 860 STX ARCST+1 870 LDA #<360 880 LDX #>360;DEFAULT ARCEND 890 JSR GETAN ;GET EA (DEGREES) 900 STA ARCEND 910 STX ARCEND+1 920 LDA #5 ;DEFAULT DELTA 930 JSR GETAN ;GET INC (DEGREES) 940 TAX 950 BNE CRC1 960 LDA #1 ;MINIMUM 970 CRC1 STA DELTA 980 LDA #0 990 STA $5B 1000 STA $5C 1010 LOOP LDA ARCST 1020 LDX ARCST+1 1030 LDY #$FF 1040 ;FIND QUADRANT AND ANGLE THETA 1050 LP2 INY 1060 SEC 1070 SBC #$5A 1080 BCS LP2 1090 DEX 1100 BPL LP2 ;.Y=QUADN (0-3) 1110 ADC #$5A 1120 STA THETA ;(0-90DEG) 1130 TYA 1140 LSR 1150 BCC LP3 1160 LDA #$5A 1170 SEC 1180 SBC THETA 1190 STA THETA 1200 LP3 TYA 1210 LSR 1220 LSR 1230 ROR 1240 STA YSIGN 1250 TYA 1260 AND #3 1270 BEQ LP4 1280 SEC 1290 SBC #3 1300 LP4 STA XSIGN 1310 ;DO YR*SIN(THETA) 1320 LDA YR 1330 LDX YR+1 1340 JSR CALCSIN 1350 LDY YSIGN 1360 JSR ABSV ;CHECK Y SIGN 1370 CLC 1380 ADC YC 1390 STA Y2 1400 TXA 1410 ADC YC+1 1420 STA Y2+1 1430 ;DO XR*COS(THETA) 1440 LDA XR 1450 LDX XR+1 1460 JSR CALCCOS 1470 LDY XSIGN 1480 JSR ABSV ;CHECK X SIGN 1490 CLC 1500 ADC XC 1510 STA X2 1520 TXA 1530 ADC XC+1 1540 STA X2+1 1550 LDX $5B 1560 BEQ LP5 ;FLAG A MOVETO 1570 JSR IDRW ;DRAWTO 1580 LDX $5C 1590 BEQ LP6 1600 RTS 1610 LP5 DEC $5B ;CANCEL FLAG 1620 JSR IMOV ;MOVETO 1630 LP6 LDA DELTA 1640 CLC 1650 ADC ARCST 1660 STA ARCST 1670 BCC LP7 1680 INC ARCST+1 1690 LP7 LDA ARCST 1700 CMP ARCEND 1710 LDA ARCST+1 1720 SBC ARCEND+1 1730 BCC LP8 1740 DEC $5C ;CANCEL FLAG 1750 LP8 JMP LOOP 1760 ; 1770 ;SUBROUTINE ABSOLUTE VALUE 1780 ABSV BPL ABOK 1790 CLC 1800 EOR #$FF 1810 ADC #1 1820 PHA 1830 TXA 1840 EOR #$FF 1850 ADC #0 1860 TAX 1870 PLA 1880 ABOK RTS ;RESULT IN .A & .X 1890 ; 1900 ;SUBROUTINE CALCULATE SINE FUNC 1910 CALCCOS PHA 1920 LDA #$5A 1930 SEC 1940 SBC THETA ;(90-THETA) 1950 TAY 1960 PLA 1970 .BYT $2C 1980 CALCSIN LDY THETA 1990 STX $15 ;HIBYT 2000 LDX SINE,Y 2010 CALC STX $22 2020 STA $14 ;LOBYT 2030 LDA #0 2040 STA $23 2050 LDX #8 ;16BIT*FRACT 2060 CAL2 LSR $22 2070 BCC CAL3 2080 CLC 2090 ADC $14 2100 PHA 2110 LDA $23 2120 ADC $15 2130 STA $23 2140 PLA 2150 CAL3 LSR $23 2160 ROR 2170 DEX 2180 BNE CAL2 2190 STA $22 ;RESLO IN .A 2200 LDX $23 2210 RTS ;RESHI IN .X 2220 ; 2230 SINE = * ;TABLE OF SINES (0-90 DEG) 2240 .BYT $00,$04,$09,$0D,$12,$16,$1B,$1F 2250 .BYT $24,$28,$2C,$31,$35,$3A,$3E,$42 2260 .BYT $47,$4B,$4F,$53,$58,$5C,$60,$64 2270 .BYT $68,$6C,$70,$74,$78,$7C,$80,$84 2280 .BYT $88,$8B,$8F,$93,$96,$9A,$9E,$A1 2290 .BYT $A5,$A8,$AB,$AF,$B2,$B5,$B8,$BB 2300 .BYT $BE,$C1,$C4,$C7,$CA,$CC,$CF,$D2 2310 .BYT $D4,$D7,$D9,$DB,$DE,$E0,$E2,$E4 2320 .BYT $E6,$E8,$EA,$EC,$ED,$EF,$F1,$F2 2330 .BYT $F3,$F5,$F6,$F7,$F8,$F9,$FA,$FB 2340 .BYT $FC,$FD,$FE,$FE,$FF,$FF,$FF,$FF 2350 .BYT $FF,$FF,$FF 2360 ; 2370 .END