From 930b34dadc1b1ce36f7f9ef63e70904ac2a3a9e1 Mon Sep 17 00:00:00 2001 From: RochesterX Date: Wed, 18 Mar 2026 14:56:40 -0400 Subject: [PATCH] Column updating --- plat.nes | Bin 40976 -> 40976 bytes plat.s | 153 ++++++++++++++++++++++++++++++++++--------------------- 2 files changed, 95 insertions(+), 58 deletions(-) diff --git a/plat.nes b/plat.nes index 74a263693ccb5782969ef64bfd0ccc67ff29a5f8..1a9f9b6c4fd7b600e09792112b76fa5f3b4e867e 100644 GIT binary patch delta 2186 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 Qyr8^Z5DL>bBLxxt4UoPQg8%>k diff --git a/plat.s b/plat.s index 34effd2..8252ac8 100644 --- a/plat.s +++ b/plat.s @@ -82,6 +82,7 @@ nmi_count: .res 1 nmi_ready: .res 1 nmt_update_len: .res 1 nmt_column: .res 1 +nmt_update_frame: .res 1 scroll_x: .res 1 scroll_y: .res 1 scroll_nmt: .res 1 @@ -155,59 +156,43 @@ nmi: sta $2000 ldy #0 + ldx #0 @nmt_update_loop: - lda #6 - jsr mul_y - tax + lda nmt_update_frame + cmp #0 + 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 - sta $2006 - lda nmt_update+1, X - sta $2006 + jmp :++ + : + lda nmt_update+0, X + sta $2006 + lda nmt_update+1, X + clc + adc #32 + sta $2006 - lda nmt_update+2, X - sta $2007 - lda nmt_update+3, X - sta $2007 + lda nmt_update+4, X + sta $2007 + lda nmt_update+5, 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 + inx + inx + inx + inx + inx + inx iny cpy nmt_update_len @@ -216,8 +201,14 @@ nmi: lda PPUCTRL_default sta $2000 - lda #0 - sta nmt_update_len + inc nmt_update_frame + lda nmt_update_frame + cmp #2 + bne :+ + lda #0 + sta nmt_update_frame + sta nmt_update_len + : @scroll: lda scroll_nmt and #%00000011 @@ -428,6 +419,8 @@ last_frame_moving: .res 1 tile_update_pos_r: .res 1 +pointer: .res 2 + .segment "BSS" level: .res 240 level2: .res 240 @@ -1495,15 +1488,54 @@ check_column_update: rts update_nmt_column: + ; X represents the row of the current tile being updated 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+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 jsr mul_x clc - adc tile_update_pos_r + adc var_p tay - lda #%10000001 - sta level, Y + ; Specifies what tile gets written to the column + lda #%10000011 + sta (pointer), Y and #%01111111 ldy #5 @@ -1511,6 +1543,7 @@ update_nmt_column: tay + ; Preserve X txa pha @@ -1528,21 +1561,23 @@ update_nmt_column: sta nmt_update+5, X + ; Recover X (to Y) pla tay lsr lsr + ; Add nametable base clc - adc #$20 + adc var_o sta nmt_update+0, X lda #64 jsr mul_y clc - adc tile_update_pos_r + adc var_p clc - adc tile_update_pos_r + adc var_p sta nmt_update+1, X @@ -1552,10 +1587,12 @@ update_nmt_column: inx cpx #15 - bne :- + beq :+ + jmp @row_loop + : - lda #15 + lda #1 sta nmt_update_len rts