+atari2600land Posted May 26, 2021 Share Posted May 26, 2021 On Nintendo's Tetris, I think I may have spotted a bug a long time ago. The first piece doesn't fall down right away, giving you ample time to turn it the way you want. I'm thinking some timer having to do with its falling is the cause of this. This is most viewable if you start on level 9. What say you? Quote Link to comment Share on other sites More sharing options...
emerson Posted May 27, 2021 Share Posted May 27, 2021 10 hours ago, atari2600land said: On Nintendo's Tetris, I think I may have spotted a bug a long time ago. The first piece doesn't fall down right away, giving you ample time to turn it the way you want. I'm thinking some timer having to do with its falling is the cause of this. This is most viewable if you start on level 9. What say you? Here are my observations: $0040-$005f and $0060-$007f appear to be mirrored registers once the pieces appear on screen. It appears that $0060-$007f is being copied to $0040-$005f. =====AFTER SELECTING LEVEL 9 HEIGHT 0===== (It's black for a few frames. I didn't count these as nothing significant seemed to happen.) frame 0: The playfield occurs on screen frame 1: $006e is loaded with #$a0 frame 2: $00a8 is loaded with #$0c frames 3-13: $00a8 decrements from #$0c to #$01 frame 14: Lots of stuff happens here. Most notable are: $006e increments and is copied to $004e $0065 increments and is copied to $0045 All registers on each frame appear to be copied from $0060-$007f to $0040-$005f from here on. At this point $006e and $0065 both increment until $006e overflows. Once this occurs $006e remains #$00 until you hold down on the dpad. Then $006e loops between #$01 and #$02, incrementing $006f on each loop iteration. Once $006e overflows then $0065 seems to become the frame counter and determines when future pieces fall. $0065 counts from #$00 to #$0b when the sound of a piece landing occurs, and #$00 to #$05 when a piece is falling at normal speed. When holding down on the dpad, $0065 loops between #$00 and #$01. I agree it seems like a very long delay but I wouldn't consider this a bug necessarily. The above process occured every time I tested and reset to check different variables, say two dozen times give or take. It would be very easy to determine where in code these timer values are and hack the game for different timing. Heh, I should have checked here first: https://datacrystal.romhacking.net/wiki/Tetris_(NES):RAM_map Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.