Quote Originally Posted by Gnoman View Post
From the user end on the 64 you just had one big block of memory to use, and the machine booted directly into BASIC, with "38911 BASIC BYTES FREE", because 16K was disabled to make room for (if I understand things correctly) the BASIC interpreter ROM. If you loaded a program written in assembly, it simply had all 64K available.
The C64's memory map was quite a bit more complicated than that. The lowest 1K had all sorts of system variables and mappings for stuff like the serial port in it. Next 1K was the default text-only screen. Next was the BASIC area. BASIC ROM was 8K starting at 40960, there was then a 4K block of RAM which wasn't used for anything, then you had the 4K character ROM--which also shared space with the VIC-II and SID chips--and the top 8K of memory had the Kernal (yes, they spelt it that way) ROM in it. Writing into any memory address would write into the underlying RAM at that location, even if it was currently switched out, while reading would either return the ROM or RAM address depending on the bit flags at memory location 1, so something you could do quite easily was copy the ROM into the underlying RAM and then switch the ROM out, allowing you to run with modified ROMs, or, as you say, you could switch out the ROMs and have access to nearly all the 64K of RAM, apart from the areas required for memory-mapped IO access to VIC-II, SID, and other peripherals.