mirror of
https://github.com/deater/dos33fsprogs.git
synced 2025-02-22 14:29:00 +00:00
sierpinski: roto
This commit is contained in:
parent
ac2fc918f4
commit
79e68968be
@ -6,10 +6,11 @@ LINKERSCRIPTS = ../../../linker_scripts
|
||||
|
||||
all: sier.dsk
|
||||
|
||||
sier.dsk: HELLO SIER
|
||||
sier.dsk: HELLO SIER SIER_TINY
|
||||
cp empty.dsk sier.dsk
|
||||
$(DOS33) -y sier.dsk SAVE A HELLO
|
||||
$(DOS33) -y sier.dsk BSAVE -a 0x300 SIER
|
||||
$(DOS33) -y sier.dsk BSAVE -a 0x300 SIER_TINY
|
||||
|
||||
###
|
||||
|
||||
@ -26,5 +27,14 @@ sier.o: sier.s
|
||||
|
||||
###
|
||||
|
||||
SIER_TINY: sier_tiny.o
|
||||
ld65 -o SIER_TINY sier_tiny.o -C $(LINKERSCRIPTS)/apple2_300.inc
|
||||
|
||||
sier_tiny.o: sier_tiny.s
|
||||
ca65 -o sier_tiny.o sier_tiny.s -l sier_tiny.lst
|
||||
|
||||
|
||||
###
|
||||
|
||||
clean:
|
||||
rm -f *~ *.o *.lst HELLO SIER
|
||||
rm -f *~ *.o *.lst HELLO SIER SIER_TINY
|
||||
|
@ -1,5 +1,14 @@
|
||||
; fake sierpinski
|
||||
|
||||
; x=0..39
|
||||
; T =0 XX_T = 0 .. 0
|
||||
; T =1 XX_T = 0 .. 39 ($0027)
|
||||
; T =2 XX_T = 0 .. 78 ($004E)
|
||||
; T =3 XX_T = 0 .. 117 ($0075)
|
||||
; T = 128 XX_T = 0 .. 4992 ($1380)
|
||||
; T = 255 XX_T = 0 .. 9945 ($26D9)
|
||||
|
||||
|
||||
; just plot X AND Y
|
||||
|
||||
;.include "zp.inc"
|
||||
@ -8,15 +17,18 @@
|
||||
GBASH = $27
|
||||
MASK = $2E
|
||||
COLOR = $30
|
||||
;XX = $F7
|
||||
XX = $F5
|
||||
XX_TH = $F6
|
||||
XX_TL = $F7
|
||||
YY = $F8
|
||||
T = $F9
|
||||
FACTOR1 = $FA
|
||||
FACTOR2 = $FB
|
||||
XX_T = $FC
|
||||
YY_T = $FD
|
||||
SAVED = $FE
|
||||
SAVED2 = $FF
|
||||
YY_TH = $F9
|
||||
YY_TL = $FA
|
||||
T_L = $FB
|
||||
T_H = $FC
|
||||
FACTOR1 = $FD
|
||||
FACTOR2 = $FE
|
||||
SAVED = $FF
|
||||
|
||||
|
||||
;================================
|
||||
; Clear screen and setup graphics
|
||||
@ -26,20 +38,37 @@ sier:
|
||||
jsr SETGR ; set lo-res 40x40 mode
|
||||
bit FULLGR ; make it 40x48
|
||||
|
||||
lda #0 ; start with multiplier 0
|
||||
sta T_L
|
||||
sta T_H
|
||||
|
||||
sier_outer:
|
||||
|
||||
lda #47
|
||||
lda #0
|
||||
sta YY
|
||||
sta YY_TL
|
||||
sta YY_TH
|
||||
|
||||
sier_yloop:
|
||||
|
||||
ldy #39
|
||||
; sta XX
|
||||
; reset XX to 0
|
||||
|
||||
lda #0
|
||||
sta XX
|
||||
sta XX_TL
|
||||
sta XX_TH
|
||||
|
||||
|
||||
; calc YY_T
|
||||
clc
|
||||
lda YY_TL
|
||||
adc T_L
|
||||
sta YY_TL
|
||||
lda YY_TH
|
||||
adc T_H
|
||||
sta YY_TH
|
||||
|
||||
lda YY
|
||||
sta FACTOR1 ; T already in FACTOR2
|
||||
|
||||
lsr
|
||||
bcc even_mask
|
||||
@ -52,38 +81,40 @@ set_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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
sier_xloop:
|
||||
|
||||
; want (YY-(XX*T)) & (XX+(YY*T)
|
||||
|
||||
|
||||
; SAVED = XX+(Y*T)
|
||||
clc
|
||||
tya ; XX
|
||||
adc YY_T
|
||||
; clc
|
||||
; adc XX
|
||||
lda XX ; XX
|
||||
adc YY_TH
|
||||
sta SAVED
|
||||
|
||||
; calc XX_T
|
||||
|
||||
sty FACTOR1 ; XX, T already in FACTOR2
|
||||
jsr multiply
|
||||
sta XX_T
|
||||
; calc XX*T
|
||||
clc
|
||||
lda XX_TL
|
||||
adc T_L
|
||||
sta XX_TL
|
||||
lda XX_TH
|
||||
adc T_H
|
||||
sta XX_TH
|
||||
|
||||
|
||||
; calc (YY-X_T)
|
||||
lda YY
|
||||
sec
|
||||
sbc XX_T
|
||||
sbc XX_TH
|
||||
|
||||
; want (YY-(XX*T)) & (XX+(YY*T)
|
||||
|
||||
and SAVED
|
||||
|
||||
@ -98,20 +129,28 @@ red:
|
||||
|
||||
sta COLOR
|
||||
|
||||
; ldy XX
|
||||
ldy XX
|
||||
|
||||
jsr PLOT1 ; PLOT AT (GBASL),Y
|
||||
|
||||
dey
|
||||
bpl sier_xloop
|
||||
inc XX
|
||||
lda XX
|
||||
cmp #40
|
||||
bne sier_xloop
|
||||
|
||||
dec YY
|
||||
bpl sier_yloop
|
||||
inc YY
|
||||
lda YY
|
||||
cmp #48
|
||||
bne sier_yloop
|
||||
|
||||
inc mul_smc+1
|
||||
inc mul_smc+1
|
||||
inc mul_smc+1
|
||||
inc mul_smc+1
|
||||
; inc T
|
||||
clc
|
||||
lda T_L
|
||||
adc #1
|
||||
sta T_L
|
||||
lda T_H
|
||||
adc #0
|
||||
sta T_H
|
||||
|
||||
flip_pages:
|
||||
; X already 0
|
||||
@ -127,24 +166,3 @@ done_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
|
||||
|
159
graphics/gr/sier/sier_multiply.s
Normal file
159
graphics/gr/sier/sier_multiply.s
Normal file
@ -0,0 +1,159 @@
|
||||
; fake sierpinski
|
||||
|
||||
; x=0..39
|
||||
; T =0 XX_T = 0 .. 0
|
||||
; T =1 XX_T = 0 .. 39 ($0027)
|
||||
; T =2 XX_T = 0 .. 78 ($0027)
|
||||
; T =3 XX_T = 0 .. 78 ($0027)
|
||||
; T = 128 XX_T = 0 .. 4992 ($1380)
|
||||
; T = 255 XX_T = 0 .. 9945 ($26D9)
|
||||
|
||||
|
||||
; just plot X AND Y
|
||||
|
||||
;.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
|
||||
;================================
|
||||
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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
sier_xloop:
|
||||
|
||||
; 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
|
||||
sec
|
||||
sbc XX_T
|
||||
|
||||
and SAVED
|
||||
|
||||
; and #$ff
|
||||
beq red
|
||||
|
||||
black:
|
||||
lda #00 ; black
|
||||
.byte $2C ; bit trick
|
||||
red:
|
||||
lda #$11 ; red
|
||||
|
||||
sta COLOR
|
||||
|
||||
; ldy XX
|
||||
|
||||
jsr PLOT1 ; PLOT AT (GBASL),Y
|
||||
|
||||
dey
|
||||
bpl sier_xloop
|
||||
|
||||
dec YY
|
||||
bpl sier_yloop
|
||||
|
||||
inc mul_smc+1
|
||||
inc mul_smc+1
|
||||
inc mul_smc+1
|
||||
inc mul_smc+1
|
||||
|
||||
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