mirror of
https://github.com/deater/dos33fsprogs.git
synced 2025-02-04 14:35:41 +00:00
sierpinski: optimize
This commit is contained in:
parent
de91828502
commit
ac2fc918f4
@ -1,18 +1,16 @@
|
||||
10 GR
|
||||
20 FOR X=0 TO 39:FOR Y=0 TO 39
|
||||
30 YY=Y:XX=(20-X)
|
||||
80 C1=(YY-(XX*T/256))
|
||||
85 C2=(YY*T/256+XX)
|
||||
87 A=C1:B=C2:GOSUB 120
|
||||
88 C=C-(INT(C/4)*4)
|
||||
95 COLOR=C:PLOT X,Y
|
||||
100 NEXT Y,X
|
||||
110 END
|
||||
120 C=0
|
||||
140 FOR S =0 TO 7
|
||||
150 A = INT(A)/2 : ABIT = ( A-INT(A) ) * 2
|
||||
160 B = INT(B)/2 : BBIT = ( B-INT(B) ) * 2
|
||||
170 IF ABIT + BBIT > 1 THEN C = C + 256
|
||||
180 C = C / 2 : NEXT
|
||||
190 RETURN
|
||||
|
||||
1 GOTO 10
|
||||
5 SPEED=$)%DEL$LRUSR
|
||||
10 HGR
|
||||
20 FOR X=0 TO 256:FOR Y=0 TO 191
|
||||
40 C1=(Y-(X*T/256))
|
||||
45 IF C1<0 THEN C1=C1+256
|
||||
50 C2=(Y*T/256+X)
|
||||
55 IF C2<0 THEN C2=C2+256
|
||||
60 POKE 2062,C1
|
||||
70 POKE 2064,C2:CALL 2061
|
||||
75 POKE 2062,PEEK(36):POKE 2064,252:CALL 2061
|
||||
80 HCOLOR=0
|
||||
85 IF PEEK(36) THEN HCOLOR=1
|
||||
87 HPLOT X,Y
|
||||
90 NEXT Y,X
|
||||
95 T=T+10:GOTO 20
|
||||
|
@ -2,9 +2,22 @@
|
||||
|
||||
; just plot X AND Y
|
||||
|
||||
.include "zp.inc"
|
||||
;.include "zp.inc"
|
||||
.include "hardware.inc"
|
||||
|
||||
GBASH = $27
|
||||
MASK = $2E
|
||||
COLOR = $30
|
||||
;XX = $F7
|
||||
YY = $F8
|
||||
T = $F9
|
||||
FACTOR1 = $FA
|
||||
FACTOR2 = $FB
|
||||
XX_T = $FC
|
||||
YY_T = $FD
|
||||
SAVED = $FE
|
||||
SAVED2 = $FF
|
||||
|
||||
;================================
|
||||
; Clear screen and setup graphics
|
||||
;================================
|
||||
@ -13,44 +26,125 @@ sier:
|
||||
jsr SETGR ; set lo-res 40x40 mode
|
||||
bit FULLGR ; make it 40x48
|
||||
|
||||
sier_outer:
|
||||
|
||||
lda #47
|
||||
sta YY
|
||||
|
||||
sier_yloop:
|
||||
|
||||
ldy #39
|
||||
; sta XX
|
||||
|
||||
; calc YY_T
|
||||
|
||||
lda YY
|
||||
sta FACTOR1 ; T already in FACTOR2
|
||||
|
||||
lsr
|
||||
bcc even_mask
|
||||
ldx #$f0
|
||||
bne set_mask
|
||||
even_mask:
|
||||
ldx #$0f
|
||||
set_mask:
|
||||
stx MASK
|
||||
|
||||
jsr GBASCALC ; take Y-coord/2 in A, put address in GBASL/H ( a trashed, C clear)
|
||||
|
||||
jsr multiply ; finally finish mul from earlier
|
||||
sta YY_T
|
||||
|
||||
lda GBASH
|
||||
draw_page_smc:
|
||||
adc #0
|
||||
sta GBASH
|
||||
|
||||
|
||||
|
||||
|
||||
lda #39*2
|
||||
sta XX
|
||||
|
||||
sier_xloop:
|
||||
|
||||
lda #47*2
|
||||
sta YY
|
||||
sier_yloop:
|
||||
; want (YY-(XX*T)) & (XX+(YY*T)
|
||||
|
||||
clc
|
||||
tya ; XX
|
||||
adc YY_T
|
||||
; clc
|
||||
; adc XX
|
||||
sta SAVED
|
||||
|
||||
; calc XX_T
|
||||
|
||||
sty FACTOR1 ; XX, T already in FACTOR2
|
||||
jsr multiply
|
||||
sta XX_T
|
||||
|
||||
lda YY
|
||||
and XX
|
||||
and #$FE
|
||||
sec
|
||||
sbc XX_T
|
||||
|
||||
and SAVED
|
||||
|
||||
; and #$ff
|
||||
beq red
|
||||
|
||||
black:
|
||||
lda #00
|
||||
beq do_color
|
||||
|
||||
lda #00 ; black
|
||||
.byte $2C ; bit trick
|
||||
red:
|
||||
lda #$11
|
||||
do_color:
|
||||
lda #$11 ; red
|
||||
|
||||
sta COLOR
|
||||
|
||||
lda XX
|
||||
lsr
|
||||
tay
|
||||
; ldy XX
|
||||
|
||||
lda YY
|
||||
lsr
|
||||
jsr PLOT1 ; PLOT AT (GBASL),Y
|
||||
|
||||
jsr PLOT ; PLOT AT Y,A
|
||||
dey
|
||||
bpl sier_xloop
|
||||
|
||||
dec YY
|
||||
bne sier_yloop
|
||||
bpl sier_yloop
|
||||
|
||||
dec XX
|
||||
bne sier_xloop
|
||||
inc mul_smc+1
|
||||
inc mul_smc+1
|
||||
inc mul_smc+1
|
||||
inc mul_smc+1
|
||||
|
||||
done:
|
||||
jmp done
|
||||
flip_pages:
|
||||
; X already 0
|
||||
|
||||
lda draw_page_smc+1 ; DRAW_PAGE
|
||||
beq done_page
|
||||
inx
|
||||
done_page:
|
||||
ldy PAGE0,X ; set display page to PAGE1 or PAGE2
|
||||
|
||||
eor #$4 ; flip draw page between $400/$800
|
||||
sta draw_page_smc+1 ; DRAW_PAGE
|
||||
|
||||
jmp sier_outer
|
||||
|
||||
|
||||
; factors in FACTOR1 and FACTOR2
|
||||
multiply:
|
||||
lda #0
|
||||
ldx #8
|
||||
lsr FACTOR1
|
||||
mul_loop:
|
||||
bcc mul_no_add
|
||||
clc
|
||||
mul_smc:
|
||||
adc #$0 ; T
|
||||
mul_no_add:
|
||||
ror
|
||||
ror FACTOR1
|
||||
dex
|
||||
bne mul_loop
|
||||
|
||||
; done, high result in A, low result in FACTOR1
|
||||
; FACTOR2 preserved
|
||||
|
||||
rts
|
||||
|
Loading…
x
Reference in New Issue
Block a user