Home About Writings Projects Other nthpulse.net

< Return to MROM64

MROM64 working principle

A higher capacity ROM chip is used to replace the existing ROM chips, which means that there are additional address pins on the replacement ROM that the C64 is oblivious to and does not use.
These additional address pins can be used to apply an offset to the requested address and select data in a different location, thereby selecting a distinct bank of data. The number of redundant additional address pins determines how many of these banks can exist and be selected.

Consider the following simplified case:

When replacing only the Character ROM, which has 12 address pins (labelled A0 - A11), with a "512" type ROM chip, with 16 address pins (labelled A0 - A15), the "512" type will have 4 address pins above the normal address range. These 4 pins can have one of two states (1 or 0, on or off) which gives 16 possible binary selections (from 2^4), so 16 banks containing distinct character sets can exist in the chip and be selected by altering the base address offset.

I first devised a memory map for the MROM64C, which would then help me create a logic circuit that presents the correct data bank based on what the user has set and what the C64 expects.

I refer to the 010's address pins as R0-R16, using R instead of the more conventional A, to differentiate from the C64's bus.
This means that, for example, R13 in refers to pin A13 of the 010 ROM.
Empty cells represent a binary zero, and are left empty for readability reasons.

Address in 010 ROM Contents Bank size R16 R15 R14 R13 R12
0x00000 Font 0 4K
0x01000 Font 1 4K 1
0x02000 Font 2 4K 1
0x03000 Font 3 4K 1 1
0x04000 Font 4 4K 1
0x05000 Font 5 4K 1 1
0x06000 Font 6 4K 1 1
0x07000 Font 7 4K 1 1 1
0x08000 Font 8 4K 1
0x09000 Font 9 4K 1 1
0x0A000 Font 10 4K 1 1
0x0B000 Font 11 4K 1 1 1
0x0C000 Font 12 4K 1 1
0x0D000 Font 13 4K 1 1 1
0x0E000 Font 14 4K 1 1 1
0x0F000 Font 15 4K 1 1 1 1
0x10000 BASIC 8K 1 transparent
0x12000 Kernal 0 8K 1 1 transparent
0x14000 Kernal 1 8K 1 1 transparent
0x16000 Kernal 2 8K 1 1 1 transparent
0x18000 Kernal 3 8K 1 1 transparent
0x1A000 Kernal 4 8K 1 1 1 transparent
0x1C000 Kernal 5 8K 1 1 1 transparent
0x1E000 Kernal 6 8K 1 1 1 1 transparent

The character ROM has a size of 4KB and the kernal and BASIC ROMs have a size of 8KB. As the kernal and BASIC ROMs are twice the size, they require an additional address pin.
Depending on whether the C64 is accessing the character set or kernal/BASIC, the user-selectable kernal and character bit combination must be passed through to the 010's R12-R16 pins, while preserving the state of A12 during kernal/BASIC reads.

Page created: 18DEC2025
Last modified: 18DEC2025