Column updating

This commit is contained in:
RochesterX
2026-03-18 14:56:40 -04:00
parent b44a0c4cb6
commit 930b34dadc
2 changed files with 95 additions and 58 deletions

BIN
plat.nes

Binary file not shown.

153
plat.s
View File

@@ -82,6 +82,7 @@ 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 nmt_column: .res 1
nmt_update_frame: .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
@@ -155,59 +156,43 @@ nmi:
sta $2000 sta $2000
ldy #0 ldy #0
ldx #0
@nmt_update_loop: @nmt_update_loop:
lda #6 lda nmt_update_frame
jsr mul_y cmp #0
tax bne :+
lda nmt_update+0, X
sta $2006
lda nmt_update+1, X
sta $2006
lda $2002 lda nmt_update+2, X
sta $2007
lda nmt_update+3, X
sta $2007
lda nmt_update+0, X jmp :++
sta $2006 :
lda nmt_update+1, X lda nmt_update+0, X
sta $2006 sta $2006
lda nmt_update+1, X
clc
adc #32
sta $2006
lda nmt_update+2, X lda nmt_update+4, X
sta $2007 sta $2007
lda nmt_update+3, X lda nmt_update+5, X
sta $2007 sta $2007
:
lda $2002 inx
inx
lda nmt_update+0, X inx
sta $2006 inx
lda nmt_update+1, X inx
clc inx
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 iny
cpy nmt_update_len cpy nmt_update_len
@@ -216,8 +201,14 @@ nmi:
lda PPUCTRL_default lda PPUCTRL_default
sta $2000 sta $2000
lda #0 inc nmt_update_frame
sta nmt_update_len lda nmt_update_frame
cmp #2
bne :+
lda #0
sta nmt_update_frame
sta nmt_update_len
:
@scroll: @scroll:
lda scroll_nmt lda scroll_nmt
and #%00000011 and #%00000011
@@ -428,6 +419,8 @@ last_frame_moving: .res 1
tile_update_pos_r: .res 1 tile_update_pos_r: .res 1
pointer: .res 2
.segment "BSS" .segment "BSS"
level: .res 240 level: .res 240
level2: .res 240 level2: .res 240
@@ -1495,15 +1488,54 @@ check_column_update:
rts rts
update_nmt_column: update_nmt_column:
; X represents the row of the current tile being updated
ldx #0 ldx #0
: @row_loop:
lda tile_update_pos_r
clc
adc #8
sta var_n
; Nametable base
lda #$20
sta var_o
lda #<level
sta pointer
lda #>level
sta pointer+1
lda var_n
and #%00010000
cmp #0
beq:+
lda pointer
clc
adc #240
sta pointer
lda pointer+1
adc #0
sta pointer+1
lda #$24
sta var_o
:
lda var_n
and #%00001111
sta var_p
lda #16 lda #16
jsr mul_x jsr mul_x
clc clc
adc tile_update_pos_r adc var_p
tay tay
lda #%10000001 ; Specifies what tile gets written to the column
sta level, Y lda #%10000011
sta (pointer), Y
and #%01111111 and #%01111111
ldy #5 ldy #5
@@ -1511,6 +1543,7 @@ update_nmt_column:
tay tay
; Preserve X
txa txa
pha pha
@@ -1528,21 +1561,23 @@ update_nmt_column:
sta nmt_update+5, X sta nmt_update+5, X
; Recover X (to Y)
pla pla
tay tay
lsr lsr
lsr lsr
; Add nametable base
clc clc
adc #$20 adc var_o
sta nmt_update+0, X sta nmt_update+0, X
lda #64 lda #64
jsr mul_y jsr mul_y
clc clc
adc tile_update_pos_r adc var_p
clc clc
adc tile_update_pos_r adc var_p
sta nmt_update+1, X sta nmt_update+1, X
@@ -1552,10 +1587,12 @@ update_nmt_column:
inx inx
cpx #15 cpx #15
bne :- beq :+
jmp @row_loop
:
lda #15 lda #1
sta nmt_update_len sta nmt_update_len
rts rts