TEXTCOLOR = $e0c022 NEWVIDEO = $e0c029 BORDERCOLOR = $e0c034 CLOCKCTL = $e0c034 SHADOW = $e0c035 STACKCTL = $e0c068 KBD = $e0c000 KBDSTROBE = $e0c010 COUT = $fded VRAM = $e12000 SHADOWVRAM = $012000 VRAMBANK = $e10000 SHADOWVRAMBANK = $010000 PRODOS = $bf00 ; MLI entry point PRODOSRETURN = $300 ; Indirect jump to get back to ProDOS from any bank BORDERCOLORCACHE= $304 ; Save system border color so we can put it back TEXTCOLORCACHE = $306 ; Save system text colors so we can put it back ENSONIQ_CONTROL = $e1c03c ; Ensoniq-related registers/locations ENSONIQ_DATA = $e1c03d ENSONIQ_ADDRL = $e1c03e ENSONIQ_ADDRH = $e1c03f SYSTEM_VOLUME = $e100ca ; Zero page locations we use (unused by Monitor, Applesoft, or ProDOS) PARAM0 = $06 PARAM1 = $07 PARAM2 = $08 PARAM3 = $09 PARAML0 = $06 ; 16-bit versions of params PARAML1 = $08 PARAML2 = $d0 SCRATCH0 = $19 SCRATCH1 = $1a SCRATCHL = $19 ; 16-bit version of scratch SCRATCHL2 = $67 ; Second 16-bit scratch PARAM24 = $67 ; 24-bit param (This is almost certainly messing up AppleSoft, but meh) CACHEPTR = $6A ; General purpose cache pointer (This is almost certainly messing up AppleSoft, but meh) CACHEDATA = $6C ; General purpose cache data (This is almost certainly messing up AppleSoft, but meh) leftScreenEdge = $6E ; Reserved for leftScreenEdge (This is almost certainly messing up AppleSoft, but meh) STACKPTR = $70 ; Cache for stack pointer in fast graphics SHADOWREGISTER = $72 ; Cache for shadow register in fast graphics STACKREGISTER = $73 ; Cache for stack register in fast graphics lastCompiledTerrainY = $75 ; The highest Y value that the compiled renderer must handle RANDOM = $ce ; 16 bit random number RANDOML = $ce ; Low byte of random number generator RANDOMH = $cf ; High byte of random number generator ; Terrain constants TERRAINWIDTH = 640 ; In pixels MAXTERRAINHEIGHT = 100 ; In pixels COMPILEDTERRAINROW = TERRAINWIDTH/4+4 ; In words, +4 to make room for clipping jump at end of row VISIBLETERRAINWIDTH = TERRAINWIDTH/4 ; In words- width minus jump return padding VISIBLETERRAINWINDOW = 80 ; In words MAXSPANSPERROW = 15 SPANROWBYTES = MAXSPANSPERROW*2 + 2 ; In bytes CLIPPEDTERRAINSTACK = $3fff ; Location of stack where clipped terrain data lives ; Terrain data, stored as height values 2 pixels wide (bytes) terrainDataFar = $02f500 terrainData = $f500 ; .repeat TERRAINWIDTH/2 ; .word 0 ; .endrepeat terrainDataEnd = terrainData + (TERRAINWIDTH/2 * 2) ; Far symbols renderStringFar = $050000 ; Main entry for font rendering engine ; Stash the size of the sound bank at the end of sound memory so loader can pass it to sound system soundBankSize=$04fffe ; projectileData struct offsets JD_PRECISEX = 132 JD_PRECISEY = 134 JD_VX = 136 JD_VY = 138 JD_TYPE = 140 JD_NEW = 142 JD_STATIC = 144 JD_OWNER = 146 JD_FACING = 148 JD_SCRATCH = 150 JD_AGE = 152 JD_DEPLOYDELAY = 154 MAXPROJECTILES = 3