diff --git a/plat.nes b/plat.nes index 74a2636..1a9f9b6 100644 Binary files a/plat.nes and b/plat.nes differ 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