User Tools

Site Tools


return_of_samus:data_locations:ram_map

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
return_of_samus:data_locations:ram_map [2016/06/22 20:48] – Added loads of stuff, some structure too p.jboyreturn_of_samus:data_locations:ram_map [2020/04/03 20:07] kkzero
Line 4: Line 4:
 === Overview === === Overview ===
 <code> <code>
-0000-3FFF 16KB ROM Bank (fixed - bank 0) +0000-3FFF16KB ROM Bank (fixed - bank 0) 
-4000-7FFF 16KB ROM Bank (swappable) +4000-7FFF16KB ROM Bank (swappable) 
-8000-9FFF 8KB Video RAM +8000-9FFF8KB Video RAM 
-A000-BFFF 8KB Save RAM +A000-BFFF8KB Save RAM 
-C000-DFFF 8KB Work RAM +C000-DFFF8KB Work RAM 
-E000-FDFF Echo RAM (unused) +E000-FDFFEcho RAM (unused) 
-FE00-FE9F OAM +FE00-FE9FOAM 
-FEA0-FEFF Not usable +FEA0-FEFFNot usable 
-FF00-FF7F I/O Ports +FF00-FF7FI/O Ports 
-FF80-FFFE High RAM +FF80-FFFEHigh RAM 
-FFFF      Interrupt enable register+FFFF     Interrupt enable register
 </code> </code>
  
Line 21: Line 21:
 8000-97FF: VRAM tiles 8000-97FF: VRAM tiles
     8000-87AF: Samus     8000-87AF: Samus
 +        8080-9F: Arm cannon
     8B00-8EFF: Enemies     8B00-8EFF: Enemies
         0x8C00-8E2F: Characters if room has message box (probably loaded with chozo?)         0x8C00-8E2F: Characters if room has message box (probably loaded with chozo?)
     9000-97FF: Background     9000-97FF: Background
 9800-9FFF: VRAM tilemap 9800-9FFF: VRAM tilemap
-    0000-03FF: Background +    9800-9BFF: Background 
-    0400-07FF: Window +    9C00-9FFF: Window 
-        0400: Status bar +        9C00: Status bar 
-        0420: Message+        9C20: Message
 </code> </code>
  
 === SRAM === === SRAM ===
 <code> <code>
-A000-A03F File 1+A000-A03FFile 1
     + 00-07: 0123456789ABCDEF     + 00-07: 0123456789ABCDEF
-    + 08-0B[$FFC0-C3] +    + 08: Samus' Y position 
-    + 0C-0F[$FFC8-CB] +    + 0A: Samus' X position 
-    + 10-1C[$D808-14] +    + 0C: Screen Y position 
-    + 1D[$D045] +    + 0E: Screen X position 
-    + 1E[$D055] +    + 10: Enemy tiles source address (2 bytes) 
-    + 1F[$D050] +    + 12Background tiles source bank 
-    + 20[$D051] +    + 13Background tiles source address (2 bytes) 
-    + 21[$D052] +    + 15Metatile definitions source address (bank 8, 2 bytes) 
-    + 22[$D081] +    + 17Source address of data for $DC00..FF (bank 8, 2 bytes) 
-    + 23[$D082] +    + 19Bank for current room 
-    + 24[$D053] +    + 1ASamus passable block threshold 
-    + 25[$D054] +    + 1BEnemy passable block threshold 
-    + 26: [$D02B] +    + 1CProjectile passable block threshold 
-    + 27: [$D077] +    + 1DSamus' equipment 
-    + 28: [$D078] +    + 1E: Samus' beam 
-    + 29: [$D089] +    + 1F: Samus' energy tanks 
-    + 2A: [$D092] +    + 20: Samus' health 
-    + 2B: [$D098] +    + 22: Samus' max missiles 
-    + 2C: [$D099] +    + 24: Samus' missiles 
-    + 2D: [$D09A] +    + 26: Direction Samus is facing 
-A040-A07F File 2 +    + 27: Acid damage 
-A080-A0BF File 3 +    + 28: Spike damage 
-A0C0      Last used save slot+    + 29: Real number of Metroids remaining 
 +    + 2A: Song for room 
 +    + 2B: In-game timer, minutes 
 +    + 2C: In-game timer, hours 
 +    + 2D: Number of Metroids remaining 
 +A040-A07FFile 2 
 +A080-A0BFFile 3 
 +A0C0:       Last used save slot
  
-A800-ACE2 Written to in credits [$6:7920..7E02]+A800-ACE2Written to in credits [$6:7920..7E02]
  
-B000-B1BF File 1 Item/Metroid data (0x40 bytes per map)+B000-B1BFFile 1 Item/Metroid data (0x40 bytes per map)
  
-B200-B3BF File 2 Item/Metroid data (verify)+B200-B3BFFile 2 Item/Metroid data (verify)
  
-B400-B5BF File 3 Item/Metroid data+B400-B5BFFile 3 Item/Metroid data
 </code> </code>
  
 === WRAM === === WRAM ===
 <code> <code>
-C000-9F OAM buffer (gets copied by the sprite DMA)+C000-9FOAM buffer (gets copied by the sprite DMA)
     + 0: Y position     + 0: Y position
     + 1: X position     + 1: X position
Line 80: Line 88:
          80: Priority (set: behind background)          80: Priority (set: behind background)
  
-C205 - Mirror of SCY ($FF42+C203: Tile Y (see $22BC
-C206 - Mirror of SCX ($FF43)+C204: Tile X (see $22BC) 
 +C205: Scroll Y 
 +C206: Scroll X
  
-C3AA-AB - Pointer to LCD interrupt data+C215: Tilemap address of ([$C204], [$C203]) (see $22BC)
  
-C500-FE - Offscreen enemy bytes (for current map) +C308-37: Ch slots of 4 bytes according to $3:6E36 
-    C540-C57F - Item/Metroid data bytes (for current map, gets copied to $C900 when switching maps)+    + 3: XOR'd with 10h in $6E36 every fourth frame
  
-C600-C7FF - Enemy Slots (0x10 slots, 0x20 bytes each)+C3A1: Scroll X for LCD interrupt handler type = 1
  
-C900-CABF - Item/Metroid data bytes (0x40 per map, gets saved to SRAM)+C3A8: X position of Metroid Queen's head on screen 
 +C3A9: Y position of Metroid Queen's head on screen 
 +C3AA: A two-byte pointer to LCD interrupt data
  
-CEC0-CFFF Music RAM +C3D2: Background palette for LCD interrupt handler type = 1 
-    CEDC Song Enqueued (poking this causes the song to change the next frame) +C3D3: Metroid Queen's health 
-    CEDD Song Playing (poking this does nothing)+ 
 +C3EF: Set to 1 in $3:6E36 if 0 < [Metroid Queen's health] < 32h, probably an aggression flag 
 + 
 +C3F1: Set to 1 in $3:6E36 if 0 < [Metroid Queen's health] < 64h, probably an aggression flag 
 + 
 +C407: Set to [$D069] in $2:4000 
 + 
 +C40F: bottom-most visible metatile row index in map * $10 (big-endian word). 
 +C411: top-most visible metatile row index in map * $10 (big-endian word). 
 +C413: right-most visible metatile column index in map * $10 (big-endian word). 
 +C415: left-most visible metatile column index in map * $10 (big-endian word). 
 + 
 +C417: Number of tile that Baby Metroid is touching. 
 +C418: Set to [$D058] in $2:4000 
 + 
 +C422: Cleared by $2EE3, set to 1 by $1FF5 
 +C423: Value for $D00F in $2EE3, cleared by $1FF5 
 +C424: Read by $2EE3, set to [$D078] by $1FF5 
 + 
 +C430: Used as index for pointer table at $1:5AB1 
 + 
 +C432: Scroll Y two frames ago (according to $3:4000) 
 +C433: Scroll Y one frame ago (according to $3:4000) 
 +C434: Scroll X two frames ago (according to $3:4000) 
 +C435: Scroll X one frame ago (according to $3:4000) 
 + 
 +C44B: Checked and set in $2:4000, previous value for $C458 in $239C 
 + 
 +C459: Used by $1:7A6C (when saving to SRAM), decides where in C540.. to process for $C900 
 + 
 +C45C: Used as index for table at $1:729C, value for $FFEA 
 + 
 +C500-FE: Object spawn states (map-specific
 +    C500-C53F: Non-persistent object (e.g. enemyspawn states 
 +        01: Spawned in object table ("visible"
 +        02: Dead/acquired 
 +        FF: Not spawned 
 +    C540-7F: Persistent object (e.g. item, Metroid) spawn states 
 + 
 +C600..C7FF: Enemy data. 20h byte slots according to $30BB, current address is kept in $D05E 
 +    + 0: Flags. If bits 0-3 clear, $30BB executes $30EA on slot. If bit 7 is set sprite is invisible (blinking). 
 +    + 1: Y coordinate. Value for $FFB7 in $30EA 
 +    + 2: X coordinate. Value for $FFB8 in $30EA 
 +    + 3: Metasprite number. Value for $FFB9 in $30EA 
 +    + 4: Priority bit ($80) for sprites. Value for $FFBF in $30EA 
 +    + 5: Sprite flip flags ($20 for horizontal, $40 for vertical) 
 +    + 6: Low nibble is blink frames remaining. Bit 4 is sprite palette flag. 
 +    + A: Frozen frame counter. Increments by 2 every 4 frames. 0 is not frozen, 1-$C4 is frozen, $C5-$D0 is thawing. 
 +    + B: Health 
 +    + 1D: Map object slot index 
 + 
 +C900-CABF: Item/Metroid data bytes (0x40 per map, gets saved to SRAM) 
 + 
 +CEC0-CFFF: Audio data 
 +    CEC0: Tone/sweep channel sound effect 
 +        CEC0: Tone/sweep channel sound effect to play 
 +                0: Nothing 
 +                1: Jumping 
 +                2: Hi-jumping 
 +                3: Screw attacking 
 +                4: Uncrouching / turning around / landing 
 +                5: Crouching / unmorphing 
 +                6: Morphing 
 +                7: Shooting beam 
 +                8: Shooting missile 
 +                9: Shooting ice beam 
 +                Ah: Shooting plasma beam 
 +                Bh: Shooting spazer beam 
 +                Ch: Picked up missile drop 
 +                Dh: Spider ball 
 +                Eh: Picked up energy drop 
 +                Fh: Shot missile door with beam 
 +                10h:  
 +                11h:  
 +                12h:  
 +                13h: Bomb laid 
 +                14h:  
 +                15h: Option select / missile select 
 +                16h: Shooting wave beam 
 +                17h:  
 +                18h: Samus' health changed 
 +                19h: No missile dud shot 
 +                1Ah:  
 +                1Bh: Metroid cry 
 +                1Ch: Saved 
 +                1Dh:  
 +                1Eh: Unpaused 
 +        CEC1: Tone/sweep channel sound effect playing 
 + 
 +        CEC3: Tone/sweep channel sound effect timer
          
-    CF10 - Mirror of NR10 +    CEC7: Tone channel sound effect 
-    CF11 - Mirror of NR11 +        CEC7: Tone channel sound effect to play 
-    CF12 - Mirror of NR12 +                0: Nothing 
-    CF13 - Mirror of NR13 +                1: Nothing 
-    CF14 - Mirror of NR14 +                2: Nothing 
-    CF16 - Mirror of NR16 +                3: Metroid Queen cry 
-    CF17 - Mirror of NR17 +                4: Baby Metroid hatched / clearing blocks 
-    CF18 - Mirror of NR18 +                5: Baby Metroid cry 
-    CF19 - Mirror of NR19 +                6: Metroid Queen hurt cry 
-    CF1A - Mirror of NR30 +                7:  
-    CF1B - Mirror of NR31 +        CEC8: Tone channel sound effect playing 
-    CF1C - Mirror of NR32 +         
-    CF1D - Mirror of NR33 +        CECA: Tone channel sound effect timer
-    CF1E - Mirror of NR34+
  
-D00E - Disable buttons flag+    CECE-CED4: Would be the wave channel sound effect, but is unused (only cleared) and CEE6 is exclusively used instead. 
 + 
 +    CED5: Noise channel sound effect 
 +        CED5: Noise channel sound effect to play 
 +                0: Nothing 
 +                1: Enemy shot 
 +                2: Enemy killed 
 +                3:  
 +                4: Shot block destroyed 
 +                5: Metroid hurt 
 +                6: Samus hurt 
 +                7: Acid damage 
 +                8: Shot missile door with missile 
 +                9: Metroid Queen cry 
 +                Ah: Metroid Queen hurt cry 
 +                Bh: Samus killed 
 +                Ch: Bomb detonated 
 +                Dh: Metroid killed 
 +                Eh:  
 +                Fh:  
 +                10h Footsteps 
 +                11h:  
 +                12h:  
 +                13h:  
 +                14h:  
 +                15h:  
 +                16h: Baby Metroid hatched / clearing blocks 
 +                17h: Baby Metroid cry 
 +                18h:  
 +                19h:  
 +                1Ah:  
 +        CED6: Noise channel sound effect playing 
 +         
 +        CED8: Noise channel sound effect timer 
 + 
 +    CEDC: Song to play 
 +            0: Nothing 
 +            1: Baby Metroid 
 +            2: Metroid Queen battle 
 +            3: Chozo ruins 
 +            4: Main caves 
 +            5: Sub caves 1 
 +            6: Sub caves 2 
 +            7: Sub caves 3 
 +            8: Final caves 
 +            9: Metroid hive 
 +            Ah: Item-get 
 +            Bh: Metroid Queen hallway 
 +            Ch: Metroid battle 
 +            Dh: Sub caves 4 
 +            Eh: Earthquake 
 +            Fh: Killed Metroid 
 +            10h: Nothing 
 +            11h: Title 
 +            12h: Samus fanfare 
 +            13h: Reach the gunship 
 +            14h: Chozo ruins, same as 3 
 +            15h: Main caves, no intro 
 +            16h: Sub caves 1, no intro 
 +            17h: Sub caves 2, no intro 
 +            18h: Sub caves 3, no intro 
 +            19h: Final caves, same as 8 
 +            1Ah: Metroid hive, same as 9 
 +            1Bh: Item-get, same as Ah 
 +            1Ch: Metroid Queen hallway, same as Bh 
 +            1Dh: Metroid battle, same as Ch 
 +            1Eh: Sub caves 4, no intro 
 +            1Fh: Metroid hive with intro 
 +            20h: Missile pickup 
 +    CEDD: Song playing 
 +    CEDE: Isolated sound effect to play 
 +            0: Go to $42EA 
 +            1: Go to $432B, play item-get music 
 +            3: Go to $4390 (restores some audio state) 
 +            5: Go to $4335, play missile pickup music 
 +            8: Go to $43FB 
 +            Eh: Go to $433F, play earthquake music 
 +            FFh: $CEDE = 0, $CEDF = 0, go to $42FA 
 +            Otherwise: Go to $42FA 
 +    CEDF: Isolated sound effect playing 
 +            If [$CEDE] = 0: 
 +                2: Go to $43C4 (set by isolated sound effect to play = 3, restores some audio state) 
 +                8: Go to $4418 
 +                Otherwise: Go to $42FA 
 + 
 +    CEE4: Current tone/sweep channel sound effect 
 +    CEE5: Current tone channel sound effect 
 +    CEE6: Low health beep / wave channel sound effect 
 +            0: Samus' health >= 50 
 +            1: Samus' health < 20 
 +            2: Samus' health < 30 
 +            3: Samus' health < 40 
 +            4: Samus' health < 50 
 +    CEE7: Current noise channel sound effect 
 + 
 +    CF00-60:  
 +        CF00: Music note offset. Set to [$5F30 + ([song to play] - 1) * 2] & ~1 in $48A0 
 +        CF01: Pointer to value for $CF34/$CF36. Set to [$5F30 + ([song to play] - 1) * 2 + 1] in $48A0 
 +        CF03: Working sound channel (1/2/3/4) 
 +        CF04: Set to 1 if [$CF38] != 0 in $48A0 
 +        CF05: Set to 2 if [$CF41] != 0 in $48A0 
 +        CF06: Set to 3 if [$CF4A] != 0 in $48A0 
 +        CF07: Set to 4 if [$CF53] != 0 in $48A0 
 +        CF08: Checked to mirror $CF0B/0C to $CF10/11 in $497A 
 +        CF09: Pointer to wave pattern data, 10h bytes 
 +        CF0B: Working sound channel sweep / enable 
 +        CF0C: Working sound channel sound length / wave pattern duty 
 +        CF0D: Working sound channel envelope / volume 
 +        CF0E: Working sound channel frequency / noise channel polynomial counter 
 +        CF0F: Working noise channel counter control 
 +        CF10-23: Audio channel options (which conveniently correspond with FF10-23) 
 +            CF10: Tone/sweep channel sweep 
 +            CF11: Tone/sweep channel sound length / wave pattern duty 
 +            CF12: Tone/sweep channel envelope 
 +            CF13: Tone/sweep channel frequency 
 +            CF15: Unused 
 +            CF16: Tone channel sound length / wave pattern duty 
 +            CF17: Tone channel envelope 
 +            CF18: Tone channel frequency 
 +            CF1A: Wave channel enable 
 +            CF1B: Wave channel sound length 
 +            CF1C: Wave channel volume 
 +            CF1D: Wave channel frequency 
 +            CF1F: Unused 
 +            CF20: Noise channel sound length 
 +            CF21: Noise channel envelope 
 +            CF22: Noise channel polynomial counter 
 +            CF23: Noise channel counter control 
 +         
 +        CF26: Song tone/sweep channel instruction pointer 
 +        CF28: Song tone channel instruction pointer 
 +        CF2A: Song wave channel instruction pointer 
 +        CF2C: Song noise channel instruction pointer 
 +        CF2E: A 12 frame timer 
 +        CF2F-37: Working song sound channel options 
 +            CF2F: Instruction pointer 
 +                F1 ee ss ll: For non-wave channels. Working sound channel envelope = ee, working sound channel sweep = ss, working sound channel sound length / wave pattern duty = ll 
 +                F1 pppp vv:  For the wave channel. Pointer to wave pattern data = pppp, working sound channel volume = vv 
 +                F2 pppp:     $CF01 = pppp 
 +                F3 oo:       Add oo to any played music notes (sets $CF00) 
 +                F4 nn:       Repeat from after this instruction nn times |: (sets $CF31/$CF33) 
 +                F5:          Repeat :| (decrements $CF31) 
 +            CF31: Repeat count 
 +            CF33: Repeat point 
 +             
 +            CF35: Sound envelope / volume 
 + 
 +            CF37: Sound length (according to song instruction F1h) 
 +        CF38-40: Song tone/sweep channel options 
 +            CF38: Set to [$5F30 + ([song to play] - 1) * 2 + 3] in $48A0 
 +             
 +            CF3F: Set to 1 in $48A0 
 +        CF41-49: Song tone channel options 
 +            CF41: Set to [$5F30 + ([song to play] - 1) * 2 + 5] in $48A0 
 +             
 +            CF48: Set to 1 in $48A0 
 +        CF4A-52: Song wave channel options 
 +            CF4A: Set to [$5F30 + ([song to play] - 1) * 2 + 7] in $48A0 
 +             
 +            CF51: Set to 1 in $48A0 
 +        CF53-5B: Song noise channel options 
 +            CF53: Set to [$5F30 + ([song to play] - 1) * 2 + 9] in $48A0 
 +             
 +            CF5A: Set to 1 in $48A0 
 +        CF5C: Set to D0h by [$CEDE] == 8 (timer), sets $CF3E = $CF47 = $CF59 = $CF5D = $CF5E = [a] 
 +            0: Song play = isolated sound effect to play = 0, disable sound channels 
 +            10h: a = 13h 
 +            30h: a = 25h 
 +            70h: a = 45h, $CF07 = 0, $CF50 = $CF5F = 60h 
 +            A0h: a = 65h 
 +        CF5D: Set to [$CF3E] by [$CEDE] == 8 
 +        CF5E: Set to [$CF47] by [$CEDE] == 8 
 +        CF5F: Set to [$CF50] by [$CEDE] == 8 
 +        CF60: Tone channel frequency tweak. Set to 1 if [$5F30 + ([song to play] - 1) * 2] & 1 in $48A0 
 +    CF61-C1: Mirror of $CF00-60? 
 + 
 +    CFC5: Backup of song playing during isolated sound effect 
 + 
 +    CFC7:  
 +            1: Go to $4801 
 +            2: Go to $4846. Set when unpausing: plays unpaused sound effect 
 +            Otherwise: $4819 
 +    CFC8: Flag to go to $4852, set to 40h by $4801 
 +    CFC9: Mirror of $CF10? (tone/sweep channel sweep) 
 + 
 +    CFE3: Mirror of $CF09? 
 +    CFE5: Low health beep / wave channel sound effect to play 
 +    CFE6: Low health beep / wave channel sound effect playing 
 +    CFE7: Mirror of $CFE6? 
 + 
 +    CFEC: Mirror of $CFED? 
 +    CFED: Audio channel output stereo flags 
 +    CFEE: Quickly guessing wave pattern timer 
 + 
 +D008: Metatile top-left 
 +D009: Metatile top-right 
 +D00A: Metatile bottom-left 
 +D00B: Metatile bottom-right 
 +D00C: Samus' previous Y position 
 +D00E: Door transition direction 
 +        1: Right 
 +        2: Left 
 +        4: Up 
 +        8: Down 
 +D00F: Set to [$C423] by $2EE3, set to 1 by escaping Metroid Queen / in Metroid Queen's mouth 
 +D010: Counter for spin-jumping 
 +D011: Nothing. Only cleared 
 +D012: Value for $D060 in $31F1
  
-D020 Samus' pose+D020Samus' pose
         00: Standing         00: Standing
         01: Jumping         01: Jumping
Line 141: Line 448:
         1D: Escaped Metroid Queen         1D: Escaped Metroid Queen
  
-D023 Direction of Samus' movement+D022: += 3 in $08FE during door transition 
 +D023Direction of screen movement
         10: Right         10: Right
         20: Left         20: Left
Line 147: Line 455:
         80: Down         80: Down
  
-D027-28 - Samus X position +D027Samus X position 
-D029-2A - Samus Y position +D029Samus Y position 
-D02B Direction Samus is facing+D02BDirection Samus is facing, mirrored from $D81E at save load.
         0: Left         0: Left
         1: Right         1: Right
-D02C Samus turning animation counter+D02CSamus turning animation counter
  
-D045 - Item Bits+D035: Screen right velocity 
 +D036: Screen left velocity 
 +D037: Screen up velocity 
 +D038: Screen down velocity 
 +D039: Set to 0 by load title screen
  
-D047 - Tiles update flag (see $FFB1..B6, $2BA3, $27BA)+D03B: Samus' Y position on screen 
 +D03C: Samus' X position on screenchecked for <= A0h in $08FE 
 +D03D: Spider ball direction 
 +        0: In air 
 +        1: On bottom-left corner of ledge 
 +        2: On top-left corner of ledge 
 +        3: On left-facing wall 
 +        4: On bottom-right corner of ledge 
 +        5: On ceiling 
 +        6: Unused 
 +        7: On meet of left-facing wall and ceiling 
 +        8: On top-right corner of ledge 
 +        9: Unused 
 +        Ah: On floor 
 +        Bh: On meet of left-facing wall and floor 
 +        Ch: On right-facing wall 
 +        Dh: On meet of right-facing wall and ceiling 
 +        Eh: On meet of right-facing wall and floor
  
-D04D - Weapon selected +D045: Samus' equipment, mirrored from $D815 at save load. 
-D04E Current ROM bank loaded+        01: Bombs 
 +        02: Hi-jump 
 +        04: Screw attack 
 +        08: Space jump 
 +        10: Spring ball 
 +        20: Spider ball 
 +        40: Varia suit 
 +D046: Debug screen selector index 
 +D047: Tiles update flag (see $FFB1..B6, $2BA3, $27BA)
  
-D050 - Current e-tanks owned +D04D: Weapon equipped. 
-D051 - Current energy [BCD] +        0: Normal 
-D052 - Current e-tanks filled +        1: Ice 
-D053 - Current missile count, lo byte [BCD] +        2: Wave 
-D054 - Current missile count, hi byte [BCD] +        3: Spazer 
-D055 - Current beam Samus has +        4: Plasma 
-D056 - Samus' solidity index+        8: Missile 
 +D04E: Bank
  
-D058 - Current level bank loaded +D050: Samus' max energy tanks, mirrored from $D817 at save load. 
-D059 Death sequence timer. Used as index into offset table for dest address in $2FE1+D051: Samus' health, mirrored from $D818 at save load. 
 +D052: Samus' filled energy tanks, mirrored from $D819 at save load. 
 +D053: Samus' missiles(upper nybble tens, lower nybble ones), mirrored from $D81C at save load. 
 +D054: Samus' missiles(upper nybble thousands, lower nybble hundreds), mirrored from $D81D at save load. 
 +D055: Samus' beam. Saved to SRAM, mirrored from $D816 at save load. 
 +        0: Normal 
 +        1: Ice 
 +        2: Wave 
 +        3: Spazer 
 +        4: Plasma 
 +D056: Samus passable block threshold 
 +D057: Room sprite priority 
 +        0: Sprites over BG 
 +        1: BG over sprites 
 +D058: Bank for current room 
 +D059Death sequence timer. Used as index into offset table for dest address in $2FE1
  
-D065 VRAM DMA bank (see $FFB1..B6, $2BA3)+D064: Used in $239C as new OAM stack pointer, set to OAM stack pointer in $04DF 
 +D065VRAM DMA bank (see $FFB1-B6, $2BA3) 
 +D066: Used in v-blank handler. Timer for fade in. Set to 40h by $0CA3, set to 2Fh by $239C when type = Ah, set to A0h by game mode Ah, set to FFh by reached the gunship 
 +D067: Used in title. Set to 01h by $0CA3 and game mode Ah
  
-D069 Enemy Solidity Index+D069Enemy passable block threshold
  
-D06E Highest OAM stack pointer+D06EHighest OAM stack pointer
  
-D077 - Damage done by acid [BCD?] +D073: Two byte pointer, data for [$C215before subtracting 21h; pointer to SRAMCompared with F0h to enable $D09F, probably credits text
-D078 - Damage done by spikes [BCD?]+
  
-D07A - Save slot option selected+D076: Used in v-blank handler. Flag to go to $5:403D; set every few frames during credits 
 +D077: Acid damage. Saved to SRAM 
 +D078: Spike damage. Saved to SRAM 
 +D079: Flag to load characters. But also used in facing screen as a flag to check if buttons are pressed 
 +D07A: Save slot option selected
         0: Start         0: Start
         1: Clear         1: Clear
 +D07B: Used in title. Y position of stars?
 +D07C: Used in title. X position of stars?
  
-D07E - Mirror of BGP ($FF47) +D07E: BG palette 
-D07F - Mirror of OBP0 ($FF48) +D07F: Object 0 palette 
-D080 - Mirror of OBP1 ($FF49+D080: Object 1 palette 
-D081 - Max missile countlo byte [BCD] +D081: Samus' max missiles(upper nybble tens, lower nybble ones), mirrored from $D81A at save load. 
-D082 - Max missile counthi byte [BCD]+D082: Samus' max missiles(upper nybble thousands, lower nybble hundreds), mirrored from $D81B at save load. 
 +D083: Read in $1:7A34adjusts sprite Y position in $1:4DDF 
 +D084: Samus' health for display  mirror of $D051/D818? 
 +D086: Samus' missiles for display, mirror of $D053/$D81C?
  
-D084 - Samus' health for display +D089: Real number of Metroids remaining 
-D085 - Number of non-empty energy tanks +D08A: Projectile passable block threshold 
-D086 - Samusmissiles for display+D08B: Metroid Queen's room flag 
 +        11h: In Metroid Queen's room (set by screen transition command 8)
  
-D089 - Metroids remaining (real) [BDC+D08D: Value for $D05D in $31F1 
-D08A - Weapon solidity index+D08E: Index of screen transition command set. 
 +        Set to [$4300 + ([screen Y position high* 10h + [screen X position high]) * 2] & ~800h by set up door transition 
 +D090: Metroid Queen eating pose 
 +        Sets Samus pose = escaping Metroid Queen when 7, checked for 5/20h and set to 6 in in Metroid Queen's mouth 
 +        0: Otherwise 
 +        1: Samus entering mouth 
 +        2: Mouth closing 
 +        3: Mouth closed 
 +        5: Samus escaping mouth 
 +        6: Swallowing Samus 
 +        7:  
 +        8: Samus escaping stomach 
 +        10h: Paralysed (can enter mouth) 
 +        20h:  
 +        22h: Dying 
 +D091: Set to 3 in $8:7EBC if killed a target number of Metroids or 1 if only Metroid Queen is remaining 
 +D092: Song for room
  
-D08E Screen Transition indexlo byte +D096: Metroids remaining shuffle timer 
-D08F Screen Transition indexhi byte+D097: Index for $5:5620 jump table (first call in credits) 
 +D098: In-game timerminutes 
 +D099: In-game timerhours 
 +D09A: Number of Metroids remaining 
 +D09B: Fade in timer
  
-D092 - Song to resume (upon defeating a Metroidreloading a save)+D09E: Checked and cleared in $2:4000value for $FFC9 in $0C37 
 +D09F: Flag to display in-game time in credits 
 +D0A0: Debug flag
  
-D096 Metroids remaining shuffle timer+D0A2: In-game timer, 256-frame periods (roughly 14ths of a minute) 
 +D0A3: Save slot 
 +D0A4: Show clear save slot option flag
  
-D098 - In-game timer, minutes +D0A7: Metroids remaining in area
-D099 - In-game timer, hours +
-D09A - Metroids remaining (HUD display) [BCD]+
  
-D09FFlag to display in-game time in credits+D600-1FOAM data for the starry background in the credits.
  
-D0A2 In-game timer, 256-frame periods (roughly 14ths of a minute) +D700-3F: Screen transition commands
-D0A3 - Save File Selected +
-D0A4 - Show clear save slot option flag+
  
-D0A7 - Metroids remaining in area+D800-25: Save data. Data loaded from $1:4E64-89 by game mode Bh, loaded from $A008-2D + save slot * 40h by game mode Ch 
 +    D800: Samus' Y position 
 +    D802: Samus' X position 
 +    D804: Screen Y position 
 +    D806: Screen X position 
 +    D808: Enemy tiles source address (2 bytes) 
 +    D80A: Background tiles source bank 
 +    D80B: Background tiles source address (2 bytes) 
 +    D80D: Metatile definitions source address (bank 8, 2 bytes) 
 +    D80F: Source address of data for $DC00-FF (bank 8, 2 bytes) 
 +    D811: Bank for current room 
 +    D812: Samus passable block threshold (>= this tile index is passable, < is impassible) 
 +    D813: Enemy passable block threshold 
 +    D814: Projectile passable block threshold 
 +    D815: Samus' equipment at save load. 
 +    D816: Samus' beam at save load. 
 +    D817: Samus' max energy tanks at save load. 
 +    D818: Samus' health at save load. 
 +    D819: Samus' filled energy tanks at save load. 
 +    D81A: Samus' max missiles at save load. Upper nybble tens, lower nybble ones. 
 +    D81B: Samus' max missiles at save load. Upper nybble thousands, lower nybble hundreds. 
 +    D81C: Samus' missiles at save load. Upper nybble tens, lower nybble ones. 
 +    D81D: Samus' missiles at save load. Upper nybble thousands, lower nybble hundreds. 
 +    D81E: Direction Samus is facing at save load. 
 +    D81F: Acid damage 
 +    D820: Spike damage 
 +    D821: Real number of Metroids remaining 
 +    D822: Song for room 
 +    D823: In-game timer, minutes 
 +    D824: In-game timer, hours 
 +    D825: Number of Metroids remaining
  
-D700-D73F Door Transition Data Buffer+D900-FF: 10h byte slots? The first byte of which each is cleared when saving 
 +DA00-DBFF: Metatile definitions 
 +DC00-FF: Tile properties 
 +    1: Viscous. Reduces jumping and detaches spider ball on movement. Also causes morph ball sound effect glitch. 
 +    2: Jump-through block. Passable when jumping, impassable in all other states (in all directions). 
 +    4: Fall-through block. Passable when falling, impassable in all other states (in all directions). 
 +    8: Spike 
 +    10h: Acid 
 +    20h: Destructible by shot/bomb 
 +    40h: Destructible by bomb 
 +    80h: Save pillar
  
-D800-D825 Savegame data buffer +DD00-FF: Projectile RAM 
- +    Beams Takes up three 16-byte rows for each shot on-screen. Spazer and Plasma take up all three immediately. 
-DA00-DBFF Metatile data buffer +    DD00, DD10, DD20: Beam state. 
-DC00-FF Collision data buffer +        0-4: On-screen, being fired. Value will match the currently-equipped beam's as stored at D055. 
-DD00-FF Projectile RAM +        FFh: Not on-screen. 
-DE00-FF Entries to update tilemap[word] [byte] [byte] [byte] [byte] = dest addressTLTRBLBR +    DD01, DD11, DD21: Direction of fire. 
-    + 0: Dest. address+        1: To the right. 
 +        2: to the left. 
 +        4: Upwards. 
 +        8: Downwards. 
 +    DD02, DD12, DD22: Shot Y position. 
 +    DD03, DD13, DD23: Shot X position. 
 +    DD04, DD14, DD24: Unknown, switches between 0 and 8 on a seemingly random interval between firings. 
 +    DD05, DD15, DD25: Displacement from position fired at, ends up differently for each direction. 
 +     
 +    Missiles Shares a 16-byte row with the third beam slot. 
 +    DD20: Missile state. 
 +        8: On-screen, being fired. 
 +        FFh: Not on-screen. 
 +    DD21: Direction of fire. 
 +        1: To the right. 
 +        2: to the left. 
 +        4: Upwards. 
 +        8: Downwards. 
 +    DD22: Shot Y position. 
 +    DD23: Shot X position. 
 +    DD24: Unknown, switches between 0 and 8 on a seemingly random interval between firings. 
 +    DD25: Displacement from position fired at, ends up differently for each direction. 
 +     
 +    Bombs - Takes up three 16-byte rows for each bomb on-screen. 
 +    DD30DD40DD50: Bomb state. 
 +        1: Laidwaiting to explode. 
 +        2: Exploding. 
 +        FFh: No bomb on-screen. 
 +    DD31DD41, DD51: Bomb timer. Starts at the value it was set at and decreases to zero. 
 +    DD32, DD42, DD52: Bomb Y position. 
 +    DD33, DD43, DD53: Bomb X position. 
 +     
 +DE00-FF: Metatile update entries 
 +    + 0: Dest. address. $0000 terminates update
     + 2: Top-left tile     + 2: Top-left tile
     + 3: Top-right tile     + 3: Top-right tile
     + 4: Bottom-left tile     + 4: Bottom-left tile
     + 5: Bottom-right tile     + 5: Bottom-right tile
-DF00-FF Stack+DF00-FFStack
 </code> </code>
  
 === HRAM === === HRAM ===
 <code> <code>
-FF80 Buttons being held+FF80Buttons
         01: A         01: A
         02: B         02: B
Line 244: Line 702:
         40: Up         40: Up
         80: Down         80: Down
-FF81 New buttons just pressed +FF81New buttons 
-FF82 V-blank handled flag+FF82V-blank handled flag
  
-FF8D OAM offset (beginning of first unused entry)+FF8DOAM stack pointer
  
-FF97 Frame counter +FF97Frame counter 
-FF98 Sprite tile number (see $5:4015) +FF98Sprite tile number (see $5:4015). Mirror of sprite Y position (see $30BB). Door scroll flags (see $08FE): [$4200 + [screen Y position, screen] * 16 + [screen X position, screen]] 
-FF99 Two sprite tile numbers (see $5:4000)+FF99Two sprite tile numbers (see $5:4000). Mirror of sprite X position (see $30BB). Door thing (see $08FE): [Samus' Y position] - [$FFC8] + 60h
  
-FF9B Game mode+FF9BGame mode
         0: Boot         0: Boot
         1: Title screen         1: Title screen
Line 275: Line 733:
         13h: Credits         13h: Credits
  
-FFA0-FFA9 - Sprite DMA Routine +FFA0-A9: OAM DMA routine 
- +FFAA: VRAM tilemap metatile update address. $FFAA = $9800 + ([row block to update] * 32 + [column block to update]) * 2 
-FFB1-B2 - VRAM DMA source address +FFAC: Index of screen for metatile update. $FFAC = [row screen to update] * 16 + [column screen to update] 
-FFB3-B4 - VRAM DMA dest address, also source offset from $CE20 when [$D08C] is set +FFAD: Index of block for metatile update. $FFAD = [row block to update] * 16 + [column block to update] 
-FFB5-B6 - VRAM DMA size +FFAE: Number of blocks to update 
-FFB7-BB Energy tank graphics+FFAF: Stack pointer for metatile update entries 
 +FFB1VRAM DMA source address 
 +FFB3VRAM DMA dest address, also source offset from $CE20 when [$D08C] is set 
 +FFB5VRAM DMA size 
 +FFB7-BBEnergy tank graphics, other stuff too though 
 +FFB7: Offset for interval for [$FF98] in $30EA 
 +FFB8: Offset for interval for [$FF99] in $30EA 
 +FFB9: Table index for offset data     in $30EA 
 +FFBA: Start   of interval for [$FF98] in $30EA 
 +FFBB: End     of interval for [$FF98] in $30EA 
 +FFBC: Start   of interval for [$FF99] in $30EA 
 +FFBD: End     of interval for [$FF99] in $30EA
  
-FFC0 Samus Y pos (pixels) +FFBF: Flags to negate values in $30EA 
-FFC1 - Samus Y pos (screens) +FFC0Samusposition 
-FFC2 Samus X pos (pixels) +FFC2Samusposition 
-FFC3 - Samus X pos (screens) +FFC4: Sprite Y position (see $5:4015) 
-FFC4 - temp sprite Y position +FFC5: Sprite X position (see $5:4015) 
-FFC5 - temp sprite X position +FFC6: Sprite set 
-FFC6 - temp sprite frame/tile (depends on the subroutine using it+FFC7: Sprite attributes (see $5:4015
-FFC7 - temp sprite attributes +FFC8: Screen Y position 
-FFC8 - Camera Y position (pixels+FFCA: Screen X position 
-FFC9 - Camera Y position (screens) +FFCC: Row to update    (in pixels) 
-FFCA - Camera X position (pixels) +FFCE: Column to update (in pixels)
-FFCB - Camera X position (screens)+
  
-FFE0-FFF5 Used by active enemies (??)+FFE0-FFF5Used by active enemies (??)
  
-FFFE Counts every other in-game frame+FFFECounts every other in-game frame
 </code> </code>
  
return_of_samus/data_locations/ram_map.txt · Last modified: 2020/04/04 20:15 by kkzero