mirror of
https://github.com/deater/dos33fsprogs.git
synced 2025-02-23 05:29:03 +00:00
sierpinski: roto
This commit is contained in:
parent
ac2fc918f4
commit
79e68968be
@ -6,10 +6,11 @@ LINKERSCRIPTS = ../../../linker_scripts
|
|||||||
|
|
||||||
all: sier.dsk
|
all: sier.dsk
|
||||||
|
|
||||||
sier.dsk: HELLO SIER
|
sier.dsk: HELLO SIER SIER_TINY
|
||||||
cp empty.dsk sier.dsk
|
cp empty.dsk sier.dsk
|
||||||
$(DOS33) -y sier.dsk SAVE A HELLO
|
$(DOS33) -y sier.dsk SAVE A HELLO
|
||||||
$(DOS33) -y sier.dsk BSAVE -a 0x300 SIER
|
$(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:
|
clean:
|
||||||
rm -f *~ *.o *.lst HELLO SIER
|
rm -f *~ *.o *.lst HELLO SIER SIER_TINY
|
||||||
|
@ -1,5 +1,14 @@
|
|||||||
; fake sierpinski
|
; 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
|
; just plot X AND Y
|
||||||
|
|
||||||
;.include "zp.inc"
|
;.include "zp.inc"
|
||||||
@ -8,15 +17,18 @@
|
|||||||
GBASH = $27
|
GBASH = $27
|
||||||
MASK = $2E
|
MASK = $2E
|
||||||
COLOR = $30
|
COLOR = $30
|
||||||
;XX = $F7
|
XX = $F5
|
||||||
|
XX_TH = $F6
|
||||||
|
XX_TL = $F7
|
||||||
YY = $F8
|
YY = $F8
|
||||||
T = $F9
|
YY_TH = $F9
|
||||||
FACTOR1 = $FA
|
YY_TL = $FA
|
||||||
FACTOR2 = $FB
|
T_L = $FB
|
||||||
XX_T = $FC
|
T_H = $FC
|
||||||
YY_T = $FD
|
FACTOR1 = $FD
|
||||||
SAVED = $FE
|
FACTOR2 = $FE
|
||||||
SAVED2 = $FF
|
SAVED = $FF
|
||||||
|
|
||||||
|
|
||||||
;================================
|
;================================
|
||||||
; Clear screen and setup graphics
|
; Clear screen and setup graphics
|
||||||
@ -26,20 +38,37 @@ 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
|
||||||
|
|
||||||
|
lda #0 ; start with multiplier 0
|
||||||
|
sta T_L
|
||||||
|
sta T_H
|
||||||
|
|
||||||
sier_outer:
|
sier_outer:
|
||||||
|
|
||||||
lda #47
|
lda #0
|
||||||
sta YY
|
sta YY
|
||||||
|
sta YY_TL
|
||||||
|
sta YY_TH
|
||||||
|
|
||||||
sier_yloop:
|
sier_yloop:
|
||||||
|
|
||||||
ldy #39
|
; reset XX to 0
|
||||||
; sta XX
|
|
||||||
|
lda #0
|
||||||
|
sta XX
|
||||||
|
sta XX_TL
|
||||||
|
sta XX_TH
|
||||||
|
|
||||||
|
|
||||||
; calc YY_T
|
; calc YY_T
|
||||||
|
clc
|
||||||
|
lda YY_TL
|
||||||
|
adc T_L
|
||||||
|
sta YY_TL
|
||||||
|
lda YY_TH
|
||||||
|
adc T_H
|
||||||
|
sta YY_TH
|
||||||
|
|
||||||
lda YY
|
lda YY
|
||||||
sta FACTOR1 ; T already in FACTOR2
|
|
||||||
|
|
||||||
lsr
|
lsr
|
||||||
bcc even_mask
|
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 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
|
lda GBASH
|
||||||
draw_page_smc:
|
draw_page_smc:
|
||||||
adc #0
|
adc #0
|
||||||
sta GBASH
|
sta GBASH
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
sier_xloop:
|
sier_xloop:
|
||||||
|
|
||||||
; want (YY-(XX*T)) & (XX+(YY*T)
|
; want (YY-(XX*T)) & (XX+(YY*T)
|
||||||
|
|
||||||
|
|
||||||
|
; SAVED = XX+(Y*T)
|
||||||
clc
|
clc
|
||||||
tya ; XX
|
lda XX ; XX
|
||||||
adc YY_T
|
adc YY_TH
|
||||||
; clc
|
|
||||||
; adc XX
|
|
||||||
sta SAVED
|
sta SAVED
|
||||||
|
|
||||||
; calc XX_T
|
|
||||||
|
|
||||||
sty FACTOR1 ; XX, T already in FACTOR2
|
; calc XX*T
|
||||||
jsr multiply
|
clc
|
||||||
sta XX_T
|
lda XX_TL
|
||||||
|
adc T_L
|
||||||
|
sta XX_TL
|
||||||
|
lda XX_TH
|
||||||
|
adc T_H
|
||||||
|
sta XX_TH
|
||||||
|
|
||||||
|
|
||||||
|
; calc (YY-X_T)
|
||||||
lda YY
|
lda YY
|
||||||
sec
|
sec
|
||||||
sbc XX_T
|
sbc XX_TH
|
||||||
|
|
||||||
|
; want (YY-(XX*T)) & (XX+(YY*T)
|
||||||
|
|
||||||
and SAVED
|
and SAVED
|
||||||
|
|
||||||
@ -98,20 +129,28 @@ red:
|
|||||||
|
|
||||||
sta COLOR
|
sta COLOR
|
||||||
|
|
||||||
; ldy XX
|
ldy XX
|
||||||
|
|
||||||
jsr PLOT1 ; PLOT AT (GBASL),Y
|
jsr PLOT1 ; PLOT AT (GBASL),Y
|
||||||
|
|
||||||
dey
|
inc XX
|
||||||
bpl sier_xloop
|
lda XX
|
||||||
|
cmp #40
|
||||||
|
bne sier_xloop
|
||||||
|
|
||||||
dec YY
|
inc YY
|
||||||
bpl sier_yloop
|
lda YY
|
||||||
|
cmp #48
|
||||||
|
bne sier_yloop
|
||||||
|
|
||||||
inc mul_smc+1
|
; inc T
|
||||||
inc mul_smc+1
|
clc
|
||||||
inc mul_smc+1
|
lda T_L
|
||||||
inc mul_smc+1
|
adc #1
|
||||||
|
sta T_L
|
||||||
|
lda T_H
|
||||||
|
adc #0
|
||||||
|
sta T_H
|
||||||
|
|
||||||
flip_pages:
|
flip_pages:
|
||||||
; X already 0
|
; X already 0
|
||||||
@ -127,24 +166,3 @@ done_page:
|
|||||||
|
|
||||||
jmp sier_outer
|
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