mirror of
https://github.com/deater/dos33fsprogs.git
synced 2025-02-10 10:30:57 +00:00
sierpinski: optimize
This commit is contained in:
parent
de91828502
commit
ac2fc918f4
@ -1,18 +1,16 @@
|
|||||||
10 GR
|
1 GOTO 10
|
||||||
20 FOR X=0 TO 39:FOR Y=0 TO 39
|
5 SPEED=$)%DEL$LRUSR
|
||||||
30 YY=Y:XX=(20-X)
|
10 HGR
|
||||||
80 C1=(YY-(XX*T/256))
|
20 FOR X=0 TO 256:FOR Y=0 TO 191
|
||||||
85 C2=(YY*T/256+XX)
|
40 C1=(Y-(X*T/256))
|
||||||
87 A=C1:B=C2:GOSUB 120
|
45 IF C1<0 THEN C1=C1+256
|
||||||
88 C=C-(INT(C/4)*4)
|
50 C2=(Y*T/256+X)
|
||||||
95 COLOR=C:PLOT X,Y
|
55 IF C2<0 THEN C2=C2+256
|
||||||
100 NEXT Y,X
|
60 POKE 2062,C1
|
||||||
110 END
|
70 POKE 2064,C2:CALL 2061
|
||||||
120 C=0
|
75 POKE 2062,PEEK(36):POKE 2064,252:CALL 2061
|
||||||
140 FOR S =0 TO 7
|
80 HCOLOR=0
|
||||||
150 A = INT(A)/2 : ABIT = ( A-INT(A) ) * 2
|
85 IF PEEK(36) THEN HCOLOR=1
|
||||||
160 B = INT(B)/2 : BBIT = ( B-INT(B) ) * 2
|
87 HPLOT X,Y
|
||||||
170 IF ABIT + BBIT > 1 THEN C = C + 256
|
90 NEXT Y,X
|
||||||
180 C = C / 2 : NEXT
|
95 T=T+10:GOTO 20
|
||||||
190 RETURN
|
|
||||||
|
|
||||||
|
@ -2,9 +2,22 @@
|
|||||||
|
|
||||||
; just plot X AND Y
|
; just plot X AND Y
|
||||||
|
|
||||||
.include "zp.inc"
|
;.include "zp.inc"
|
||||||
.include "hardware.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
|
; Clear screen and setup graphics
|
||||||
;================================
|
;================================
|
||||||
@ -13,44 +26,125 @@ sier:
|
|||||||
jsr SETGR ; set lo-res 40x40 mode
|
jsr SETGR ; set lo-res 40x40 mode
|
||||||
bit FULLGR ; make it 40x48
|
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:
|
sier_xloop:
|
||||||
|
|
||||||
lda #47*2
|
; want (YY-(XX*T)) & (XX+(YY*T)
|
||||||
sta YY
|
|
||||||
sier_yloop:
|
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
|
lda YY
|
||||||
and XX
|
sec
|
||||||
and #$FE
|
sbc XX_T
|
||||||
|
|
||||||
|
and SAVED
|
||||||
|
|
||||||
|
; and #$ff
|
||||||
beq red
|
beq red
|
||||||
|
|
||||||
black:
|
black:
|
||||||
lda #00
|
lda #00 ; black
|
||||||
beq do_color
|
.byte $2C ; bit trick
|
||||||
|
|
||||||
red:
|
red:
|
||||||
lda #$11
|
lda #$11 ; red
|
||||||
do_color:
|
|
||||||
sta COLOR
|
sta COLOR
|
||||||
|
|
||||||
lda XX
|
; ldy XX
|
||||||
lsr
|
|
||||||
tay
|
|
||||||
|
|
||||||
lda YY
|
jsr PLOT1 ; PLOT AT (GBASL),Y
|
||||||
lsr
|
|
||||||
|
|
||||||
jsr PLOT ; PLOT AT Y,A
|
dey
|
||||||
|
bpl sier_xloop
|
||||||
|
|
||||||
dec YY
|
dec YY
|
||||||
bne sier_yloop
|
bpl sier_yloop
|
||||||
|
|
||||||
dec XX
|
inc mul_smc+1
|
||||||
bne sier_xloop
|
inc mul_smc+1
|
||||||
|
inc mul_smc+1
|
||||||
|
inc mul_smc+1
|
||||||
|
|
||||||
done:
|
flip_pages:
|
||||||
jmp done
|
; 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