diff --git a/graphics/hgr/circles/Makefile b/graphics/hgr/circles/Makefile index 4bbfd4b4..63337061 100644 --- a/graphics/hgr/circles/Makefile +++ b/graphics/hgr/circles/Makefile @@ -7,7 +7,7 @@ EMPTY_DISK = ../../../empty_disk all: circles.dsk -circles.dsk: HELLO CIRCLES ARCS \ +circles.dsk: HELLO CIRCLES ARCS WEB \ BRES.BAS BRESBOT.BAS BRESCOOL.BAS \ MID.BAS MIDBOT.BAS MIDCOOL.BAS cp $(EMPTY_DISK)/empty.dsk circles.dsk @@ -20,6 +20,7 @@ circles.dsk: HELLO CIRCLES ARCS \ $(DOS33) -y circles.dsk SAVE A MIDCOOL.BAS $(DOS33) -y circles.dsk BSAVE -a 0x0C00 CIRCLES $(DOS33) -y circles.dsk BSAVE -a 0x0C00 ARCS + $(DOS33) -y circles.dsk BSAVE -a 0x0C00 WEB ### @@ -66,7 +67,7 @@ CIRCLES: circles.o circles.o: circles.s ca65 -o circles.o circles.s -l circles.lst -### +# ARCS: arcs.o ld65 -o ARCS arcs.o -C $(LINKER_SCRIPTS)/apple2_c00.inc @@ -74,10 +75,19 @@ ARCS: arcs.o arcs.o: arcs.s ca65 -o arcs.o arcs.s -l arcs.lst +# + +WEB: web.o + ld65 -o WEB web.o -C $(LINKER_SCRIPTS)/apple2_c00.inc + +web.o: web.s + ca65 -o web.o web.s -l web.lst + + ### clean: - rm -f *~ *.o *.lst CIRCLES ARCS \ + rm -f *~ *.o *.lst CIRCLES ARCS WEB \ BRES.BAS BRESBOT.BAS BRESCOOL.BAS \ MID.BAS MIDBOT.BAS MIDCOOL.BAS diff --git a/graphics/hgr/circles/circles.s b/graphics/hgr/circles/circles.s index 241f6b96..ae2aa05a 100644 --- a/graphics/hgr/circles/circles.s +++ b/graphics/hgr/circles/circles.s @@ -49,36 +49,42 @@ draw_next: ; CX lda $F100,Y and #$7f - sta CX clc adc #$40 + sta CX ; CY - lda $F100,Y + lda $F200,Y and #$7f - sta CY clc - adc #$40 + adc #$20 + sta CY ; R - lda $F100,Y + lda $F300,Y and #$3f sta R ; A=40+RND(1)*200:B=40+RND(1)*100:Y=RND(1)*40 - ; 3X=0:D=3-2*Y:GOTO6 + ; XX=0 YY=R + ; D=3-2*R + ; GOTO6 lda #0 sta XX lda R - asl sta YY + + asl + sta D lda #3 sec - sbc YY + sbc D sta D + jmp do_plots + circle_loop: ; X=X+1 @@ -111,6 +117,7 @@ else: store_D: sta D +do_plots: ; HPLOT CX+X,CY+Y lda CX @@ -125,17 +132,106 @@ store_D: jsr HPLOT0 ; plot at (Y,X), (A) ; HPLOT CX-X,CY+Y + + lda CX + sec + sbc XX + tax + ldy #0 + lda CY + clc + adc YY + + jsr HPLOT0 ; plot at (Y,X), (A) + ; HPLOT CX+X,CY-Y + + lda CX + clc + adc XX + tax + ldy #0 + lda CY + sec + sbc YY + + jsr HPLOT0 ; plot at (Y,X), (A) + + ; HPLOT CX-X,CY-Y + + lda CX + sec + sbc XX + tax + ldy #0 + lda CY + sec + sbc YY + + jsr HPLOT0 ; plot at (Y,X), (A) + ; HPLOT CX+Y,CY+X + + lda CX + clc + adc YY + tax + ldy #0 + lda CY + clc + adc XX + + jsr HPLOT0 ; plot at (Y,X), (A) + + ; HPLOT CX-Y,CY+X + + lda CX + sec + sbc YY + tax + ldy #0 + lda CY + clc + adc XX + + jsr HPLOT0 ; plot at (Y,X), (A) + ; HPLOT CX+Y,CY-X + + lda CX + clc + adc YY + tax + ldy #0 + lda CY + sec + sbc XX + + jsr HPLOT0 ; plot at (Y,X), (A) + ; HPLOT CX-Y,CY-X + lda CX + sec + sbc YY + tax + ldy #0 + lda CY + sec + sbc XX + + jsr HPLOT0 ; plot at (Y,X), (A) + + ; IFY>=XTHEN4 lda YY cmp XX - bcs circle_loop +; bcs circle_loop + bcc done + jmp circle_loop +done: ; GOTO1 - bcc draw_next + jmp draw_next diff --git a/graphics/hgr/circles/web.s b/graphics/hgr/circles/web.s new file mode 100644 index 00000000..ae2aa05a --- /dev/null +++ b/graphics/hgr/circles/web.s @@ -0,0 +1,237 @@ +; circles tiny -- Apple II Hires + + +; D0+ used by HGR routines + +HGR_COLOR = $E4 +HGR_PAGE = $E6 + +D = $F9 +XX = $FA +YY = $FB +R = $FC +CX = $FD +CY = $FE +FRAME = $FF + +; soft-switches + +; ROM routines + +HGR2 = $F3D8 ; set hires page2 and clear $4000-$5fff +HGR = $F3E2 ; set hires page1 and clear $2000-$3fff +HPLOT0 = $F457 ; plot at (Y,X), (A) +HCOLOR1 = $F6F0 ; set HGR_COLOR to value in X +COLORTBL = $F6F6 +PLOT = $F800 ; PLOT AT Y,A (A colors output, Y preserved) +NEXTCOL = $F85F ; COLOR=COLOR+3 +SETCOL = $F864 ; COLOR=A +SETGR = $FB40 ; set graphics and clear LO-RES screen +BELL2 = $FBE4 +WAIT = $FCA8 ; delay 1/2(26+27A+5A^2) us + +circles: + + jsr HGR2 + +draw_next: + inc FRAME + ldy FRAME + + ; Random Color + ; HCOLOR=1+RND(1)*7 + lda $F000,Y + and #$7 ; mask to 0...7 + tax + lda COLORTBL,X + sta HGR_COLOR + + ; CX + lda $F100,Y + and #$7f + clc + adc #$40 + sta CX + + ; CY + lda $F200,Y + and #$7f + clc + adc #$20 + sta CY + + ; R + lda $F300,Y + and #$3f + sta R + + ; A=40+RND(1)*200:B=40+RND(1)*100:Y=RND(1)*40 + + ; XX=0 YY=R + ; D=3-2*R + ; GOTO6 + lda #0 + sta XX + + lda R + sta YY + + asl + sta D + lda #3 + sec + sbc D + sta D + + jmp do_plots + +circle_loop: + ; X=X+1 + + inc XX + + ; IF D>0 THEN Y=Y-1:D=D+4*(X-Y)+10 + lda D + bmi else + + dec YY + + lda XX + sec + sbc YY + asl + asl + clc + adc D + adc #10 + jmp store_D + +else: + ; ELSE D=D+4*X+6 + lda XX + asl + asl + clc + adc D + adc #6 +store_D: + sta D + +do_plots: + ; HPLOT CX+X,CY+Y + + lda CX + clc + adc XX + tax + ldy #0 + lda CY + clc + adc YY + + jsr HPLOT0 ; plot at (Y,X), (A) + + ; HPLOT CX-X,CY+Y + + lda CX + sec + sbc XX + tax + ldy #0 + lda CY + clc + adc YY + + jsr HPLOT0 ; plot at (Y,X), (A) + + ; HPLOT CX+X,CY-Y + + lda CX + clc + adc XX + tax + ldy #0 + lda CY + sec + sbc YY + + jsr HPLOT0 ; plot at (Y,X), (A) + + + ; HPLOT CX-X,CY-Y + + lda CX + sec + sbc XX + tax + ldy #0 + lda CY + sec + sbc YY + + jsr HPLOT0 ; plot at (Y,X), (A) + + ; HPLOT CX+Y,CY+X + + lda CX + clc + adc YY + tax + ldy #0 + lda CY + clc + adc XX + + jsr HPLOT0 ; plot at (Y,X), (A) + + + ; HPLOT CX-Y,CY+X + + lda CX + sec + sbc YY + tax + ldy #0 + lda CY + clc + adc XX + + jsr HPLOT0 ; plot at (Y,X), (A) + + ; HPLOT CX+Y,CY-X + + lda CX + clc + adc YY + tax + ldy #0 + lda CY + sec + sbc XX + + jsr HPLOT0 ; plot at (Y,X), (A) + + ; HPLOT CX-Y,CY-X + + lda CX + sec + sbc YY + tax + ldy #0 + lda CY + sec + sbc XX + + jsr HPLOT0 ; plot at (Y,X), (A) + + + ; IFY>=XTHEN4 + lda YY + cmp XX +; bcs circle_loop + bcc done + + jmp circle_loop +done: + ; GOTO1 + jmp draw_next