; Global addresses and engine values SHADOW_REG equ $E0C035 STATE_REG equ $E0C068 NEW_VIDEO_REG equ $E0C029 BORDER_REG equ $E0C034 ; 0-3 = border, 4-7 Text color VBL_VERT_REG equ $E0C02E VBL_HORZ_REG equ $E0C02F KBD_REG equ $E0C000 KBD_STROBE_REG equ $E0C010 VBL_STATE_REG equ $E0C019 MOD_REG equ $E0C025 COMMAND_KEY_REG equ $E0C061 OPTION_KEY_REG equ $E0C062 SHADOW_SCREEN equ $012000 SHADOW_SCREEN_SCB equ $019D00 SHADOW_SCREEN_PALETTES equ $019E00 SHR_SCREEN equ $E12000 SHR_SCB equ $E19D00 SHR_PALETTES equ $E19E00 SHR_LINE_WIDTH equ 160 SHR_SCREEN_HEIGHT equ 200 ; Direct page locations used by the engine ScreenHeight equ 0 ; Height of the playfield in scan lines ScreenWidth equ 2 ; Width of the playfield in bytes ScreenY0 equ 4 ; First vertical line on the physical screen of the playfield ScreenY1 equ 6 ; End of playfield on the physical screen. If the height is 20 and Y0 is ScreenX0 equ 8 ; 100, then ScreenY1 = 120. ScreenX1 equ 10 ScreenTileHeight equ 12 ; Height of the playfield in 8x8 blocks ScreenTileWidth equ 14 ; Width of the playfield in 8x8 blocks StartX equ 16 ; Which code buffer byte is the left edge of the screen. Range = 0 to 167 StartY equ 18 ; Which code buffer line is the top of the screen. Range = 0 to 207 EngineMode equ 20 ; Defined the mode/capabilities that are enabled ; bit 0: 0 = Single Background, 1 = Parallax ; bit 1: 0 = No Dynamic Tiles, 1 = Allocate Bank 00 space for dynamic tiles ; bit 2: 0 = No static buffer, 1 = Allocation Bank 00 space for a static screen buffer DirtyBits equ 22 ; Identify values that have changed between frames BG1DataBank equ 24 ; Data bank that holds BG1 layer data BG1AltBank equ 26 ; Alternate BG1 bank BlitterDP equ 28 ; Direct page address the holder blitter data OldStartX equ 30 OldStartY equ 32 LastPatchOffset equ 34 ; Offset into code field that was patched with BRA instructions StartXMod164 equ 36 StartYMod208 equ 38 BG1StartX equ 40 ; Logical offset of the second background BG1StartXMod164 equ 42 BG1StartY equ 44 BG1StartYMod208 equ 46 OldBG1StartX equ 48 OldBG1StartY equ 50 BG1OffsetIndex equ 52 BG0TileOriginX equ 54 ; Coordinate in the tile map that corresponds to the top-left corner BG0TileOriginY equ 56 OldBG0TileOriginX equ 58 OldBG0TileOriginY equ 60 BG1TileOriginX equ 62 ; Coordinate in the tile map that corresponds to the top-left corner BG1TileOriginY equ 64 OldBG1TileOriginX equ 66 OldBG1TileOriginY equ 68 TileMapWidth equ 70 TileMapHeight equ 72 TileMapPtr equ 74 FringeMapPtr equ 78 BG1TileMapWidth equ 82 BG1TileMapHeight equ 84 BG1TileMapPtr equ 86 SCBArrayPtr equ 90 ; Used for palette binding SpriteBanks equ 94 ; Bank bytes for the sprite data and sprite mask LastRender equ 96 ; Record which render function was last executed ; gap SpriteMap equ 100 ; Bitmap of open sprite slots. ActiveSpriteCount equ 102 BankLoad equ 104 TileStoreBankAndBank01 equ 106 TileStoreBankAndTileDataBank equ 108 TileStoreBankDoubled equ 110 UserId equ 112 ; Memory manager user Id to use ToolNum equ 114 ; Tool number assigned to us LastKey equ 116 LastTick equ 118 ForceSpriteFlag equ 120 SpriteRemovedFlag equ 122 ; Indicate if any sprites were removed this frame RenderFlags equ 124 ; Flags passed to the Render() function BG1Scaling equ 126 activeSpriteList equ 128 ; 32 bytes for the active sprite list (can persist across frames) ; tiletmp equ 178 ; 16 bytes of temp storage for the tile renderers blttmp equ 192 ; 32 bytes of local cache/scratch space for blitter tmp8 equ 224 ; another 16 bytes of temporary space to be used as scratch tmp9 equ 226 tmp10 equ 228 tmp11 equ 230 tmp12 equ 232 tmp13 equ 234 tmp14 equ 236 tmp15 equ 238 tmp0 equ 240 ; 16 bytes of temporary space to be used as scratch tmp1 equ 242 tmp2 equ 244 tmp3 equ 246 tmp4 equ 248 tmp5 equ 250 tmp6 equ 252 tmp7 equ 254 ; Defines for the second direct page (used in the tile blitters) sprite_ptr0 equ 0 ; Each tile can render up to 4 sprite blocks. The sprite sprite_ptr1 equ 4 ; data and mask values live in different banks, but have a sprite_ptr2 equ 8 ; parallel structure. The high word of each point is set to sprite_ptr3 equ 12 ; the mask bank. With the Bank register set, both data and mask ; ; can be accessed through the same pointer, e.g. lda (sprite_ptr0) ; ; and [sprite_ptr0] tmp_sprite_data equ 16 ; 32 byte temporary buffer to build up sprite data values tmp_sprite_mask equ 48 ; 32 byte temporary buffer to build up sprite mask values tmp_tile_data equ 80 ; 32 byte temporary buffer to build up tile data values tmp_tile_mask equ 112 ; 32 byte temporary buffer to build up tile mask values ; Temporary direct page locations used by some of the complex tile renderers _X_REG equ 144 _Y_REG equ 146 _T_PTR equ 148 ; Copy of the tile address pointer _OP_CACHE2 equ 148 ; CAche of second opcode _BASE_ADDR equ 150 ; Copy of BTableLow for this tile _SPR_X_REG equ 152 ; Cache address of sprite plane source for a tile _JTBL_CACHE equ 154 ; Cache the offset to the exception handler for a column _OP_CACHE equ 156 ; Cache of a relevant operand / oeprator _TILE_ID equ 158 ; Copy of the tile descriptor ; Define free space the the application to use ; FREE_SPACE_DP2 equ 160 DP2_DIRTY_TILE_COUNT equ 160 ; Local copy of dirty tile count to avoid banking DP2_DIRTY_TILE_CALLBACK equ 162 ; Some pre-defined bank values DP2_TILEDATA_AND_TILESTORE_BANKS equ 164 DP2_SPRITEDATA_AND_TILESTORE_BANKS equ 166 DP2_TILEDATA_AND_SPRITEDATA_BANKS equ 168 DP2_BANK01_AND_TILESTORE_BANKS equ 170 SPRITE_VBUFF_PTR equ 224 ; 32 bytes of adjusted pointers to VBuffArray addresses ; End direct page values ; EngineMode definitions ENGINE_MODE_TWO_LAYER equ $0001 ENGINE_MODE_DYN_TILES equ $0002 ENGINE_MODE_BNK0_BUFF equ $0004 ENGINE_MODE_USER_TOOL equ $8000 ; Communicate if GTE is loaded as a system tool, or a user tool ; Render flags RENDER_ALT_BG1 equ $0001 RENDER_BG1_HORZ_OFFSET equ $0002 RENDER_BG1_VERT_OFFSET equ $0004 RENDER_BG1_ROTATION equ $0008 RENDER_PER_SCANLINE equ $0010 ; DirtyBits definitions DIRTY_BIT_BG0_X equ $0001 DIRTY_BIT_BG0_Y equ $0002 DIRTY_BIT_BG1_X equ $0004 DIRTY_BIT_BG1_Y equ $0008 DIRTY_BIT_BG0_REFRESH equ $0010 DIRTY_BIT_BG1_REFRESH equ $0020 DIRTY_BIT_SPRITE_ARRAY equ $0040 ; Script definition YIELD equ $8000 JUMP equ $4000 SET_PALETTE_ENTRY equ $0002 SWAP_PALETTE_ENTRY equ $0004 SET_DYN_TILE equ $0006 CALLBACK equ $0010 ; ReadControl return value bits PAD_BUTTON_B equ $0100 PAD_BUTTON_A equ $0200 PAD_KEY_DOWN equ $0400 ; Tile constants ; TILE_RESERVED_BIT equ $8000 TILE_PRIORITY_BIT equ $4000 ; Put tile on top of sprite TILE_FRINGE_BIT equ $2000 ; Unused TILE_SOLID_BIT equ $1000 ; Hint bit used in TWO_LAYER_MODE to optimize rendering TILE_DYN_BIT equ $0800 ; Is this a Dynamic Tile? TILE_VFLIP_BIT equ $0400 TILE_HFLIP_BIT equ $0200 TILE_ID_MASK equ $01FF TILE_CTRL_MASK equ $FE00 ; TILE_PROC_MASK equ $F800 ; Select tile proc for rendering ; Sprite constants SPRITE_HIDE equ $2000 SPRITE_16X16 equ $1800 ; 16 pixels wide x 16 pixels tall SPRITE_16X8 equ $1000 ; 16 pixels wide x 8 pixels tall SPRITE_8X16 equ $0800 ; 8 pixels wide x 16 pixels tall SPRITE_8X8 equ $0000 ; 8 pixels wide x 8 pixels tall SPRITE_VFLIP equ $0400 SPRITE_HFLIP equ $0200 ; Stamp storage parameters VBUFF_STRIDE_BYTES equ {12*4} ; Each line has 4 slots of 16 pixels + 8 buffer pixels VBUFF_TILE_ROW_BYTES equ {8*VBUFF_STRIDE_BYTES} ; Each row is comprised of 8 lines VBUFF_TILE_COL_BYTES equ 4 VBUFF_SPRITE_STEP equ {VBUFF_TILE_ROW_BYTES*3} ; Allocate space for 16 rows + 8 rows of buffer VBUFF_SPRITE_START equ {VBUFF_TILE_ROW_BYTES+4} ; Start at an offset so $0000 can be used as an empty value VBUFF_SLOT_COUNT equ 48 ; Have space for this many stamps ; This is 13 blocks wide SPRITE_PLANE_SPAN equ VBUFF_STRIDE_BYTES ; External references to data bank TileStore EXT DirtyTileCount EXT DirtyTiles EXT _Sprites EXT TileStore EXT TileStoreLookupYTable EXT TileStoreLookup EXT Col2CodeOffset EXT JTableOffset EXT CodeFieldEvenBRA EXT CodeFieldOddBRA EXT ScreenAddr EXT TileStoreYTable EXT NextCol EXT RTable EXT BlitBuff EXT BTableHigh EXT BTableLow EXT BRowTableHigh EXT BRowTableLow EXT BG1YTable EXT BG1YOffsetTable EXT OldOneSecVec EXT OneSecondCounter EXT Timers EXT DefaultPalette EXT ScreenModeWidth EXT ScreenModeHeight EXT _SpriteBits EXT _SpriteBitsNot EXT VBuffArray EXT _stamp_step EXT VBuffVertTableSelect EXT VBuffHorzTableSelect EXT Overlays EXT BG1YCache EXT ScalingTables EXT StartXMod164Arr EXT LastPatchOffsetArr EXT ; Tool error codes NO_TIMERS_AVAILABLE equ 10