This is an emulator of the Epoch Super Cassette Vision.
The best documentation I could find is embodied in the MAME SCV emulator. Takeda-san's eSCV and related documents were also very helpful. NEC data sheets of the uCOM-87 microcontroller series were found around the 'net and provided instruction opcodes, cycle timings and other details. The gaps (and there are many) were filled with educated guesses and prior art from building emulators for MOS6502-based machines and the SNES.
The audio processor (NEC uPD1771C-017) was reverse-engineered from a die shot, a transistor-level JavaScript simulator of the same, and the original LSI design docs. The processor is actually a specialized 8-bit CPU with internal RAM and ROM. The -017 mask ROM is required.
A Japanese console has been acquired. It is currently being examined (nicely) and its detailed behavior documented.
I have completed my deep dive into reverse-engineering the Epoch TV-1. Numerous test ROMs were written to measure timing, explore corner cases and unusual behaviors, and understand observed differences from actual HW behavior. Findings were detailed in 'doc/epochtv1.txt' and then used to refine the core.
I'm positive that I have figured out how rendering happens internally. The core now produces VRAM (sprite pattern) bus address patterns that match those measured on actual HW. Graphical glitches seen in some games are also reproduced with high accuracy: for example, portions of sprites drop out when the CPU accesses VRAM during sprite rendering.
All known display issues are now resolved.
- Cycle-accurate CPU (NEC uPD7801G)
- Logic-accurate audio processor (NEC uPD1771C)
- Behaviorally-accurate video processor (Epoch TV-1 (NTSC))
- Cartridge mapper support for all known released cartridges
- Copy the latest *.rbf from releases/ to the root of the SD card
- Build boot.rom (see below)
- Create a folder on the SD card named "SCV" and copy boot.rom to it
Acquire these three files:
- upd7801g.s01 (MD5 sum 635a978fd40db9a18ee44eff449fc126)
- epochtv.chr.s02 (MD5 sum 929617bc739e58e550fe9025cae4158b)
- upd1771c-017.s03 (MD5 sum 9b03b66c6dc89de9a11d5cd908538ac3)
Concatenate the files to create boot.rom. Windows example:
COPY /B upd7801g.s01 +epochtv.chr upd1771c-017.s03 boot.rom
Note: upd1771c-017.s03 is in little-endian order (ROM low byte first).
The console has a numeric keypad called SELECT, and a hard PAUSE button.
- 0-9 - SELECT numbered keys
- Backspace, numpad ./Del - SELECT CL key
- Enter - SELECT EN key
- F1 - PAUSE button
Up to two digital joysticks are mapped to the two controllers. Each controller has two Trig buttons.
The most common SELECT buttons -- 1 to 4 and EN -- can also be configured as joystick buttons.
Most games refer to a START button. This means to press both Trig buttons.
ROM images must:
- Have a file extension .ROM or .BIN
- Be strictly the ROM contents (no headers)
Cartridges had 8K - 128K of ROM, and some had RAM. Two heuristics are used to identify the cartridge -- ROM size and checksum -- and map the memories appropriately. The OSD has an option to manually select a mapper.
Two cartridges had a mix of ROM sizes. No special mappers exist for them (yet). Create a 64K .BIN file for them as follows:
32K ROM + (first 24K [24,576 bytes] of 32K ROM) + 8K ROM --> 64K .BIN
32K ROM + (first 24K [24,576 bytes] of 32K ROM) + 8K ROM --> 64K .BIN
- Audio (uPD1771C)
- Actual HW is lot more "buzzy" at low volumes. Bug or feature?
- Cartridges
- Save and restore battery-backed RAM
- Make mappers for special cases