Saturday, October 28, 2023

What the KIM-1 really needs is an LCD screen

Giving the 1976 1K RAM, 1MHz 6502-based KIM-1 single-board computer bubble memory storage was all well and good, but the basic unit is still just six numeric LEDs for its display. Let's solve that problem.
Here's a sidecar screen for my KIM-1 that's large enough to be useful, small enough to be portable, and efficient enough to be powered by my unit's built-in power supply. Plus, it can be driven by the KIM-1's unallocated I/O lines so that its 20mA current loop terminal interface remains available, with bonus points for being self-lit so you can see it like the LEDs. And the output driver takes up just 64 bytes of RAM.

Saturday, October 14, 2023

Teaching Apple Cyberdog 1.0 new tricks (featuring OpenDoc)

In the distant nethermists of time, documents once briefly ruled the earth (or at least Mac OS), and to that end I managed to find a verrry interesting book recently, complete with an unopened CD-ROM. But seriously, though: what was Apple thinking with that name?
It's not this cyberdog (image credit).
Not that cyberdog, though this is one of my favourite weirdo pinball machines.
Definitely not that cyberdog.
But thanks to all those other cyberdogs, Apple's own Cyberdog — a seemingly ordinary web browser and Internet suite with some unusual capabilities — has since slid into search engine obscurity. Apple had some big plans for it, though, and even wanted to give developers a way to develop their own components they could run inside of it. Not just plugins, either: we're talking viewers, UI elements and even entire protocol handlers, implemented using Apple's version of OpenDoc embedding.

Cyberdog's initial release belied some wild changes afoot, for in the world it inhabited, the document told the system what it needed to display, and the parts within the document displayed it. The document ruled all. The document was king.

And all of this came together in a special Cyberdog software development kit, complete with example code and the very first 1.0 release of the browser. Now that we have our PowerBook Duo 2300 rehabilitated, guess what we're gonna look at?

Sunday, October 1, 2023

Finally, an MOS 7600/7601 Video Game Array data sheet

A quick one. Many of you are aware of my rather abnormal fascination with the MOS 7600/7601, MOS Technology's dedicated "Pong-on-a-chip" (from the company that brought you my favourite CPU, the MOS 6502) that's actually a rather sophisticated microcontroller for the era. I own several 7600 systems now, including the Coleco Telstar Arcade, Radofin SC8000 and Commodore TV Games series, the Coleco Telstar Gemini and the Allied Leisure Name of the Game II. Compared with the General Instruments AY-3-8500, which was entirely hard-coded logic circuits, the MOS part has a programmable mask ROM in multiple variants and even more transistors than the 6502 itself.

The 7600 is now fairly well understood thanks to Sean Riddle's die photo, which Ken Shirriff exhaustively explored, but no one had ever found a data sheet — until earlier this summer. This data sheet is dated "Preliminary April 1976/Revision 1 June 1976," consistent with the earliest 7600 I've seen from 42nd week 1976, and gives the 7600 an official name, the Video Game Array (an unfortunate acronym collision). It specifically covers the original 7600-001 variant, an NTSC TV-compatible part that plays Pong in tennis, hockey and handball/squash/racquetball variations as well as a target practice mode, and is the variation present in most Pong consoles that used the MOS VGA. The mask ROM is explicitly stated as 512 words in size, which is read and executed by the "frame processor," acting as a combination I/O chip and CPU. The FP reads the opcodes from ROM, acquires player input, maintains the score, and sets up the display and audio output for the chip's analogue output stages.

The part that's gratifying is that the pinout and circuitry Ken and Sean independently figured out is nicely confirmed by the documentation, including the external colour support circuitry generated independently for player 1's paddle ("bat"); player 2's; and the ball, background, walls and score numbers. For even lower-cost systems, it supports a rainbow sweep system that just generates a rainbow colour pattern instead and is generated internally on-chip, though I have yet to find one of these systems myself. Interestingly, this mode requires a 3.595314MHz crystal instead of the usual NTSC colourburst frequency 3.579545MHz oscillator, which is one "line frequency" greater than the standard subcarrier (and that may be why I haven't encountered one yet, since ~3.58MHz crystals are substantially more common). It doesn't appear that the 7600 supported any other clock rates.

This data sheet confirms virtually all of our informed conjecture and fills in a few more gaps, but it appears to be missing at least two pages (between figures 4.1B and 4.6), does not have a complete pinout (only block diagrams), and since it comes from the beginning of the line naturally completely lacks a production history. We also don't know if there were pinout differences between the -001 and the later -002 through -004 variants, though this particular data sheet warns that "[f]uture games of the VGA series (MPS 7600-XXX) may make use of an expanded switch matrix ... Designers may wish to take account of this fact when producing printed circuit board layouts incorporating the VGA." The best understanding presently remains that there were only ever four game versions and Commodore, MOS' new owners that same year, discontinued production around 1978.