mirror of
https://github.com/a2-4am/4cade.git
synced 2025-08-05 21:25:25 +00:00
VBL syncing on some wipes
This commit is contained in:
@@ -1 +1 @@
|
||||
RIPPLE
|
||||
RIPPLE
|
@@ -25,6 +25,7 @@ ColLoop
|
||||
sta row
|
||||
ldy col
|
||||
sty y
|
||||
jsr WaitForVBL
|
||||
RowLoop
|
||||
; check if this column is visible
|
||||
ldy y
|
||||
@@ -93,3 +94,4 @@ copymasks4
|
||||
|
||||
!source "src/wait.a"
|
||||
!source "src/fx/fx.hgr.common.a"
|
||||
!source "src/fx/hw.vbl.a"
|
||||
|
@@ -10,8 +10,13 @@ row = $fd
|
||||
col = $fe
|
||||
counter = $ff
|
||||
|
||||
hgrlo = $8000
|
||||
hgr1hi = $80C0
|
||||
hgr2hi = $8180
|
||||
|
||||
!source "src/fx/macros.a"
|
||||
|
||||
+BUILD_HGR_LOOKUP_TABLES hgrlo, hgr1hi, hgr2hi
|
||||
+INIT_MASKS sourcemasks1, copymasks1
|
||||
+INIT_MASKS sourcemasks4, copymasks4
|
||||
|
||||
@@ -25,18 +30,27 @@ ColLoop
|
||||
sta row
|
||||
ldy col
|
||||
sty y
|
||||
jsr WaitForVBL
|
||||
|
||||
RowLoop
|
||||
; do top half of arrow
|
||||
lda row
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
tax
|
||||
lda hgrlo,x
|
||||
sta $26
|
||||
sta $3c
|
||||
lda hgr1hi,x
|
||||
sta $27
|
||||
lda hgr2hi,x
|
||||
sta $3d
|
||||
|
||||
; check if this column is visible
|
||||
ldy y
|
||||
+IS_Y_OFFSCREEN
|
||||
+LBCS Skip1
|
||||
|
||||
; do top half of arrow (part 1 of 2)
|
||||
lda row
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
+HGR_CALC
|
||||
bcs TopSkip1
|
||||
|
||||
ldx #7
|
||||
- lda ($26),y
|
||||
@@ -50,42 +64,11 @@ RowLoop
|
||||
+HGR_INC_WITHIN_BLOCK
|
||||
dex
|
||||
bpl -
|
||||
|
||||
; do bottom half of arrow (opposing row, same col)
|
||||
lda #23
|
||||
sec
|
||||
sbc row
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
+HGR_CALC
|
||||
|
||||
ldx #7
|
||||
- lda ($26),y
|
||||
and sourcemasks4,x
|
||||
sta $00
|
||||
lda #$FF
|
||||
and copymasks4,x
|
||||
ora $00
|
||||
sta ($26),y
|
||||
clc
|
||||
+HGR_INC_WITHIN_BLOCK
|
||||
dex
|
||||
bpl -
|
||||
|
||||
Skip1
|
||||
; now check if *this* column is visible
|
||||
+RESET_HGR_CALC
|
||||
TopSkip1
|
||||
iny
|
||||
sty y
|
||||
+IS_Y_OFFSCREEN
|
||||
+LBCS Skip2
|
||||
|
||||
; do top half of arrow (part 2 of 2)
|
||||
lda row
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
+HGR_CALC
|
||||
bcs TopSkip2
|
||||
|
||||
ldx #7
|
||||
- lda #$FF
|
||||
@@ -99,7 +82,15 @@ Skip1
|
||||
+HGR_INC_WITHIN_BLOCK
|
||||
dex
|
||||
bpl -
|
||||
+RESET_HGR_CALC
|
||||
TopSkip2
|
||||
iny
|
||||
+IS_Y_OFFSCREEN
|
||||
bcs BottomHalf
|
||||
lda row
|
||||
jsr HGRBlockCopyNoRecalc
|
||||
|
||||
BottomHalf
|
||||
; do bottom half of arrow (opposing row, same col)
|
||||
lda #23
|
||||
sec
|
||||
@@ -107,7 +98,37 @@ Skip1
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
+HGR_CALC
|
||||
tax
|
||||
lda hgrlo,x
|
||||
sta $26
|
||||
sta $3c
|
||||
lda hgr1hi,x
|
||||
sta $27
|
||||
lda hgr2hi,x
|
||||
sta $3d
|
||||
|
||||
ldy y
|
||||
+IS_Y_OFFSCREEN
|
||||
bcs BottomSkip1
|
||||
|
||||
ldx #7
|
||||
- lda ($26),y
|
||||
and sourcemasks4,x
|
||||
sta $00
|
||||
lda #$FF
|
||||
and copymasks4,x
|
||||
ora $00
|
||||
sta ($26),y
|
||||
clc
|
||||
+HGR_INC_WITHIN_BLOCK
|
||||
dex
|
||||
bpl -
|
||||
+RESET_HGR_CALC
|
||||
|
||||
BottomSkip1
|
||||
iny
|
||||
+IS_Y_OFFSCREEN
|
||||
bcs BottomSkip2
|
||||
|
||||
ldx #7
|
||||
- lda #$FF
|
||||
@@ -121,24 +142,21 @@ Skip1
|
||||
+HGR_INC_WITHIN_BLOCK
|
||||
dex
|
||||
bpl -
|
||||
|
||||
Skip2
|
||||
; now check if *this* column is visible
|
||||
+RESET_HGR_CALC
|
||||
BottomSkip2
|
||||
iny
|
||||
+IS_Y_OFFSCREEN
|
||||
bcs NextRow
|
||||
|
||||
; do top half copy
|
||||
lda row
|
||||
jsr HGRBlockCopy
|
||||
|
||||
; do bottom half copy
|
||||
lda #23
|
||||
sec
|
||||
sbc row
|
||||
jsr HGRBlockCopy
|
||||
jsr HGRBlockCopyNoRecalc
|
||||
|
||||
NextRow
|
||||
ldy y
|
||||
iny
|
||||
sty y
|
||||
dec row
|
||||
+LBPL RowLoop
|
||||
lda $c000
|
||||
@@ -173,3 +191,4 @@ copymasks4
|
||||
|
||||
!source "src/wait.a"
|
||||
!source "src/fx/fx.hgr.common.a"
|
||||
!source "src/fx/hw.vbl.a"
|
||||
|
@@ -7,7 +7,8 @@
|
||||
|
||||
ldx #191
|
||||
|
||||
--- lda #$40
|
||||
--- jsr WaitForVBL
|
||||
lda #$40
|
||||
sta $e6
|
||||
lsr
|
||||
sta $29
|
||||
@@ -97,3 +98,5 @@ vposn txa
|
||||
sta $27
|
||||
|
||||
done rts
|
||||
|
||||
!source "src/fx/hw.vbl.a"
|
||||
|
@@ -1,5 +1,5 @@
|
||||
;license:MIT
|
||||
;(c) 2018 by 4am
|
||||
;(c) 2018-9 by 4am
|
||||
;
|
||||
!source "src/fx/macros.a"
|
||||
|
||||
|
@@ -22,6 +22,7 @@ counter = $ff
|
||||
lda #23
|
||||
sta row
|
||||
ldy col
|
||||
jsr WaitForVBL
|
||||
@rowloop
|
||||
tya
|
||||
bmi +
|
||||
@@ -60,3 +61,4 @@ copymasks
|
||||
|
||||
!source "src/wait.a"
|
||||
!source "src/fx/fx.hgr.common.a"
|
||||
!source "src/fx/hw.vbl.a"
|
||||
|
@@ -22,6 +22,7 @@ counter = $ff
|
||||
lda #23
|
||||
sta row
|
||||
ldy col
|
||||
jsr WaitForVBL
|
||||
@rowloop
|
||||
tya
|
||||
bmi +
|
||||
@@ -61,3 +62,4 @@ copymasks
|
||||
|
||||
!source "src/wait.a"
|
||||
!source "src/fx/fx.hgr.common.a"
|
||||
!source "src/fx/hw.vbl.a"
|
||||
|
@@ -22,6 +22,7 @@ counter = $ff
|
||||
lda #0
|
||||
sta row
|
||||
ldy col
|
||||
jsr WaitForVBL
|
||||
@rowloop
|
||||
tya
|
||||
bmi +
|
||||
@@ -62,3 +63,4 @@ copymasks
|
||||
|
||||
!source "src/wait.a"
|
||||
!source "src/fx/fx.hgr.common.a"
|
||||
!source "src/fx/hw.vbl.a"
|
||||
|
@@ -27,6 +27,7 @@ counter = $ff
|
||||
sta row
|
||||
ldy col
|
||||
sty y
|
||||
jsr WaitForVBL
|
||||
@rowloop
|
||||
; check if this column is visible
|
||||
ldy y
|
||||
@@ -157,3 +158,4 @@ copymasks4
|
||||
|
||||
!source "src/wait.a"
|
||||
!source "src/fx/fx.hgr.common.a"
|
||||
!source "src/fx/hw.vbl.a"
|
||||
|
@@ -18,6 +18,7 @@ col = $ff
|
||||
@clearcolloop
|
||||
lda #$06
|
||||
sta maskindex
|
||||
jsr WaitForVBL
|
||||
@clearmaskloop
|
||||
ldx maskindex
|
||||
lda clearmasks,x
|
||||
@@ -63,6 +64,7 @@ col = $ff
|
||||
@colloop
|
||||
lda #$06
|
||||
sta maskindex
|
||||
jsr WaitForVBL
|
||||
@maskloop
|
||||
ldx maskindex
|
||||
lda copymasks,x
|
||||
@@ -108,3 +110,4 @@ copymasks
|
||||
!byte $FF,$BF,$9F,$8F,$87,$83,$81
|
||||
!source "src/wait.a"
|
||||
!source "src/fx/fx.hgr.common.a"
|
||||
!source "src/fx/hw.vbl.a"
|
||||
|
@@ -18,6 +18,7 @@ col2 = $ff
|
||||
@colloop
|
||||
lda #6
|
||||
sta maskindex
|
||||
jsr WaitForVBL
|
||||
@maskloop
|
||||
ldx maskindex
|
||||
lda copymasks1,x
|
||||
@@ -103,3 +104,4 @@ copymasks2
|
||||
|
||||
!source "src/wait.a"
|
||||
!source "src/fx/fx.hgr.common.a"
|
||||
!source "src/fx/hw.vbl.a"
|
||||
|
@@ -15,6 +15,7 @@ col = $ff
|
||||
@colloop
|
||||
lda #$06
|
||||
sta maskindex
|
||||
jsr WaitForVBL
|
||||
@maskloop
|
||||
ldx maskindex
|
||||
lda copymasks,x
|
||||
@@ -66,3 +67,4 @@ copymasks
|
||||
|
||||
!source "src/wait.a"
|
||||
!source "src/fx/fx.hgr.common.a"
|
||||
!source "src/fx/hw.vbl.a"
|
||||
|
@@ -29,6 +29,7 @@ ColLoop
|
||||
sta row
|
||||
ldy col
|
||||
sty y
|
||||
jsr WaitForVBL
|
||||
RowLoop
|
||||
; [speedopt] calculate HGR base addresses once per row
|
||||
lda row
|
||||
@@ -249,3 +250,4 @@ copymasks6
|
||||
|
||||
!source "src/wait.a"
|
||||
!source "src/fx/fx.hgr.common.a"
|
||||
!source "src/fx/hw.vbl.a"
|
||||
|
@@ -27,6 +27,7 @@ counter = $ff
|
||||
ColLoop
|
||||
lda #23
|
||||
sta row
|
||||
jsr WaitForVBL
|
||||
RowLoop
|
||||
; [speedopt] calculate HGR base addresses once per row
|
||||
lda row
|
||||
@@ -244,3 +245,4 @@ copymasks6
|
||||
|
||||
!source "src/wait.a"
|
||||
!source "src/fx/fx.hgr.common.a"
|
||||
!source "src/fx/hw.vbl.a"
|
||||
|
@@ -27,6 +27,7 @@ counter = $ff
|
||||
ColLoop
|
||||
lda #23
|
||||
sta row
|
||||
jsr WaitForVBL
|
||||
RowLoop
|
||||
; [speedopt] calculate HGR base addresses once per row
|
||||
lda row
|
||||
@@ -244,3 +245,4 @@ copymasks6
|
||||
|
||||
!source "src/wait.a"
|
||||
!source "src/fx/fx.hgr.common.a"
|
||||
!source "src/fx/hw.vbl.a"
|
||||
|
@@ -14,6 +14,7 @@ row = $fd
|
||||
@rowloop
|
||||
lda #6
|
||||
sta maskindex
|
||||
jsr WaitForVBL
|
||||
@maskloop
|
||||
lda row
|
||||
bmi @skiprow
|
||||
@@ -156,3 +157,4 @@ masks
|
||||
|
||||
!source "src/wait.a"
|
||||
!source "src/fx/fx.hgr.common.a"
|
||||
!source "src/fx/hw.vbl.a"
|
||||
|
@@ -14,6 +14,7 @@ row = $fd
|
||||
@rowloop
|
||||
lda #6
|
||||
sta maskindex
|
||||
jsr WaitForVBL
|
||||
@maskloop
|
||||
lda row
|
||||
bmi @skiprow
|
||||
@@ -164,3 +165,4 @@ masks
|
||||
|
||||
!source "src/wait.a"
|
||||
!source "src/fx/fx.hgr.common.a"
|
||||
!source "src/fx/hw.vbl.a"
|
||||
|
@@ -14,6 +14,7 @@ row = $fd
|
||||
@rowloop
|
||||
lda #6
|
||||
sta maskindex
|
||||
jsr WaitForVBL
|
||||
@maskloop
|
||||
lda row
|
||||
bmi @skiprow
|
||||
@@ -166,3 +167,4 @@ masks
|
||||
|
||||
!source "src/wait.a"
|
||||
!source "src/fx/fx.hgr.common.a"
|
||||
!source "src/fx/hw.vbl.a"
|
||||
|
@@ -39,6 +39,7 @@ row2 = $FF
|
||||
sta row2
|
||||
|
||||
@outerloop
|
||||
jsr WaitForVBL
|
||||
lda row1
|
||||
bmi @skiptopwhite
|
||||
asl
|
||||
@@ -122,3 +123,4 @@ row2 = $FF
|
||||
|
||||
!source "src/wait.a"
|
||||
!source "src/fx/fx.hgr.common.a"
|
||||
!source "src/fx/hw.vbl.a"
|
||||
|
54
src/fx/hw.vbl.a
Normal file
54
src/fx/hw.vbl.a
Normal file
@@ -0,0 +1,54 @@
|
||||
;license:MIT
|
||||
;(c) 2019 by 4am
|
||||
;
|
||||
; Public functions:
|
||||
; - WaitForVBL
|
||||
;
|
||||
|
||||
!source "src/fx/macros.a"
|
||||
|
||||
WaitForVBL
|
||||
bit $FDFD
|
||||
|
||||
pha
|
||||
tya
|
||||
pha
|
||||
+READ_ROM_NO_WRITE
|
||||
lda $FBB3
|
||||
cmp #$06
|
||||
bne @nop
|
||||
lda $FBC0
|
||||
beq @iic
|
||||
+LDADDR WaitForVBL_iie
|
||||
bne +
|
||||
@iic
|
||||
+LDADDR WaitForVBL_iic
|
||||
bne +
|
||||
@nop
|
||||
+LDADDR WaitForVBL_nop
|
||||
bne + ; always branches
|
||||
|
||||
+
|
||||
+STAY WaitForVBL+1
|
||||
lda #$4C ; JMP opcode
|
||||
sta WaitForVBL
|
||||
|
||||
+READ_RAM1_WRITE_RAM1
|
||||
pla
|
||||
tay
|
||||
pla
|
||||
jmp WaitForVBL
|
||||
|
||||
WaitForVBL_nop ; II/II+ have no easy VBL
|
||||
rts
|
||||
|
||||
WaitForVBL_iie ; IIe/IIgs have a relatively sane VBL
|
||||
- bit $c019
|
||||
bpl -
|
||||
- bit $c019
|
||||
bmi -
|
||||
rts
|
||||
|
||||
WaitForVBL_iic ; IIc is special
|
||||
; TODO
|
||||
rts
|
@@ -1,6 +1,37 @@
|
||||
!ifndef _HGRMACROS_ {
|
||||
!source "src/macros.a"
|
||||
|
||||
; .lo, .page1hi, .page2hi will each be filled with $C0 bytes
|
||||
; based on routine by John Brooks
|
||||
; posted on comp.sys.apple2 on 2018-07-11
|
||||
; https://groups.google.com/d/msg/comp.sys.apple2/v2HOfHOmeNQ/zD76fJg_BAAJ
|
||||
!macro BUILD_HGR_LOOKUP_TABLES .hgrlo, .hgr1hi, .hgr2hi {
|
||||
ldx #0
|
||||
- txa
|
||||
and #$F8
|
||||
bpl +
|
||||
ora #5
|
||||
+ asl
|
||||
bpl +
|
||||
ora #5
|
||||
+ asl
|
||||
asl
|
||||
sta .hgrlo,x
|
||||
txa
|
||||
and #7
|
||||
rol
|
||||
asl .hgrlo,x
|
||||
rol
|
||||
clc
|
||||
adc #$20
|
||||
sta .hgr1hi,x
|
||||
eor #$60
|
||||
sta .hgr2hi,x
|
||||
inx
|
||||
cpx #$C0
|
||||
bne -
|
||||
}
|
||||
|
||||
!macro HGR_CALC {
|
||||
asl
|
||||
tax
|
||||
|
Reference in New Issue
Block a user