Memory offsets: NES (North American)

From Bionic Commando Database
Jump to: navigation, search
Memory Locations

Main Break down
0000-0FFF - Variable Memory
	0000-07FF - Usable Memory
	0800-0FFF - An exact copy of 0000-07FF.
1000-1FFF - An exact copy of 0000-0FFF.
2000-3FFF - Constant data, changes when a room loads.
4000-5FFF - Unknown. Keeps accumulating.
6000-7FFF - Empty memory
8000-FFFF - Program Memory


Memory - Description

0001 - 
0004 - 
0005 - 
0006 - 
000A - Accumulator Register
000C - 
000F - Gets set to 0A when an action is performed
0019 - The column of the highlighting box at equipment screen
001A - The row of the highlighting box at equipment screen
001D - Flag for which direction ego is facing (00 - left, 01 - right)
0033 - 
0036 - 
0039 - 
003B - 
003C - 

0040 - 
0041 - 
0042 - 
0043 - 
0044 - 
0045 - 
0046 - 
0047 - 
0048 - 
0049 - 
004A - Player Lives
004B - 
004C - 
004E - 
004F - 
0050 - 
0051 - 
0052 - 
0053 - 
0054-0055 - The location as the title logo is drawn on the screen
0055 - 
0056 - 
0057 - The game over screen timeout
0058 - 
0059 - 
005A - 
005B - 
005C - 
005E - 
005F - Changes with ego position or enemy position if one if on the screen (probably a temp variable)
0060 - 
0061 - Ego X position on screen
0062 - Ego Y position on screen
0063 - 
0064 - 
0065 - 
0066 - 
0067 - 
0068 - 
0069 - 
006A-006B - Delay after title screen finishes drawing to start intro or demo.
006B - 
006C - 
006E - 
006F - 
0070 - 
0071 - 
0072 - 
0073 - 
0074 - 
0075 - 
0076 - 
0077 - 
0078 - 
0079 - 
007A - 
007B - 
007C - 
007E - 
007F - 
0080 - The cursor toggle (0-Comm / 1-Wire, 0-Desc / 1-Tran)
0081 - 
0082 - Flag during intro story. 08 - Clear text. 09 - Writing text. 0A - Waiting after text. 0B - Fade out.
0083 - 
0084 - 
0085 - Toggles from 1 to 0 as text is being written to the screen during intro
0086 - 
0087-0088 - Delay counters for writing text and clearing text during intro story

00C0-00EF - Loaded palette colors.

A Button
| B Button
| | Start
| | | Select
| | | | Up
| | | | | Down
| | | | | | Left
| | | | | | | Right
| | | | | | | |
0:0:0:0:0:0:0:0

00F8 - Controller Press (0 - Idle, 1 - Right, 2 - left, 4 - Down, 8 - Up, 10 - Start, 20 - Select, 40 - B, 80 - A)
00FA - Controller Down  (0 - Idle, 1 - Right, 2 - left, 4 - Down, 8 - Up, 10 - Start, 20 - Select, 40 - B, 80 - A)

0106 - Destination area part 1 in map mode
0107 - Destination area part 2 in map mode

0150-01F0 - Sound data being processed
01FC-01FF - Stack

H Mirror
| V Mirror
| | Priority
| | | ??? Palette
0:0:0:000 00 ------- Effects Byte

00 - Object Y Position
01 - Object #
02 - Object Flags
03 - Object X Position

0200-02FF - Objects on screen (Note, changing these objects only works for one cycle before they're reset)
0300-03FF - Screen background tiles and palette?

0400-043F - PPU Memory used to animate the background. (Enemy doors, text, fire, etc.)


Power Techincal Requirements
8  - Must beat areas 1-6 and have gamma communicator
10 - Must beat area 7 and have delta communicator
12 - ?

                        +--+     +--+
                        |10|=====|12|
+--+  +--+  +--+  +--+  +--+     +--+
|13|  |04|==|15|  |07|   || \\    ||
+--+  +--+  +--+  +--+   ||   \\  ||
 || //    \\ ||    || \\ ||    \\ ||
+--+  +--+  +--+  +--+  +--+     +--+
|01|  |16|==|05|  |18|  |08|     |11|
+--+  +--+  +--+  +--+  +--+     +--+
 ||    || // ||       // || \\
 ||   +--+   ||     //  +--+  +--+
 ||   |02|   ||    //   |09|  |19|
 ||   +--+   ||   //    +--+  +--+
 ||    ||    || //       ||
+--+  +--+  +--+  +--+  +--+
|00|  |03|==|06|==|14|  |17|
+--+  +--+  +--+  +--+  +--+

Truck and Helicopter X,Y position for each area
Area  X, Y
00 - 28, 98
01 - 28, 58
02 - 48, 78
03 - 48, 98
04 - 48, 38
05 - 68, 58
06 - 68, 98
07 - 88, 38
08 - A8, 58
09 - A8, 78
10 - A8, 28
11 - D8, 58
12 - D8, 28
13 - 28, 38
14 - 88, 98
15 - 68, 38
16 - 48, 58
17 - A8, 98
18 - 88, 58
19 - C8, 78

Truck Patterns (beginning with their initial position)
Truck 1 - 4,5,15,4,1,4...
Truck 2 - 3,6,5,2,16,5,6,3...
Truck 3 - 7,8,10,8,19,8,6,8,7...
Truck 4 - 8,19,8,7,18,7,8...
Truck 5 - 10,12,11,10...

0440 - Map Helicopter - Process Flag (00 - Ignore, 01 - Active, +80 - Hidden)
0441 - Map Truck 1 - Process Flag
0442 - Map Truck 2 - Process Flag
0443 - Map Truck 3 - Process Flag
0444 - Map Truck 4 - Process Flag
0445 - Map Truck 5 - Process Flag
0446 - 
0447 - 
0448 - 
0449 - Map Helicopter Frame
044A - Map Truck 1 - Pattern (01) The patterns predict how the trucks turn when they reach each area.
044B - Map Truck 2 - Pattern (03)
044C - Map Truck 3 - Pattern (04)
044D - Map Truck 4 - Pattern (05)
044E - Map Truck 5 - Pattern (07)
044F - 
0450 - Cover up object for secret passage between areas 15 and 18
0451 - Cover up object for secret passage between areas 14 and 17
0452 - Map Helicopter - X
0453 - Map Truck 1 - X
0454 - Map Truck 2 - X
0455 - Map Truck 3 - X
0456 - Map Truck 4 - X
0457 - Map Truck 5 - X
0558 - 
0459 - 
045A - 
045B - 
045C - Map Truck 1 - Unknown Counter
045D - Map Truck 2 - Unknown Counter
045E - Map Truck 3 - Unknown Counter
045F - Map Truck 4 - Unknown Counter
0460 - Map Truck 5 - Unknown Counter
0461 - 
0462 - 
0463 - 
0464 - Map Helicopter - Y
0465 - Map Truck 1 - Y
0466 - Map Truck 2 - Y
0467 - Map Truck 3 - Y
0468 - Map Truck 4 - Y
0469 - Map Truck 5 - Y
046A - 
046B - 
046C - 
046D - Map Helicopter Propellor toggle (00 - Spin 1, C0 - Spin 2)
046E - Map Truck 1 - Unknown Counter
046F - Map Truck 2 - Unknown Counter
0470 - Map Truck 3 - Unknown Counter
0471 - Map Truck 4 - Unknown Counter
0472 - Map Truck 5 - Unknown Counter
0473 - 
0474 - 
0475 - 
0476 - Map Helicopter - Graphic offset
0477 - Map Truck 1 - Graphic offset
0478 - Map Truck 2 - Graphic offset
0479 - Map Truck 3 - Graphic offset
047A - Map Truck 4 - Graphic offset
047B - Map Truck 5 - Graphic offset
047C - 
047D - 
047E - 
047F - Map Helicopter - Direction (0 - Right, 1 - Down+Right, 2 - Down, 3 - Down+Left, 4 - Left, 5-Up+Left, 6 - Up, 7 - Up+Right)
0480 - Map Truck 1 - Direction
0481 - Map Truck 2 - Direction
0482 - Map Truck 3 - Direction
0483 - Map Truck 4 - Direction
0484 - Map Truck 5 - Direction
0485 - 
0486 - 
0487 - 
0488 - Map Loop (0 - Reset, 1 - Idle, 2 - Moving)
0489 - Map Truck 1 - Status for next direction (1 - Idle, 2 - Switch to next direction)
048A - Map Truck 2 - Status for next direction
048B - Map Truck 3 - Status for next direction
048C - Map Truck 4 - Status for next direction
048D - Map Truck 5 - Status for next direction
048E - 
048F - 
0490 - 
0491 - Map Status (00 - Decend Screen, 01 - Please Instruct Us / Moving, 02 - Decend/Transfer, 03 - Choose Destination)
0492 - 
0493 - 
0494 - 
0495 - 
0496 - 
0497 - 
0498 - 
0499 - 
049A - Map Helicopter Transfer index (2, 4, 6, 8, A) - Also countdown after collision with truck.
049B - 
049C - 
049D - 
049E - 
049F - 
04A0 - 
04A1 - 
04A2 - 
04A3 - The number of the truck that you last hit (1-5 trucks, 7 - Passage 18-15 8 - Passage 14-17)
04A4 - Map Truck 1 - Hidden Timeout (Set to FF when you defeat a truck. When it becomes 0, truck flag is ANDed with 80)
04A5 - Map Truck 2 - Hidden Timeout 
04A6 - Map Truck 3 - Hidden Timeout 
04A7 - Map Truck 4 - Hidden Timeout 
04A8 - Map Truck 5 - Hidden Timeout 
04A9 - 
04AA - 
04AB - 
04AC - 
04AD - Map Truck 1 - Next index direction
04AE - Map Truck 2 - Next index direction
04AF - Map Truck 3 - Next index direction
04B0 - Map Truck 4 - Next index direction
04B1 - Map Truck 5 - Next index direction
04B2 - 
04B3 - 
04B4 - 
04B5 - Map Helicopter - Area
04B6 - Map Truck 1 - Area
04B7 - Map Truck 2 - Area
04B8 - Map Truck 3 - Area
04B9 - Map Truck 4 - Area
04BA - Map Truck 5 - Area
04BB - 
04BC - 
04BD - 
04BE - The number of the door that you last exited. Used for where to return you when you die.
04BF - Door locked flag (only gets checked when an area is initilized) Only one door can be locked per map.
04C0 - 
04C1 - Flare used flag
04C2 - Medicine used flag
04C3 - 
04C4 - 
04C5 - 
04C6 - 
04C7 - 
04C8 - 
04C9 - 
04CA - Selected Gun (0 - Rifle, 1 - Launcher, 2 - Wide, 3 - Machine, 4 - 3 Way)
04CB - Rifle Flag
04CC - Rocket Launcher Flag
04CD - Wide Cannon Flag
04CE - Machinegun Flag
04CF - 3-Way Flag
04D0 - Unused Gun Flag 
04D1 - Selected Armor (0 - Pendant, 1 - Helmet, 2 - BPV)
04D2 - Pendant Flag
04D3 - Helmet Flag
04D4 - Bulletproof Vest Flag
04D5 - Unused Armor Flag 1
04D6 - Unused Armor Flag 2
04D7 - Unused Armor Flag 3
04D8 - Selected Item (0 - Flares, 1 - Medicine, etc.)
04D9 - Flare Bomb Flag
04DA - Medicine Flag
04DB - Permit Flag
04DC - Steel Boots Flag
04DD - Rapid Fire Device Flag
04DE - Unused Item Flag
04DF - Selected Communicator (0 - Alpha, 1 - Beta, 2 - Gamma, 3 - Delta)
04E0 - Alpha Communicator Flag
04E1 - Beta Communicator Flag
04E2 - Gamma Communicator Flag
04E3 - Delta Communicator Flag
04E4 - Unused Communicator Flag 1
04E5 - Unused Communicator Flag 2
04E6 - The highlighted position in the item selection screen
04E7 - Bullet Canisters Collected Place holder 3
04E8 - Bullet Canisters Collected Place holder 2
04E9 - Bullet Canisters Collected Place holder 1 (Moves when >9)
04EA - Player Hit Points
04EB - Beat Area 1 Flag
04EC - Beat Area 2 Flag
04ED - Beat Area 3 Flag
04EE - Beat Area 4 Flag
04EF - Beat Area 5 Flag
04F0 - Beat Area 6 Flag
04F1 - Beat Area 7 Flag
04F2 - Beat Area 8 Flag
04F3 - Beat Area 9 Flag
04F4 - Beat Area 10 Flag
04F5 - Beat Area 11 Flag
04F6 - 
04F7 - Underground passage's found flag
04F8 - 
04F9 - 
04FA - Eagle Badges
04FB - 
04FC - 
04FD - 
04FE - 
04FF - 


0537 - Bullet 1 is active flag
0538 - Bullet 2 is active flag
0539 - Bullet 3 is active flag
053A - POW is active flag
053B - Arm Flag (0 - None, 1 - Out, 80 - ?)
053C - Enemy Bullet 1 Active Flag
053D - Enemy Bullet 2 Active Flag
053E - Enemy 1 Active Flag (Main System Bullet counts as enemy)
053F - Enemy 2 Active Flag
0540 - Enemy 3 Active Flag
0541 - Object 1 Active Flag
0542 - Object 2 Active Flag
0543 - Object 3 Active Flag
0544 - Object 4 Active Flag
0545 - Object 5 Active Flag
0546 - Object 6 Active Flag
0547 - Object 7 Active Flag
0548 - Object 8 Active Flag
0549 - 
054A - 
054B - 
054C - 
054D - 
054E - 
054F - 

055C - 
055D - Ego Bullet 1 flag. (00 - Moving or hit wall, 01 - Off Screen right, FF - Off screen left)
055E - Ego Bullet 2 flag. (00 - Moving or hit wall, 01 - Off Screen right, FF - Off screen left)
055F - Ego Bullet 3 flag. (00 - Moving or hit wall, 01 - Off Screen right, FF - Off screen left)
0560 - 
0561 - 
0562 - Enemy bullet 1 flag (00 - Moving or hit wall, 01 - Off Screen right, FF - Off screen left)
0563 - Enemy bullet 2 flag (00 - Moving or hit wall, 01 - Off Screen right, FF - Off screen left)
0564 - Enemy 1 flag opposite?
0565 - Enemy 2 flag opposite?
0566 - Enemy 3 flag opposite?
0567 - Object 1 X Screen offset (How many screens away this object is from ego)
0568 - Object 2 X Screen offset (How many screens away this object is from ego)
0569 - Object 3 X Screen offset (How many screens away this object is from ego)
056A - Object 4 X Screen offset (How many screens away this object is from ego)
056B - Object 5 X Screen offset (How many screens away this object is from ego)
056C - Object 6 X Screen offset (How many screens away this object is from ego)
056D - Object 7 X Screen offset (How many screens away this object is from ego)
056E - Object 8 X Screen offset (How many screens away this object is from ego)
056F - Ego X position
0570 - Bullet 1 X position
0571 - Bullet 2 X position
0572 - Bullet 3 X position
0573 - POW X Position
0574 - Arm X position
0575 - Enemy Bullet 1 X position
0576 - Enemy Bullet 2 X position
0577 - Enemy 1 X Position (Main system bullet counts as enemy)
0578 - Enemy 2 X position
0579 - Enemy 3 X position
057A - Object 1 X position
057B - Object 2 X position
057C - Object 3 X position
057D - Object 4 X position
057E - Object 5 X position
057F - Object 6 X position
0580 - Object 7 X position
0581 - Object 8 X position
0582 - Highlighting box X position in prep screen.
0583 - Increments by 20 when ego attempts to alter X position.
0584 - 
0585 - 
0586 - 
0587 - 
0588 - 
0589 - 
058A - 
058B - Increments by 20 when enemy attempts to alter X position.
058C - Increments by 20 when enemy attempts to alter X position.
058D - Increments by 20 when enemy attempts to alter X position.

058F - Enemy Cycle by 20

05A0 - 
05A1 - Object 1 Y Screen offset (How many screens away this object is from ego)
05A2 - Object 2 Y Screen offset (How many screens away this object is from ego)
05A3 - Object 3 Y Screen offset (How many screens away this object is from ego)
05A4 - Object 4 Y Screen offset (How many screens away this object is from ego)
05A5 - Object 5 Y Screen offset (How many screens away this object is from ego)
05A6 - Object 6 Y Screen offset (How many screens away this object is from ego)
05A7 - Object 7 Y Screen offset (How many screens away this object is from ego)
05A8 - Object 8 Y Screen offset (How many screens away this object is from ego)
05A9 - Ego Y position
05AA - Bullet 1 Y Position
05AB - Bullet 2 Y Position
05AC - Bullet 3 Y Position
05AD - POW Y Position
05AE - Arm Y Position
05AF - Enemy Bullet 1 Y position
05B0 - Enemy Bullet 2 Y position
05B1 - Enemy 1 Y Position (Main system bullet counts as enemy)
05B2 - Enemy 2 Y Position
05B3 - Enemy 3 Y Position
05B4 - Object 1 Y position
05B5 - Object 2 Y position
05B6 - Object 3 Y position
05B7 - Object 4 Y position
05B8 - Object 5 Y position
05B9 - Object 6 Y position
05BA - Object 7 Y position
05BB - Object 8 Y position
05BC - Highlighting box Y position in prep screen.
05BD - Increments by 20 when ego attemptx to alter Y position.
05BE - 
05BF - 
05C0 - 
05C1 - 
05C2 - 
05C3 - 
05C4 - 
05C5 - Increments by 20 when enemy attempts to alter X position.
05C6 - Increments by 20 when enemy attempts to alter X position.
05C7 - Increments by 20 when enemy attempts to alter X position.

05D0 - Ego Frame (26 - Idle, 4B - Walking, 71 - Duck/Arm Angle, FD - Arm Up, 
05DA - Enemy 1 state
05DB - Enemy 1 Graphic pointer
05DD - Enemy 1 Frame
05DE - Main System Explosion Frame
05DF - Enemy 2 state
05E0 - Enemy 3 state
05E9 - Ego Swing Frame
05EF - Enemy 1 Graphic pointer 2

05F8 - Ego Frame (00 - Idle, 48 - connected up, 60 - connected angle 2A, 5?, 8? - Walking)

0604 - Enemy Animation Frame
060A - Ego State (0 - Idle, 1 - Walking, 2 - Ducking, 3 - Arm attached Directly Up, 4 - Arm attached angle, 5 - Falling, 6 - Parachuting, 8 - Arm attached duck/walk, A - Injured, 10 - Dead, 11 - Passing through a door)
060C - Ego Frame number (2-6 walking, A - Idle, 1 - duck, more)

0611 - Arm swinging
0620 - Flag for direction Ego is facing (0 - Right, 1 - Left)

0625 - Ego position on swing and swing failure values (1-7)

062C - Flag for direction Enemy 1 is facing
0633 - Flag for direction Ego is facing (0 - Right, 1 - Left)
0634 - Flag for direction bullet 1 is moving (0 - Right, 1 - Left)
0635 - Flag for direction bullet 1 is moving (0 - Right, 1 - Left)
0636 - Flag for direction bullet 1 is moving (0 - Right, 1 - Left)

063E - Flag for direction Enemy 1 is facing

0642 - Outside neutral zone flag

0648 - Bullet 1 active Flag (Flare counts as a bullet)
0649 - Bullet 1 active Flag
064A - Bullet 1 active Flag
064B - POW active flag

064C - Arm State (0 - none, 1 - out, 2 - connected)
0647 - Enemy 1 X position

0652 - Darkness status (0 - Light, 1 - Pitch Black, 2 - Eyes Adjusted)
0654 - Gets set from 1 to 0 when you pickup the delta comm

065A - Ego State (00 - idle, 01 - Walking, 02 - Ducking, 03 - Arm attached Directly Up, 04 - Arm attached angle, 05 - Falling at an angle, 07 - Falling stright down, 0A - Recoiling from damage, 10 - Dead)

0665 - Enemy 1 State (0 - Idle, Walking, 2/3 - Jumping down, etc.) Changes per enemy
0666 - Enemy 2 State (0 - Idle, Walking, 2/3 - Jumping down, etc.)

0680 - Delay from death to reset.
0681 - Bullet 1 duration
0682 - Bullet 1 duration
0683 - Bullet 1 duration
0684 - POW duration x256

068B - The timeout for resetting the palette to semi dark in area 4.

0697 - POW duration x1

069E - Effect darkness timeouts

06A7 - Bullet 1 state (0 - none, 2 - Hit something/Timed Out, 8 - remove, A - in flight) Add 10 if bullet is a 2x2 sprite like rocket launcher or 3-way.
06A8 - Bullet 1 state (0 - none, 2 - Hit something/Timed Out, 8 - remove, A - in flight) Add 10 if bullet is a 2x2 sprite like rocket launcher or 3-way.
06A9 - Bullet 1 state (0 - none, 2 - Hit something/Timed Out, 8 - remove, A - in flight) Add 10 if bullet is a 2x2 sprite like rocket launcher or 3-way.
06AA - 
06AB - Flag for arm attached (00 - not attached, F7 - attached)
06AC - Enemy Bullet 1 effects
06AD - Enemy Bullet 2 effects
06AE - Object 1 effects (Add 10 for shimmering, 20 for behind background, 40 for flashing)
06AF - Object 2 effects
06B0 - Object 3 effects
06B1 - Object 4 effects
06B2 - Object 5 effects
06B3 - Object 6 effects
06B4 - Object 7 effects
06B5 - Object 8 effects

06BA - Effects ego colissions

06BF - Arm distance from ego

06D2 - Arm throw state (3 - Up, 6 - Up angle, 4 - Stright, 5 - Ducking)

06D7 - Slow accumulator

0700 - 

0711 - Object 1 bouncing flag
0712 - Object 2 bouncing flag
0713 - Object 3 bouncing flag
0714 - Object 4 bouncing flag

0719 - Ego Y velocity

0724 - Object 1 Y velocity
0725 - Object 2 Y velocity

072C - Increments by 10 as ego flies through the air.

0737 - Object 1 counter
0738 - Object 2 counter
0739 - Object 3 counter
073A - Object 4 counter

073F - Unknown Ego status (00 - Init, Move - A0, 20 - Falling)

074A - Enemy jumping status (BD - Normal, 28 - Jumping)

075D - Object 1 incrementer (for soldiers it counts down from 8. When 0 is reached, xthey jump)
075E - Object 2 incrementer (Bullet canisters count up by 10 each time they bounce)
075F - Object 3 incrementer
0760 - Object 4 incrementer

0779 - Ego hit points
077A - Ego bullet's damage value 1
077B - Ego bullet's damage value 2
077C - Ego bullet's damage value 3
077D - 
077E - 
077F - 
0780 - 
0781 - 
0782 - 
0783 - Enemy 1 HP   When killed = FF until bullet goes away. Includes bosses and main systems.
0784 - Enemy 2 HP
0785 - Enemy 3 HP
0786 - Enemy 4 HP
0787 - Enemy 5 HP
0788 - Enemy 6 HP
0789 - Enemy 7 HP
078A - Enemy 8 HP
078B - Enemy 9 HP
078C - Enemy 10 HP

0791 - Arm value of some sort

0796 - Enemy invincibility time

07AA - Bullet canister 1 timeout and hop count
07AB - Bullet canister 2 timeout and hop count
07AC - Bullet canister 3 timeout and hop count

07E3 - Flag for ego falling (0 - falling, 1 - on ground or arm attached)
07E6 - Ego State (0 - Not on screen, 1 - Walking, 2 - Ducking, 3 - Arm Up, 4 - Arm walking, 5 - Arm ducking, 6 - Arm Angle, 9 - Climbing, A - Parachuting, B - Falling, C,D,E - Swinging, 10 - Idle, 11 - Injured, 12 - Dead)
07E7 - Same as above.

07EB - Hyper Bazooka flag

Subroutines

9749 - 
B9AD - 
C000 - Beginning of code
D6A0 - 
D6C7 - Load the graphic from register Y and A
D6CD - 
D6EB - 
D6F1 - 
D754 - Play sound from register Y
D75D - 
D760 - 
D778 - Gets called at game init
D79C - 
D7BA - 
D7BD - Gets called at game init
EA8F - 
F04F - 

FEE2 matches ROM location 3FEF2 (start of truck movement values)

FFFA - Non-Maskable Interrupt (NMI) Address (2 bytes)
FFFC - Reset Vector (2 bytes)
FFFE - IRQ/BRK Vector (2 bytes)