Jump to content
IGNORED

Tetris bug


Recommended Posts

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?

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...