dos33fsprogs/graphics/hgr/circles/circles.s

243 lines
2.5 KiB
ArmAsm
Raw Normal View History

2021-06-18 04:36:44 +00:00
; circles tiny -- Apple II Hires
2021-06-14 15:53:12 +00:00
2021-06-18 16:51:40 +00:00
; 229 -- first
; 228 -- remove shift
; 190 -- move hplots into two loops
; 169 -- move hplots into one loop
; 166 -- small enough we can use bcs again
; 157 -- some more math
2021-06-14 15:53:12 +00:00
; D0+ used by HGR routines
HGR_COLOR = $E4
HGR_PAGE = $E6
2021-06-18 16:51:40 +00:00
COUNT = $F6
XX = $F7
MINUSXX = $F8
YY = $F9
MINUSYY = $FA
D = $FB
2021-06-18 04:36:44 +00:00
R = $FC
CX = $FD
CY = $FE
2021-06-14 15:53:12 +00:00
FRAME = $FF
; soft-switches
2021-06-18 16:51:40 +00:00
KEYPRESS = $C000
KEYRESET = $C010
2021-06-14 15:53:12 +00:00
; 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
2021-06-18 04:36:44 +00:00
COLORTBL = $F6F6
2021-06-14 15:53:12 +00:00
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
2021-06-18 04:36:44 +00:00
circles:
2021-06-14 15:53:12 +00:00
2021-06-18 16:51:40 +00:00
2021-06-14 15:53:12 +00:00
2021-06-18 12:43:28 +00:00
lda #0
sta R
2021-06-18 04:36:44 +00:00
draw_next:
2021-06-18 16:51:40 +00:00
lda KEYPRESS
bpl draw_next
bit KEYRESET
jsr HGR2
;draw_next:
2021-06-18 12:43:28 +00:00
.if 0
2021-06-18 04:36:44 +00:00
inc FRAME
ldy FRAME
2021-06-14 15:53:12 +00:00
2021-06-18 04:36:44 +00:00
; Random Color
; HCOLOR=1+RND(1)*7
lda $F000,Y
and #$7 ; mask to 0...7
2021-06-14 15:53:12 +00:00
tax
2021-06-18 04:36:44 +00:00
lda COLORTBL,X
sta HGR_COLOR
2021-06-14 15:53:12 +00:00
2021-06-18 04:36:44 +00:00
; CX
lda $F100,Y
and #$7f
clc
adc #$40
2021-06-18 04:55:18 +00:00
sta CX
2021-06-14 15:53:12 +00:00
2021-06-18 04:36:44 +00:00
; CY
2021-06-18 04:55:18 +00:00
lda $F200,Y
2021-06-18 04:36:44 +00:00
and #$7f
clc
2021-06-18 04:55:18 +00:00
adc #$20
sta CY
2021-06-14 15:53:12 +00:00
2021-06-18 04:36:44 +00:00
; R
2021-06-18 04:55:18 +00:00
lda $F300,Y
2021-06-18 04:36:44 +00:00
and #$3f
sta R
2021-06-18 12:43:28 +00:00
.endif
2021-06-14 15:53:12 +00:00
2021-06-18 04:36:44 +00:00
; A=40+RND(1)*200:B=40+RND(1)*100:Y=RND(1)*40
2021-06-14 15:53:12 +00:00
2021-06-18 12:43:28 +00:00
lda #128
sta CX
lda #96
sta CY
2021-06-18 16:51:40 +00:00
;===============================
; draw circle
;===============================
; draw circle at (CX,CY) of radius R
; signed 8-bit math so problems if R > 64?
2021-06-18 12:43:28 +00:00
2021-06-18 04:55:18 +00:00
; XX=0 YY=R
; D=3-2*R
; GOTO6
2021-06-18 16:51:40 +00:00
2021-06-18 04:36:44 +00:00
lda #0
sta XX
2021-06-14 15:53:12 +00:00
2021-06-18 04:36:44 +00:00
lda R
sta YY
2021-06-18 04:55:18 +00:00
2021-06-18 04:36:44 +00:00
lda #3
sec
2021-06-18 16:51:40 +00:00
sbc R
sbc R
2021-06-18 04:36:44 +00:00
sta D
2021-06-14 15:53:12 +00:00
2021-06-18 04:55:18 +00:00
jmp do_plots
2021-06-18 04:36:44 +00:00
circle_loop:
; X=X+1
2021-06-14 15:53:12 +00:00
2021-06-18 04:36:44 +00:00
inc XX
2021-06-14 15:53:12 +00:00
2021-06-18 04:36:44 +00:00
; IF D>0 THEN Y=Y-1:D=D+4*(X-Y)+10
lda D
bmi else
2021-06-14 15:53:12 +00:00
2021-06-18 04:36:44 +00:00
dec YY
2021-06-14 15:53:12 +00:00
2021-06-18 04:36:44 +00:00
lda XX
2021-06-14 15:53:12 +00:00
sec
2021-06-18 04:36:44 +00:00
sbc YY
asl
asl
2021-06-14 15:53:12 +00:00
clc
2021-06-18 04:36:44 +00:00
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
2021-06-14 15:53:12 +00:00
2021-06-18 04:55:18 +00:00
do_plots:
2021-06-18 16:51:40 +00:00
; setup constants
2021-06-14 15:53:12 +00:00
2021-06-18 16:51:40 +00:00
lda XX
eor #$FF
sta MINUSXX
inc MINUSXX
2021-06-14 15:53:12 +00:00
2021-06-18 16:51:40 +00:00
lda YY
eor #$FF
sta MINUSYY
inc MINUSYY
2021-06-14 15:53:12 +00:00
2021-06-18 16:51:40 +00:00
; HPLOT CX+X,CY+Y
2021-06-18 04:36:44 +00:00
; HPLOT CX-X,CY+Y
; HPLOT CX+X,CY-Y
; HPLOT CX-X,CY-Y
; HPLOT CX+Y,CY+X
2021-06-18 16:51:40 +00:00
; HPLOT CX-Y,CY+X
; HPLOT CX+Y,CY-X
; HPLOT CX-Y,CY-X
2021-06-18 04:55:18 +00:00
2021-06-18 16:51:40 +00:00
; calc X co-ord
lda #7
sta COUNT
pos_loop:
lda COUNT
and #$4
lsr
tay
lda COUNT
lsr
bcc xnoc
iny
xnoc:
2021-06-18 04:55:18 +00:00
lda CX
clc
2021-06-18 16:51:40 +00:00
adc XX,Y
2021-06-18 04:55:18 +00:00
tax
2021-06-18 16:51:40 +00:00
; calc y co-ord
2021-06-18 04:55:18 +00:00
2021-06-18 16:51:40 +00:00
lda COUNT
lsr
eor #$2
tay
2021-06-18 04:55:18 +00:00
lda CY
clc
2021-06-18 16:51:40 +00:00
adc XX,Y
2021-06-18 04:55:18 +00:00
ldy #0
jsr HPLOT0 ; plot at (Y,X), (A)
2021-06-18 16:51:40 +00:00
dec COUNT
bpl pos_loop
2021-06-18 04:55:18 +00:00
2021-06-18 04:36:44 +00:00
; IFY>=XTHEN4
lda YY
cmp XX
2021-06-18 16:51:40 +00:00
bcs circle_loop
2021-06-18 04:36:44 +00:00
2021-06-18 04:55:18 +00:00
done:
2021-06-18 12:43:28 +00:00
lda R
clc
2021-06-18 16:51:40 +00:00
adc #1
2021-06-18 12:43:28 +00:00
sta R
stop:
cmp #90
beq stop
2021-06-18 04:36:44 +00:00
; GOTO1
2021-06-18 04:55:18 +00:00
jmp draw_next