mirror of
https://github.com/deater/dos33fsprogs.git
synced 2025-08-15 08:27:41 +00:00
hgr: work on sier
This commit is contained in:
@@ -8,7 +8,7 @@ EMPTY_DISK = ../../../empty_disk/empty.dsk
|
|||||||
all: triangles.dsk
|
all: triangles.dsk
|
||||||
|
|
||||||
triangles.dsk: HELLO TINY_TRIANGLES XOR MOD9 MOD9_64 WRITING MOVE_RIGHT \
|
triangles.dsk: HELLO TINY_TRIANGLES XOR MOD9 MOD9_64 WRITING MOVE_RIGHT \
|
||||||
SIER_HGR RAINBOW_SQUARES
|
SIER_HGR SIER_HPLOT SIER_MOVERIGHT RAINBOW_SQUARES
|
||||||
cp $(EMPTY_DISK) triangles.dsk
|
cp $(EMPTY_DISK) triangles.dsk
|
||||||
$(DOS33) -y triangles.dsk SAVE A HELLO
|
$(DOS33) -y triangles.dsk SAVE A HELLO
|
||||||
$(DOS33) -y triangles.dsk BSAVE -a 0x070 TINY_TRIANGLES
|
$(DOS33) -y triangles.dsk BSAVE -a 0x070 TINY_TRIANGLES
|
||||||
@@ -18,6 +18,8 @@ triangles.dsk: HELLO TINY_TRIANGLES XOR MOD9 MOD9_64 WRITING MOVE_RIGHT \
|
|||||||
$(DOS33) -y triangles.dsk BSAVE -a 0x300 WRITING
|
$(DOS33) -y triangles.dsk BSAVE -a 0x300 WRITING
|
||||||
$(DOS33) -y triangles.dsk BSAVE -a 0x300 MOVE_RIGHT
|
$(DOS33) -y triangles.dsk BSAVE -a 0x300 MOVE_RIGHT
|
||||||
$(DOS33) -y triangles.dsk BSAVE -a 0x300 SIER_HGR
|
$(DOS33) -y triangles.dsk BSAVE -a 0x300 SIER_HGR
|
||||||
|
$(DOS33) -y triangles.dsk BSAVE -a 0x300 SIER_MOVERIGHT
|
||||||
|
$(DOS33) -y triangles.dsk BSAVE -a 0x300 SIER_HPLOT
|
||||||
$(DOS33) -y triangles.dsk BSAVE -a 0x300 RAINBOW_SQUARES
|
$(DOS33) -y triangles.dsk BSAVE -a 0x300 RAINBOW_SQUARES
|
||||||
|
|
||||||
###
|
###
|
||||||
@@ -57,6 +59,24 @@ SIER_HGR: sier_hgr.o
|
|||||||
sier_hgr.o: sier_hgr.s
|
sier_hgr.o: sier_hgr.s
|
||||||
ca65 -o sier_hgr.o sier_hgr.s -l sier_hgr.lst
|
ca65 -o sier_hgr.o sier_hgr.s -l sier_hgr.lst
|
||||||
|
|
||||||
|
###
|
||||||
|
|
||||||
|
SIER_HPLOT: sier_hplot.o
|
||||||
|
ld65 -o SIER_HPLOT sier_hplot.o -C $(LINKER_SCRIPTS)/apple2_300.inc
|
||||||
|
|
||||||
|
sier_hplot.o: sier_hplot.s
|
||||||
|
ca65 -o sier_hplot.o sier_hplot.s -l sier_hplot.lst
|
||||||
|
|
||||||
|
###
|
||||||
|
|
||||||
|
SIER_MOVERIGHT: sier_moveright.o
|
||||||
|
ld65 -o SIER_MOVERIGHT sier_moveright.o -C $(LINKER_SCRIPTS)/apple2_300.inc
|
||||||
|
|
||||||
|
sier_moveright.o: sier_moveright.s
|
||||||
|
ca65 -o sier_moveright.o sier_moveright.s -l sier_moveright.lst
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
###
|
###
|
||||||
|
|
||||||
RAINBOW_SQUARES: rainbow_squares.o
|
RAINBOW_SQUARES: rainbow_squares.o
|
||||||
@@ -98,4 +118,5 @@ move_right.o: move_right.s
|
|||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f *~ *.o *.lst HELLO TINY_TRIANGLES XOR MOD9 MOD9_64 WRITING \
|
rm -f *~ *.o *.lst HELLO TINY_TRIANGLES XOR MOD9 MOD9_64 WRITING \
|
||||||
MOVE_RIGHT SIER_HGR RAINBOW_SQUARES
|
MOVE_RIGHT SIER_HGR SIER_HPLOT SIER_MOVERIGHT \
|
||||||
|
RAINBOW_SQUARES
|
||||||
|
@@ -23,21 +23,24 @@
|
|||||||
; zero page
|
; zero page
|
||||||
|
|
||||||
HGR_BITS = $1C
|
HGR_BITS = $1C
|
||||||
|
GBASL = $26
|
||||||
GBASH = $27
|
GBASH = $27
|
||||||
MASK = $2E
|
MASK = $2E
|
||||||
COLOR = $30
|
COLOR = $30
|
||||||
|
HGR_HMASK = $30
|
||||||
HGR_X = $E0
|
HGR_X = $E0
|
||||||
HGR_Y = $E2
|
HGR_Y = $E2
|
||||||
HGR_COLOR = $E4
|
HGR_COLOR = $E4
|
||||||
|
|
||||||
;XX = $F7
|
|
||||||
|
SAVEX = $F7
|
||||||
XX_TH = $F8
|
XX_TH = $F8
|
||||||
XX_TL = $F9
|
XX_TL = $F9
|
||||||
;YY = $FA
|
YY = $FA
|
||||||
YY_TH = $FB
|
YY_TH = $FB
|
||||||
YY_TL = $FC
|
YY_TL = $FC
|
||||||
;T_L = $FD
|
T_L = $FD
|
||||||
;T_H = $FE
|
T_H = $FE
|
||||||
SAVED = $FF
|
SAVED = $FF
|
||||||
|
|
||||||
; Soft switches
|
; Soft switches
|
||||||
@@ -49,10 +52,18 @@ LORES = $C056 ; Enable LORES graphics
|
|||||||
; ROM routines
|
; ROM routines
|
||||||
HGR = $F3E2
|
HGR = $F3E2
|
||||||
HGR2 = $F3D8
|
HGR2 = $F3D8
|
||||||
HPLOT0 = $F457
|
HPOSN = $F411
|
||||||
PLOT1 = $F80E ;; PLOT at (GBASL),Y (need MASK to be $0f or $f0)
|
HPLOT0 = $F457
|
||||||
GBASCALC= $F847 ;; take Y-coord/2 in A, put address in GBASL/H ( a trashed, C clear)
|
HPLOT1 = $F45A ; skip the HPOSN call
|
||||||
SETGR = $FB40
|
COLOR_SHIFT = $F47E ; shift color for odd/even Y (0..7 or 7..13)
|
||||||
|
MOVE_RIGHT = $F48A ; move next plot location one to the right
|
||||||
|
MOVE_DOWN = $F504 ; clc at f504, needed?
|
||||||
|
; f505 is applesoft entry point but assumes c?
|
||||||
|
; move next plot location one to the right
|
||||||
|
|
||||||
|
; note moveright/movedown respect HGR_PAGE
|
||||||
|
|
||||||
|
COLORTBL = $F6F6
|
||||||
|
|
||||||
|
|
||||||
;.zeropage
|
;.zeropage
|
||||||
@@ -65,19 +76,29 @@ sier:
|
|||||||
jsr HGR2 ; set FULLGR, sets A=0
|
jsr HGR2 ; set FULLGR, sets A=0
|
||||||
|
|
||||||
|
|
||||||
; lda #0 ; start with multiplier 0
|
lda #0 ; start with multiplier 0
|
||||||
; sta T_L
|
sta T_L
|
||||||
; sta T_H
|
sta T_H
|
||||||
|
|
||||||
sier_outer:
|
sier_outer:
|
||||||
|
ldy #$40
|
||||||
|
sty GBASH
|
||||||
|
|
||||||
|
|
||||||
ldy #0 ; YY starts at 0
|
ldy #0 ; YY starts at 0
|
||||||
|
sty YY
|
||||||
|
sty GBASL
|
||||||
|
|
||||||
sty YY_TL
|
sty YY_TL
|
||||||
sty YY_TH
|
sty YY_TH
|
||||||
|
|
||||||
sier_yloop:
|
sier_yloop:
|
||||||
|
|
||||||
|
ldy #0 ; y is x/7
|
||||||
|
|
||||||
|
lda #$FF
|
||||||
|
sta HGR_HMASK
|
||||||
|
|
||||||
; calc YY_T (8.8 fixed point add)
|
; calc YY_T (8.8 fixed point add)
|
||||||
; save space by skipping clc as it's only a slight variation w/o
|
; save space by skipping clc as it's only a slight variation w/o
|
||||||
; clc
|
; clc
|
||||||
@@ -88,29 +109,6 @@ sier_yloop:
|
|||||||
adc T_H
|
adc T_H
|
||||||
sta YY_TH
|
sta YY_TH
|
||||||
|
|
||||||
; txa ; YY ; plot call needs Y/2
|
|
||||||
; lsr
|
|
||||||
|
|
||||||
; php
|
|
||||||
|
|
||||||
; bcc even_mask
|
|
||||||
; ldy #$f0
|
|
||||||
; .byte $2C ; bit hack
|
|
||||||
;even_mask:
|
|
||||||
; ldy #$0f
|
|
||||||
; sty MASK
|
|
||||||
|
|
||||||
; jsr GBASCALC ; take Y-coord/2 in A, put address in GBASL/H ( a trashed, C clear)
|
|
||||||
|
|
||||||
; lda GBASH
|
|
||||||
;draw_page_smc:
|
|
||||||
; adc #0
|
|
||||||
; sta GBASH ; adjust for PAGE1/PAGE2 ($400/$800)
|
|
||||||
|
|
||||||
; plp
|
|
||||||
; jsr $f806 ; trick to calculate MASK by jumping
|
|
||||||
; into middle of PLOT routine
|
|
||||||
|
|
||||||
; reset XX to 0
|
; reset XX to 0
|
||||||
|
|
||||||
ldx #0 ; XX
|
ldx #0 ; XX
|
||||||
@@ -124,63 +122,63 @@ sier_xloop:
|
|||||||
|
|
||||||
; SAVED = XX+(Y*T)
|
; SAVED = XX+(Y*T)
|
||||||
; clc
|
; clc
|
||||||
txa ; XX
|
txa ; XX ; 2
|
||||||
adc YY_TH
|
adc YY_TH ; 3
|
||||||
sta SAVED
|
sta SAVED ; 3
|
||||||
|
|
||||||
|
|
||||||
; calc XX*T
|
; calc XX*T
|
||||||
; clc
|
; clc
|
||||||
lda XX_TL
|
lda XX_TL ; 3
|
||||||
adc T_L
|
adc T_L ; 3
|
||||||
sta XX_TL
|
sta XX_TL ; 3
|
||||||
lda XX_TH
|
lda XX_TH ; 3
|
||||||
adc T_H
|
adc T_H ; 3
|
||||||
sta XX_TH
|
sta XX_TH ; 3
|
||||||
|
|
||||||
|
|
||||||
; calc (YY-X_T)
|
; calc (YY-X_T)
|
||||||
tya ; lda YY
|
lda YY ; 3
|
||||||
sec
|
sec ; 2
|
||||||
sbc XX_TH
|
sbc XX_TH ; 3
|
||||||
|
|
||||||
; want (YY-(XX*T)) & (XX+(YY*T)
|
; want (YY-(XX*T)) & (XX+(YY*T)
|
||||||
|
|
||||||
and SAVED
|
and SAVED ; 3
|
||||||
|
;============
|
||||||
|
; 37
|
||||||
|
|
||||||
and #$f0
|
|
||||||
|
and #$f0 ; 2
|
||||||
|
|
||||||
beq white
|
beq white
|
||||||
black:
|
black:
|
||||||
lda #00 ; black
|
lda #0 ; black
|
||||||
.byte $2C ; bit trick
|
.byte $2C ; bit trick
|
||||||
white:
|
white:
|
||||||
lda #$ff ; green
|
lda #$ff ; white
|
||||||
sta HGR_COLOR
|
|
||||||
|
|
||||||
|
color_ready:
|
||||||
|
sta HGR_BITS
|
||||||
|
|
||||||
tya ; YY in A
|
no_shift:
|
||||||
ldy #0
|
|
||||||
; XX in X
|
|
||||||
|
|
||||||
jsr HPLOT0 ; plot at (Y,X), (A)
|
jsr HPLOT1 ; plot at current position
|
||||||
; at begin, stores A to HGR_Y
|
|
||||||
; X to HGR_X and Y to HGR_X+1
|
|
||||||
; destroys X,Y,A
|
|
||||||
; Y is XX/7
|
|
||||||
|
|
||||||
|
jsr MOVE_RIGHT ; move current position right (trashes A)
|
||||||
|
|
||||||
ldy HGR_Y
|
;==================================
|
||||||
ldx HGR_X
|
inx
|
||||||
|
|
||||||
inx ; XX
|
|
||||||
cpx #255
|
|
||||||
bne sier_xloop
|
bne sier_xloop
|
||||||
|
|
||||||
iny ; YY
|
;==================================
|
||||||
|
|
||||||
|
jsr MOVE_DOWN ; X/Y left alone
|
||||||
|
|
||||||
|
inc YY ; repeat until Y=192
|
||||||
|
ldy YY
|
||||||
cpy #192
|
cpy #192
|
||||||
bne sier_yloop
|
bne sier_yloop
|
||||||
|
|
||||||
|
|
||||||
; inc T
|
; inc T
|
||||||
; clc
|
; clc
|
||||||
lda T_L
|
lda T_L
|
||||||
@@ -194,21 +192,10 @@ no_carry:
|
|||||||
; speed up the zoom as it goes
|
; speed up the zoom as it goes
|
||||||
inc blah_smc+1
|
inc blah_smc+1
|
||||||
|
|
||||||
|
|
||||||
; x is 48
|
|
||||||
;flip_pages:
|
;flip_pages:
|
||||||
; lda draw_page_smc+1 ; DRAW_PAGE
|
; TODO if frame rate ever gets fast enough
|
||||||
; beq done_page
|
|
||||||
; inx
|
|
||||||
;done_page:
|
|
||||||
; X=48 ($30) PAGE1=$C054-$30=$C024
|
|
||||||
; ldy $C024,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 ; what can we branch on?
|
jmp sier_outer ; what can we branch on?
|
||||||
|
|
||||||
T_L: .byte $00
|
|
||||||
T_H: .byte $00
|
|
||||||
|
|
||||||
|
214
graphics/hgr/tiny_triangles/sier_hplot.s
Normal file
214
graphics/hgr/tiny_triangles/sier_hplot.s
Normal file
@@ -0,0 +1,214 @@
|
|||||||
|
; sierpinski-like demo
|
||||||
|
; based on the code from Hellmood's Memories demo
|
||||||
|
|
||||||
|
; by Vince `deater` Weaver <vince@deater.net>
|
||||||
|
|
||||||
|
; the simple sierpinski you more or less just plot
|
||||||
|
; X AND Y
|
||||||
|
|
||||||
|
; Hellmood's you plot something more or less like
|
||||||
|
; COLOR = ( (Y-(X*T)) & (X+(Y*T) ) & 0xf0
|
||||||
|
; where T is an incrementing frame value
|
||||||
|
|
||||||
|
; to get speed on 6502/Apple II we change the multiplies to
|
||||||
|
; a series of 16-bit 8.8 fixed point adds
|
||||||
|
|
||||||
|
; TODO:
|
||||||
|
; HPLOT timing
|
||||||
|
; MOVERIGHT timing
|
||||||
|
; MOVERIGHT MOVEDOWN timing
|
||||||
|
; LOOKUP TABLE timing
|
||||||
|
|
||||||
|
|
||||||
|
; zero page
|
||||||
|
|
||||||
|
HGR_BITS = $1C
|
||||||
|
GBASH = $27
|
||||||
|
MASK = $2E
|
||||||
|
COLOR = $30
|
||||||
|
HGR_X = $E0
|
||||||
|
HGR_Y = $E2
|
||||||
|
HGR_COLOR = $E4
|
||||||
|
|
||||||
|
;XX = $F7
|
||||||
|
XX_TH = $F8
|
||||||
|
XX_TL = $F9
|
||||||
|
;YY = $FA
|
||||||
|
YY_TH = $FB
|
||||||
|
YY_TL = $FC
|
||||||
|
;T_L = $FD
|
||||||
|
;T_H = $FE
|
||||||
|
SAVED = $FF
|
||||||
|
|
||||||
|
; Soft switches
|
||||||
|
FULLGR = $C052
|
||||||
|
PAGE1 = $C054
|
||||||
|
PAGE2 = $C055
|
||||||
|
LORES = $C056 ; Enable LORES graphics
|
||||||
|
|
||||||
|
; ROM routines
|
||||||
|
HGR = $F3E2
|
||||||
|
HGR2 = $F3D8
|
||||||
|
HPLOT0 = $F457
|
||||||
|
PLOT1 = $F80E ;; PLOT at (GBASL),Y (need MASK to be $0f or $f0)
|
||||||
|
GBASCALC= $F847 ;; take Y-coord/2 in A, put address in GBASL/H ( a trashed, C clear)
|
||||||
|
SETGR = $FB40
|
||||||
|
|
||||||
|
|
||||||
|
;.zeropage
|
||||||
|
;.globalzp T_L,T_H
|
||||||
|
|
||||||
|
;================================
|
||||||
|
; Clear screen and setup graphics
|
||||||
|
;================================
|
||||||
|
sier:
|
||||||
|
jsr HGR2 ; set FULLGR, sets A=0
|
||||||
|
|
||||||
|
|
||||||
|
; lda #0 ; start with multiplier 0
|
||||||
|
; sta T_L
|
||||||
|
; sta T_H
|
||||||
|
|
||||||
|
sier_outer:
|
||||||
|
|
||||||
|
ldy #0 ; YY starts at 0
|
||||||
|
|
||||||
|
sty YY_TL
|
||||||
|
sty YY_TH
|
||||||
|
|
||||||
|
sier_yloop:
|
||||||
|
|
||||||
|
; calc YY_T (8.8 fixed point add)
|
||||||
|
; save space by skipping clc as it's only a slight variation w/o
|
||||||
|
; clc
|
||||||
|
lda YY_TL
|
||||||
|
adc T_L
|
||||||
|
sta YY_TL
|
||||||
|
lda YY_TH
|
||||||
|
adc T_H
|
||||||
|
sta YY_TH
|
||||||
|
|
||||||
|
; txa ; YY ; plot call needs Y/2
|
||||||
|
; lsr
|
||||||
|
|
||||||
|
; php
|
||||||
|
|
||||||
|
; bcc even_mask
|
||||||
|
; ldy #$f0
|
||||||
|
; .byte $2C ; bit hack
|
||||||
|
;even_mask:
|
||||||
|
; ldy #$0f
|
||||||
|
; sty MASK
|
||||||
|
|
||||||
|
; jsr GBASCALC ; take Y-coord/2 in A, put address in GBASL/H ( a trashed, C clear)
|
||||||
|
|
||||||
|
; lda GBASH
|
||||||
|
;draw_page_smc:
|
||||||
|
; adc #0
|
||||||
|
; sta GBASH ; adjust for PAGE1/PAGE2 ($400/$800)
|
||||||
|
|
||||||
|
; plp
|
||||||
|
; jsr $f806 ; trick to calculate MASK by jumping
|
||||||
|
; into middle of PLOT routine
|
||||||
|
|
||||||
|
; reset XX to 0
|
||||||
|
|
||||||
|
ldx #0 ; XX
|
||||||
|
stx XX_TL
|
||||||
|
stx XX_TH
|
||||||
|
|
||||||
|
sier_xloop:
|
||||||
|
|
||||||
|
; want (YY-(XX*T)) & (XX+(YY*T)
|
||||||
|
|
||||||
|
|
||||||
|
; SAVED = XX+(Y*T)
|
||||||
|
; clc
|
||||||
|
txa ; XX
|
||||||
|
adc YY_TH
|
||||||
|
sta SAVED
|
||||||
|
|
||||||
|
|
||||||
|
; 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)
|
||||||
|
tya ; lda YY
|
||||||
|
sec
|
||||||
|
sbc XX_TH
|
||||||
|
|
||||||
|
; want (YY-(XX*T)) & (XX+(YY*T)
|
||||||
|
|
||||||
|
and SAVED
|
||||||
|
|
||||||
|
and #$f0
|
||||||
|
|
||||||
|
beq white
|
||||||
|
black:
|
||||||
|
lda #00 ; black
|
||||||
|
.byte $2C ; bit trick
|
||||||
|
white:
|
||||||
|
lda #$ff ; green
|
||||||
|
sta HGR_COLOR
|
||||||
|
|
||||||
|
|
||||||
|
tya ; YY in A
|
||||||
|
ldy #0
|
||||||
|
; XX in X
|
||||||
|
|
||||||
|
jsr HPLOT0 ; plot at (Y,X), (A)
|
||||||
|
; at begin, stores A to HGR_Y
|
||||||
|
; X to HGR_X and Y to HGR_X+1
|
||||||
|
; destroys X,Y,A
|
||||||
|
; Y is XX/7
|
||||||
|
|
||||||
|
|
||||||
|
ldy HGR_Y
|
||||||
|
ldx HGR_X
|
||||||
|
|
||||||
|
inx ; XX
|
||||||
|
cpx #255
|
||||||
|
bne sier_xloop
|
||||||
|
|
||||||
|
iny ; YY
|
||||||
|
cpy #192
|
||||||
|
bne sier_yloop
|
||||||
|
|
||||||
|
; inc T
|
||||||
|
; clc
|
||||||
|
lda T_L
|
||||||
|
blah_smc:
|
||||||
|
adc #1
|
||||||
|
sta T_L
|
||||||
|
bcc no_carry
|
||||||
|
inc T_H
|
||||||
|
no_carry:
|
||||||
|
|
||||||
|
; speed up the zoom as it goes
|
||||||
|
inc blah_smc+1
|
||||||
|
|
||||||
|
|
||||||
|
; x is 48
|
||||||
|
;flip_pages:
|
||||||
|
; lda draw_page_smc+1 ; DRAW_PAGE
|
||||||
|
; beq done_page
|
||||||
|
; inx
|
||||||
|
;done_page:
|
||||||
|
; X=48 ($30) PAGE1=$C054-$30=$C024
|
||||||
|
; ldy $C024,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 ; what can we branch on?
|
||||||
|
|
||||||
|
T_L: .byte $00
|
||||||
|
T_H: .byte $00
|
||||||
|
|
228
graphics/hgr/tiny_triangles/sier_moveright.s
Normal file
228
graphics/hgr/tiny_triangles/sier_moveright.s
Normal file
@@ -0,0 +1,228 @@
|
|||||||
|
; sierpinski-like demo
|
||||||
|
; based on the code from Hellmood's Memories demo
|
||||||
|
|
||||||
|
; by Vince `deater` Weaver <vince@deater.net>
|
||||||
|
|
||||||
|
; the simple sierpinski you more or less just plot
|
||||||
|
; X AND Y
|
||||||
|
|
||||||
|
; Hellmood's you plot something more or less like
|
||||||
|
; COLOR = ( (Y-(X*T)) & (X+(Y*T) ) & 0xf0
|
||||||
|
; where T is an incrementing frame value
|
||||||
|
|
||||||
|
; to get speed on 6502/Apple II we change the multiplies to
|
||||||
|
; a series of 16-bit 8.8 fixed point adds
|
||||||
|
|
||||||
|
; TODO:
|
||||||
|
; HPLOT timing
|
||||||
|
; MOVERIGHT timing
|
||||||
|
; MOVERIGHT MOVEDOWN timing
|
||||||
|
; LOOKUP TABLE timing
|
||||||
|
|
||||||
|
|
||||||
|
; zero page
|
||||||
|
|
||||||
|
HGR_BITS = $1C
|
||||||
|
GBASH = $27
|
||||||
|
MASK = $2E
|
||||||
|
COLOR = $30
|
||||||
|
HGR_X = $E0
|
||||||
|
HGR_Y = $E2
|
||||||
|
HGR_COLOR = $E4
|
||||||
|
|
||||||
|
|
||||||
|
SAVEX = $F7
|
||||||
|
XX_TH = $F8
|
||||||
|
XX_TL = $F9
|
||||||
|
YY = $FA
|
||||||
|
YY_TH = $FB
|
||||||
|
YY_TL = $FC
|
||||||
|
;T_L = $FD
|
||||||
|
;T_H = $FE
|
||||||
|
SAVED = $FF
|
||||||
|
|
||||||
|
; Soft switches
|
||||||
|
FULLGR = $C052
|
||||||
|
PAGE1 = $C054
|
||||||
|
PAGE2 = $C055
|
||||||
|
LORES = $C056 ; Enable LORES graphics
|
||||||
|
|
||||||
|
; ROM routines
|
||||||
|
HGR = $F3E2
|
||||||
|
HGR2 = $F3D8
|
||||||
|
HPOSN = $F411
|
||||||
|
HPLOT0 = $F457
|
||||||
|
HPLOT1 = $F45A ; skip the HPOSN call
|
||||||
|
COLOR_SHIFT = $F47E ; shift color for odd/even Y (0..7 or 7..13)
|
||||||
|
MOVE_RIGHT = $F48A ; move next plot location one to the right
|
||||||
|
|
||||||
|
COLORTBL = $F6F6
|
||||||
|
|
||||||
|
|
||||||
|
;.zeropage
|
||||||
|
;.globalzp T_L,T_H
|
||||||
|
|
||||||
|
;================================
|
||||||
|
; Clear screen and setup graphics
|
||||||
|
;================================
|
||||||
|
sier:
|
||||||
|
jsr HGR2 ; set FULLGR, sets A=0
|
||||||
|
|
||||||
|
|
||||||
|
; lda #0 ; start with multiplier 0
|
||||||
|
; sta T_L
|
||||||
|
; sta T_H
|
||||||
|
|
||||||
|
sier_outer:
|
||||||
|
|
||||||
|
ldy #0 ; YY starts at 0
|
||||||
|
sty YY
|
||||||
|
|
||||||
|
sty YY_TL
|
||||||
|
sty YY_TH
|
||||||
|
|
||||||
|
sier_yloop:
|
||||||
|
|
||||||
|
; calc YY_T (8.8 fixed point add)
|
||||||
|
; save space by skipping clc as it's only a slight variation w/o
|
||||||
|
; clc
|
||||||
|
lda YY_TL
|
||||||
|
adc T_L
|
||||||
|
sta YY_TL
|
||||||
|
lda YY_TH
|
||||||
|
adc T_H
|
||||||
|
sta YY_TH
|
||||||
|
|
||||||
|
; XX in X
|
||||||
|
; YY in YY
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
ldx #0 ; XX = 0
|
||||||
|
lda YY ; Y co-ord
|
||||||
|
jsr HPOSN ; set cursor position to (Y,X), (A)
|
||||||
|
|
||||||
|
; ldy HGR_Y
|
||||||
|
|
||||||
|
; lda GBASH
|
||||||
|
;draw_page_smc:
|
||||||
|
; adc #0
|
||||||
|
; sta GBASH ; adjust for PAGE1/PAGE2 ($400/$800)
|
||||||
|
|
||||||
|
; plp
|
||||||
|
; jsr $f806 ; trick to calculate MASK by jumping
|
||||||
|
; into middle of PLOT routine
|
||||||
|
|
||||||
|
; reset XX to 0
|
||||||
|
|
||||||
|
ldx #0 ; XX
|
||||||
|
stx XX_TL
|
||||||
|
stx XX_TH
|
||||||
|
|
||||||
|
sier_xloop:
|
||||||
|
|
||||||
|
stx SAVEX
|
||||||
|
|
||||||
|
; want (YY-(XX*T)) & (XX+(YY*T)
|
||||||
|
|
||||||
|
|
||||||
|
; SAVED = XX+(Y*T)
|
||||||
|
; clc
|
||||||
|
txa ; XX
|
||||||
|
adc YY_TH
|
||||||
|
sta SAVED
|
||||||
|
|
||||||
|
|
||||||
|
; 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_TH
|
||||||
|
|
||||||
|
; want (YY-(XX*T)) & (XX+(YY*T)
|
||||||
|
|
||||||
|
and SAVED
|
||||||
|
|
||||||
|
and #$f0
|
||||||
|
|
||||||
|
beq white
|
||||||
|
black:
|
||||||
|
lda #0 ; black
|
||||||
|
.byte $2C ; bit trick
|
||||||
|
white:
|
||||||
|
lda #$ff ; white
|
||||||
|
|
||||||
|
color_ready:
|
||||||
|
; tax
|
||||||
|
|
||||||
|
; tya
|
||||||
|
; lsr ; check even or odd
|
||||||
|
; php
|
||||||
|
|
||||||
|
; lda COLORTBL,X
|
||||||
|
sta HGR_BITS
|
||||||
|
|
||||||
|
; plp
|
||||||
|
; bcc no_shift
|
||||||
|
|
||||||
|
; jsr COLOR_SHIFT ; if odd then color shift
|
||||||
|
|
||||||
|
no_shift:
|
||||||
|
|
||||||
|
jsr HPLOT1 ; plot at current position
|
||||||
|
|
||||||
|
jsr MOVE_RIGHT ; move current position right (trashes A)
|
||||||
|
|
||||||
|
ldx SAVEX ; restore X
|
||||||
|
|
||||||
|
|
||||||
|
;==================================
|
||||||
|
inx ; XX
|
||||||
|
bne sier_xloop
|
||||||
|
|
||||||
|
;==================================
|
||||||
|
inc YY ; repeat until Y=192
|
||||||
|
ldy YY
|
||||||
|
cpy #192
|
||||||
|
bne sier_yloop
|
||||||
|
|
||||||
|
|
||||||
|
; inc T
|
||||||
|
; clc
|
||||||
|
lda T_L
|
||||||
|
blah_smc:
|
||||||
|
adc #1
|
||||||
|
sta T_L
|
||||||
|
bcc no_carry
|
||||||
|
inc T_H
|
||||||
|
no_carry:
|
||||||
|
|
||||||
|
; speed up the zoom as it goes
|
||||||
|
inc blah_smc+1
|
||||||
|
|
||||||
|
|
||||||
|
; x is 48
|
||||||
|
;flip_pages:
|
||||||
|
; lda draw_page_smc+1 ; DRAW_PAGE
|
||||||
|
; beq done_page
|
||||||
|
; inx
|
||||||
|
;done_page:
|
||||||
|
; X=48 ($30) PAGE1=$C054-$30=$C024
|
||||||
|
; ldy $C024,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 ; what can we branch on?
|
||||||
|
|
||||||
|
T_L: .byte $00
|
||||||
|
T_H: .byte $00
|
||||||
|
|
Reference in New Issue
Block a user