This game maps out many RAM values of the game Mike Tyson's Punchout
Intro
NES games have 2k RAM, thus 2048 addresses. Those addresses are divided up into 8 blocks (pages) of 256 RAM values. Typically these pages have a similar function. Each block is divided into 16 row of 16 values. Each row is usually for like functions as well.
Page Zero (0000-00FF)
- Row 0 (0000-000F)
- 0000 - Initializes fight (1 = fight is started, 0 if not (between rounds, etc)
- 0001 - Opponent ID (0-99 value)
- 0002 - Opp Type ID (0 = Glass Joe, 1 = King Hippo, 2 = Von Kaiser, 3 = Bald Bull, etc)
- 0003 - another opp ID - affecting behavior - if title bout/special moves/sprites/special KO's etc.
- 0004 - Fight Init. - FF is in fight, 01 is between rounds or a cut scene
- 0005 - Opponent Up/Down, 0 = Opponent is not knocked down, 1 = Knocked down
- 0006 - Current Round (changing does affect Opponent, seems to only be for opening round sequence)
- 0007 - Not Used (?)
- 0008 - Fight ID (Don1=48,KH=35,Soda=28,Von&Tyson=32,PH2&Glass=0
- 0009 - Fighter ID (Von=49,PH=48,Don2=35,Glass=50)
- 000A - # of Mac's Losses
- 000B - Always 0
- 000C - Always 0
- 000D - Fight init.
- 000E - Fight init.
- 000F - Not Used (?)
- Row 1
- 0010 - 95 or B5 (unknown)
- 0011 - Mac X position (not actual, just appearance on screen)
- 0012 - Must be 0, relates to the drawing of the screen
- 0013 - Screen redraw offset
- 0014 - Set # fans, mario, menus
- 0015 - Mac X position (redundant to 0011)
- 0016 - Init. Mac Draw on screen (1 = draw mac, 0 = no mac)
- 0017 - Init. Opp. Draw (similar to 0016)
- 0018 - RNG - updates once per frame
- 0019 - Button ID - which button(s) is currently pressed
- 001A - unknown flag (always 0 or 1)
- 001B - Init. screen draw for menus, mario, etc. when fight begins
- 001C - Init. fight start sequence, 0 = in fight, 1 = not
- 001D - Same as 001C
- 001E - 0-255 Counter (unknown uses)
- 001F - Timer (seems to time situations when user input is not used)
- Row 2
- 0020 - Affects on screen objects
- 0022 - Relates to mac's on screen position
- Row 3
- 0030 - Flag - Init. Opp fight - sets the fighting pattern set for opponent at beginning of fight
- 0031 - Flag - Similar to 0030 but different number for each fighter, freezing to 14 causes opponent to be passive
- 0032 - Flag - Similar to 0031 but different number
- 0033 - Flag - Similar to 0030,0031,0032
- 0038 - Opp fight pattern, initializes opponent fighting patterns
- 0039 - Timer for opponent fighting patterns, next action will happen at 0
- (VERY useful for optimizing a TAS)
- 003A - ID for Opp. actions, ID for what action Opp will do next (when 0039 is 0). Values not yet mapped.
- 003B - Global variable for set of enemy actions (115 for glass joe beginning, 150 for when he backs up
- Row 4
- 004C - Flag for Kaisers weakness to star uppercuts (he always gets knocked down). Forcing this to 0 removes his weakness.
- Row C (00C0 - 00CF)
- 00CB - Flag for Soda's insta-Knockdown from star. 1 when he can be knocked down by star uppercut (flagged when mac hits him in a gut before an uppercut)
- Row D (00D0 - 00DF)
- 00D0 - Button ID for controller 1 (redundant to 06A0)
- 00D1 - Button ID for controller 2 (redundant to 06A1)
- 00D2 - Polls arrow keys
- 00D3 - if arrows active - 129 when pressed for 2 frames, 1 when it causes punch
- 00D4 - polls A 80 (hex) when pressed
- 00D5 - if A active 129 when pressed for 2 frames, 1 when it causes punch
- 00D6 - polls B 40hex when pressed
- 00D7 - if B active 129 when pressed for 2 frames, 1 when it causes punch
- 00D8 - polls Start 10hex when pressed
- 00D9 - if Start active 129 when pressed for 2 frames, 1 when it causes punch
- 00DA - polls select 20hex when pressed
- 00DB - if select active 129 when pressed for 2 frames, 1 when it causes punch
- 00DC - polls Controller 2 arrows
- 00DD - if C2 A active
- 00DE - polls C2 A o rB
- 00DF - if C2 A or B active
Page One (0100-01FF)
Page Two (0200-02FF)
Sprite data
Page Three (0300-03FF)
- Row 0 (0300-030F) The Clock
- 0300 - Clock init. Flag 0 when clock is inactive (bet. Fights), 1 when active (in fight)
- 0301 - Clock stop flag, 1 triggers the clock to stop, 0 re-initializes
- Note: the "Clock Stopping" glitch causes this to fail to re-initialize to 0
- 0302 - Clock Minutes
- 0303 - ?
- 0304 - Clock Tenths
- 0305 - Clock Seconds
- 0306 - partial sec not sure exactly how they function
- 0307 - partial sec "" ""
- 0308 - 4 or 5 - 4 when fight starts, moves to 5 at beg. Of round 2, rnd 3 has no affect
- 0309 - Not Used?
- 030A - Not Used?
- 030B - Not Used?
- 030C - Next Minute
- 030D - Next Tenth
- 030E - Next Second
- 030F - Not Used?
- Row 2 (0320-032F)
- 0323 - Hearts (10's place)
- 0324 - Hearts (1's place)
- Row 9 (0390-039F)
- 0391-0393 - Mac's Health (same value in each address)
- 0398-039A - Opponent's Health (same value in each address)
Page Four (0400-04FF)
Page Five (0500-05FF)
Page Six (0600-06FF)
Page Seven (0700-07FF)