Damus
mos_8502 :verified: ๐Ÿ‡จ๐Ÿ‡ฆ profile picture
mos_8502 :verified: ๐Ÿ‡จ๐Ÿ‡ฆ
@mos_8502 :verified: ๐Ÿ‡จ๐Ÿ‡ฆ

Retrocomputing Maker and Designer in Ontario, Canada. I make stuff without promising a delivery date. I don't do crowdfunding, but I do gratefully accept Patreon and Ko-Fi support for what I do.โ€ฉ

Buy me a coffee!: https://www.ko-fi.com/mos_8502
Become a Patron!: https://patreon.com/Studio8502
Buy my games!: https://studio8502.itch.io/

Relays (1)
  • wss://relay.momostr.pink/ โ€“ read & write

Recent Notes

mos_8502 :verified: ๐Ÿ‡จ๐Ÿ‡ฆ · 3w
A second generation design could add work RAM and expand the program ROM to a fixed region below 0x8000 and a banked region up high.
mos_8502 :verified: ๐Ÿ‡จ๐Ÿ‡ฆ · 3w
ROML's boot sequence would move the VIC-II to point at the ROMH chip, make it display something, and then enter an idle loop. Pure proof-of-concept.
mos_8502 :verified: ๐Ÿ‡จ๐Ÿ‡ฆ · 3w
Let's start simple. A MVC-compliant prototype of an Ultimax mode banked mapper cartridge would have one banked region for the VIC-II, and one banked region for program code. It wouldn't provide extra...
mos_8502 :verified: ๐Ÿ‡จ๐Ÿ‡ฆ profile picture
So you get your ROM chips. One of them is for code, one is for data. Use the '040 512KB flash chips for shits and giggles.

We can start with the same basic design as Magic Desk: a latch to set the bank for program ROM, and then add another latch for video ROM. Those latches set the high bits of the ROM addresses, and get written to using I/O addresses.
1
mos_8502 :verified: ๐Ÿ‡จ๐Ÿ‡ฆ · 3w
Your boot code is actually in the graphics ROM, in bank 0 offset 0xFFFE: the reset vector. That has to point to 0x8000, the bottom of ROML.
mos_8502 :verified: ๐Ÿ‡จ๐Ÿ‡ฆ · 3w
So you get your ROM chips. One of them is for code, one is for data. Use the '040 512KB flash chips for shits and giggles. We can start with the same basic design as Magic Desk: a latch to set the bank for program ROM, and then add another latch for video ROM. Those latches set the high bits of the...
mos_8502 :verified: ๐Ÿ‡จ๐Ÿ‡ฆ · 3w
The mapper itself needs to be able to remember banking state, though. So a CPLD would be appropriate here, if you didn't want to use external latches.
mos_8502 :verified: ๐Ÿ‡จ๐Ÿ‡ฆ · 3w
The "mapper" is a PLD, which takes in A0-A15, and outputs select signals for the chips on the cartridge.
mos_8502 :verified: ๐Ÿ‡จ๐Ÿ‡ฆ · 3w
It comes down to designing the mapping to match the needs of the game, or rather, designing different mapping arrangements for different kinds of game.
mos_8502 :verified: ๐Ÿ‡จ๐Ÿ‡ฆ · 3w
We can put banked ROM from 0xC000-0xCFFF, and use that for storing sprite bitmap data.
mos_8502 :verified: ๐Ÿ‡จ๐Ÿ‡ฆ profile picture
That means we have two banked regions for graphics ROM: 0xC000-0xCFFF, and 0xE000-0xEFFF. We probably want to bank switch program code, too; so why don't we ignore the /ROML and /ROMH signals completely, decode the address bus directly, and stick "static" ROM from 0x2000-0x9FFF, and banked ROM from 0xA000-0xBFFF?
1
mos_8502 :verified: ๐Ÿ‡จ๐Ÿ‡ฆ · 3w
Decoding the address bus directly also makes it trivial to overlay RAM on the screen matrix where we need to - for example, we might want a modifiable header or footer.
mos_8502 :verified: ๐Ÿ‡จ๐Ÿ‡ฆ · 3w
That means we have two banked regions for graphics ROM: 0xC000-0xCFFF, and 0xE000-0xEFFF. We probably want to bank switch program code, too; so why don't we ignore the /ROML and /ROMH signals completely, decode the address bus directly, and stick "static" ROM from 0x2000-0x9FFF, and banked ROM from ...
mos_8502 :verified: ๐Ÿ‡จ๐Ÿ‡ฆ · 3w
We can put banked ROM from 0xC000-0xCFFF, and use that for storing sprite bitmap data.