; ------------------- ; METROID source code ; ------------------- ; MAIN PROGRAMMERS ; HAI YUKAMI ; ZARU SOBAJIMA ; GPZ SENGOKU ; N.SHIOTANI ; M.HOUDAI ; (C) 1986 NINTENDO ; ;Disassembled, reconstructed and commented ;by SnowBro [Kent Hansen] ;Continued by Dirty McDingus (nmikstas@yahoo.com) ;Can be reassembled using Ophis. ;A work in progress. ;Last updated: 3/9/2010 ;Metroid defines. ;-------------------------------------------[ Defines ]---------------------------------------------- .alias CodePtr $0C ;Points to address to jump to when choosing--> ; CodePtr+1 $0D ;a routine from a list of routine addresses. ;The bits of the change and status addresses represent the following joypad buttons: ;bit 7=A, bit 6=B, bit 5=SELECT, bit 4=START, bit 3=Up, bit 2=Down, bit 1=Left, bit 0=Right. .alias Joy1Change $12 ;These addresses store any button changes--> .alias Joy2Change $13 ;that happened since last frame(pads 1 and 2). .alias Joy1Status $14 ;These two addresses store all buttons--> .alias Joy2Status $15 ;currently being pressed on the two controllers. .alias Joy1Retrig $16 ;These two addresses store any buttons that need--> .alias Joy2Retrig $17 ;to retrigger after being held down by player. .alias RetrigDelay1 $18 ;These two addresses are counters that control--> .alias RetrigDelay2 $19 ;The retriggering of held down buttons. .alias NMIStatus $1A ;0=NMI in progress. anything else, NMI not in progress. .alias PPUDataPending $1B ;1=not PPU data pending, 1=data pending. .alias PalDataPending $1C ;Pending palette data. Palette # = PalDataPending - 1. .alias GameMode $1D ;0 = Game is playing, 1 = At title/password screen .alias MainRoutine $1E ;5 = Game paused, 3 = Game engine running .alias TitleRoutine $1F ;Stores title routine number currently running. .alias NextRoutine $20 ;Stores next routine to jump to after WaitTimer expires. .alias CurrentBank $23 ;0 thru 7. current memory page in lower memory block. .alias SwitchPending $24 ;Switch memory page. Page # = SwitchPending - 1. .alias MMCReg0Cntrl $25 ;Stores bits to be loaded into MMC1 Register 0. .alias SwitchUpperBits $28 ;Used to store bits 3 and 4 for MMC1 register 3. Bits--> ;3 and 4 should always be 0 under normal conditions. .alias TimerDelay $29 ;Count down from 9 to 0. Decremented every frame. .alias Timer1 $2A ;Decremented every frame after set. .alias Timer2 $2B ;Decremented every frame after set. .alias Timer3 $2C ;Decremented every 10 frames after set. .alias FrameCount $2D ;Increments every frame(overflows every 256 frames). .alias RandomNumber1 $2E ;Random numbers used--> .alias RandomNumber2 $2F ;throughout the game. .alias SpareMem30 $30 ;Written to, but never accessed. .alias GamePaused $31 ;#$00=Game running, #$01=Game paused. .alias RoomPtr $33 ;Low byte of room pointer address. ; RoomPtr+1 $34 ;High byte of room pointer address. .alias StructPtr $35 ;Low bute of structure pointer address. ; StructPtr+1 $36 ;High byte of structure pointer address. .alias CartRAMWorkPtr $37 ;Low byte of pointer to current position in room RAM. ; CartRAMWorkPtr+1 $38 ;High byte of pointer to current position in room RAM. ;The CartRAMWorkPtr points to the current memory address--> ;in the room RAM that is being loaded. .alias CartRAMPtr $39 ;Low byte of pointer to room RAM (#$00). ; CartRAMPtr+1 $3A ;High byte of pointer to room RAM (#$60 or #$64). ;Room RAM is a screen buffer where the objects that make--> ;up a room are loaded. There are two room RAM memory--> ;areas and they are the exact same size as the two name--> ;tables and attribute tables in the PPU. Once the room--> ;RAM conatins a completed room in it, the entire contents--> ;of the room RAM is loaded into the PPU. .alias RoomPtrTable $3B ;Low byte of start of room pointer table. ; RoomPtrTable+1 $3C ;High byte of start of room pointer table. .alias StructPtrTable $3D ;Low byte of start of structure pointer table. ; StructPtrTable+1 $3E ;High byte of structure pointer table. .alias MacroPtr $3F ;Low byte of pointer into macro definitions. ; MacroPtr+1 $40 ;High byte of pointer into macro definitions. .alias EnmyFrameTbl1Ptr $41 ;Low byte of pointer into address table to find enemy animations. ; EnmyFrameTbl1Ptr+1 $42 ;High byte of pointer into address table to find enemy animations. .alias EnmyFrameTbl2Ptr $43 ;Same as above except in a second table because there are--> ; EnmyFrameTbl2Ptr+1 $44 ;too many entries to fit into one table. .alias EnmyPlaceTblPtr $45 ;Low byte of pointer into enemy frame placement table. ; EnmyPlaceTblPtr+1 $46 ;High byte of pointer into enemy frame placement table. .alias EnemyAnimPtr $47 ;Low byte of start of EnemyAnimIndexTbl. ; EnemyAnimPtr+1 $48 ;High byte of start of EnemyAnimIndexTbl. .alias ScrollDir $49 ;0=Up, 1=Down, 2=Left, 3=Right. .alias TempScrollDir $4A ;Stores ScrollDir when room is initially loaded. .alias PageIndex $4B ;Index to object data. ;#$D0, #$E0, #$F0 = projectile indices(including bombs). ; .alias ItemIndex $4C ;#$00 or #$08. Added to PowerUpType addresses to determine if--> ;the first or second item slot is being checked. .alias SamusDir $4D ;0 = Right, 1 = Left. .alias SamusDoorDir $4E ;Direction Samus passed through door. .alias MapPosY $4F ;Current y position on world map. .alias MapPosX $50 ;Current x position on world map. .alias SamusScrX $51 ;Samus x position on screen. .alias SamusScrY $52 ;Samus y position on screen. .alias WalkSoundDelay $53 .alias IsSamus $55 ;1=Samus object being accessed, 0=not Samus. .alias DoorStatus $56 ;0=Not in door, 1=In right door, 2=In left door, 3=Scroll up--> ;4=Scroll down, 5=Exit door, MSB set=Door entered. If value--> ;is 3 or 4, a door was entered while in a verticle shaft and--> ;the door was not centered on the screen and up or down--> ;scrolling needs to occur before scrolling to the next room. .alias DoorScrollStatus $57 ;#$01=Entered right hand door from horizontal area.--> ;#$02=Entered left hand door from horizontal area.--> ;#$03=Entered door from verticle shaft and room needs to--> ;be centered before horizontal scrolling. #$04=Entered--> ;door from verticle shaft and room was already centered. .alias SamusDoorData $58 ;The upper 4 bits store either 1 or 2. If 1 is stored(bit 4--> ;set), the scrolling after Samus exits the door is toggled.--> ;If 2 is stored(bit 5 set), the scrolling is set to--> ;horizontal scrolling after Samus exits the door. This--> ;happens mostly in item rooms. The lower 4 bits store Samus'--> ;action status as she enters the door. This is used to set--> ;Samus' action after she exits and keeps her looking the same. .alias DoorDelay $59 ;Number of frames to delay when Samus entering/exiting doors. .alias RoomNumber $5A ;Room number currently being loaded. .alias SpritePagePos $5B ;Index into sprite RAM used to load object sprite data. .alias SamusInLava $64 ;#$01=Samus in lava, #$00=She is not. .alias ObjectCounter $65 ;Counts such things as object explosion time. .alias ObjectPal $67 ;Attrib. table info for room object(#$00 thru #$03). .alias RoomPal $68 .alias TempX $69 .alias TempY $6A .alias ObjectCntrl $6B ;Controls object properties such as mirroring and color--> ;bits. Bit 4 controls object mirroring. .alias DoorOnNameTable3 $6C ;The following two addresses are used to keep track of the--> .alias DoorOnNameTable0 $6D ;doors loaded on the name tables. The information is used--> ;in the GetRoomNum routine to prevent the loading of a--> ;room behind a door when scrolling horizontally. This has--> ;the effect of stopping scrolling until Samus walks through--> ;the door. #$01=Left door on name table. #$02=right door--> ;on name table. #$03 two doors on the same name table.--> ;#$00 is possible in $6D if 2 doors are on name table 0--> ;while vertically scrolling. .alias HealthLoChange $6E ;Amount to add/subtract from HealthLo. .alias HealthHiChange $6F ;Amount to add/subtract from HealthHi. .alias SamusBlink $70 .alias UpdatingProjectile $71 ;#$01=Projectile update in process. #$00=not in process. .alias DamagePushDirection $72 ;#$00=Push Samus left when hit, #$01=Push right, #$FF=No push. .alias InArea $74 ;#$10(or #$00)=Brinstar, #$11=Norfair, #$12=Kraid hideout,--> ;#$13=Tourian, #$14=Ridley hideout. .alias SpareMem75 $75 ;Initialized to #$FF in AreaInit. Not used. .alias PalToggle $76 .alias ItemRoomMusicStatus $79 ;#$00=Item room music not playing. ;#$01=Play item room music. ;#$80=Stop item room music once door scroll complete. ;#$81=Item room music already playing. Don't restart. .alias OnFrozenEnemy $7D ;#$01=Samus standing on frozen enemy, #$00=she is not. ;--------------------------------------[ End routine specific ]-------------------------------------- .alias EndMsgWrite $7A ;0=don't write end message, 1=write end message. .alias IsCredits $7B ;0=credits not rolling, 1=credits rolling. .alias SpriteByteCounter $7C ;Used to indicate when Samus sprite load complete. .alias SpritePointerIndex $7D ;Index to proper Samus sprite graphics at end game. .alias SpriteAttribByte $7E ;#$00. Attribute byte of some sprites. .alias ColorCntIndex $7F ;Index for finding count number for ClrChangeCounter. .alias CreditPageNumber $80 ;Stores current page of credits(#$00 thru #$06). .alias HideShowEndMsg $81 ;0=show end message, 1=erase end message. .alias ClrChangeCounter $82 ;When=#$00, change end Samus sprite colors. .alias WaveSpritePointer $83 ;Address pointer to Samus hand waving sprites in end. .alias WaveSpriteCounter $84 ;Stores length of wave sprite data (#$10). ;---------------------------------------------------------------------------------------------------- .alias MetroidOnSamus $92 ;#$01=Metroid on Samus, #$00=Metroid not on Samus. .alias MaxMissilePickup $93 ;Maximum missiles power-ups that can be picked up. Randomly--> ;recalculated whenever Samus goes through a door. .alias MaxEnergyPickup $94 ;Maximum energy power-ups that can be picked up. Randomly--> ;recalculated whenever Samus goes through a door. .alias CurrentMissilePickups $95 ;Number of missile power-ups currently collected by Samus--> ;Reset to 0 when Samus goes through a door. .alias CurrentEnergyPickups $96 ;Number of energy power-ups currently collected by Samus--> ;Reset to 0 when Samus goes through a door. .alias MotherBrainStatus $98 ;#$00=Mother brain not in room, #$01=Mother brain in room,--> ;#$02=Mother brain hit, #$03=Mother brain dying--> ;#$04=Mother brain dissapearing, #$05=Mother brain gone,--> ;#$06=Time bomb set, #$07=Time bomb exploded,--> ;#$08=Initialize mother brain,--> ;#$09, #$0A=Mother brain already dead. .alias MotherBrainHits $99 ;Number of times mother brain has been hit. Dies at #$20. .alias SpareMemB7 $B7 ;Written to in title routine and accessed by unsed routine. .alias SpareMemB8 $B8 ;Written to in title routine and accessed by unsed routine. .alias SpareMemBB $BB ;Written to in title routine, but never accessed. .alias First4SlowCntr $BC ;This address holds an 8 frame delay. when the delay is up,--> ;The crosshair sprites double their speed. .alias Second4Delay $BD ;This address holds a 32 frame delay. When the delay is--> ;up, the second set of crosshair sprites start their movement. .alias SecondCrosshairSprites $BF ;#$01=Second crosshair sprites active in intro. .alias FlashScreen $C0 ;#$01=Flash screen during crosshairs routine. .alias PalDataIndex $C1 .alias ScreenFlashPalIndex $C2 ;Index to palette data to flash screen during intro. .alias IntroStarOffset $C3 ;Contains offset into IntroStarPntr table for twinkle effect. .alias FadeDataIndex $C4 ;Index to palette data to fade items in and out during intro. .alias SpareMemC5 $C5 ;Written to in title routine, but never accessed. .alias CrossDataIndex $C6 ;#$00 thru #$04. Index to find cross sprite data. .alias DrawCross $C7 ;#$01=Draw cross on screen during crosshairs routine. .alias SpriteLoadPending $C8 ;Set to #$00 after sprite RAM load complete. .alias SpareMemC9 $C9 :Written to in title routine, but never accessed. .alias SpareMemCB $CB ;Written to in title routine, but never accessed. .alias SpareMemCC $CC ;Written to in title routine, but never accessed. .alias SpareMemCD $CD ;Written to in title routine, but never accessed. .alias SpareMemCE $CE ;Written to in title routine, but never accessed. .alias SpareMemCF $CF ;Written to in title routine, but never accessed. .alias SpareMemD0 $D0 ;Written to in title routine, but never accessed. .alias SpareMemD1 $D1 ;Written to in title routine, but never accessed. .alias SpareMemD2 $D2 ;Written to in title routine, but never accessed. .alias SpareMemD3 $D3 ;Written to in title routine, but never accessed. .alias SpareMemD7 $D7 ;Written to in title routine, but never accessed. .alias IntroMusicRestart $D8 ;After all title routines run twice, restarts intro music. .alias ABStatus $F0 ;Stores A and B button status in AreaInit. Never used. ; $F7 .alias MirrorCntrl $FA ;If bit 3 is set, PPU set to horizontal mirroring--> ;else if bit 3 is clear, PPU is set to vertical--> ;mirroring. No other bits seem to matter. .alias ScrollY $FC ;Y value loaded into scroll register. .alias ScrollX $FD ;X value loaded into scroll register. .alias PPUCNT1ZP $FE ;Data byte to be loaded into PPU control register 1. .alias PPUCNT0ZP $FF ;Data byte to be loaded into PPU control register 0. .alias HealthLo $0106 ;Lower health digit in upper 4 bits. .alias HealthHi $0107 ;Upper health digit in lower 4 bits--> ;# of full tanks in upper 4 bits. .alias MiniBossKillDelay $0108 ;Initiate power up music and delay after Kraid/Ridley killed. .alias PowerUpDelay $0109 ;Initiate power up music and delay after item pickup. .alias EndTimerLo $010A ;Lower byte of end game escape timer. .alias EndTimerHi $010B ;Upper byte of end game escape timer. .alias MissileToggle $010E ;0=fire bullets, 1=fire missiles. ;-----------------------------------------[ Sprite RAM ]--------------------------------------------- .alias Sprite00RAM $0200 ;$0200 thru $02FF .alias Sprite01RAM $0204 ; .alias Sprite02RAM $0208 ; .alias Sprite03RAM $020C ; .alias Sprite04RAM $0210 ; .alias Sprite05RAM $0214 ; .alias Sprite06RAM $0218 ; .alias Sprite07RAM $021C ; .alias Sprite08RAM $0220 ; .alias Sprite09RAM $0224 ; .alias Sprite0ARAM $0228 ; .alias Sprite0BRAM $022C ; .alias Sprite0CRAM $0230 ; .alias Sprite0DRAM $0234 ; .alias Sprite0ERAM $0238 ; .alias Sprite0FRAM $023C ; .alias Sprite10RAM $0240 ; .alias Sprite11RAM $0244 ; .alias Sprite12RAM $0248 ; .alias Sprite13RAM $024C ; .alias Sprite14RAM $0250 ; .alias Sprite15RAM $0254 ; .alias Sprite16RAM $0258 ; .alias Sprite17RAM $025C ; .alias Sprite18RAM $0260 ; .alias Sprite19RAM $0264 ; .alias Sprite1ARAM $0268 ;These 256 bytes of memory are loaded into sprite .alias Sprite1BRAM $026C ;RAM using the DMA sprite register $4014. .alias Sprite1CRAM $0270 ; .alias Sprite1DRAM $0274 ; .alias Sprite1ERAM $0278 ; .alias Sprite1FRAM $027C ; .alias Sprite20RAM $0280 ; .alias Sprite21RAM $0284 ; .alias Sprite22RAM $0288 ; .alias Sprite23RAM $028C ; .alias Sprite24RAM $0290 ; .alias Sprite25RAM $0294 ; .alias Sprite26RAM $0298 ; .alias Sprite27RAM $029C ; .alias Sprite28RAM $02A0 ; .alias Sprite29RAM $02A4 ; .alias Sprite2ARAM $02A8 ; .alias Sprite2BRAM $02AC ; .alias Sprite2CRAM $02B0 ; .alias Sprite2DRAM $02B4 ; .alias Sprite2ERAM $02B8 ; .alias Sprite2FRAM $02BC ; .alias Sprite30RAM $02C0 ; .alias Sprite31RAM $02C4 ; .alias Sprite32RAM $02C8 ; .alias Sprite33RAM $02CC ; .alias Sprite34RAM $02D0 ; .alias Sprite35RAM $02D4 ; .alias Sprite36RAM $02D8 ; .alias Sprite37RAM $02DC ; .alias Sprite38RAM $02E0 ; .alias Sprite39RAM $02E4 ; .alias Sprite3ARAM $02E8 ; .alias Sprite3BRAM $02EC ; .alias Sprite3CRAM $02F0 ; .alias Sprite3DRAM $02F4 ; .alias Sprite3ERAM $02F8 ; .alias Sprite3FRAM $02FC ; ;-----------------------------------------[ Object RAM ]--------------------------------------------- ;Samus RAM. .alias ObjAction $0300 ;Status of object. 0=object slot not in use. .alias ObjRadY $0301 ;Distance in pixels from object center to top or bottom. .alias ObjRadX $0302 ;Distance in pixels from object center to left or right side. .alias AnimFrame $0303 ;*2 = Index into FramePtrTable for current animation. .alias AnimDelay $0304 ;Number of frames to delay between animation frames. .alias AnimResetIndex $0305 ;Restart index-1 when AnimIndex finished with last frame. .alias AnimIndex $0306 ;Current index into ObjectAnimIndexTbl. .alias SamusOnElevator $0307 ;0=Samus not on elevator, 1=Samus on elevator. .alias ObjVertSpeed $0308 ;MSB set=moving up(#$FA max), MSB clear=moving down(#$05 max). .alias ObjHorzSpeed $0309 ;MSB set=moving lft(#$FE max), MSB clear=moving rt(#$01 max). .alias SamusHit $030A ;Samus hit by enemy. .alias ObjectOnScreen $030B ;1=Object on screen, 0=Object beyond screen boundaries. .alias ObjectHi $030C ;0=Object on nametable 0, 1=Object on nametable 3. .alias ObjectY $030D ;Object y position in room(not actual screen position). .alias ObjectX $030E ;Object x position in room(not actual screen position). .alias SamusJumpDsplcmnt $030F ;Number of pixels vertically displaced from jump point. .alias VertCntrNonLinear $0310 ;Verticle movement counter. Exponential change in speed. .alias HorzCntrNonLinear $0311 ;Horizontal movement counter. Exponential change in speed. .alias VertCntrLinear $0312 ;Verticle movement counter. Linear change in speed. .alias HorzCntrLinear $0313 ;Horizontal movement counter. Linear change in speed. .alias SamusGravity $0314 ;Value used in calculating vertical acceleration on Samus. .alias SamusHorzAccel $0315 ;Value used in calculating horizontal acceleration on Samus. .alias SamusHorzSpeedMax $0316 ;Used to calc maximum horizontal speed Samus can reach. ;Elevator RAM. .alias ElevatorStatus $0320 ;#$01=Elevator present, #$00=Elevator not present. ;Power-up item RAM. .alias PowerUpAnimFrame $0343 ;*2 = Index into FramePtrTable for current animation. .alias PowerUpHi $034C ;Name table power up item is located on. .alias PowerUpY $034D ;Room Y coord of power up item. .alias PowerUpX $034E ;Room x coord of power up item. ;-------------------------------------[ Title routine specific ]------------------------------------- .alias PasswordCursor $0320 ;Password write position (#$00 - #$17). .alias InputRow $0321 ;Password character select row (#$00 - #$04). .alias InputColumn $0322 ;Password character select column (#$00 - #$0C). .alias PasswordStat00 $0324 ;Does not appear to have a function. .alias StartContinue $0325 ;0=START selected, 1=CONTINUE selected. ;------------------------------------------[ Enemy RAM ]--------------------------------------------- .alias EnYRoomPos $0400 ;Enemy y position in room.(not actual screen position). .alias EnXRoomPos $0401 ;Enemy x position in room.(not actual screen position). ; $0402 ; $0403 ; $0404 ; $0405 .alias EnCounter $0406 ;Counts such things as explosion time. ; $0407 ; $0408 .alias EnDelay $0409 ;Delay counter between enemy actions. ; $040A .alias EnHitPoints $040B ;Current hit points of enemy. ; $040C ; $040D ; $040E .alias EnSpecialAttribs $040F ;Bit 7 set=tough version of enemy, bit 6 set=mini boss. ;---------------------------------------------------------------------------------------------------- ;Tile respawning .alias TileRoutine $0500 .alias TileAnimFrame $0503 .alias TileAnimDelay $0504 .alias TileAnimIndex $0506 .alias TileDelay $0507 .alias TileWRAMLo $0508 .alias TileWRAMHi $0509 .alias TileType $050A ;---------------------------------[ Sound engine memory addresses ]---------------------------------- .alias Cntrl0Data $EA ;Temp storage for data of first address sound channel .alias VolumeCntrlAddress $EB ;Desired address number in VolumeCntrlAdressTbl .alias MusicSQ1PeriodLow $0600 ;Loaded into SQ1Cntrl2 when playing music .alias MusicSQ1PeriodHigh $0601 ;Loaded into SQ1Cntrl3 when playing music .alias SFXPaused $0602 ;0=Game not paused, 1=Game paused .alias PauseSFXStatus $0603 ;Plays PauseMusic SFX if less than #$12 .alias MusicSQ2PeriodLow $0604 ;Loaded into SQ2Cntrl2 when playing music .alias MusicSQ2PeriodHigh $0605 ;Loaded into SQ2Cntrl3 when playing music .alias WriteMultiChannelData $0607 ;1=data needs to be written, 0=no data to write .alias MusicTriPeriodLow $0608 ;Loaded into TriangleCntrl2 when playing music .alias MisicTriPeriodHigh $0609 ;Loaded into TriangleCntrl3 when playing music .alias TrianglePeriodLow $0610 ;Stores triangle SFX period low for processing .alias TrianglePeriodHigh $0611 ;Stroes triangle SFX period high for processing .alias TriangleChangeLow $0612 ;Stores triangle SFX change in period low .alias TriangleChangeHigh $0613 ;Stores triangle SFX change in period high .alias TriangleLowPercentage $0614 ;Stores percent to change period low by each frame .alias TriangleHighPercentage $0615 ;Stores percent to change period high by each frame .alias PercentDifference $0616 ;if=5, percent=1/5(20%), if=0A, percent=1/10(10%), etc .alias DivideData $0617 ;Used in DivideTrianglePeriods .alias HasBeamSFX $061F ;Bit 7 set=has long beam, bit 0 set=has ice beam ;The following addresses are loaded into $0640 thru $0643 when those ;addresses decrement to zero. These addresses do not decrement. .alias SQ1FrameCountInit $0620 ;Holds number of frames to play sq1 channel data .alias SQ2FrameCountInit $0621 ;Holds number of frames to play sq2 channel data .alias TriangleFrameCountInit $0622 ;Holds number of frames to play triangle channel data .alias NoiseFrameCountInit $0623 ;Holds number of frames to play noise channel data .alias SQ1RepeatCounter $0624 ;Number of times to repeat SQ1 music loop .alias SQ2RepeatCounter $0625 ;Number of times to repeat SQ2 music loop .alias TriangleRepeatCounter $0626 ;Number of times to repeat Triangle music loop .alias NoiseRepeatCounter $0627 ;Number of times to repeat Noise music loop .alias SQ1DutyEnvelope $0628 ;Loaded into SQ1Cntrl0 when playing music .alias SQ2DutyEnvelope $0629 ;Loaded into SQ2Cntrl0 when playing music .alias TriLinearCount $062A ;disable\enable counter, linear count length .alias NoteLengthTblOffset $062B ;Stores the offset to find proper note length table .alias MusicRepeat $062C ;0=Music does not repeat, Nonzero=music repeats .alias TriangleCounterCntrl $062D ;$F0=disable length cntr, $00=long note, $0F=short note .alias SQ1VolumeCntrl $062E ;Entry number in VolumeCntrlAdressTbl for SQ1 .alias SQ2VolumeCntrl $062F ;Entry number in VolumeCntrlAdressTbl for SQ2 .alias SQ1LowBaseByte $0630 ;low byte of base address for SQ1 music data .alias SQ1HighBaseByte $0631 ;High byte of base address for SQ1 music data .alias SQ2LowBaseByte $0632 ;low byte of base address for SQ2 music data .alias SQ2HighBaseByte $0633 ;High byte of base address for SQ2 music data .alias TriangleLowBaseByte $0634 ;low byte of base address for Triangle music data .alias TriangleHighBaseByte $0635 ;High byte of base address for Triangle music data .alias NoiseLowBaseByte $0636 ;low byte of base address for Noise music data .alias NoiseHighBaseByte $0637 ;High byte of base address for Noise music data .alias SQ1MusicIndexIndex $0638 ;Index to find sQ1 sound data index. Base=$630,$631 .alias SQ2MusicIndexIndex $0639 ;Index to find SQ2 sound data index. Base=$632,$633 .alias TriangleMusicIndexIndex $063A ;Index to find Tri sound data index. Base=$634,$635 .alias NoiseMusicIndexIndex $063B ;Index to find Noise sound data index. Base=$636,$637 .alias SQ1LoopIndex $063C ;SQ1 Loop start index .alias SQ2LoopIndex $063D ;SQ2 loop start index .alias TriangleLoopIndex $063E ;Triangle loop start index .alias NoiseLoopIndex $063F ;Noise loop start index .alias SQ1MusicFrameCount $0640 ;Decrements every sq1 frame. When 0, load new data .alias SQ2MusicFrameCount $0641 ;Decrements every sq2 frame. when 0, load new data .alias TriangleMusicFrameCount $0642 ;Decrements every triangle frame. When 0, load new data .alias NoiseMusicFrameCount $0643 ;Decrements every noise frame. When 0, load new data .alias MusicSQ1Sweep $0648 ;Value is loaded into SQ1Cntrl1 when playing music .alias MusicSQ2Sweep $0649 ;Value is loaded into SQ2Cntrl1 when playing music .alias TriangleSweep $064A ;Loaded into TriangleCntrl1(not used) .alias ThisSoundChannel $064B ;Least sig. byte of current channel(00,04,08 or 0C) .alias CurrentSFXFlags $064D ;Stores flags of SFX currently being processed. .alias NoiseInUse $0652 ;Noise in use? (Not used) .alias SQ1InUse $0653 ;1=SQ1 channel being used by SFX, 0=not in use .alias SQ2InUse $0654 ;2=SQ2 channel being used by SFX, 0=not in use .alias TriangleInUse $0655 ;3=Triangle channel being used by SFX, 0=not in use .alias ChannelType $065C ;Stores channel type being processed(0,1,2,3 or 4) .alias CurrentMusicRepeat $065D ;Stores flags of music to repeat .alias MusicInitIndex $065E ;index for loading $62B thru $637(base=$BD31). .alias NoiseSFXLength $0660 ;Stores number of frames to play Noise SFX .alias SQ1SFXLength $0661 ;Stores number of frames to play SQ1 SFX .alias SQ2SFXLngth $0662 ;Stores number of frames to play SQ2 SFX .alias TriangleSFXLength $0663 ;Stores number of frames to play Triangle SFX .alias MultiSFXLength $0664 ;Stores number of frames to play Multi SFX .alias ThisNoiseFrame $0665 ;Stores current frame number for noise SFX .alias ThisSQ1Frame $0666 ;Stores current frame number for sq1 SFX .alias ThisSQ2Frame $0667 ;Stores current frame number for SQ2 SFX .alias ThisTriangleFrame $0668 ;Stores current frame number for triangle SFX .alias ThisMultiFrame $0669 ;Stores current frame number for Multi SFX .alias SQ1VolumeIndex $066A ;Stores index to SQ1 volume data in a volume data tbl .alias SQ2VolumeIndex $066B ;Stores index to SQ2 volume data in a volume data tbl .alias SQ1VolumeData $066C ;stores duty cycle and this frame volume data of SQ1 .alias SQ2VolumeData $066D ;Stores duty cycle and this frame volume data of SQ2 .alias NoiseSFXData $0670 ;Stores additional info for Noise SFX .alias SQ1SFXData $0671 ;Stores additional info for SQ1 SFX .alias SQ2SFXData $0672 ;Stores additional info for SQ2 SFX .alias TriangleSFXData $0673 ;Stores additional info for triangle SFX .alias MultiSFXData $0674 ;Stores additional info for Multi SFX .alias SQ1SQ2SFXData $0675 ;Stores additional info for SQ1 and SQ2 SFX .alias ScrewAttackSFXData $0678 ;Contains extra data for screw attack SFX .alias SQ1SFXPeriodLow $0679 ;Period low data for processing multi SFX routines .alias NoiseSFXFlag $0680 ;Initialization flags for noise SFX .alias SQ1SFXFlag $0681 ;Initialization flags for SQ1 SFX .alias SQ2SFXFlag $0682 ;Initialization flags for SQ2 SFX(never used) .alias TriangleSFXFlag $0683 ;Initialization flags for triangle SFX .alias MultiSFXFlag $0684 ;Initialization Flags for SFX and some music .alias MusicInitFlag $0685 ;Music init flags .alias NoiseContSFX $0688 ;Continuation flags for noise SFX .alias SQ1ContSFX $0689 ;Continuation flags for SQ1 SFX .alias SQ2ContSFX $068A ;Continuation flags for SQ2 SFX (never used) .alias TriangleContSFX $068B ;Continuation flags for Triangle SFX .alias MultiContSFX $068C ;Continuation flags for Multi SFX .alias CurrentMusic $068D ;Stores the flag of the current music being played ;---------------------------------------------------------------------------------------------------- .alias PowerUpType $0748 ;Holds the byte describing what power-up is on name table. .alias PowerUpYCoord $0749 ;Y coordinate of the power-up. .alias PowerUpXCoord $074A ;X coordiante of the power-up .alias PowerUpNameTable $074B ;#$00 if on name table 0, #$01 if on name table 3. .alias PowerUpAnimIndex $074F ;Entry into FramePtrTable for item animation. .alias PowerUpBType $0750 ;Holds the description byte of a second power-up(if any). .alias PowerUpBYCoord $0751 ;Y coordinate of second power-up. .alias PowerUpBXCoord $0752 ;X coordiante of second power-up. .alias PowerUpBNameTable $0753 ;#$00 if on name table 0, #$01 if on name table 3. .alias PowerUpBAnimIndex $0757 ;Entry into FramePtrTable for item animation. .alias TileSize $0780 ;4 MSBs=Y size of tile to erase.4 LSBs=X size of tile to erase. .alias TileInfo0 $0781 ; .alias TileInfo1 $0782 ; .alias TileInfo2 $0783 ;Tile patterns to replace blasted tiles. .alias TileInfo3 $0784 ; .alias TileInfo4 $0785 ; .alias TileInfo5 $0786 ; .alias PPUStrIndex $07A0 ;# of bytes of data in PPUDataString. #$4F bytes max. ;$07A1 thru $07F0 contain a byte string of data to be written the the PPU. The first ;byte in the string is the upper address byte of the starting point in the PPU to write ;the data. The second bye is the lower address byte. The third byte is a configuration ;byte. if the MSB of this byte is set, the PPU is incremented by 32 after each byte write ;(vertical write). It the MSB is cleared, the PPU is incremented by 1 after each write ;(horizontal write). If bit 6 is set, the next data byte is repeated multiple times during ;successive PPU writes. The number of times the next byte is repeated is based on bits ;0-5 of the configuration byte. Those bytes are a repitition counter. Any following bytes ;are the actual data bytes to be written to the PPU. #$00 separates the data chunks. .alias PPUDataString $07A1 ;Thru $07F0. String of data bytes to be written to PPU. ;-------------------------------------[ Hardware defines ]------------------------------------------- .alias PPUControl0 $2000 ; .alias PPUControl1 $2001 ; .alias PPUStatus $2002 ; .alias SPRAddress $2003 ;PPU hardware control registers. .alias SPRIOReg $2004 ; .alias PPUScroll $2005 ; .alias PPUAddress $2006 ; .alias PPUIOReg $2007 ; .alias SQ1Cntrl0 $4000 ; .alias SQ1Cntrl1 $4001 ;SQ1 hardware control registers. .alias SQ1Cntrl2 $4002 ; .alias SQ1Cntrl3 $4003 ; .alias SQ2Cntrl0 $4004 ; .alias SQ2Cntrl1 $4005 ;SQ2 hardware control registers. .alias SQ2Cntrl2 $4006 ; .alias SQ2Cntrl3 $4007 ; .alias TriangleCntrl0 $4008 ; .alias TriangleCntrl1 $4009 ;Triangle hardware control registers. .alias TriangleCntrl2 $400A ; .alias TriangleCntrl3 $400B ; .alias NoiseCntrl0 $400C ; .alias NoiseCntrl1 $400D ;Noise hardware control registers. .alias NoiseCntrl2 $400E ; .alias NoiseCntrl3 $400F ; .alias DMCCntrl0 $4010 ; .alias DMCCntrl1 $4011 ;DMC hardware control registers. .alias DMCCntrl2 $4012 ; .alias DMCCntrl3 $4013 ; .alias SPRDMAReg $4014 ;Sprite RAM DMA register. .alias APUCommonCntrl0 $4015 ;APU common control 1 register. .alias CPUJoyPad1 $4016 ;Joypad1 register. .alias APUCommonCntrl1 $4017 ;Joypad2/APU common control 2 register. ;---------------------------------------------------------------------------------------------------- .alias RoomRAMA $6000 ;Thru $63FF. Used to load room before it is put into the PPU. .alias RoomRAMB $6400 ;Thru $67FF. Used to load room before it is put into the PPU. .alias EndingType $6872 ;1=worst ending, 5=best ending .alias SamusDataIndex $6875 ;Index for Samus saved game stats(not used). #$00, #$10, #$20. .alias SamusStat00 $6876 ;Unused memory address for storing Samus info. .alias TankCount $6877 ;Number of energy tanks. .alias SamusGear $6878 ;Stores power-up items Samus has. .alias MissileCount $6879 ;Stores current number of missiles. .alias MaxMissiles $687A ;Maximum amount of missiles Samus can carry .alias KraidStatueStatus $687B ;bit 0 set, the statues blink, --> .alias RidleyStatueStatus $687C ;bit 7 set, statues are up. .alias SamusAge $687D ;Low byte of Samus' age. ; SamusAge+1 $687E ;Mid byte of Samus' age. ; SamusAge+2 $687F ;High byte of Samus' age. .alias SamusStat01 $6880 ;Unused memory address for storing Samus info. .alias SamusStat02 $6881 ;SamusStat02 and 03 keep track of how many times Samus has--> .alias SamusStat03 $6882 ;died, but this info is never accessed anywhere in the game. .alias AtEnding $6883 ;1=End scenes playing, 0=Not at ending. .alias EraseGame $6884 ;MSB set=erase selected saved game(not used in password carts). .alias DataSlot $6885 ;#$00 thru #$02. Stored Samus data to load. Apparently a save--> ;game system was going to be used instead of a password routine.--> ;The code that uses this memory address is never accessed in--> ;the actual game. It looks like three player slots were going--> ;to be used to store game data(like Zelda). .alias NumberOfUniqueItems $6886 ;Counts number of power-ups and red doors--> ;opened. Does not count different beams--> ;picked up (ice, long, wave). increments by 2. .alias UniqueItemHistory $6887 ;Thru $68FC. History of Unique items collected.--> .alias EndItemHistory $68FC ;Two bytes per item. .alias KraidRidleyPresent $6987 ;#$01=Kraid/Ridley present, #$00=Kraid/Ridley not present. .alias PasswordByte00 $6988 ;Stores status of items 0 thru 7. .alias PasswordByte01 $6989 ;Stores status of items 8 thru 15. .alias PasswordByte02 $698A ;Stores status of items 16 thru 23. .alias PasswordByte03 $698B ;Stores status of items 24 thru 31. .alias PasswordByte04 $698C ;Stores status of items 32 thru 39. .alias PasswordByte05 $698D ;Stores status of items 40 thru 47. .alias PasswordByte06 $698E ;Stores status of items 48 thru 55. .alias PasswordByte07 $698F ;Stores status of items 56 thru 58(bits 0 thru 2). .alias PasswordByte08 $6990 ;start location(bits 0 thru 5), Samus suit status (bit 7). .alias PasswordByte09 $6991 ;Stores SamusGear. .alias PasswordByte0A $6992 ;Stores MissileCount. .alias PasswordByte0B $6993 ;Stores SamusAge. .alias PasswordByte0C $6994 ;Stores SamusAge+1. .alias PasswordByte0D $6995 ;Stores SamusAge+2. .alias PasswordByte0E $6996 ;Stores no data. .alias PasswordByte0F $6997 ;Stores Statue statuses(bits 4 thu 7). .alias PasswordByte10 $6998 ;Stores value RandomNumber1. .alias PasswordByte11 $6999 ;Stores sum of $6988 thru $6998(Checksum). ;Upper two bits of PasswordChar bytes will always be 00. .alias PasswordChar00 $699A ; .alias PasswordChar01 $699B ; .alias PasswordChar02 $699C ; .alias PasswordChar03 $699D ; .alias PasswordChar04 $699E ; .alias PasswordChar05 $699F ; .alias PasswordChar06 $69A0 ; .alias PasswordChar07 $69A1 ; .alias PasswordChar08 $69A2 ; .alias PasswordChar09 $69A3 ; .alias PasswordChar0A $69A4 ;These 18 memory addresses store the 18 characters--> .alias PasswordChar0B $69A5 ;of the password to be displayed on the screen. .alias PasswordChar0C $69A6 ; .alias PasswordChar0D $69A7 ; .alias PasswordChar0E $69A8 ; .alias PasswordChar0F $69A9 ; .alias PasswordChar10 $69AA ; .alias PasswordChar11 $69AB ; .alias PasswordChar12 $69AC ; .alias PasswordChar13 $69AD ; .alias PasswordChar14 $69AE ; .alias PasswordChar15 $69AF ; .alias PasswordChar16 $69B0 ; .alias PasswordChar17 $69B1 ; .alias NARPASSWORD $69B2 ;0 = invinsible Samus not active, 1 = invinsible Samus active. .alias JustInBailey $69B3 ;0 = Samus has suit, 1 = Samus is without suit. .alias ItmeHistory $69B4 ;Thru $6A73. Unique item history saved game data (not used). ;---------------------------------------[ More enemy RAM ]------------------------------------------- .alias Enstatus $6AF4 ;Keeps track of enemy statuses. #$00=Enemy slot not in use,--> ;#$04=Enemy frozen. .alias EnRadY $6AF5 ;Distance in pixels from middle of enemy to top or botom. .alias EnRadX $6AF6 ;Distance in pixels from middle of enemy to left or right. .alias EnAnimFrame $6AF7 ;Index into enemy animation frame data. .alias EnAnimDelay $6AF8 ;Number of frames to delay between animation frames. .alias EnResetAnimIndex $6AF9 ;Index to beginning of animation sequence. .alias EnAnimIndex $6AFA ;Index to current animation. .alias EnNameTable $6AFB ;#$00=Enemy on name table 0, #$01=Enemy on name table 3. ; $6AFC ; $6AFD ; $6AFE ; $6AFF ; $6B00 ; $6B01 .alias EnDataIndex $6B02 ;Contains index into enemy data tables. ; $6B03 ;-------------------------------------[ Intro sprite defines ]--------------------------------------- .alias IntroStarSprite00 $6E00 ;thru $6E9F .alias IntroStarSprite01 $6E04 ; .alias IntroStarSprite02 $6E08 ; .alias IntroStarSprite03 $6E0C ; .alias IntroStarSprite04 $6E10 ; .alias IntroStarSprite05 $6E14 ; .alias IntroStarSprite06 $6E18 ; .alias IntroStarSprite07 $6E1C ; .alias IntroStarSprite08 $6E20 ; .alias IntroStarSprite09 $6E24 ; .alias IntroStarSprite0A $6E28 ; .alias IntroStarSprite0B $6E2C ; .alias IntroStarSprite0C $6E30 ; .alias IntroStarSprite0D $6E34 ; .alias IntroStarSprite0E $6E38 ; .alias IntroStarSprite0F $6E3C ; .alias IntroStarSprite10 $6E40 ; .alias IntroStarSprite11 $6E44 ; .alias IntroStarSprite12 $6E48 ; .alias IntroStarSprite13 $6E4C ; .alias IntroStarSprite14 $6E50 ;RAM used for storing intro star sprite data. .alias IntroStarSprite15 $6E54 ; .alias IntroStarSprite16 $6E58 ; .alias IntroStarSprite17 $6E5C ; .alias IntroStarSprite18 $6E60 ; .alias IntroStarSprite19 $6E64 ; .alias IntroStarSprite1A $6E68 ; .alias IntroStarSprite1B $6E6C ; .alias IntroStarSprite1C $6E70 ; .alias IntroStarSprite1D $6E74 ; .alias IntroStarSprite1E $6E78 ; .alias IntroStarSprite1F $6E7C ; .alias IntroStarSprite20 $6E80 ; .alias IntroStarSprite21 $6E84 ; .alias IntroStarSprite22 $6E88 ; .alias IntroStarSprite23 $6E8C ; .alias IntroStarSprite24 $6E90 ; .alias IntroStarSprite25 $6E94 ; .alias IntroStarSprite26 $6E98 ; .alias IntroStarSprite27 $6E9C ; ;Intro sprite 0 and sparkle sprite. .alias IntroSpr0YCoord $6EA0 ;Loaded into byte 0 of sprite RAM(Y position). .alias IntroSpr0PattTbl $6EA1 ;Loaded into byte 1 of sprite RAM(Pattern table index). .alias IntroSpr0Cntrl $6EA2 ;Loaded into byte 2 of sprite RAM(Control byte). .alias IntroSpr0XCoord $6EA3 ;Loaded into byte 3 of sprite RAM(X position). .alias IntroSpr0Index $6EA4 ;Index to next sparkle sprite data byte. .alias IntroSpr0NextCntr $6EA5 ;Decrements each frame. When 0, load new sparkle sprite data. .alias SparkleSpr0YChange $6EA6 ;Sparkle sprite y coordinate change. .alias IntroSpr0XChange $6EA6 ;Intro sprite x total movement distance. .alias SparkleSpr0XChange $6EA7 ;Sparkle sprite x coordinate change. .alias IntroSpr0YChange $6EA7 ;Intro sprite y total movement distance. .alias IntroSpr0ChngCntr $6EA8 ;decrements each frame from #$20. At 0, change sparkle sprite. .alias IntroSpr0ByteType $6EA9 ;#$00 or #$01. When #$01, next sparkle data byte uses all 8--> ;bits for x coord change. if #$00, next data byte contains--> ;4 bits for x coord change and 4 bits for y coord change. .alias IntroSpr0Complete $6EAA ;#$01=sprite has completed its task, #$00 if not complete. .alias IntroSpr0SpareB $6EAB ;Not used. .alias IntroSpr0XRun $6EAC ;x displacement of sprite movement(run). .alias IntroSpr0YRise $6EAD ;y displacement of sprite movement(rise). .alias IntroSpr0XDir $6EAE ;MSB set=decrease sprite x pos, else increase sprite x pos. .alias IntroSpr0YDir $6EAF ;MSB set=decrease sprite y pos, else increase sprite y pos. ;Intro sprite 1 and sparkle sprite. .alias IntroSpr1YCoord $6EB0 ;Loaded into byte 0 of sprite RAM(Y position). .alias IntroSpr1PattTbl $6EB1 ;Loaded into byte 1 of sprite RAM(Pattern table index). .alias IntroSpr1Cntrl $6EB2 ;Loaded into byte 2 of sprite RAM(Control byte). .alias IntroSpr1XCoord $6EB3 ;Loaded into byte 3 of sprite RAM(X position). .alias IntroSpr1Index $6EB4 ;Index to next sparkle sprite data byte. .alias IntroSpr1NextCntr $6EB5 ;Decrements each frame. When 0, load new sparkle sprite data. .alias SparkleSpr1YChange $6EB6 ;Sparkle sprite y coordinate change. .alias IntroSpr1XChange $6EB6 ;Intro sprite x total movement distance. .alias SparkleSpr1XChange $6EB7 ;Sparkle sprite x coordinate change. .alias IntroSpr1YChange $6EB7 ;Intro sprite y total movement distance. .alias IntroSpr1ChngCntr $6EB8 ;decrements each frame from #$20. At 0, change sparkle sprite. .alias IntroSpr1ByteType $6EB9 ;#$00 or #$01. When #$01, next sparkle data byte uses all 8--> ;bits for x coord change. if #$00, next data byte contains--> ;4 bits for x coord change and 4 bits for y coord change. .alias IntroSpr1Complete $6EBA ;#$01=sprite has completed its task, #$00 if not complete. .alias IntroSpr1SpareB $6EBB ;Not used. .alias IntroSpr1XRun $6EBC ;x displacement of sprite movement(run). .alias IntroSpr1YRise $6EBD ;y displacement of sprite movement(rise). .alias IntroSpr1XDir $6EBE ;MSB set=decrease sprite x pos, else increase sprite x pos. .alias IntroSpr1YDir $6EBF ;MSB set=decrease sprite y pos, else increase sprite y pos. ;Intro sprite 2. .alias IntroSpr2YCoord $6EC0 ;Loaded into byte 0 of sprite RAM(Y position). .alias IntroSpr2PattTbl $6EC1 ;Loaded into byte 1 of sprite RAM(Pattern table index). .alias IntroSpr2Cntrl $6EC2 ;Loaded into byte 2 of sprite RAM(Control byte). .alias IntroSpr2XCoord $6EC3 ;Loaded into byte 3 of sprite RAM(X position). .alias IntroSpr2Spare5 $6EC4 ;Not used. .alias IntroSpr2Spare6 $6EC5 ;Not used. .alias IntroSpr2XChange $6EC6 ;Intro sprite x total movement distance. .alias IntroSpr2YChange $6EC7 ;Intro sprite y total movement distance. .alias IntroSpr2Spare8 $6EC8 ;Not used. .alias IntroSpr2Spare9 $6EC9 ;Not used. .alias IntroSpr2Complete $6ECA ;#$01=sprite has completed its task, #$00 if not complete. .alias IntroSpr2SpareB $6ECB ;Not used. .alias IntroSpr2XRun $6ECC ;x displacement of sprite movement(run). .alias IntroSpr2YRise $6ECD ;y displacement of sprite movement(rise). .alias IntroSpr2XDir $6ECE ;MSB set=decrease sprite x pos, else increase sprite x pos. .alias IntroSpr2YDir $6ECF ;MSB set=decrease sprite y pos, else increase sprite y pos. ;Intro sprite 3. .alias IntroSpr3YCoord $6ED0 ;Loaded into byte 0 of sprite RAM(Y position). .alias IntroSpr3PattTbl $6ED1 ;Loaded into byte 1 of sprite RAM(Pattern table index). .alias IntroSpr3Cntrl $6ED2 ;Loaded into byte 2 of sprite RAM(Control byte). .alias IntroSpr3XCoord $6ED3 ;Loaded into byte 3 of sprite RAM(X position). .alias IntroSpr3Spare5 $6ED4 ;Not used. .alias IntroSpr3Spare6 $6ED5 ;Not used. .alias IntroSpr3XChange $6ED6 ;Intro sprite x total movement distance. .alias IntroSpr3YChange $6ED7 ;Intro sprite y total movement distance. .alias IntroSpr3Spare8 $6ED8 ;Not used. .alias IntroSpr3Spare9 $6ED9 ;Not used. .alias IntroSpr3Complete $6EDA ;#$01=sprite has completed its task, #$00 if not complete. .alias IntroSpr3SpareB $6EDB ;Not used. .alias IntroSpr3XRun $6EDC ;x displacement of sprite movement(run). .alias IntroSpr3YRise $6EDD ;y displacement of sprite movement(rise). .alias IntroSpr3XDir $6EDE ;MSB set=decrease sprite x pos, else increase sprite x pos. .alias IntroSpr3YDir $6EDF ;MSB set=decrease sprite y pos, else increase sprite y pos. ;Intro sprite 4. .alias IntroSpr4YCoord $6EE0 ;Loaded into byte 0 of sprite RAM(Y position). .alias IntroSpr4PattTbl $6EE1 ;Loaded into byte 1 of sprite RAM(Pattern table index). .alias IntroSpr4Cntrl $6EE2 ;Loaded into byte 2 of sprite RAM(Control byte). .alias IntroSpr4XCoord $6EE3 ;Loaded into byte 3 of sprite RAM(X position). .alias IntroSpr4Spare5 $6EE4 ;Not used. .alias IntroSpr4Spare6 $6EE5 ;Not used. .alias IntroSpr4XChange $6EE6 ;Intro sprite x total movement distance. .alias IntroSpr4YChange $6EE7 ;Intro sprite y total movement distance. .alias IntroSpr4Spare8 $6EE8 ;Not used. .alias IntroSpr4Spare9 $6EE9 ;Not used. .alias IntroSpr4Complete $6EEA ;#$01=sprite has completed its task, #$00 if not complete. .alias IntroSpr4SpareB $6EEB ;Not used. .alias IntroSpr4XRun $6EEC ;x displacement of sprite movement(run). .alias IntroSpr4YRise $6EED ;y displacement of sprite movement(rise). .alias IntroSpr4XDir $6EEE ;MSB set=decrease sprite x pos, else increase sprite x pos. .alias IntroSpr4YDir $6EEF ;MSB set=decrease sprite y pos, else increase sprite y pos. ;Intro sprite 5. .alias IntroSpr5YCoord $6EF0 ;Loaded into byte 0 of sprite RAM(Y position). .alias IntroSpr5PattTbl $6EF1 ;Loaded into byte 1 of sprite RAM(Pattern table index). .alias IntroSpr5Cntrl $6EF2 ;Loaded into byte 2 of sprite RAM(Control byte). .alias IntroSpr5XCoord $6EF3 ;Loaded into byte 3 of sprite RAM(X position). .alias IntroSpr5Spare5 $6EF4 ;Not used. .alias IntroSpr5Spare6 $6EF5 ;Not used. .alias IntroSpr5XChange $6EF6 ;Intro sprite x total movement distance. .alias IntroSpr5YChange $6EF7 ;Intro sprite y total movement distance. .alias IntroSpr5Spare8 $6EF8 ;Not used. .alias IntroSpr5Spare9 $6EF9 ;Not used. .alias IntroSpr5Complete $6EFA ;#$01=sprite has completed its task, #$00 if not complete. .alias IntroSpr5SpareB $6EFB ;Not used. .alias IntroSpr5XRun $6EFC ;x displacement of sprite movement(run). .alias IntroSpr5YRise $6EFD ;y displacement of sprite movement(rise). .alias IntroSpr5XDir $6EFE ;MSB set=decrease sprite x pos, else increase sprite x pos. .alias IntroSpr5YDir $6EFF ;MSB set=decrease sprite y pos, else increase sprite y pos. ;Intro sprite 6. .alias IntroSpr6YCoord $6F00 ;Loaded into byte 0 of sprite RAM(Y position). .alias IntroSpr6PattTbl $6F01 ;Loaded into byte 1 of sprite RAM(Pattern table index). .alias IntroSpr6Cntrl $6F02 ;Loaded into byte 2 of sprite RAM(Control byte). .alias IntroSpr6XCoord $6F03 ;Loaded into byte 3 of sprite RAM(X position). .alias IntroSpr6Spare5 $6F04 ;Not used. .alias IntroSpr6Spare6 $6F05 ;Not used. .alias IntroSpr6XChange $6F06 ;Intro sprite x total movement distance. .alias IntroSpr6YChange $6F07 ;Intro sprite y total movement distance. .alias IntroSpr6Spare8 $6F08 ;Not used. .alias IntroSpr6Spare9 $6F09 ;Not used. .alias IntroSpr6Complete $6F0A ;#$01=sprite has completed its task, #$00 if not complete. .alias IntroSpr6SpareB $6F0B ;Not used. .alias IntroSpr6XRun $6F0C ;x displacement of sprite movement(run). .alias IntroSpr6YRise $6F0D ;y displacement of sprite movement(rise). .alias IntroSpr6XDir $6F0E ;MSB set=decrease sprite x pos, else increase sprite x pos. .alias IntroSpr6YDir $6F0F ;MSB set=decrease sprite y pos, else increase sprite y pos. ;Intro sprite 7. .alias IntroSpr7YCoord $6F10 ;Loaded into byte 0 of sprite RAM(Y position). .alias IntroSpr7PattTbl $6F11 ;Loaded into byte 1 of sprite RAM(Pattern table index). .alias IntroSpr7Cntrl $6F12 ;Loaded into byte 2 of sprite RAM(Control byte). .alias IntroSpr7XCoord $6F13 ;Loaded into byte 3 of sprite RAM(X position). .alias IntroSpr7Spare5 $6F14 ;Not used. .alias IntroSpr7Spare6 $6F15 ;Not used. .alias IntroSpr7XChange $6F16 ;Intro sprite x total movement distance. .alias IntroSpr7YChange $6F17 ;Intro sprite y total movement distance. .alias IntroSpr7Spare8 $6F18 ;Not used. .alias IntroSpr7Spare9 $6F19 ;Not used. .alias IntroSpr7Complete $6F1A ;#$01=sprite has completed its task, #$00 if not complete. .alias IntroSpr7SpareB $6F1B ;Not used. .alias IntroSpr7XRun $6F1C ;x displacement of sprite movement(run). .alias IntroSpr7YRise $6F1D ;y displacement of sprite movement(rise). .alias IntroSpr7XDir $6F1E ;MSB set=decrease sprite x pos, else increase sprite x pos. .alias IntroSpr7YDir $6F1F ;MSB set=decrease sprite y pos, else increase sprite y pos. ;---------------------------------------------------------------------------------------------------- .alias WorldMapRAM $7000 ;Thru $73FF. The map is 1Kb in size (1024 bytes). .alias SamusData $77FE ;Thru $782D. Samus saved game data (not used). .alias MMC1Reg0 $8000 ;Writing to any of these addresses or any--> .alias MMC1Reg1 $A000 ;address in between will write configuration--> .alias MMC1Reg2 $C000 ;bits to the MMC chip. .alias MMC1Reg3 $E000 ; ;------------------------------------------[ Misc. defines ]----------------------------------------- .alias modeTitle 1 ;Bitmask defs used for SamusGear. .alias gr_BOMBS %00000001 .alias gr_HIGHJUMP %00000010 .alias gr_LONGBEAM %00000100 .alias gr_SCREWATTACK %00001000 .alias gr_MARUMARI %00010000 .alias gr_VARIA %00100000 .alias gr_WAVEBEAM %01000000 .alias gr_ICEBEAM %10000000 ;Samus action handlers. .alias sa_Stand 0 .alias sa_Run 1 ;Also run and jump. .alias sa_Jump 2 .alias sa_Roll 3 .alias sa_PntUp 4 .alias sa_Door 5 .alias sa_PntJump 6 .alias sa_Dead 7 .alias sa_Dead2 8 .alias sa_Elevator 9 .alias sa_FadeIn0 20 .alias sa_FadeIn1 21 .alias sa_FadeIn2 22 .alias sa_FadeIn3 23 .alias sa_FadeIn4 24 .alias sa_Begin 255 ;Animations .alias an_SamusRun $00 .alias an_SamusFront $04 .alias an_SamusStand $07 .alias an_SamusJump $0C .alias an_SamusSalto $0E .alias an_SamusRunJump $13 .alias an_SamusRoll $16 .alias an_Bullet $1B .alias an_SamusFireJump $20 .alias an_SamusFireRun $22 .alias an_SamusPntUp $27 .alias an_Explode $32 .alias an_SamusJumpPntUp $35 .alias an_SamusRunPntUp $37 .alias an_WaveBeam $7D .alias an_BombTick $7F .alias an_BombExplode $82 .alias an_MissileLeft $8B .alias an_MissileRight $8D .alias an_MissileExplode $91 ;Weapon action handlers. .alias wa_RegularBeam 1 .alias wa_WaveBeam 2 .alias wa_IceBeam 3 .alias wa_BulletExplode 4 .alias wa_LayBomb 8 .alias wa_BombCount 9 .alias wa_BombExplode 10 .alias wa_Missile 11