The Legend of Zelda/RAM map: Difference between revisions

From Data Crystal
Jump to navigation Jump to search
(Add use of byte E1)
m (→‎RAM: added walking animation)
 
(38 intermediate revisions by 7 users not shown)
Line 6: Line 6:
  00          Multiple Functions          X-coords of sprite, ...     
  00          Multiple Functions          X-coords of sprite, ...     
  01          Multiple Functions          Y-coords of sprite, ...     
  01          Multiple Functions          Y-coords of sprite, ...     
  02          Multiple Functions          Tile # for sprite (left half), ...   
  02          Multiple Functions          Tile # for sprite (Left Half), ...   
  03          Multiple Functions          Tile # for sprite (right half), ...     
  03          Multiple Functions          Tile # for sprite (Right Half), ...     
  04          Multiple Functions          Attributes for sprite (left half), ...   
  04          Multiple Functions          Attributes for sprite (Left Half), ...   
  05          Multiple Functions          Attributes for sprite (right half), ...     
  05          Multiple Functions          Attributes for sprite (Right Half), ...     
  06          ?           
  06          ?           
  07-0F       ?           
  07         Multiple Functions
  08                                     
08-0C       ?
  10          Current Level              (0 = overworld)
0D          Multiple Functions         Full Hearts Damage taken, ... 
  0E          Multiple Functions          Partial Heart Damage taken, ... 
0F          Multiple Functions          Link's Move Direction (01,FF), ...                               
  10          Current Level              (0 = Overworld)
  11          ?           
  11          ?           
  12          Game Mode                  0=Title/transitory    1=Selection Screen
  12          Game Mode                  0=Title/transitory    1=Selection Screen
Line 19: Line 22:
                                         7=Scrolling          4=Finishing Scroll;
                                         7=Scrolling          4=Finishing Scroll;
                                         E=Registration        F=Elimination  
                                         E=Registration        F=Elimination  
  13           ?          
  13          Routine Index
  14           ?          
  14          PPU Loading Index
  15          Frame counter       
  15          Frame counter       
  16          Current save slot          $00=first, $01=second, $02=third; On selection/registration/elimination screens: $03=fourth option, $04=fifth option
  16          Current save slot          $00=first, $01=second, $02=third; On selection/registration/elimination screens: $03=fourth option, $04=fifth option
  17-28       ?           
  17-23      Individual Randomizer
  29          Timer                       Used for dialog text
24-27       ?
  2A-37       ?
28         (X to update $00, ...)
  38          Countdown until bomb explode or flame(magical rod OR candle disappears )
  29          Timer/Countdown          Used for dialog text and is a Countdown until Enemy #1 can do his action(See Below) again
  2A         Countdown until Enemy #2 can do his main action(Shoot a Projectile,Jump,etc.)again
2B          Countdown until Enemy #3 can do his main action(See Above)again
2C          Countdown until Enemy #4 can do his main action(See Above)again
2D          Countdown until Enemy #5 can do his main action(See Above)again
2E          Countdown until Enemy #6 can do his main action(See Above)again
2F          ?
30          Countdown until Rock #1 and Zola's Fireball start to move
31          Countdown until Rock #2 and Zola's Fireball start to move
32          Countdown until Rock #3 and Zola's Fireball start to move and until Zola start his next animation
33          Countdown until Zola start his next animation
34-36       ?
37          Countdown until bait disappears (3 cycle before disappearence)
  38          Countdown until bomb explode or flame (Magical Rod or Candle) disappears
  39-3B        ?
  39-3B        ?
  3C          Countdown until Link and enemies can move again after the recorder was use
  3C          Countdown until Link and enemies can move again after the recorder was use
  3D-4B        ?           
  3D-4B        ?           
  4C          Countdown until Link can use his sword again after touching a White Bubble   
  4C          Countdown until Link can use his sword again after touching a White Bubble   
  4D-65        ?
  4D-4F        ? 
  66          ROM Offset for start of current Song Data (low byte)     
50          Counts number of enemies killed without taking damage, resets to 0 once it reaches 10 ("10th enemy has the bomb" RAM address)
  67          ROM Offset for start of current Song Data (high byte)   
51-5B        ?
  68           ? 
5C          Vertical Scrolling Offset (high byte)
69           ?
5D-65        ?
  66          ROM Offset for start of current Song Data (Low Byte)     
  67          ROM Offset for start of current Song Data (High Byte)   
  68-69       ?
  6A          Pulse-2 Channel Frequency Offset     
  6A          Pulse-2 Channel Frequency Offset     
  6B          Pulse-1 Channel Frequency Offset     
  6B          Pulse-1 Channel Frequency Offset     
Line 41: Line 60:
  6D          ?   
  6D          ?   
  6E          Rhythmic Offset            For current note of Pulse 2 Incidental Music
  6E          Rhythmic Offset            For current note of Pulse 2 Incidental Music
  6F          Rhythmic Countdown          For Pulse 2 incidental music (uses value at $6E)
  6F          Rhythmic Countdown          For Pulse 2 incidental music (Uses value at $6E)
  70          Link's screen X             X Position on screen
  70          Link's X-position on the screen
  71          Enemy 1 X-position          Also used for dropped enemy item
  71          Enemy #1 X-position          Also used for dropped enemy item
  72          Enemy 2 X-position          Also used for dropped enemy item
  72          Enemy #2 X-position          Also used for dropped enemy item
  73          Enemy 3 X-position          Also used for dropped enemy item
  73          Enemy #3 X-position          Also used for dropped enemy item
  74          Enemy 4 X-position          Also used for dropped enemy item
  74          Enemy #4 X-position          Also used for dropped enemy item
  75          Enemy 5 X-position          Also used for dropped enemy item
  75          Enemy #5 X-position          Also used for dropped enemy item
  76          Enemy 6 X-position          Also used for dropped enemy item
  76          Enemy #6 X-position          Also used for dropped enemy item
  77          Enemy 7 X-position         Also used for dropped enemy item
  77          Enemy #4 Projectile X-position
  78          Enemy 8 X-position         Also used for dropped enemy item
  78          Enemy #1 Projectile X-position  
  79          Projectile X-position   
  79          Enemy #2 Projectile X-position   
  7A          Projectile X-position  
  7A          Enemy #3 Projectile and Zola(On Some Screen) X-position
  7B          Projectile #1's X-position
  7B          Zola X position (On Some screen )
  7C          ?
  7C          ?
  7D          Link's Sword X-position (As a melee weapon)
  7D          Link's Sword X-position (As a Melee Weapon)
  7E          Link's Sword X-position (As a projectile)   
  7E          Link's Sword X-position (As a Projectile)   
  7F          Boomerang/Bait X-position   
  7F          Boomerang/Bait X-position   
  80           ? 
  80         Flame/Bomb #1 X-position
  81           ? 
  81         Flame/Bomb #2 X-position
  82          Link's Arrow X-position     
  82          Link's Arrow X-position     
  83          ?   
  83          ?   
  84          Link's Y-position on the screen     
  84          Link's Y-position on the screen     
  85          Enemy 1 Y-position          Also used for dropped enemy item
  85          Enemy #1 Y-position          Also used for dropped enemy item
  86          Enemy 2 Y-position          Also used for dropped enemy item
  86          Enemy #2 Y-position          Also used for dropped enemy item
  87          Enemy 3 Y-position          Also used for dropped enemy item
  87          Enemy #3 Y-position          Also used for dropped enemy item
  88          Enemy 4 Y-position          Also used for dropped enemy item
  88          Enemy #4 Y-position          Also used for dropped enemy item
  89          Enemy 5 Y-position          Also used for dropped enemy item
  89          Enemy #5 Y-position          Also used for dropped enemy item
  8A          Enemy 6 Y-position          Also used for dropped enemy item
  8A          Enemy #6 Y-position          Also used for dropped enemy item
  8B          Enemy 7 Y-position         Also used for dropped enemy item
  8B          Enemy #4 Projectile Y-position
  8C          Enemy 8 Y-position         Also used for dropped enemy item
  8C          Enemy #1 Projectile Y-position
  8D          Projectile Y-position  
  8D          Enemy #2 Projectile Y-position
  8E          Projectile Y-position  
  8E          Enemy #3 Projectile and Zola (On Some Screen) Y-position
  8F          Projectile #1's Y-position
  8F          Zola Y-position (On Some Screen)
  90          ?   
  90          ?   
  91          Link's Sword Y-position  (As a melee weapon)
  91          Link's Sword Y-position  (As a Melee Weapon)
  92          Link's Sword Y-position  (As a projectile)   
  92          Link's Sword Y-position  (As a Projectile)   
  93          Boomerang/Bait Y-position   
  93          Boomerang/Bait Y-position   
  94           ? 
  94         Flame/Bomb #1 Y-position
  95           ? 
  95         Flame/Bomb #2 Y-position
  96          Link's Arrow Y-position     
  96          Link's Arrow Y-position     
  97          Dungeon Floor Item   
  97          Dungeon Floor Item   
  98          Links direction             $08=North, $04=South, $01=East, $02=West
  98          Link's Direction             $08=North, $04=South, $01=East, $02=West
  99          Enemy #1 direction            $08=North, $04=South, $01=East, $02=West
  99          Enemy #1 Direction (See Above)
  9A          Enemy #2 direction            $08=North, $04=South, $01=East, $02=West
  9A          Enemy #2 Direction (See Above)
  9B          Enemy #3 direction            $08=North, $04=South, $01=East, $02=West
  9B          Enemy #3 Direction (See Above)
  9C          Enemy #4 direction            $08=North, $04=South, $01=East, $02=West
  9C          Enemy #4 Direction (See Above)
  9D          Enemy #5 direction            $08=North, $04=South, $01=East, $02=West
  9D          Enemy #5 Direction (See Above)
  9E           ?
  9E         Enemy #6 Direction (See Above)
  9F           ?
  9F         Enemy #4 Projectile Direction(See Below)
  A0          Enemy #1 Projectile Direction            $08=North, $04=South, $01=East, $02=West
  A0          Enemy #1 Projectile Direction            $08=North, $04=South, $01=East, $02=West(Diagonal direction are equal to $(Xdirection+Ydirection))
  A1          Enemy #2 Projectile Direction             $08=North, $04=South, $01=East, $02=West
  A1          Enemy #2 Projectile Direction (See Above)
  A2          Enemy #3 Projectile Direction             $08=North, $04=South, $01=East, $02=West
  A2          Enemy #3 Projectile Direction (See Above)
  A3         Enemy #4 Projectile Direction            $08=North, $04=South, $01=East, $02=West
  A3-A4       ?
A4         Enemy #5 Projectile Direction            $08=North, $04=South, $01=East, $02=West
  A5          Link's Sword Direction (As a Melee weapon)         $08=North, $04=South, $01=East, $02=West
  A5          Link's Sword Direction (As a Melee weapon)$08=North, $04=South, $01=East, $02=West
  A6          Link's Sword Direction (As a Projectile)
  A6          Link's Sword Direction (As a Projectile) $08=North, $04=South, $01=East, $02=West
  A7          Boomerang Direction  
  A7          Boomerang Direction                       $08=North, $04=South, $01=East, $02=West
  A8          Flame (Candle or Magic Rod) Direction
  A8          Flame(Candle + Magic Rod) Direction       $08=North, $04=South, $01=East, $02=West
  A9         Second Flame Direction
  A9           ?
  AA          Arrow and Magic Rod's projectile Direction $08=North, $04=South, $01=East, $02=West
  AA          Arrow and Magic Rod's projectile Direction $08=North, $04=South, $01=East, $02=West
  AB          Type of item in screen  The value indicates item type (bomb, heart, rupee, etc)
  AB          Type of item in screen  The value indicates item type (Bomb, Heart, Rupee, etc)
  AC          Link's current animation (Change one frame before the actual animation)
  AC          Link's Animation
  AD          Type of dropped enemy item #1  
  AD          Type of dropped enemy item #1  
  AE          Type of dropped enemy item #2  
  AE          Type of dropped enemy item #2  
Line 109: Line 127:
  B1          Type of dropped enemy item #5  
  B1          Type of dropped enemy item #5  
  B2          Type of dropped enemy item #6  
  B2          Type of dropped enemy item #6  
  B3          Type of dropped enemy item #7
  B3          State of Enemy #4 Projectile (See Below)
  B4          Type of dropped enemy item #8
  B4          State of Enemy #1 Projectile        $00=Not Existant, $10=In Movement, $20=Start of Blowing Animation, $28=End of Blowing Animation, $30=Being Deflected by Shield
  B5          Projectile Onscreen?   
  B5          State of Enemy #2 Projectile (See Above)
  B6          Projectile Onscreen?  
  B6          State of Enemy #3 Projectile (See Above)
  B7         Projectile Onscreen?   
B7          State of Enemy #? Projectile (See Above)
  B8-C1        ?
B8          ?
  B9          Link's Sword Animation
BA         State of Link's Sword(As a Projectile) and Magic            $00=Not Existant, $10=In Movement, $11=Blowing Animation, $80=Magic Onscreen
  BB          State of Bait and Link's Boomerang            $10-$17=Rotation of boomerang when going away, $24=Turnaround of Boomerang, $28=Blowing Animation of Boomerang, $50-$57=Rotation of boomerang when coming back, $80=Bait Onscreen(First cycle of 0x0037), $81=Bait Onscreen(Second cycle of 0x0037), $82 Bait Onscreen(Last cycle of 0x0037)
BC          State of Link's Bomb and Flame #1          $12=Bomb Onscreen, $13=Bomb's Smoke Onscreen, $14=Bomb's Smoke Dissappearing, $21=Flame #1 is Moving, $22=Flame #1 is static
BD          State of Link's Flame #2            $21=Flame #2 is Moving, $22=Flame #2 is static
BE          State of Link's Arrow and Magical rod animation          $00=Not Existant, $10=In Movement, $20=Start of Blowing Animation, $28=End of Blowing Animation, $31-$35=Magical Rod Animation
BF-C1        ?
  C2          Dropped Enemy Item   
  C2          Dropped Enemy Item   
  C3          Dropped Enemy Item   
  C3          Dropped Enemy Item   
Line 122: Line 147:
  E2-E7        ?           
  E2-E7        ?           
  E8          Screen Scrolling?          $00=No, $08=Northbound, $04=Southbound, $01=Eastbound, $02=Westbound
  E8          Screen Scrolling?          $00=No, $08=Northbound, $04=Southbound, $01=Eastbound, $02=Westbound
  E9           ?         
  E9-EA       ?
EA           ?        
  EB          Map location                Value equals map x location + 0x10 * map y location
  EB          Map location                Value equals map x location + 0x10 * map y location
  EC-F7        ?   
  EC         Next Location
ED-F7        ?   
  F8          Player 1 Buttons            (Last Frame)  R = 1, L = 2, D = 4, U = 8, Start = 10, Select = 20, B = 40, A = 80
  F8          Player 1 Buttons            (Last Frame)  R = 1, L = 2, D = 4, U = 8, Start = 10, Select = 20, B = 40, A = 80
  F9          Player 2 Buttons            (Last Frame)  (See above)
  F9          Player 2 Buttons            (Last Frame)  (See above)
  FA          Player 1 Buttons            Pressed    $08=Up, $04=Down, $01=Right, $02=Left $80=A, $40=B, $20=Select, $10=Start  
  FA          Player 1 Buttons            Pressed    $08=Up, $04=Down, $01=Right, $02=Left $80=A, $40=B, $20=Select, $10=Start  
  FB          Player 2 Buttons            Pressed    (See above)
  FB          Player 2 Buttons            Pressed    (See Above)
  FC          Subscreen Y-scroll position Used for storyboard text and subscreen position
  FC          Subscreen Y-scroll position Used for storyboard text and subscreen position
  FD          Subscreen X-scroll position This is always zero when not scrolling.
  FD          Subscreen X-scroll position This is always zero when not scrolling.
  FE           ? 
  FE         The PPU mask value is set to the value of this address (it's always $1E during gameplay but takes on different values in screen changes of the title screen). Could have had a purpose in some stage of development to hide sprites, since it is used by the item menu and pause routine as well as the screen-transition routine (they call a routine that takes the value and AND's it with $FE, which does nothing today, but could have been set to something else back then).
  FF          ?
  FF          ?


Line 138: Line 163:
  RAM    Function                    Details
  RAM    Function                    Details
  ------- --------------------------- -----------------------
  ------- --------------------------- -----------------------
0394    Link's Sub-tile            Used for 8 pixel grid for all directions
0395    Enemy #1 Sub-tile?
0396    Enemy #2 Sub-tile?
0397    Enemy #3 Sub-tile?
0398    Enemy #4 Sub-tile?
0399    Enemy #5 Sub-tile?
039A    Enemy #6 Sub-tile?
03A8    Link's Subpixel            Used for all directions
03A9    Enemy #1 Subpixel?
03AA    Enemy #2 Subpixel?
03AB    Enemy #3 Subpixel?
03AC    Enemy #4 Subpixel?
03AD    Enemy #5 Subpixel?
03AE    Enemy #6 Subpixel?
03D0    Link's walking Animation Timer
03E4    Link's Walking Animation State
049E    Link's Current Colliding Tile ($26 is empty)
  04CD    Screen options              The entry from ROM:0x18680 for the current room    Overworld: stair placement, quest secrets, Link's V placement, monster entry
  04CD    Screen options              The entry from ROM:0x18680 for the current room    Overworld: stair placement, quest secrets, Link's V placement, monster entry
  0513    Candle used                Whether Link has used the candle on the current screen  $00=No, $01=Yes
  0513    Candle used                Whether Link has used the candle on the current screen  $00=No, $01=Yes
  0526    Cave return screen          Overworld room to return to when exiting the underworld    
0523     Randomizer
  0526    Cave return screen          Overworld room to return to when exiting the underworld
052A     Enemies Killed (resets after 9)
  052E    Sword disable              Red Bubble Sword Disable switch: $01 if Link's use of his sword has been disabled by a red bubble, $00 otherwise.
  052E    Sword disable              Red Bubble Sword Disable switch: $01 if Link's use of his sword has been disabled by a red bubble, $00 otherwise.
  052F    Maze counter                Used for screens 0x61 (forest maze) and 0x1B (mountain room south of level 5)     
  052F    Maze counter                Used for screens 0x61 (forest maze) and 0x1B (mountain room south of level 5)     
Line 147: Line 191:
  05F4    Rhythm table pointer        for current song   
  05F4    Rhythm table pointer        for current song   
  0600    Song Trigger                Song ID#'s are written here to activate; value is copied over to $609 within a frame. $600 is then zeroed-out.
  0600    Song Trigger                Song ID#'s are written here to activate; value is copied over to $609 within a frame. $600 is then zeroed-out.
  0602    Pulse 2 I.M. Trigger        Incidental Music ID#'s for Pulse 2 are written here; value is copied over to $607 within a frame.  
  0602    Pulse 2 I.M. Trigger        Incidental Music ID#'s for Pulse 2 are written here; value is copied over to $607 within a frame.
    01 = Rupee Taken
    02 = Object Appears
    04 = Secret Found
    08 = Object Taken
    10 = Flute Chime
    20 = Enemy Killed
    40 = Game Over Tune
    80 = Link Death
  0604    Pulse 1 I.M. Trigger        Incidental Music ID#'s for Pulse 1 are written here; value is copied over to $605 within a frame.
  0604    Pulse 1 I.M. Trigger        Incidental Music ID#'s for Pulse 1 are written here; value is copied over to $605 within a frame.
  0605    Pulse 1 I.M. Type          $80=?, $40=1 Heart Warning, $20=Set Bomb, $10=Small Heart Pickup, $08=Key Pickup, $04=Magic Cast, $02=Boomerang Stun, $01=Arrow Deflected             
  0605    Pulse 1 I.M. Type          $80=?, $40=1 Heart Warning, $20=Set Bomb, $10=Small Heart Pickup, $08=Key Pickup, $04=Magic Cast, $02=Boomerang Stun, $01=Arrow Deflected             
Line 188: Line 240:
  062B    Unused   
  062B    Unused   
  062C    Unused   
  062C    Unused   
  062D    Current quest              save slot 1: $00=First, $01=Second
  062D    Current quest              Save slot 1: $00=First, $01=Second
  062E    Current quest              save slot 2: $00=First, $01=Second
  062E    Current quest              Save slot 2: $00=First, $01=Second
  062F    Current quest              save slot 3: $00=First, $01=Second
  062F    Current quest              Save slot 3: $00=First, $01=Second
  0630    Number of deaths            save slot 1   
  0630    Number of deaths            Save slot 1   
  0631    Number of deaths            save slot 2   
  0631    Number of deaths            Save slot 2   
  0632    Number of deaths            save slot 3   
  0632    Number of deaths            Save slot 3   
0633    Slot 1 Present              Save Slot 1 present (Cursor will bypass Slot 1 if set to $00)
0634    Slot 2 Present              Save Slot 2 present (Cursor will bypass Slot 2 if set to $00)
0635    Slot 3 Present              Save Slot 3 present (Cursor will bypass Slot 3 if set to $00)
0636    Register Your Name Present  Register Your Name option present (Cursor will bypass "Register Your Name" if set to $00)
0637    Elimination Mode Present    Elimination Mode option present (Cursor will bypass "Elimination Mode" if set to $00)
0638    Slot 1 Player name          Player Name for Save Slot 1 (8 bytes)
0640    Slot 2 Player name          Player Name for Save Slot 2 (8 bytes)
0648    Slot 3 Player name          Player Name for Save Slot 3 (8 bytes)
0650    Heart Cont. (File Select)  Low Nibble = how many hearts are filled. High Nybble = No. of heart containers - 1
                                    Ex: $22 = 3 Heart Containers with all 3 filled
0651    Fill hearts (File Select)  $FF = Full.
0652    Heart Cont. (File Select)  Low Nibble = how many hearts are filled. High Nybble = No. of heart containers - 1
                                    Ex: $22 = 3 Heart Containers with all 3 filled
0653    Fill hearts (File Select)  $FF = Full.
0654    Heart Cont. (File Select)  Low Nibble = how many hearts are filled. High Nybble = No. of heart containers - 1
                                    Ex: $22 = 3 Heart Containers with all 3 filled
0655    Fill hearts (File Select)  $FF = Full.
  0656    Selected item pos          Cursor position for selecting Link's B item     
  0656    Selected item pos          Cursor position for selecting Link's B item     
  0657    Current sword              $00=None, $01=Sword, $02=White Sword, $03=Magical Sword
  0657    Current sword              $00=None, $01=Sword, $02=White Sword, $03=Magical Sword
Line 222: Line 291:
  0670    Partial heart              $00 = empty, $01 to $7F = half full, $80 to $FF = full.
  0670    Partial heart              $00 = empty, $01 to $7F = half full, $80 to $FF = full.
  0671    Triforce pieces            One bit per piece
  0671    Triforce pieces            One bit per piece
0672                                ??? Related to Ganon's Triforce ???
0673                                ??? Unused ???
  0674    Boomerang in Inventory      $00=False, $01=True. Note: 0x0675 overrides this variable.
  0674    Boomerang in Inventory      $00=False, $01=True. Note: 0x0675 overrides this variable.
  0675    Magical Boomerang in Inventory   
  0675    Magical Boomerang in Inventory   
                                     $00=False, $01=True.
                                     $00=False, $01=True.
  0676    Magic Shield in Inventory  $00=False, $01=True.
  0676    Magic Shield in Inventory  $00=False, $01=True.
0677-067B                          ??? Unused ???
  067C    Maximum number of bombs    Starts out as $08.
  067C    Maximum number of bombs    Starts out as $08.
  067D    Number of rupees to add     
  067D    Number of rupees to add     
  067E    Number of rupees to subtract  
  067E    Number of rupees to subtract
067F                             ?? Screen State (Bit 7 = Secret Discovered)
 
== SRAM ==
RAM    Function                    Details
------- --------------------------- -----------------------
6000     NameTable Player Name Save #1
600A     NameTable Player Name Save #2
6010     NameTable Player Name Save #3
6530     Tile Mapping Codes for Current Screen (B * 2 * 20 = 2C0 bytes)
67F0     ..??
6804     Link's tunic color          $29 = green, $32 = blue, $16 = red
6880     This is used in Game but also for SaveFunction.
6880     SaveStatePlayerOne Name??
6898     SaveStatePlayerOne Item
PRG $A6C6
LDY #$27 TableSize               
LDA $0657,Y    $067E  RAM Location     
STA ($C0),Y    $6997 SRAM Location     
DEY
PRG $A7B3 After it will be copied to beginning of SRAM
LDY #$07               
LDA ($C4),Y    $6883         
STA ($04),Y    $6005       
DEY                     
68C0     ??
6910-6A8F     End of Player one SaveTable??
6B92        Link's tunic color          Overwritten with 0x6804 when Link exits a cave or enters or exits a level
6827 -> 19D0F 134E8
 
Pointer table for Column Definitions
687E -> 8A00 2182 Screen Attributes - Table 0
68FE -> 8A80 2182 Screen Attributes - Table 1
697E -> 8B00 2182 Screen Attributes - Table 2
69FE -> 8B80 2182 Screen Attributes - Table 3
6A7E -> 8C00 2182 Screen Attributes - Table 4
6AFE -> 8C80 2182 Screen Attributes - Table 5
6BA2 -> Enemy Quantities (4 bytes)
6BA6 -> Link's Starting Vertical Position (Various Data)
6BA7 -> Stairs Positions (4 bytes)
6BAF-6BB0 -> 19331 12782
 
Offset in Cartridge RAM for Screen Status (Overworld Various Data)
6BB1 Level Number
6C90 -> 6500 790 Code
6D80 -> 65F0
6DC7 -> 6637
6E39 -> 66A9
6E6E -> 66DE
6EF9 -> 6769
6F29 -> 6799
6F73 -> 67E3
700F -> 687F
701F -> 688F 790
728E -> 6AFE 790 Code (called at 16A52)
7314 -> 6B84 790
73AA -> 6C1A 790
7613 -> 6E83 790 Table
7A4A -> 72BA 790 Enemy Damage Table
7E26 -> 7696 790
 
== WRAM ==
== WRAM ==
  RAM    Function                    Details
  RAM    Function                    Details

Latest revision as of 19:14, 2 July 2024

Chip tiny.png The following article is a RAM map for The Legend of Zelda.

Zero Page

Address     Function                    Details
----------- --------------------------- -----------------------------------------
00          Multiple Functions          X-coords of sprite, ...     
01          Multiple Functions          Y-coords of sprite, ...     
02          Multiple Functions          Tile # for sprite (Left Half), ...  
03          Multiple Functions          Tile # for sprite (Right Half), ...     
04          Multiple Functions          Attributes for sprite (Left Half), ...  
05          Multiple Functions          Attributes for sprite (Right Half), ...     
06           ?          
07          Multiple Functions
08-0C        ?
0D          Multiple Functions          Full Hearts Damage taken, ...   
0E          Multiple Functions          Partial Heart Damage taken, ...   
0F          Multiple Functions          Link's Move Direction (01,FF), ...                                
10          Current Level               (0 = Overworld)
11           ?          
12          Game Mode                   0=Title/transitory    1=Selection Screen
                                        5=Normal              6=Preparing Scroll
                                        7=Scrolling           4=Finishing Scroll;
                                        E=Registration        F=Elimination 
13          Routine Index
14          PPU Loading Index
15          Frame counter       
16          Current save slot           $00=first, $01=second, $02=third; On selection/registration/elimination screens: $03=fourth option,  $04=fifth option
17-23       Individual Randomizer
24-27        ?
28          (X to update $00, ...)
29          Timer/Countdown          Used for dialog text and is a Countdown until Enemy #1 can do his action(See Below) again
2A          Countdown until Enemy #2 can do his main action(Shoot a Projectile,Jump,etc.)again
2B          Countdown until Enemy #3 can do his main action(See Above)again
2C          Countdown until Enemy #4 can do his main action(See Above)again
2D          Countdown until Enemy #5 can do his main action(See Above)again
2E          Countdown until Enemy #6 can do his main action(See Above)again
2F           ?
30          Countdown until Rock #1 and Zola's Fireball start to move
31          Countdown until Rock #2 and Zola's Fireball start to move
32          Countdown until Rock #3 and Zola's Fireball start to move and until Zola start his next animation
33          Countdown until Zola start his next animation
34-36        ?
37          Countdown until bait disappears (3 cycle before disappearence)
38          Countdown until bomb explode or flame (Magical Rod or Candle) disappears
39-3B        ?
3C          Countdown until Link and enemies can move again after the recorder was use
3D-4B        ?          
4C          Countdown until Link can use his sword again after touching a White Bubble  
4D-4F        ?  
50          Counts number of enemies killed without taking damage, resets to 0 once it reaches 10 ("10th enemy has the bomb" RAM address)
51-5B        ?
5C          Vertical Scrolling Offset (high byte)
5D-65        ?
66          ROM Offset for start of current Song Data (Low Byte)    
67          ROM Offset for start of current Song Data (High Byte)   
68-69        ?
6A          Pulse-2 Channel Frequency Offset    
6B          Pulse-1 Channel Frequency Offset    
6C          Offset related to Music Pointers    
6D           ?  
6E          Rhythmic Offset             For current note of Pulse 2 Incidental Music
6F          Rhythmic Countdown          For Pulse 2 incidental music (Uses value at $6E)
70          Link's X-position on the screen
71          Enemy #1 X-position          Also used for dropped enemy item
72          Enemy #2 X-position          Also used for dropped enemy item
73          Enemy #3 X-position          Also used for dropped enemy item
74          Enemy #4 X-position          Also used for dropped enemy item
75          Enemy #5 X-position          Also used for dropped enemy item
76          Enemy #6 X-position          Also used for dropped enemy item
77          Enemy #4 Projectile X-position
78          Enemy #1 Projectile X-position 
79          Enemy #2 Projectile X-position   
7A          Enemy #3 Projectile and Zola(On Some Screen) X-position
7B          Zola X position (On Some screen )
7C           ?
7D          Link's Sword X-position (As a Melee Weapon)
7E          Link's Sword X-position (As a Projectile)   
7F          Boomerang/Bait X-position   
80          Flame/Bomb #1 X-position
81          Flame/Bomb #2 X-position
82          Link's Arrow X-position     
83           ?  
84          Link's Y-position on the screen     
85          Enemy #1 Y-position          Also used for dropped enemy item
86          Enemy #2 Y-position          Also used for dropped enemy item
87          Enemy #3 Y-position          Also used for dropped enemy item
88          Enemy #4 Y-position          Also used for dropped enemy item
89          Enemy #5 Y-position          Also used for dropped enemy item
8A          Enemy #6 Y-position          Also used for dropped enemy item
8B          Enemy #4 Projectile Y-position
8C          Enemy #1 Projectile Y-position
8D          Enemy #2 Projectile Y-position
8E          Enemy #3 Projectile and Zola (On Some Screen) Y-position
8F          Zola Y-position (On Some Screen)
90           ?  
91          Link's Sword Y-position  (As a Melee Weapon)
92          Link's Sword Y-position  (As a Projectile)   
93          Boomerang/Bait Y-position   
94          Flame/Bomb #1 Y-position 
95          Flame/Bomb #2 Y-position
96          Link's Arrow Y-position     
97          Dungeon Floor Item  
98          Link's Direction             $08=North, $04=South, $01=East, $02=West
99          Enemy #1 Direction (See Above)
9A          Enemy #2 Direction (See Above)
9B          Enemy #3 Direction (See Above)
9C          Enemy #4 Direction (See Above)
9D          Enemy #5 Direction (See Above)
9E          Enemy #6 Direction (See Above)
9F          Enemy #4 Projectile Direction(See Below)
A0          Enemy #1 Projectile Direction             $08=North, $04=South, $01=East, $02=West(Diagonal direction are equal to $(Xdirection+Ydirection))
A1          Enemy #2 Projectile Direction (See Above)
A2          Enemy #3 Projectile Direction (See Above)
A3-A4        ?
A5          Link's Sword Direction (As a Melee weapon)          $08=North, $04=South, $01=East, $02=West
A6          Link's Sword Direction (As a Projectile)
A7          Boomerang Direction 
A8          Flame (Candle or Magic Rod) Direction
A9          Second Flame Direction
AA          Arrow and Magic Rod's projectile Direction $08=North, $04=South, $01=East, $02=West
AB          Type of item in screen  The value indicates item type (Bomb, Heart, Rupee, etc)
AC          Link's Animation
AD          Type of dropped enemy item #1 
AE          Type of dropped enemy item #2 
AF          Type of dropped enemy item #3 
B0          Type of dropped enemy item #4 
B1          Type of dropped enemy item #5 
B2          Type of dropped enemy item #6 
B3          State of Enemy #4 Projectile (See Below)
B4          State of Enemy #1 Projectile         $00=Not Existant, $10=In Movement, $20=Start of Blowing Animation, $28=End of Blowing Animation, $30=Being Deflected by Shield
B5          State of Enemy #2 Projectile (See Above)
B6          State of Enemy #3 Projectile (See Above)
B7          State of Enemy #? Projectile (See Above)
B8           ?
B9          Link's Sword Animation
BA          State of Link's Sword(As a Projectile) and Magic             $00=Not Existant, $10=In Movement, $11=Blowing Animation, $80=Magic Onscreen
BB          State of Bait and Link's Boomerang            $10-$17=Rotation of boomerang when going away, $24=Turnaround of Boomerang, $28=Blowing Animation of Boomerang, $50-$57=Rotation of boomerang when coming back, $80=Bait Onscreen(First cycle of 0x0037), $81=Bait Onscreen(Second cycle of 0x0037), $82 Bait Onscreen(Last cycle of 0x0037)
BC          State of Link's Bomb and Flame #1          $12=Bomb Onscreen, $13=Bomb's Smoke Onscreen, $14=Bomb's Smoke Dissappearing, $21=Flame #1 is Moving, $22=Flame #1 is static
BD          State of Link's Flame #2            $21=Flame #2 is Moving, $22=Flame #2 is static
BE          State of Link's Arrow and Magical rod animation          $00=Not Existant, $10=In Movement, $20=Start of Blowing Animation, $28=End of Blowing Animation, $31-$35=Magical Rod Animation
BF-C1        ?
C2          Dropped Enemy Item  
C3          Dropped Enemy Item  
C4-DF        ?  
E0          Game Paused?                $00=No, $01=Yes
E1          Item Menu Scrolling Animation  
E2-E7        ?          
E8          Screen Scrolling?           $00=No, $08=Northbound, $04=Southbound, $01=Eastbound, $02=Westbound
E9-EA        ?
EB          Map location                Value equals map x location + 0x10 * map y location
EC          Next Location
ED-F7        ?  
F8          Player 1 Buttons            (Last Frame)   R = 1, L = 2, D = 4, U = 8, Start = 10, Select = 20, B = 40, A = 80
F9          Player 2 Buttons            (Last Frame)   (See above)
FA          Player 1 Buttons            Pressed    $08=Up, $04=Down, $01=Right, $02=Left $80=A, $40=B, $20=Select, $10=Start 
FB          Player 2 Buttons            Pressed    (See Above)
FC          Subscreen Y-scroll position Used for storyboard text and subscreen position
FD          Subscreen X-scroll position This is always zero when not scrolling.
FE          The PPU mask value is set to the value of this address (it's always $1E during gameplay but takes on different values in screen changes of the title screen). Could have had a purpose in some stage of development to hide sprites, since it is used by the item menu and pause routine as well as the screen-transition routine (they call a routine that takes the value and AND's it with $FE, which does nothing today, but could have been set to something else back then).
FF           ?

RAM

RAM     Function                    Details
------- --------------------------- -----------------------
0394    Link's Sub-tile             Used for 8 pixel grid for all directions
0395    Enemy #1 Sub-tile?
0396    Enemy #2 Sub-tile?
0397    Enemy #3 Sub-tile?
0398    Enemy #4 Sub-tile?
0399    Enemy #5 Sub-tile?
039A    Enemy #6 Sub-tile?
03A8    Link's Subpixel             Used for all directions
03A9    Enemy #1 Subpixel?
03AA    Enemy #2 Subpixel?
03AB    Enemy #3 Subpixel?
03AC    Enemy #4 Subpixel?
03AD    Enemy #5 Subpixel?
03AE    Enemy #6 Subpixel?
03D0    Link's walking Animation Timer
03E4    Link's Walking Animation State
049E    Link's Current Colliding Tile ($26 is empty)
04CD    Screen options              The entry from ROM:0x18680 for the current room     Overworld: stair placement, quest secrets, Link's V placement, monster entry
0513    Candle used                 Whether Link has used the candle on the current screen  $00=No, $01=Yes
0523				     Randomizer
0526    Cave return screen          Overworld room to return to when exiting the underworld
052A				     Enemies Killed (resets after 9)
052E    Sword disable               Red Bubble Sword Disable switch: $01 if Link's use of his sword has been disabled by a red bubble, $00 otherwise.
052F    Maze counter                Used for screens 0x61 (forest maze) and 0x1B (mountain room south of level 5)    
05F0                                Related to current frequency being played by Triangle channel   
05F1    Triangle Reverb             Reverb on/off status for Triangle on current song   
05F4    Rhythm table pointer        for current song   
0600    Song Trigger                Song ID#'s are written here to activate; value is copied over to $609 within a frame. $600 is then zeroed-out.
0602    Pulse 2 I.M. Trigger        Incidental Music ID#'s for Pulse 2 are written here; value is copied over to $607 within a frame.
				     	01 = Rupee Taken
				     	02 = Object Appears
				     	04 = Secret Found
				     	08 = Object Taken
				     	10 = Flute Chime
				     	20 = Enemy Killed
				     	40 = Game Over Tune
				     	80 = Link Death
0604    Pulse 1 I.M. Trigger        Incidental Music ID#'s for Pulse 1 are written here; value is copied over to $605 within a frame.
0605    Pulse 1 I.M. Type           $80=?, $40=1 Heart Warning, $20=Set Bomb, $10=Small Heart Pickup, $08=Key Pickup, $04=Magic Cast, $02=Boomerang Stun, $01=Arrow Deflected            
0606    Sound Effects   
0607    Pulse 2 I.M. Type           $80=Death Spiral, $40=Continue Screen, $20=Enemy Burst, $10=Whistle, $08=Bomb Pickup, $04=Secret Revealed, $02=Key Appears, $01=Rupee Pickup
0609    Songtype currently active   $80=Title, $40=Dungeon, $20=Level 9, $10=Ending, $08=Item, $04=Triforce, $02=Ganon, $01=Overworld
060A    Pulse 2 pos                 Current position within Pulse 2 part (with respect to overall music program)    
060B    Pulse 1 pos                 Current position within Pulse 1 part (with respect to overall music program)    
060C    Triangle pos                Current position within Triangle part (with respect to overall music program)   
060D    Noise pos                   Current position within Noise part (with respect to overall music program)  
060E     ?  
060F    Pulse 1 cycle               Current cycle duration for notes played on Pulse 1 channel  Uses value from rhythm lookup table
0610    Pulse 2 cycle               Current cycle duration for notes played on Pulse 2 channel  Uses value from rhythm lookup table
0611    Pulse 2 rhythm              Countdown from Pulse 2's current rhythm offset  Uses value from rhythm lookup table
0612    Pulse 2 countdown           volume fade  
0613    Pulse 1 rhythem             Countdown from Pulse 1's current rhythm offset  Uses value from rhythm lookup table
0614    Pulse 1 countdown           volume fade  
0615    Triangle cycle              Current cycle duration for notes played on Triangle channel     Uses value from rhythm lookup table
0616    Note countdown              Countdown from value in $615 until next note is to be played    
0617     ?  
0618    Pulse 2 I.M. offset         Offset into Pulse 2 Incidental Music data 
0619    Pulse reverb                Reverb on/off status for BOTH Pulse channels on current song    $80=on, $01=off
061A     ?  
061B    Pulse 2 rhythm counter      Countup to Pulse 2 rhythm offset    
061C    Pulse 1 rhythm counter      Countup to Pulse 1 rhythm offset    
061D                                ??? (seems to count upward as $616 counts down)    Value is always [$615] - [$616] + 1.
061E    Triangle repeat counter     Number of repeats remaining if in Triangle repeat cycle     
061F    Triangle Song pos           Position within song program of current Triangle repeat coda (return point)     
0620    Screen history write index  Contains the index of the next screen history slot to write to (see below)
0621    Screen history 1            One of five recently visited map locations
0622    Screen history 2            One of five recently visited map locations
0623    Screen history 3            One of five recently visited map locations
0624    Screen history 4            One of five recently visited map locations
0625    Screen history 5            One of five recently visited map locations
0626     ?  
0627    Killed enemy count          Number of killed enemies in current screen
0628    Unused  
0629    Unused  
062A    Unused  
062B    Unused  
062C    Unused  
062D    Current quest               Save slot 1: $00=First, $01=Second
062E    Current quest               Save slot 2: $00=First, $01=Second
062F    Current quest               Save slot 3: $00=First, $01=Second
0630    Number of deaths            Save slot 1   
0631    Number of deaths            Save slot 2   
0632    Number of deaths            Save slot 3   
0633    Slot 1 Present              Save Slot 1 present (Cursor will bypass Slot 1 if set to $00)
0634    Slot 2 Present              Save Slot 2 present (Cursor will bypass Slot 2 if set to $00)
0635    Slot 3 Present              Save Slot 3 present (Cursor will bypass Slot 3 if set to $00)
0636    Register Your Name Present  Register Your Name option present (Cursor will bypass "Register Your Name" if set to $00)
0637    Elimination Mode Present    Elimination Mode option present (Cursor will bypass "Elimination Mode" if set to $00)
0638    Slot 1 Player name          Player Name for Save Slot 1 (8 bytes)
0640    Slot 2 Player name          Player Name for Save Slot 2 (8 bytes)
0648    Slot 3 Player name          Player Name for Save Slot 3 (8 bytes)
0650    Heart Cont. (File Select)   Low Nibble = how many hearts are filled. High Nybble = No. of heart containers - 1
                                    Ex: $22 = 3 Heart Containers with all 3 filled
0651    Fill hearts (File Select)   $FF = Full.
0652    Heart Cont. (File Select)   Low Nibble = how many hearts are filled. High Nybble = No. of heart containers - 1
                                    Ex: $22 = 3 Heart Containers with all 3 filled
0653    Fill hearts (File Select)   $FF = Full.
0654    Heart Cont. (File Select)   Low Nibble = how many hearts are filled. High Nybble = No. of heart containers - 1
                                    Ex: $22 = 3 Heart Containers with all 3 filled
0655    Fill hearts (File Select)   $FF = Full.
0656    Selected item pos           Cursor position for selecting Link's B item     
0657    Current sword               $00=None, $01=Sword, $02=White Sword, $03=Magical Sword
0658    Number of Bombs     
0659    Arrow status                $00=None, $01=Arrow, $02=Silver Arrow
065A    Bow in Inventory            $00=False, $01=True
065B    Status of candle            $00=None, $01=Blue Candle, $02=Red Candle
065C    Whistle in Inventory        $00=False, $01=True
065D    Food in Inventory           $00=False, $01=True
065E    Potion in Inventory         $00=None/Letter, $01=Life Potion, $02=2nd Potion
065F    Magical Rod in Inventory    $00=False, $01=True
0660    Raft in Inventory           $00=False, $01=True
0661    Magic Book in Inventory     $00=False, $01=True
0662    Ring in Inventory           $00-None, $01-Blue Ring, $02-Red Ring. Note: Changing this value will not change Link's color.
0663    Step Ladder in Inventory    $00=False, $01=True
0664    Magical Key in Inventory    $00=False, $01=True
0665    Power Bracelet in Invenotry $00=False, $01=True
0666    Letter in Inventory         $00=False, $01=True, Link can buy potions from the old woman if $02.
0667    Compass in Inventory        One bit per level
0668    Map in Inventory            One bit per level
0669    Compass in Inventory        (Level 9)
066A    Map in Inventory            (Level 9)
066C    Clock possessed             $00=False, $01=True
066D    Number of Rupees
066E    Number of Keys
066F    Heart Containers            Low Nibble = how many hearts are filled. High Nybble = Number of heart containers - 1
                                    Ex: $10 = 2 Heart Containers with none filled
0670    Partial heart               $00 = empty, $01 to $7F = half full, $80 to $FF = full.
0671    Triforce pieces             One bit per piece
0672                                ??? Related to Ganon's Triforce ???
0673                                ??? Unused ???
0674    Boomerang in Inventory      $00=False, $01=True. Note: 0x0675 overrides this variable.
0675    Magical Boomerang in Inventory  
                                    $00=False, $01=True.
0676    Magic Shield in Inventory   $00=False, $01=True.
0677-067B                           ??? Unused ???
067C    Maximum number of bombs     Starts out as $08.
067D    Number of rupees to add     
067E    Number of rupees to subtract
067F	                             ?? Screen State (Bit 7 = Secret Discovered)

SRAM

RAM     Function                    Details
------- --------------------------- -----------------------
6000				    NameTable Player Name Save #1
600A				    NameTable Player Name Save #2
6010				    NameTable Player Name Save #3
6530				    Tile Mapping Codes for Current Screen (B * 2 * 20 = 2C0 bytes)
67F0				    ..??
6804				    Link's tunic color          $29 = green, $32 = blue, $16 = red
6880				    This is used in Game but also for SaveFunction. 
6880				    SaveStatePlayerOne	Name??
6898				    SaveStatePlayerOne 	Item
						PRG $A6C6
							LDY #$27 		TableSize                
							LDA $0657,Y     $067E  RAM Location      
							STA ($C0),Y     $6997 SRAM Location      
							DEY
						PRG $A7B3 			After it will be copied to beginning of SRAM 
							LDY #$07                 
							LDA ($C4),Y    	$6883          
							STA ($04),Y     $6005         
							DEY                      
68C0				    ??							
6910-6A8F			    End of Player one SaveTable??
6B92    			    Link's tunic color          Overwritten with 0x6804 when Link exits a cave or enters or exits a level
6827	->	19D0F		134E8
Pointer table for Column Definitions
687E -> 8A00	2182		Screen Attributes - Table 0
68FE -> 8A80	2182		Screen Attributes - Table 1
697E -> 8B00	2182		Screen Attributes - Table 2
69FE -> 8B80	2182		Screen Attributes - Table 3
6A7E -> 8C00	2182		Screen Attributes - Table 4
6AFE -> 8C80	2182		Screen Attributes - Table 5
6BA2 -> Enemy Quantities (4 bytes)
6BA6 -> Link's Starting Vertical Position (Various Data)
6BA7 -> Stairs Positions (4 bytes)
6BAF-6BB0 -> 19331	12782
Offset in Cartridge RAM for Screen Status (Overworld Various Data)
6BB1		Level Number
6C90 -> 6500	790		Code
6D80 -> 65F0
6DC7 -> 6637
6E39 -> 66A9
6E6E -> 66DE
6EF9 -> 6769
6F29 -> 6799
6F73 -> 67E3
700F -> 687F
701F -> 688F	790
728E -> 6AFE	790		Code (called at 16A52)
7314 -> 6B84	790
73AA -> 6C1A	790
7613 -> 6E83	790		Table
7A4A -> 72BA	790		Enemy Damage Table
7E26 -> 7696	790

WRAM

RAM     Function                    Details
------- --------------------------- -----------------------
6804    Link's tunic color          $29 = green, $32 = blue, $16 = red
6B92    Link's tunic color          Overwritten with 0x6804 when Link exits a cave or enters or exits a level
A014    Name table drawing macro offset     
                                    Pointer to a macro that writes name table data to PPU memory