Wednesday, 6 January 2016

On designing a Video Card

Pass me a beer.

I’m quite impressed that as a teenager I had any idea how PAL video worked at all. I’m now in my 50s and I still haven’t really got it. I think NTSC is easier (even though the colours are bad)

I’ve only documented the main digital part of the video board (because the rest of it is a bit hopeless is the real reason), and this bit isn’t so bad.

The basics : IC9A and IC11A decode write to Video RAM (this shadows the lowest 2k of ROM from 0000-07FF).

IC1 and IC2 count horizontally, using IC2 pin Q3 to blank horizontally. IC3 and 4 do the same vertically.

The character positions (e.g. divide by 8 – note that IC3/4 divide by two initially e.g. IC3 pin Q0 is not connected, so each line of character data is repeated) are passed into address multiplexors IC5/6 which takes data from this on VRAM write. These are then fed into 128x8 RAM IC8 (Yay ! - Motorola – again) which can receive data from the bus gated via IC8 on VRAMWRITE.

This data out – the character – is fed into the character generator ROM IC10 (along with Q1-A3 of IC3) and multiplexed by IC12 (using Q0-Q2 of IC1), and the gated by the two blanking signals from the counters.

There’s one obvious mistake here (there’s probably half a dozen others !). There are no delays between the reset pulses (HSYNC and VSYNC) and video output. So No front porch time, no blanking period before vertical display starts. Oops. I also seem to have moved the whole blank area to the bottom, so the display occurs in the first 128 scan lines. Which means half of it will disappear.

I would probably fix it on this design by having them trigger a monostable multivibrator (each) which gates their clock inputs, thus effectively shoving the picture right and down – the outputs of these would have to be gated as well (so that when the monostable is blocking the clock the output is blanked). I do remember looking at an early video card which operated in this way.

But I have a spare 3 input NOR and ¾ of a 7400, so that probably means a couple of 555s – I think there’s a TTL dual monostable as well ? (The other way would be to use 74193 rather than 7493 and preset them to –ve values, though I’d need another /2 counter to clock the vertical position – gotta be able to count to 262 or 313.

Still nobody’s perfect…

What’s missing – well, at the end there is the mixing of the sync signals to produce composite video, and at that time there'd be an RF Modulator so you can plug it into a telly, and obviously there is no sync generation – these days the best way of doing this seems to be a microcontroller….. which would probably be more powerful than this computer.

Next up ; finish the emulator and replica versions, and write a test program for them which tests all the various bits and bobs.

The software emulator does actually emulate the bits on the ‘basic’ board – the buttons and LEDs and so on – and I have actually written a basic monitor for that system, but from now on I’m going to ignore those buttons, This monitor is the only bit of software that has survived, though it had a couple of bugs in it.

I think, in a real system the LEDs would go nuts in classic Blinkenlights style when you are writing to the video, because they are mapped onto the same space. What would an old computer be without Blinkenlights though ?

No comments:

Post a Comment