1 hour ago, Wavicle said:
I'm not in any fashion related to the dev team, so take with a grain of salt, but going by the Verilog design for X8 published last December:
The 64K of RAM lives at address $0000-$FFFF, with a few exceptions. RAM banking only applies to VRAM which has 256 pages of 256 bytes mapped in at $0400. Sprite, PSG, and Palette RAM live in the $0500 page; and $0600-$0617 (24 bytes) are used for general hardware control and IO (e.g. VRAM bank select is at $0605). The only "ROM" is a "Boot ROM" overlay at the top two pages ($fe00-$ffff) and can be disabled / turned into normal RAM by, I think, clearing bit 3 of $0602 (can't quite tell which due to the lateness of the hour, but it looks like the logic is inverted in the design where it is labeled "bootrom_dis", so I would imagine that bit is functionally "bootrom overlay enabled").
$0000-$03ff, and $0618-$fdff are always RAM and writes to $fe00-$ffff are always written to RAM but vary their read behavior depending on what the bootrom overlay bit's value is. Presumably the bootrom's job is to fetch the OS kernel from SPI and write it into RAM; it should then disables the bootrom overlay and execute entirely out of RAM.
Thank you for this, but I'm still baffled why would couldn't have gotten this on the first day.
But anyway, $0000 to $00ff is of course zero page, $0100-$01ff is stack, $0200-$03ff is going to be basic/kernal variables, the rest as you mentioned. I'm gonna guess basic program storage still starts at $0800, leaving $0618-$07ff as a free/ML area, so $0800 to $9fff (38912 bytes), unless that 512 bytes of Boot ROM pushes the Kernal and BASIC down to $9e00, but even so, that's 38,400 bytes for BASIC, which is what you'd expect. Not using BASIC would then give you a contiguous block $0618 - $bdff, 47080 bytes.