🦊 smal's blog

The FF1 (FamiFlex) Mapper!

NOTE: THIS IS A WIP PAGE FOR A WIP PROJECT, THE INFO HERE MAY NOT BE UP TO DATE OR ACCURATE

So, some time ago I bought an old famiclone, and eventually I wanted to give a shot at playing some homebrew games on it (and even maybe make my own), so out of boredom and a desire for learning came the FF1 mapper!

Its a mapper that makes use of 74670 4x4 register chips (as I had a bunch of them lying around), and that can be configured to emulate many of the "bus-conflict" mappers that are commonly used in the homebrew scene, including NROM, UNROM, AxROM and UNROM 512. As well as many other possible configurations (including some not really present in any documented mapper).

MAPPER n.ICs PRG max(Kb) PRG banking CHR type CHR max(Kb) CHR banking PRG RAM Game Saves Mirroring Register
NROM (i000) 2 32 32f ROM 8 8f no no fixed V/H -
UNROM (i002) 4 256 16+16f RAM 8 8f no no fixed V/H ----.PPPP
AxROM (i007) 4 128 32 RAM 8 8f no no 1-screen ---M.-PPP
BNROM (i034) 4 128 32 RAM 8 8f no no fixed V/H ----.--PP
COLORDREAMS (i011) ? 128 32 ROM 128 8 no no no fixed V/H
UNROM 512 (i030) 5-6 512 16+16f RAM 32 8 no yes (PRG FLASH) fixed V/H or switch 1-screen or fixed 4-screen MCCP.PPPP
FF1 2-4 512 32f or 32 or 16+16f or 16+16 RAM/ROM 32(RAM) or 128 (FLASH) 8f or 8 or 4+4f or 4+4 no yes (CHR FLASH) fixed V/H or switch 1-screen or fixed 4-screen variable (see jumper setup)

Theory of operation

The FF1 presents one or two registers accessible by writing to ROM (note: this is a bus conflict mapper, thus the region of ROM you write to must contain the same value you are writing). The register(s) can be either 4 or 8 bit, with each half of the byte being a separate `670 4x4 register.

These registers in turn control the memory bank mapping of PRG and CHR, as well as mirroring while using single screen mode.

Parts

Jumpers

FF1 uses a series of solder jumpers in the back of the board to customize it, these are where the flexibility part of the mapper comes in, as the board can be made to use a variety of different configurations:

Nametable Setup

The Famicom PPU is based around using 4 logic nametable screens, but it only contains enough internal VRAM to store 2 of them, an option exists to use cartridge RAM instead in order to enable the maximum 4 screens, and is supported by FF1:

Finally when using 2 screen mode we must settle on a mirroring mode to use in order to fill up the 4 logical nametable screens, in that case one (and only one!) of the following jumpers must be set

1 screen mirror mode works by switching between 2 screens through the corresponding bit

Banking Setup

Register 1 stores bits 0 to 3 and Register 2 stores bits 4 to 7.

Finally we can decide which of the bits 5,6,7 are used for CHR banking:

R1 and D1

These are odd components needed for when bit 4 is used for PRG mapping in a Mapper i30-like mode. D1 should be a standard 1n4 diode and R1 Should be a 4.7K resistor.

Example Configurations

NROM

32K PRG + 8K CHR

AxROM

512K PRG (16x32K) + 8K CHRam

UNROM

256K PRG (16x16K) + 8K CHRam

UNROM 512

512K PRG (32x16K) + 32K CHRam (4*8K)

FF1

A "Maxed-Out" setup for my own homebrew use.

512K PRG (16x16K(a) + 16x16K(b)) + 128K CHRom (16x4K(a) + 16x4K(b))

Links