.ENUM $00 ;1byte direct page variables for kernel and game mechanics TempBuffer ds 20 CurrentEvent db FrameCounterLo db FrameCounterHi db SetIni db ScreenMode db MainScreen db SubScreen db ScreenBrightness db BGTilesVram12 db BGTilesVram34 db BG1TilemapVram db BG2TilemapVram db BG3TilemapVram db BG4TilemapVram db SpriteTileOffsetVram dw ObjSel db BG1HOfLo db BG1HOfHi db BG1VOfLo db BG1VOfHi db BG2HOfLo db BG2HOfHi db BG2VOfLo db BG2VOfHi db HdmaFlags db HdmaPause db ;if msb is set, don't initiate further hdma transfers. this is useful when the rom hdma is trying to read from isnt present atm. ThreeBytePointerLo db ThreeBytePointerHi db ThreeBytePointerBank db ThreeBytePointerLo2 db ThreeBytePointerHi2 db ThreeBytePointerBank2 db BrightnessSpeed db LastFrameLo db LastFrameHi db CGWsel db CgadsubConfig db FixedColourR db FixedColourG db FixedColourB db InterruptEnableFlags db IrqRoutineNumber db IrqRoutineNumberBuffer db ;backup in case multiple irqs are executed per frame. nmi writes this number back to irq number every frame IrqVCounter dw IrqHCounter dw W12SEL db W34SEL db WOBJSEL db W1L db W1R db W2L db W2R db WBGLOG db WOBJLOG db WMS db WSS db Mosaic db BGTilesVram2 dw Bg3Status db PrintStringThreeBytePointerLo db PrintStringThreeBytePointerHi db PrintStringThreeBytePointerBank db VramBg1Tilemap dw VramBg2Tilemap dw VramBg3Tilemap dw VramBg4Tilemap dw VramBg1Tiles dw VramBg2Tiles dw VramBg3Tiles dw VramBg4Tiles dw SetBGThreeBytePointerLo db SetBGThreeBytePointerHi db SetBGThreeBytePointerBank db NMIOamUploadFlag db NMIPaletteUploadFlag db ;refresh palette during nmi? NMIBg1UploadFlag db ;refresh bg1 tilemap during nmi? NMIBg2UploadFlag db NMIBg3UploadFlag db ;UploadBg3Map db ;if this is not zero, upload tilemap to bg3 CurrentMapNumber db ;number of currently loaded map CurrentMapPointer ds 3 ;24bit pointer to current map file CurrentColMapPointer ds 3 ;24 bit pointer to current collision map BgScrollCounterX db ;ranges from 0-7 inside one tile BgScrollCounterY db BgMapCurrentPositionX db ;current upper left tile on screen BgMapCurrentPositionY db ScreenPixelPositionX dw ;exact pixel position of upper left border for sprite position calculation ScreenPixelPositionY dw ;exact pixel position of upper left border for sprite position calculation BgScrollRowUploadDisplace db ;number of tiles to add/substract when uploading tilerows. this gets added to current position in map depending on the scrolling direction.(scroll right: add 28/scroll left: substract 1) BgScrollTilemapRowUploadDisplaceX db ;number of tiles to add/substract when uploading tilerows. this gets added to current position in map depending on the scrolling direction.(scroll right: add 28/scroll left: substract 1) BgScrollTilemapRowUploadDisplaceY db ;number of tiles to add/substract when uploading tilerows. this gets added to current position in map depending on the scrolling direction.(scroll right: add 28/scroll left: substract 1) BgScrollOffsetPointerTilesX db ;pointer to current vertical column that holds the leftmost tiles onscreen(goes from 0-27) BgScrollOffsetPointerTilesY db BgScrollOffsetPointerTilemapX db ;pointer to current vertical column that holds the leftmost tiles onscreen for tilemap (goes from 0-32) BgScrollOffsetPointerTilemapY db BgScrollTileSourcePointer ds 3 ;pointer to first tile of tileline to be uplodaded DmaFifoPointer dw ;relative pointer to current free entry in buffer DmaFifoPointerIrq dw DmaFifoSourcePointerLo dw DmaFifoSourcePointerBa db DmaFifoOverhang dw DmaFifoTotalBytesTransferred dw ;used to guesstimate how much time we have left for transfers ObjectListPointer dw ;pointer to next free object in object list ObjectListPointerCurrent dw ;pointer to current object in object list, used to set direct register CurrentObjectNumber db ;number of currently selected object in list OamBufferPointer dw ;pointer to current sprite in oam buffer OamZsortBufferPointer dw ;pointer to current sprite in oam zsort buffer OamZsortSpriteNumber db ;number of sprites to sort OamAniListStraightRepeatFlag dw FocusScreenFlags db ;flags for focus ;bit0=enable focus on object FocusScreenObject db ;number of object in object list to focus to FocusScreenSpline db ;number of preset table to use for scrolling depending on distance to object(linear,sine,exp etc) FocusScreenXWait db FocusScreenYWait db CollisionPixelX dw CollisionPixelY dw CollisionTemp dw PalTemp db ;used for object subroutine ExitCollisionPointer dw ;bits0-14 contain number of exit. old:;bits0-14 contain pointer to an entry in the exit list. if bit15 is set, this exit has been hit and needs to be procesed. R1 db ;random number generator buffers R2 db R3 db R4 db ColObjListPointer dw HdmaListPointer dw VwfFontPointerLo ds 3 SpcTempBuffer ds 8 ;temp buffer for spc stuff SpcCurrentStreamSet db SpcHandlerState db SpcHandlerArgument0 db SpcHandlerArgument1 db SpcHandlerArgument2 db SpcCmdFifoStart db SpcCmdFifoEnd db PtPlayerDataPointerLo db ;assumes dreg: $0000 PtPlayerDataPointerHi db ;assumes dreg: $0000 PtPlayerDataPointerBa db ;assumes dreg: $0000 PtPlayerCurrentSong db ;assumes dreg: $0000 PtPlayerCurrentSamplePack db PtPlayerCurrentSoundEffect db PtPlayerSmplBufferPosLo db ;not needed at all PtPlayerSmplBufferPosHi db SpcUploadedFlag db ;msb set=song upload complete and playing. bit6 set=sample pack uploaded VideoHandlerState db CheckJoypadMode db ;0=1 player, 1=8 players, 2=instruments + 1 joypad FontSelector db FixedStringLength db PrintStringPalette db MenuFileThreeBytePointerLo db MenuFileThreeBytePointerHi db MenuFileThreeBytePointerBank db MenuRowsThreeBytePointerLo db MenuRowsThreeBytePointerHi db MenuRowsThreeBytePointerBank db MenuRowsThreeByteOptionPointerLo db MenuRowsThreeByteOptionPointerHi db MenuRowsThreeByteOptionPointerBank db MenuRowsThreeByteCodePointerLo db MenuRowsThreeByteCodePointerHi db MenuRowsThreeByteCodePointerBank db LoadMenuInitialOffset dw LoadMenuInitialOptionOffset dw LoadMenuVerticalSpacing dw LoadMenuNumberOfRows db LoadMenuCurrentRow db LoadMenuStringPosLo db LoadMenuStringPosHi db LoadMenuPalUnselSel db LoadMenuDoInit db BattleSubroutine db HdmaListCounter db ;counter used by hdma handler to switch through channels TempBufferIrq ds 8 ;Temporary Buffer for irq routines BattleMusicState db CurrentTablistPointer ds 3 .ENDE .ENUM $200 ;2-byte adresses for game status stuff TempBufferTest ds 4 Hdma3dScrollCountV db ;amount of lines to wait before hdma table CurrentBattleFile db MapStartPosX db ;map start position set by external routine MapStartPosY db MapSizeX db ;/must not be seperated cause they may be written to both at the same time in word-mode MapSizeY db ;\ BGMapStartPosX db ;start position for bg upload(may differ from sprite location if near a border) BGMapStartPosY db CurrentStringTarget db ;current position in bg1 tilemap to write to, 2 bytes CurrentStringTargetHi db FixedColourRsave db FixedColourGsave db FixedColourBsave db CpuUsageScanline db SpcStreamVolume db SpcSEVolume db SpcSEPitch db SpcSongSpeed db ;default $a0 SpcSongChMask db ;default $0f SpcReportType db ;0=none 1=timecode 2=channel-levels(vol out) 3=special mod command SpcCmdFifo ds 64 MessageDeleteCounter dw ;inactive when zero, delete message when 1(then set zero), decrease each frame when not 0 or 1 HdmaFadeInOutState db ;bit7set=fade in/bit7clear=fade out,bit6set=done fading bit0-5=current state in LUT for window and mosiac size MainCharaObjectNumber db MainCharaXPos dw MainCharaYPos dw ExitMapTarget dw ;target map ExitXTarget dw ;target x-pos on map ExitYTarget dw ;target y-pos on map Pseudo3dScrollUpdateFlag db ;if this isn't zero, update scroll table CurrentLevel dw PlayerState db ;current mode of player characters. 0=active battle 1=player select menu(start sitting. when start pressed for that player, switch to subroutine that is similar to battle, but without being able to fight) 2=results screen. PlayersPresentFlags db ;flags to signalize players connected. ActivePlayers db ;number of alive players WinningPlayer db ;number of player that has won the match. $ff=invalid IrqBrightnessIncDec db ;just a flag. bit0 set=increase. bit1 clear=decrease. bit8=ack/done BrightnessEventBuffer db ;buffer event routine to jum p to after brightness inc/dec SpcStreamFrame dw SpcSoundEffectFlipFlag dw ;flag alternating between each sound effect upload so that spc doesnt trigger the same one twice. BattleFinished db ;$80 if battle is finished IntroScene3ScrollPoint dw VideoFrames db VideoFrameRate dw ;ANDed with framecounter. 0=60hz, 1=30hz, 3=15hz etc. CurrentVideo db CurrentVideoFrame db PlayerSelectScrollCounter dw WinningPlayerPointer dw RandomLevelCounter db ;msb=shuffle direction. bits0-3 level number RandomStreamCounter db ;msb=shuffle direction. bits0-3 Streamset number SpecialReportOld db HdmaScrollPointerBuffer dw GravityCutOffYPos dw ;y-pos of object(with 4bit precision) that triggers delete if bigger and gravity affected GravObjectCounter db ;counter of particle/gravity objects to create to prevent slowdown and such MaxGravObjCount db ;max allowed particles per frame. dont create new ones if exceeded EventJumper db ;variable to select which event to jump to in debug menu CollisionObjPointer dw ;pointer to object that just has collided with calling obj Reg3000WriteVar db VIrqCounter dw ExtIrqCounter dw CartChecksum db .ENDE .ENUM $7e0300 JoyPort1Data1Io0Buffer ds 4 JoyPort1Data2Io0Buffer ds 4 JoyPort2Data1Io0Buffer ds 4 JoyPort2Data2Io0Buffer ds 4 JoyPort1Data1Io1Buffer ds 4 JoyPort1Data2Io1Buffer ds 4 JoyPort2Data1Io1Buffer ds 4 JoyPort2Data2Io1Buffer ds 4 VectorAngleSMCode ds 9 ;8 inc/decs per frame + rtl LoadMenuStringBuffer ds 9 PrintStringBuffer0 ds 16 ;.ende ;.ENUM $7e0300 JoyPortBuffer ds 16 ;8 joypads max, word entries. ;0=port1 joy 1 ;2=port1 joy 2 ;4=port1 joy 3 ;6=port1 joy 4 ;8=port2 joy 1 ;a=port2 joy 2 ;c=port2 joy 3 ;e=port2 joy 4 JoyPortBufferOld ds 16 JoyPortBufferTrigger ds 16 ;joypad buttons: ;15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ;b y se st U D L R a x l r 0 0 0 0 PaletteBuffer ds $0200 ;bg3 palettes: buffer $0-$20 (4 different 4-color palettes, for text Bg1MapBuffer ds $1000 Bg2MapBuffer ds $800 Bg3MapBuffer ds $0800 Bg4MapBuffer ds $1 OamZSortBuffer ds $0500 ;256 entries, each 6 bytes OamZSortObjList ds 128*2 ;prioritized list of objects that need priority processing(2 byte relative pointers) ;ZSortOamPriorityBuffer ds $0040 OamBuffer ds $0200 OamPriorityBuffer ds $0020 DmaFifoBuffer ds $1000 ;DmaFifoEntryLength*256 ObjectList ds $0800 ;32 entries, each 32 bytes ExitList ds $0080 ;16 entries, each 8 bytes ColObjList ds $00c0 ;32 entries, each 4 bytes HdmaBuffer ds $0340 HdmaBuffer1 ds $0340 HdmaBuffer2 ds $0340 HdmaBuffer3 ds $0340 HdmaBuffer4 ds $0340 HdmaBuffer5 ds $0340 HdmaDataBuffer1 ds $0400 HdmaSpcBuffer ds 200 ;streaming table, uses channel 7 TextBoxMenuBuffer ds $0040 ;8 entries * 8 SpcReportBuffer ds 16 ;8 entries, each 2 bytes ;0=none ;2=timecode ;4=channel levels ;6=special mod cmd Hdma3dScrollBuffer ds 400 ;80 entries, each 5 bytes WinnerArray ds 8*1 .ENDE