mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-06-03 11:29:49 +00:00
fn: huge pain getting page flipping to work
This commit is contained in:
parent
cb84455f65
commit
5c37ea5fb7
131
games/sb/fn.s
131
games/sb/fn.s
|
@ -11,7 +11,23 @@
|
||||||
fortnight_start:
|
fortnight_start:
|
||||||
|
|
||||||
lda #$20
|
lda #$20
|
||||||
sta HGR_PAGE
|
sta HGR_PAGE ; why?
|
||||||
|
|
||||||
|
lda #$00 ; will be $00/$20
|
||||||
|
sta DRAW_PAGE
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
sta WHICH_PAGE
|
||||||
|
|
||||||
|
; disp page1
|
||||||
|
; erase old page2
|
||||||
|
; save page2
|
||||||
|
; draw page2
|
||||||
|
|
||||||
|
; disp page2
|
||||||
|
; erase old page1
|
||||||
|
; save page1
|
||||||
|
; draw page1
|
||||||
|
|
||||||
jsr hgr_make_tables
|
jsr hgr_make_tables
|
||||||
|
|
||||||
|
@ -56,17 +72,86 @@ floppy_animation:
|
||||||
|
|
||||||
jsr full_decomp
|
jsr full_decomp
|
||||||
|
|
||||||
|
lda #4
|
||||||
|
sta SPRITE_Y
|
||||||
|
|
||||||
|
lda #$FF
|
||||||
|
sta backup_sprite1
|
||||||
|
sta backup_sprite2
|
||||||
|
|
||||||
|
|
||||||
reset_floppy_loop:
|
reset_floppy_loop:
|
||||||
lda #0
|
lda #0
|
||||||
sta XPOS
|
sta XPOS
|
||||||
|
|
||||||
floppy_loop:
|
floppy_loop:
|
||||||
|
|
||||||
|
;=========================
|
||||||
|
; switch visible page
|
||||||
|
;=========================
|
||||||
|
|
||||||
|
lda WHICH_PAGE
|
||||||
|
tax
|
||||||
|
sta PAGE1,X
|
||||||
|
eor #$1
|
||||||
|
sta WHICH_PAGE
|
||||||
|
|
||||||
|
|
||||||
|
;========================
|
||||||
|
; switch draw page
|
||||||
|
;========================
|
||||||
|
|
||||||
|
lda DRAW_PAGE
|
||||||
|
eor #$20
|
||||||
|
sta DRAW_PAGE
|
||||||
|
|
||||||
|
;=======================
|
||||||
|
; erase sprite
|
||||||
|
;=======================
|
||||||
|
|
||||||
|
lda OLDER_X
|
||||||
|
sta SPRITE_X
|
||||||
|
|
||||||
|
lda WHICH_PAGE
|
||||||
|
; eor #$1
|
||||||
|
tax
|
||||||
|
lda backup_sprites_l,X
|
||||||
|
sta INL
|
||||||
|
lda backup_sprites_h,X
|
||||||
|
sta INH
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
lda (INL),Y
|
||||||
|
bmi goog
|
||||||
|
|
||||||
|
jsr hgr_draw_sprite
|
||||||
|
|
||||||
|
goog:
|
||||||
|
|
||||||
|
lda WHICH_PAGE
|
||||||
|
; eor #$1
|
||||||
|
tax
|
||||||
|
lda backup_sprites_l,X
|
||||||
|
sta OUTL
|
||||||
|
lda backup_sprites_h,X
|
||||||
|
sta OUTH
|
||||||
|
|
||||||
|
|
||||||
|
;=======================
|
||||||
|
; save/draw
|
||||||
|
;=======================
|
||||||
|
|
||||||
ldx XPOS
|
ldx XPOS
|
||||||
|
|
||||||
lda floppy_x,X
|
lda OLD_X
|
||||||
sta CURSOR_X
|
sta OLDER_X
|
||||||
lda #4
|
|
||||||
sta CURSOR_Y
|
lda floppy_x,X ; save/draw offscreen
|
||||||
|
sta SPRITE_X
|
||||||
|
sta OLD_X
|
||||||
|
; lda #4
|
||||||
|
; sta SPRITE_Y
|
||||||
|
; sta OLD_Y
|
||||||
lda floppy_sprite_l,X
|
lda floppy_sprite_l,X
|
||||||
sta INL
|
sta INL
|
||||||
lda floppy_sprite_h,X
|
lda floppy_sprite_h,X
|
||||||
|
@ -81,20 +166,15 @@ floppy_loop:
|
||||||
|
|
||||||
time_loop:
|
time_loop:
|
||||||
|
|
||||||
|
; check keypress
|
||||||
|
|
||||||
lda KEYPRESS ; 4
|
lda KEYPRESS ; 4
|
||||||
bmi done_floppy
|
bmi done_floppy
|
||||||
|
|
||||||
lda #160
|
lda #160
|
||||||
jsr WAIT
|
jsr WAIT
|
||||||
|
|
||||||
|
jsr inc_frame
|
||||||
; jsr wait_until_keypress
|
|
||||||
|
|
||||||
; see if end
|
|
||||||
inc FRAME
|
|
||||||
bne no_frame_oflo
|
|
||||||
inc FRAMEH
|
|
||||||
no_frame_oflo:
|
|
||||||
|
|
||||||
lda FRAMEH
|
lda FRAMEH
|
||||||
cmp #3
|
cmp #3
|
||||||
|
@ -104,21 +184,15 @@ no_frame_oflo:
|
||||||
and #$3
|
and #$3
|
||||||
bne time_loop
|
bne time_loop
|
||||||
|
|
||||||
; erase sprite
|
|
||||||
|
|
||||||
lda #<backup_sprite
|
|
||||||
sta INL
|
|
||||||
lda #>backup_sprite
|
|
||||||
sta INH
|
|
||||||
jsr hgr_draw_sprite
|
|
||||||
|
|
||||||
; move sprite
|
; move sprite
|
||||||
|
|
||||||
inc XPOS
|
inc XPOS
|
||||||
|
|
||||||
lda XPOS
|
lda XPOS
|
||||||
cmp #18
|
cmp #18
|
||||||
bcc floppy_loop
|
bcc floppy_loop
|
||||||
bcs reset_floppy_loop
|
jmp reset_floppy_loop
|
||||||
|
|
||||||
|
|
||||||
done_floppy:
|
done_floppy:
|
||||||
bit KEYRESET ; clear the keyboard buffer
|
bit KEYRESET ; clear the keyboard buffer
|
||||||
|
@ -175,6 +249,13 @@ wait_until_keypress:
|
||||||
bit KEYRESET ; clear the keyboard buffer
|
bit KEYRESET ; clear the keyboard buffer
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
inc_frame:
|
||||||
|
inc FRAME
|
||||||
|
bne no_frame_oflo
|
||||||
|
inc FRAMEH
|
||||||
|
no_frame_oflo:
|
||||||
|
rts
|
||||||
|
|
||||||
.include "zx02_optim.s"
|
.include "zx02_optim.s"
|
||||||
|
|
||||||
.include "hgr_sprite.s"
|
.include "hgr_sprite.s"
|
||||||
|
@ -230,3 +311,9 @@ floppy_mask_h:
|
||||||
.byte >disk_mask1,>disk_mask0
|
.byte >disk_mask1,>disk_mask0
|
||||||
|
|
||||||
|
|
||||||
|
backup_sprites_l:
|
||||||
|
.byte <backup_sprite1,<backup_sprite2
|
||||||
|
|
||||||
|
backup_sprites_h:
|
||||||
|
.byte >backup_sprite1,>backup_sprite2
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
; hgr draw sprite (only at 7-bit boundaries)
|
; hgr draw sprite (only at 7-bit boundaries)
|
||||||
;===========================================
|
;===========================================
|
||||||
; SPRITE in INL/INH
|
; SPRITE in INL/INH
|
||||||
; Location at CURSOR_X CURSOR_Y
|
; Location at SPRITE_X SPRITE_Y
|
||||||
|
|
||||||
; xsize, ysize in first two bytes
|
; xsize, ysize in first two bytes
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ hgr_draw_sprite:
|
||||||
ldy #0
|
ldy #0
|
||||||
lda (INL),Y ; load xsize
|
lda (INL),Y ; load xsize
|
||||||
clc
|
clc
|
||||||
adc CURSOR_X
|
adc SPRITE_X
|
||||||
sta sprite_width_end_smc+1 ; self modify for end of line
|
sta sprite_width_end_smc+1 ; self modify for end of line
|
||||||
|
|
||||||
iny ; load ysize
|
iny ; load ysize
|
||||||
|
@ -37,7 +37,7 @@ hgr_sprite_yloop:
|
||||||
lda CURRENT_ROW ; row
|
lda CURRENT_ROW ; row
|
||||||
|
|
||||||
clc
|
clc
|
||||||
adc CURSOR_Y ; add in cursor_y
|
adc SPRITE_Y ; add in cursor_y
|
||||||
|
|
||||||
; calc GBASL/GBASH
|
; calc GBASL/GBASH
|
||||||
|
|
||||||
|
@ -50,11 +50,13 @@ hgr_sprite_yloop:
|
||||||
; eor #$60 draws on page1
|
; eor #$60 draws on page1
|
||||||
;hgr_sprite_page_smc:
|
;hgr_sprite_page_smc:
|
||||||
; eor #$00
|
; eor #$00
|
||||||
|
clc
|
||||||
|
adc DRAW_PAGE
|
||||||
sta GBASH
|
sta GBASH
|
||||||
; eor #$60
|
; eor #$60
|
||||||
; sta INH
|
; sta INH
|
||||||
|
|
||||||
ldy CURSOR_X
|
ldy SPRITE_X
|
||||||
|
|
||||||
sprite_inner_loop:
|
sprite_inner_loop:
|
||||||
|
|
||||||
|
|
|
@ -2,24 +2,26 @@
|
||||||
; hgr draw sprite mask and save (only at 7-bit boundaries)
|
; hgr draw sprite mask and save (only at 7-bit boundaries)
|
||||||
;===========================================
|
;===========================================
|
||||||
; SPRITE in INL/INH
|
; SPRITE in INL/INH
|
||||||
; Location at CURSOR_X CURSOR_Y
|
; Location at SPRITE_X SPRITE_Y
|
||||||
|
|
||||||
; xsize, ysize in first two bytes
|
; xsize, ysize in first two bytes
|
||||||
|
|
||||||
; sprite AT INL/INH
|
; sprite AT INL/INH
|
||||||
|
|
||||||
|
; save at OUTL/OUTH
|
||||||
|
|
||||||
hgr_draw_sprite_mask_and_save:
|
hgr_draw_sprite_mask_and_save:
|
||||||
|
|
||||||
ldy #0
|
ldy #0
|
||||||
lda (INL),Y ; load xsize
|
lda (INL),Y ; load xsize
|
||||||
sta backup_sprite
|
sta (OUTL),Y
|
||||||
clc
|
clc
|
||||||
adc CURSOR_X
|
adc SPRITE_X
|
||||||
sta sms_sprite_width_end_smc+1 ; self modify for end of line
|
sta sms_sprite_width_end_smc+1 ; self modify for end of line
|
||||||
|
|
||||||
iny ; load ysize
|
iny ; load ysize
|
||||||
lda (INL),Y
|
lda (INL),Y
|
||||||
sta backup_sprite+1
|
sta (OUTL),Y
|
||||||
sta sms_sprite_ysize_smc+1 ; self modify
|
sta sms_sprite_ysize_smc+1 ; self modify
|
||||||
|
|
||||||
; point smc to sprite
|
; point smc to sprite
|
||||||
|
@ -28,6 +30,13 @@ hgr_draw_sprite_mask_and_save:
|
||||||
lda INH
|
lda INH
|
||||||
sta sms_sprite_smc1+2
|
sta sms_sprite_smc1+2
|
||||||
|
|
||||||
|
; point smc to sprite
|
||||||
|
lda OUTL ; 16-bit add
|
||||||
|
sta backup_sprite_smc1+1
|
||||||
|
lda OUTH
|
||||||
|
sta backup_sprite_smc1+2
|
||||||
|
|
||||||
|
|
||||||
lda MASKL
|
lda MASKL
|
||||||
sta sms_mask_smc1+1
|
sta sms_mask_smc1+1
|
||||||
lda MASKH
|
lda MASKH
|
||||||
|
@ -43,31 +52,31 @@ hgr_sms_sprite_yloop:
|
||||||
lda CURRENT_ROW ; row
|
lda CURRENT_ROW ; row
|
||||||
|
|
||||||
clc
|
clc
|
||||||
adc CURSOR_Y ; add in cursor_y
|
adc SPRITE_Y ; add in cursor_y
|
||||||
|
|
||||||
; calc GBASL/GBASH
|
; calc GBASL/GBASH
|
||||||
|
|
||||||
tay ; get output ROW into GBASL/H
|
tay ; get output ROW into GBASL/H
|
||||||
lda hposn_low,Y
|
lda hposn_low,Y
|
||||||
sta GBASL
|
sta GBASL
|
||||||
; sta INL
|
|
||||||
lda hposn_high,Y
|
lda hposn_high,Y
|
||||||
|
|
||||||
; eor #$00 draws on page2
|
|
||||||
; eor #$60 draws on page1
|
|
||||||
;hgr_sprite_page_smc:
|
;hgr_sprite_page_smc:
|
||||||
; eor #$00
|
; eor #$00
|
||||||
sta GBASH
|
|
||||||
; eor #$60
|
|
||||||
; sta INH
|
|
||||||
|
|
||||||
ldy CURSOR_X
|
clc
|
||||||
|
adc DRAW_PAGE
|
||||||
|
sta GBASH
|
||||||
|
|
||||||
|
ldy SPRITE_X
|
||||||
|
|
||||||
sms_sprite_inner_loop:
|
sms_sprite_inner_loop:
|
||||||
|
|
||||||
|
|
||||||
lda (GBASL),Y ; load bg
|
lda (GBASL),Y ; load bg
|
||||||
sta backup_sprite,X
|
backup_sprite_smc1:
|
||||||
|
sta $f000,X
|
||||||
sms_sprite_smc1:
|
sms_sprite_smc1:
|
||||||
eor $f000,X ; load sprite data
|
eor $f000,X ; load sprite data
|
||||||
sms_mask_smc1:
|
sms_mask_smc1:
|
||||||
|
@ -93,4 +102,5 @@ sms_sprite_ysize_smc:
|
||||||
|
|
||||||
rts
|
rts
|
||||||
|
|
||||||
backup_sprite = $1800
|
backup_sprite1 = $1800
|
||||||
|
backup_sprite2 = $1900
|
||||||
|
|
|
@ -154,6 +154,9 @@ D2_XSPEED = $EB
|
||||||
D1_YSPEED = $EC
|
D1_YSPEED = $EC
|
||||||
D2_YSPEED = $ED
|
D2_YSPEED = $ED
|
||||||
|
|
||||||
|
OLD_X = $EC
|
||||||
|
OLDER_X = $ED
|
||||||
|
|
||||||
DISP_PAGE = $EE
|
DISP_PAGE = $EE
|
||||||
DRAW_PAGE = $EF
|
DRAW_PAGE = $EF
|
||||||
|
|
||||||
|
@ -161,8 +164,8 @@ DRAW_PAGE = $EF
|
||||||
XPOS = $F0
|
XPOS = $F0
|
||||||
YPOS = $F1
|
YPOS = $F1
|
||||||
XMAX = $F2
|
XMAX = $F2
|
||||||
CURSOR_X = $F3
|
SPRITE_X = $F3
|
||||||
CURSOR_Y = $F4
|
SPRITE_Y = $F4
|
||||||
HGR_PAGE = $F5
|
HGR_PAGE = $F5
|
||||||
CURRENT_ROW = $F6
|
CURRENT_ROW = $F6
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user