Drawing column going right, but lag
This commit is contained in:
352
plat.s
352
plat.s
@@ -81,11 +81,15 @@ nmi_lock: .res 1
|
|||||||
nmi_count: .res 1
|
nmi_count: .res 1
|
||||||
nmi_ready: .res 1
|
nmi_ready: .res 1
|
||||||
nmt_update_len: .res 1
|
nmt_update_len: .res 1
|
||||||
|
nmt_column: .res 1
|
||||||
scroll_x: .res 1
|
scroll_x: .res 1
|
||||||
scroll_y: .res 1
|
scroll_y: .res 1
|
||||||
scroll_nmt: .res 1
|
scroll_nmt: .res 1
|
||||||
|
scroll_page: .res 1
|
||||||
temp: .res 1
|
temp: .res 1
|
||||||
|
|
||||||
|
PPUCTRL_default = %10101000
|
||||||
|
|
||||||
.segment "BSS"
|
.segment "BSS"
|
||||||
nmt_update: .res 256
|
nmt_update: .res 256
|
||||||
palette: .res 32
|
palette: .res 32
|
||||||
@@ -145,18 +149,73 @@ nmi:
|
|||||||
ldx #0
|
ldx #0
|
||||||
cpx nmt_update_len
|
cpx nmt_update_len
|
||||||
bcs @scroll
|
bcs @scroll
|
||||||
|
|
||||||
|
lda PPUCTRL_default
|
||||||
|
;ora #%00000100
|
||||||
|
sta $2000
|
||||||
|
|
||||||
|
ldy #0
|
||||||
@nmt_update_loop:
|
@nmt_update_loop:
|
||||||
lda nmt_update, X
|
lda #6
|
||||||
|
jsr mul_y
|
||||||
|
tax
|
||||||
|
|
||||||
|
lda $2002
|
||||||
|
|
||||||
|
lda nmt_update+0, X
|
||||||
sta $2006
|
sta $2006
|
||||||
inx
|
lda nmt_update+1, X
|
||||||
lda nmt_update, X
|
|
||||||
sta $2006
|
sta $2006
|
||||||
inx
|
|
||||||
lda nmt_update, X
|
lda nmt_update+2, X
|
||||||
sta $2007
|
sta $2007
|
||||||
cpx nmt_update_len
|
lda nmt_update+3, X
|
||||||
|
sta $2007
|
||||||
|
|
||||||
|
|
||||||
|
lda $2002
|
||||||
|
|
||||||
|
lda nmt_update+0, X
|
||||||
|
sta $2006
|
||||||
|
lda nmt_update+1, X
|
||||||
|
clc
|
||||||
|
adc #32
|
||||||
|
sta $2006
|
||||||
|
|
||||||
|
lda nmt_update+4, X
|
||||||
|
sta $2007
|
||||||
|
lda nmt_update+5, X
|
||||||
|
sta $2007
|
||||||
|
|
||||||
|
|
||||||
|
; lda $2002
|
||||||
|
; lda #$20
|
||||||
|
; sta $2006
|
||||||
|
|
||||||
|
; lda nmt_update, Y
|
||||||
|
; sec
|
||||||
|
; rol
|
||||||
|
; sta $2006
|
||||||
|
|
||||||
|
; ldx nmt_update
|
||||||
|
; lda level, X
|
||||||
|
; and #%01111111
|
||||||
|
; ldx #5
|
||||||
|
; jsr mul_x
|
||||||
|
; tax
|
||||||
|
;
|
||||||
|
; lda metatiles+1, X
|
||||||
|
; sta $2007
|
||||||
|
; lda metatiles+3, X
|
||||||
|
; sta $2007
|
||||||
|
|
||||||
|
iny
|
||||||
|
cpy nmt_update_len
|
||||||
bcc @nmt_update_loop
|
bcc @nmt_update_loop
|
||||||
|
|
||||||
|
lda PPUCTRL_default
|
||||||
|
sta $2000
|
||||||
|
|
||||||
lda #0
|
lda #0
|
||||||
sta nmt_update_len
|
sta nmt_update_len
|
||||||
@scroll:
|
@scroll:
|
||||||
@@ -228,66 +287,51 @@ PAD_D = $20
|
|||||||
PAD_L = $40
|
PAD_L = $40
|
||||||
PAD_R = $80
|
PAD_R = $80
|
||||||
|
|
||||||
.segment "ZEROPAGE"
|
|
||||||
gamepad: .res 1
|
|
||||||
|
|
||||||
.segment "CODE"
|
|
||||||
; gamepad_poll: this reads the gamepad state into the variable labelled "gamepad"
|
|
||||||
; This only reads the first gamepad, and also if DPCM samples are played they can
|
|
||||||
; conflict with gamepad reading, which may give incorrect results.
|
|
||||||
gamepad_poll:
|
|
||||||
; strobe the gamepad to latch current button state
|
|
||||||
lda #1
|
|
||||||
sta $4016
|
|
||||||
lda #0
|
|
||||||
sta $4016
|
|
||||||
; read 8 bytes from the interface at $4016
|
|
||||||
ldx #8
|
|
||||||
:
|
|
||||||
pha
|
|
||||||
lda $4016
|
|
||||||
; combine low two bits and store in carry bit
|
|
||||||
and #%00000011
|
|
||||||
cmp #%00000001
|
|
||||||
pla
|
|
||||||
; rotate carry into gamepad variable
|
|
||||||
ror
|
|
||||||
dex
|
|
||||||
bne :-
|
|
||||||
sta gamepad
|
|
||||||
rts
|
|
||||||
|
|
||||||
|
|
||||||
.segment "RODATA"
|
.segment "RODATA"
|
||||||
|
|
||||||
level:
|
default_level:
|
||||||
.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||||
.byte $00,$00,$00,$00,$00,$00,$00,$81,$00,$81,$00,$81,$00,$81,$00,$00
|
.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||||
.byte $82,$83,$00,$00,$00,$00,$00,$00,$81,$00,$0C,$00,$81,$00,$00,$00
|
.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||||
.byte $84,$85,$00,$00,$00,$00,$00,$81,$00,$81,$00,$81,$00,$81,$00,$00
|
.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||||
.byte $0F,$0E,$00,$00,$00,$00,$00,$00,$0C,$00,$0C,$00,$0C,$00,$00,$00
|
.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||||
.byte $0F,$0E,$00,$00,$00,$00,$00,$81,$00,$81,$00,$81,$00,$81,$00,$00
|
.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||||
.byte $0F,$0E,$00,$00,$00,$00,$00,$00,$81,$00,$0C,$00,$81,$00,$00,$00
|
.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||||
.byte $0F,$0E,$00,$00,$00,$00,$00,$81,$00,$81,$00,$81,$00,$81,$00,$00
|
.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||||
.byte $0F,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||||
.byte $0F,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||||
.byte $0F,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||||
.byte $0F,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||||
.byte $0F,$8C,$87,$87,$87,$87,$87,$87,$87,$87,$87,$87,$87,$87,$87,$87
|
.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||||
.byte $0F,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
.byte $80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80,$80
|
||||||
.byte $0F,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||||
|
;.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||||
|
;.byte $00,$00,$00,$00,$00,$00,$00,$81,$00,$81,$00,$81,$00,$81,$00,$00
|
||||||
|
;.byte $82,$83,$00,$00,$00,$00,$00,$00,$81,$00,$0C,$00,$81,$00,$00,$00
|
||||||
|
;.byte $84,$85,$00,$00,$00,$00,$00,$81,$00,$81,$00,$81,$00,$81,$00,$00
|
||||||
|
;.byte $0F,$0E,$00,$00,$00,$00,$00,$00,$0C,$00,$0C,$00,$0C,$00,$00,$00
|
||||||
|
;.byte $0F,$0E,$00,$00,$00,$00,$00,$81,$00,$81,$00,$81,$00,$81,$00,$00
|
||||||
|
;.byte $0F,$0E,$00,$00,$00,$00,$00,$00,$81,$00,$0C,$00,$81,$00,$00,$00
|
||||||
|
;.byte $0F,$0E,$00,$00,$00,$00,$00,$81,$00,$81,$00,$81,$00,$81,$00,$00
|
||||||
|
;.byte $0F,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||||
|
;.byte $0F,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$8C,$87
|
||||||
|
;.byte $0F,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||||
|
;.byte $0F,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||||
|
;.byte $0F,$8C,$87,$87,$87,$87,$87,$87,$87,$87,$87,$87,$87,$87,$87,$87
|
||||||
|
;.byte $0F,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||||
|
;.byte $0F,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||||
|
|
||||||
level2:
|
default_level2:
|
||||||
.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||||
.byte $00,$8C,$8C,$8C,$8C,$8C,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
.byte $00,$8C,$8C,$8C,$8C,$8C,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||||
.byte $00,$09,$0C,$0C,$0C,$8C,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
.byte $00,$09,$01,$01,$01,$8C,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||||
.byte $00,$8C,$8C,$8C,$0C,$06,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
.byte $00,$8C,$8C,$8C,$01,$06,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||||
.byte $00,$09,$0C,$0C,$0C,$8C,$00,$00,$00,$00,$00,$82,$83,$00,$00,$00
|
.byte $00,$09,$01,$01,$01,$8C,$00,$00,$00,$00,$00,$82,$83,$00,$00,$00
|
||||||
.byte $00,$8C,$8C,$8C,$8C,$8C,$00,$00,$00,$00,$00,$84,$85,$00,$00,$00
|
.byte $00,$8C,$8C,$8C,$8C,$8C,$00,$00,$00,$00,$00,$84,$85,$00,$00,$00
|
||||||
.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$0F,$0E,$00,$82,$83
|
.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$0F,$0E,$00,$82,$83
|
||||||
.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$0F,$0E,$00,$84,$85
|
.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$0F,$0E,$00,$84,$85
|
||||||
.byte $00,$00,$00,$00,$00,$00,$00,$00,$82,$83,$00,$0F,$0E,$00,$0F,$0E
|
.byte $00,$00,$00,$00,$00,$00,$00,$00,$82,$83,$00,$0F,$0E,$00,$0F,$0E
|
||||||
.byte $00,$00,$00,$00,$00,$00,$00,$00,$84,$85,$00,$0F,$0E,$00,$0F,$0E
|
.byte $87,$8C,$00,$00,$00,$00,$00,$00,$84,$85,$00,$0F,$0E,$00,$0F,$0E
|
||||||
.byte $00,$00,$00,$00,$00,$00,$00,$00,$0F,$0E,$00,$0F,$0E,$00,$0F,$0E
|
.byte $00,$00,$00,$00,$00,$00,$00,$00,$0F,$0E,$00,$0F,$0E,$00,$0F,$0E
|
||||||
.byte $00,$00,$00,$00,$00,$00,$00,$00,$0F,$0E,$00,$0F,$0E,$00,$0F,$0E
|
.byte $00,$00,$00,$00,$00,$00,$00,$00,$0F,$0E,$00,$0F,$0E,$00,$0F,$0E
|
||||||
.byte $87,$87,$87,$87,$87,$8C,$00,$00,$0F,$0E,$00,$0F,$0E,$00,$0F,$0E
|
.byte $87,$87,$87,$87,$87,$8C,$00,$00,$0F,$0E,$00,$0F,$0E,$00,$0F,$0E
|
||||||
@@ -343,6 +387,11 @@ example_palette:
|
|||||||
; .byte $0F,$1B,$2B,$3B ; sp2 teal
|
; .byte $0F,$1B,$2B,$3B ; sp2 teal
|
||||||
; .byte $0F,$12,$22,$32 ; sp3 marine
|
; .byte $0F,$12,$22,$32 ; sp3 marine
|
||||||
|
|
||||||
|
|
||||||
|
terrain:
|
||||||
|
; page pos struct
|
||||||
|
.byte $00, $00, $00
|
||||||
|
|
||||||
.segment "ZEROPAGE"
|
.segment "ZEROPAGE"
|
||||||
buttons: .res 1
|
buttons: .res 1
|
||||||
|
|
||||||
@@ -377,6 +426,12 @@ frame_counter: .res 1
|
|||||||
last_frame_jumped: .res 1
|
last_frame_jumped: .res 1
|
||||||
last_frame_moving: .res 1
|
last_frame_moving: .res 1
|
||||||
|
|
||||||
|
tile_update_pos_r: .res 1
|
||||||
|
|
||||||
|
.segment "BSS"
|
||||||
|
level: .res 240
|
||||||
|
level2: .res 240
|
||||||
|
|
||||||
.segment "CODE"
|
.segment "CODE"
|
||||||
main:
|
main:
|
||||||
ldx #0
|
ldx #0
|
||||||
@@ -456,28 +511,8 @@ move_camera:
|
|||||||
@end:
|
@end:
|
||||||
|
|
||||||
|
|
||||||
lda camera_speed
|
jsr add_scroll_x
|
||||||
bmi @left
|
jsr check_column_update
|
||||||
clc
|
|
||||||
adc scroll_x
|
|
||||||
cmp scroll_x
|
|
||||||
sta scroll_x
|
|
||||||
bcs :+
|
|
||||||
lda scroll_nmt
|
|
||||||
eor #%00000001
|
|
||||||
sta scroll_nmt
|
|
||||||
:
|
|
||||||
rts
|
|
||||||
@left:
|
|
||||||
clc
|
|
||||||
adc scroll_x
|
|
||||||
cmp scroll_x
|
|
||||||
sta scroll_x
|
|
||||||
bcc :+
|
|
||||||
lda scroll_nmt
|
|
||||||
eor #%00000001
|
|
||||||
sta scroll_nmt
|
|
||||||
:
|
|
||||||
rts
|
rts
|
||||||
|
|
||||||
draw_player:
|
draw_player:
|
||||||
@@ -667,6 +702,7 @@ init_objects:
|
|||||||
|
|
||||||
lda #0
|
lda #0
|
||||||
sta camera_speed
|
sta camera_speed
|
||||||
|
sta tile_update_pos_r
|
||||||
|
|
||||||
rts
|
rts
|
||||||
|
|
||||||
@@ -961,6 +997,42 @@ movement:
|
|||||||
rts
|
rts
|
||||||
|
|
||||||
setup_background:
|
setup_background:
|
||||||
|
ldx #0
|
||||||
|
:
|
||||||
|
lda default_level, X
|
||||||
|
sta level, X
|
||||||
|
|
||||||
|
inx
|
||||||
|
cpx #240
|
||||||
|
bne :-
|
||||||
|
|
||||||
|
ldx #0
|
||||||
|
:
|
||||||
|
lda default_level2, X
|
||||||
|
sta level2, X
|
||||||
|
|
||||||
|
inx
|
||||||
|
cpx #240
|
||||||
|
bne :-
|
||||||
|
|
||||||
|
ldx #0
|
||||||
|
:
|
||||||
|
lda default_level, X
|
||||||
|
sta level, X
|
||||||
|
|
||||||
|
inx
|
||||||
|
cpx #240
|
||||||
|
bne :-
|
||||||
|
|
||||||
|
ldx #0
|
||||||
|
:
|
||||||
|
lda default_level2, X
|
||||||
|
sta level2, X
|
||||||
|
|
||||||
|
inx
|
||||||
|
cpx #240
|
||||||
|
bne :-
|
||||||
|
|
||||||
lda $2002 ; reset latch
|
lda $2002 ; reset latch
|
||||||
lda #$20
|
lda #$20
|
||||||
sta $2006
|
sta $2006
|
||||||
@@ -1050,7 +1122,6 @@ setup_background:
|
|||||||
cpy #15
|
cpy #15
|
||||||
bne @row_start_nmt1
|
bne @row_start_nmt1
|
||||||
|
|
||||||
|
|
||||||
; clear attributes
|
; clear attributes
|
||||||
;lda #0
|
;lda #0
|
||||||
;ldx #64 ; 64 bytes
|
;ldx #64 ; 64 bytes
|
||||||
@@ -1366,6 +1437,129 @@ setup_background:
|
|||||||
|
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
add_scroll_x:
|
||||||
|
lda camera_speed
|
||||||
|
bmi @left
|
||||||
|
clc
|
||||||
|
adc scroll_x
|
||||||
|
cmp scroll_x
|
||||||
|
sta scroll_x
|
||||||
|
bcs :+
|
||||||
|
lda scroll_nmt
|
||||||
|
eor #%00000001
|
||||||
|
sta scroll_nmt
|
||||||
|
ldx scroll_page
|
||||||
|
inx
|
||||||
|
sta scroll_page
|
||||||
|
:
|
||||||
|
rts
|
||||||
|
@left:
|
||||||
|
clc
|
||||||
|
adc scroll_x
|
||||||
|
cmp scroll_x
|
||||||
|
sta scroll_x
|
||||||
|
bcc :+
|
||||||
|
lda scroll_nmt
|
||||||
|
eor #%00000001
|
||||||
|
sta scroll_nmt
|
||||||
|
ldx scroll_page
|
||||||
|
dex
|
||||||
|
sta scroll_page
|
||||||
|
:
|
||||||
|
rts
|
||||||
|
|
||||||
|
check_column_update:
|
||||||
|
clc
|
||||||
|
lda scroll_nmt
|
||||||
|
beq :+
|
||||||
|
sec
|
||||||
|
:
|
||||||
|
|
||||||
|
lda scroll_x
|
||||||
|
ror
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
|
||||||
|
cmp tile_update_pos_r
|
||||||
|
bne :+
|
||||||
|
jsr update_nmt_column
|
||||||
|
lda tile_update_pos_r
|
||||||
|
clc
|
||||||
|
adc #1
|
||||||
|
and #%00011111
|
||||||
|
sta tile_update_pos_r
|
||||||
|
|
||||||
|
:
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
update_nmt_column:
|
||||||
|
ldx #0
|
||||||
|
:
|
||||||
|
lda #16
|
||||||
|
jsr mul_x
|
||||||
|
clc
|
||||||
|
adc tile_update_pos_r
|
||||||
|
tay
|
||||||
|
lda #%10000001
|
||||||
|
sta level, Y
|
||||||
|
|
||||||
|
and #%01111111
|
||||||
|
ldy #5
|
||||||
|
jsr mul_y
|
||||||
|
tay
|
||||||
|
|
||||||
|
|
||||||
|
txa
|
||||||
|
pha
|
||||||
|
|
||||||
|
lda #6
|
||||||
|
jsr mul_x
|
||||||
|
tax
|
||||||
|
|
||||||
|
lda metatiles+0, Y
|
||||||
|
sta nmt_update+2, X
|
||||||
|
lda metatiles+1, Y
|
||||||
|
sta nmt_update+3, X
|
||||||
|
lda metatiles+2, Y
|
||||||
|
sta nmt_update+4, X
|
||||||
|
lda metatiles+3, Y
|
||||||
|
sta nmt_update+5, X
|
||||||
|
|
||||||
|
|
||||||
|
pla
|
||||||
|
tay
|
||||||
|
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
clc
|
||||||
|
adc #$20
|
||||||
|
sta nmt_update+0, X
|
||||||
|
|
||||||
|
lda #64
|
||||||
|
jsr mul_y
|
||||||
|
clc
|
||||||
|
adc tile_update_pos_r
|
||||||
|
clc
|
||||||
|
adc tile_update_pos_r
|
||||||
|
sta nmt_update+1, X
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
tya
|
||||||
|
tax
|
||||||
|
|
||||||
|
inx
|
||||||
|
cpx #15
|
||||||
|
bne :-
|
||||||
|
|
||||||
|
|
||||||
|
lda #15
|
||||||
|
sta nmt_update_len
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
mul_x:
|
mul_x:
|
||||||
cmp #0
|
cmp #0
|
||||||
beq @zero
|
beq @zero
|
||||||
|
|||||||
Reference in New Issue
Block a user