From 19b2aac527651e2943107988871d75318654f626 Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Wed, 24 Nov 2021 00:00:53 -0500 Subject: [PATCH] hgr: circle --- graphics/hgr/plasma/Makefile | 14 +++- graphics/hgr/plasma/circle.s | 129 +++++++++++++++++++++++++++++++++++ 2 files changed, 141 insertions(+), 2 deletions(-) create mode 100644 graphics/hgr/plasma/circle.s diff --git a/graphics/hgr/plasma/Makefile b/graphics/hgr/plasma/Makefile index 3d1bae09..257cc9eb 100644 --- a/graphics/hgr/plasma/Makefile +++ b/graphics/hgr/plasma/Makefile @@ -8,11 +8,12 @@ EMPTYDISK = ../../../empty_disk/empty.dsk all: plasma_hgr.dsk plasma_hgr.dsk: HELLO OVAL PURPLE_WAVES ZEBRA JAWS TWIST OVAL_FLIP MOVING \ - MIRROR THICK_SINE THICK_LINES + MIRROR THICK_SINE THICK_LINES CIRCLE cp $(EMPTYDISK) plasma_hgr.dsk $(DOS33) -y plasma_hgr.dsk SAVE A HELLO $(DOS33) -y plasma_hgr.dsk BSAVE -a 0x3F5 THICK_SINE $(DOS33) -y plasma_hgr.dsk BSAVE -a 0x3F5 THICK_LINES + $(DOS33) -y plasma_hgr.dsk BSAVE -a 0x3F5 CIRCLE $(DOS33) -y plasma_hgr.dsk BSAVE -a 0xc00 OVAL $(DOS33) -y plasma_hgr.dsk BSAVE -a 0xc00 PURPLE_WAVES $(DOS33) -y plasma_hgr.dsk BSAVE -a 0xc00 ZEBRA @@ -53,6 +54,15 @@ thick_sine.o: thick_sine.s ### +CIRCLE: circle.o + ld65 -o CIRCLE circle.o -C $(LINKERSCRIPTS)/apple2_3f5.inc + +circle.o: circle.s + ca65 -o circle.o circle.s -l circle.lst + + +### + THICK_LINES: thick_lines.o ld65 -o THICK_LINES thick_lines.o -C $(LINKERSCRIPTS)/apple2_3f5.inc @@ -115,5 +125,5 @@ purple_waves.o: purple_waves.s clean: rm -f *~ *.o *.lst OVAL PURPLE_WAVES ZEBRA JAWS TWIST OVAL_FLIP \ - THICK_SINE THICK_LINES + THICK_SINE THICK_LINES CIRCLE diff --git a/graphics/hgr/plasma/circle.s b/graphics/hgr/plasma/circle.s new file mode 100644 index 00000000..5d0c4528 --- /dev/null +++ b/graphics/hgr/plasma/circle.s @@ -0,0 +1,129 @@ +; circle + +; zero page +GBASL = $26 +GBASH = $27 +YY = $69 +ROW_SUM = $70 + +HGR_X = $E0 +HGR_XH = $E1 +HGR_Y = $E2 +HGR_COLOR = $E4 +HGR_PAGE = $E6 + +FRAME = $FC +SUM = $FD +SAVEX = $FE +SAVEY = $FF + +; soft-switches +FULLGR = $C052 +PAGE1 = $C054 + +; ROM routines + +HGR2 = $F3D8 +HPOSN = $F411 ; (Y,X),(A) (values stores in HGRX,XH,Y) +HPLOT0 = $F457 ; plot at (Y,X), (A) + + ;================================ + ; Clear screen and setup graphics + ;================================ +thick_sine: + + jsr HGR2 ; set hi-res 140x192, page2, fullscreen + ; A and Y both 0 at end + ;================== + ; create sinetable + + ;ldy #0 ; Y is 0 +sinetable_loop: + tya ; 2 + and #$3f ; wrap sine at 63 entries ; 2 + + cmp #$20 + php ; save pos/negative for later + + and #$1f + + cmp #$10 + bcc sin_left ; blt + +sin_right: + ; sec carry should be set here + eor #$FF + adc #$20 ; 32-X +sin_left: + tax + lda sinetable_base,X ; 4+ + + plp + bcc sin_done + +sin_negate: + ; carry set here + eor #$ff + adc #0 ; FIXME: this makes things off by 1 + +sin_done: + sta sinetable,Y + + iny + bne sinetable_loop + + + ;============================ + ; main loop + ;============================ + +draw_circle: + + + ldx #0 + stx SAVEX + +circle_loop: + lda SAVEX + clc + adc #$10 + tax + lda sinetable,X + clc + adc #$80 + sta SAVEY + + + ldx SAVEX + lda sinetable,X +; asl + ; $60 is midscreen + adc #$60 + + ldx SAVEY + ldy #0 + + jsr HPLOT0 ; plot at (Y,X), (A) + + inc SAVEX + + bne circle_loop + +done: + +blah: + + jmp blah + + +sinetable_base: +; this is actually (32*sin(x)) +.byte $00,$03,$06,$09,$0C,$0F,$11,$14 +.byte $16,$18,$1A,$1C,$1D,$1E,$1F,$1F +.byte $20 + + ; for bot + ; 3F5 - 7d = 378 +; jmp oval + +sinetable=$6000