Close

RAM and ROM

A project log for MSX on RC2014

in which I attempt to make an MSX1 compatible computer using RC2014, keeping to standard RC2014 backplane and modules as far as possible.

shiela-dixonShiela Dixon 04/07/2023 at 15:130 Comments

Initially I believed that the MSX memory map had bios in the first 16k, basic or cartridge rom in the next and RAM in the upper 32k. 

This could be true but the story is more complex than that. The MSX1 specification has four hardware 'slots', each of which sees the whole 64 address space, and the memory space is divided into four 16k 'pages'.  A register in the PPI (Programmable Peripheral Interface) determines which slot is selected for each 16k page. (It also handles the keyboard and does some other things.)

I have yet to fully understand what happens on startup, how the machine detects what cartridges are present and how it sets that configuration initially.

My RC2014 Pro has a ROM module and a RAM module, each of which is very configurable  can contain 64k. So we're well on the way to the MSX goal. We will definitely need a PPI which can enable / disable those modules  based on that PPI register.  I think we can use a couple of the spare bus lines, and do a little bodging to the standard modules.  But that is all for another day.

For now, let's see what we can get running with what we already have.

One fantastic resource is c-bios, which is an open, compatible and free rewrite of the MSX bios. 

I've bought some 64k EEPROMs so that I can experiment.

I think the 16k BIOS ROM is always at address 0, so this is how the ROM module needs to be jumpered for the first 32k of the ROM chip to appear at address zero:


I've jumpered the RAM module so that it appears to have 32k in the upper half of the address space. For reference, that looks like this: 



The c-bios download has many versions of the ROM. Not all of them work for me at present but here is cbios_main_msx1.rom. It's a 32k image, with the bios in the first 16k and the next 16k almost empty. (I suspect that the few bytes that are there in the second 16k may be important). I found text within the rom image that explains that this version is only designed to start cartridges. Good to know. But at least I have something on the screen:

At one point when I had forgotten to plug my RAM module back in, I saw this, so the bios' memory check routine is working, and I know the ram is jumpered correctly if I don't see this message:

I have found ROM images online for MSX BIOS+BASIC but haven't had any luck with that so far. Maybe the PPI needs to be present, or maybe there's something else that I'm missing at this stage. 

As mentioned before, it'll be important for my ROM and RAM to be capable of being enabled / disabled under the control of the PPI (Programmable Peripheral Interface). I have been doing lots of reading and have designed a PPI module, but that is for the next log.

Discussions