Skip to content

Latest commit

 

History

History
61 lines (42 loc) · 5.6 KB

README.md

File metadata and controls

61 lines (42 loc) · 5.6 KB

Channel F Videocart Dumper

To my knowledge, all Channel F Videocarts have been dumped (except for a single Diagnostics Videocart mentioned in the service manual), and are available online. However, this project can still be useful for those that wish to:

  • Dump their own collection of Videocarts for backup purposes
  • Diagnose issues with any Videocarts
  • Test and confirm a Videocart is in working condition without needing a functional Channel F

F8 ROMC Commands

The Fairchild Channel F uses the Fairchild F8 microprocessor system. It's pretty unique, as instead of using an address bus (which would require 16 lines) and a single program counter in the CPU, F8 systems use a control bus (which only requires 5 lines) and seperate program counters in each chip. This keeps the pin count, and therefore cost, low. Because of this, we can't just output to an address bus and read from a data bus. Instead we must output the appropriate commands to get the Videocarts internal program counter to the address we want, then use other commands to make the Videocart output that data to the data bus. Luckily there are specific commands provided to do this quickly and efficiently.

All ROMC commands are tested, except the following:

ROMC (43210) HEX Cycle length Function
01111 0F L The interrupting device with highest priority must place the low order byte of the interrupt vector on the data bus. All devices must copy the contents of PC0 into PC1. All devices must moce the contents of the data bus into the low order byte of PC0.
10000 10 L Inhibit any modification to the interrupt priority logic.
10001 11 L The device whose memory space includes the contents of PC0 must place the contents of the addressed memory word onto the data bus. All devices must then move the contents of the data bus to the upper byte of DC0.
10011 13 L The interrupting device with highest priority must move the high order half of the interrupt vector onto data bus. All devices must move the contents of the data bus into the high order byte of PC0. The interrupting device resets its interupt circuitry (so that it is no longer requesting CPU servicing and can respond to another interrupt).
11010 1A L During the prior cycle, an I/O port timer or interrupt control register was addressed; the device containing the addressed port must move the current contents of the data bus into the addressed port.
11011 1B L During the prior cycle, the data bus specified the address of an I/O port. The device containing the addressed I/O port must place the contents of the I/O port on the data bus. (Note that the contents of timer and interrupt control registers cannot be read back onto the data bus.)

Channel F Memory Map

The Channel F has a fairly simple memory layout. It's PC is 16-bits wide, for a total of 64 KB supported. The BIOS is present in the first 2K of memory, with the Videocart data beginning after it at 0x0800. So to read the Videocart, we need to issue commands that get the Videocarts internal PC to 0x0800, then read starting from that address. I chose to only read 4K of memory, as that is the maximum size of all official USA Videocarts. This can be trivially changed by modifying the provided code.

* SRAM and LED are only on the SABA Videoplay 20

Videocart to Arduino Pin Connections

The 3851 ICs used in Videocarts have an Absolute Maximum Rating of -0.3V to +15V, but recommend +12V, on VGG. So while it's possible to connect VGG to an Arduinos +5V pin, I would not recommend it. Instead you should use an external power source. My recomendation is a 12V DC power supply with its positive pin attached to the Videocarts +12V, and its GND pin connected to the Arduinos GND pin.

Videocart pins Arduino pins
D0, D1, D2, D3, D4, D5, D6, D7 51, 49, 39, 35, 36, 32, 30, 28
ROMC 0, ROMC 1, ROMC 2, ROMC 3, ROMC 4 45, 43, 41, 37, 40
PHI 38
WRITE 34
GND GND
+5V +5V
+12V / VGG N/A

Useful Links / Sources

F8 - VES Wiki

ROMC - VES Wiki

F8 User's Guide (PDF)