3

I'm designing my own computer based on the Zilog Z80. It has 256KiB of static RAM with paging as well as a few megabytes of flash memory. Everything is going along pretty well until * BAM * I hit a dead end.

The problem that I am having is designing a video controller. I was thinking about some kind of a terminal or display. A 24x80 or 25x80 terminal would be wonderful. However, even a 640x480 VGA display would take up enormous amounts of memory.

640 * 480 = 307.2 Kbits

That is even more than the amount of memory addressable by the Z80 at one time!

Also, if I want color, say, one bit per color, I would need 3 bits per pixel.

307.2 Kbits * 3 = 921.6 Kbits

In addition, wouldn't it need to be dual-ported to allow access from Z80 and the monitor?

Because this is extremely difficult to implement in software and hardware, would it be a good decision to use a character ROM? It would be very difficult for me to get fuse-link PROMs or UV EEPROMS. What should I do? Can I put a character ROM in flash memory? How would I implement it in the controller? How do I tell the character ROM which character to spit out? Should I even use VGA? Would component video (NTSC or PAL) be easier than VGA?

If a good system can be designed, perhaps we can even use it for microcontrollers! Give me all you got, I need as many ideas as possible.

Kevin Reid
  • 7,444
  • 1
  • 25
  • 44
fuzzyhair2
  • 1,927
  • 15
  • 23
  • 2
    You might check the video hardware of the ZX80/81, details can be found by googling. Or cheat an use a modern microcontroller as video-generating subsystem. – Wouter van Ooijen Apr 21 '13 at 16:14
  • @WoutervanOoijen: The ZX81 used an ASIC to assist video generation, IIRC, and the ZX80 couldn't do anything while maintaining a stable display. There was a book Dirt Cheap Video Handbook which had some clever ideas, though. It should be possible without too much logic to build a system which uses an interrupt to start display generation, but lets the CPU run other code during vertical blank and retrace. – supercat Nov 15 '13 at 00:20
  • @WoutervanOoijen: It's too bad decent-sized shift-register chips are no longer available (the 1024-bit shift register chips used in the Apple I were probably cheaper relative to the cost of e.g. a 7400, than would be any chip that could serve such a function today). Otherwise adding a few shift-register chips would probably let one cut the CPU overhead of display processing considerably. – supercat Nov 15 '13 at 00:23

4 Answers4

6

This is why VGA displays didn't happen until long after the Z80.

Block graphics with sprites, or 1 bit per pixel monochrome graphics, or character ROM based display modes were the order of the day. Sometimes you could switch modes between them.

Using character ROMs, the ASCII character code provided most of the address into ROM, with (scan line mod 10) providing 4 LSBs of address. So you stored ASCII character codes into a small (maybe 2kbyte) RAM, and the video controller hardware read a string of 80 from this RAM, (10 times in succession for 10 successive scan lines) to deliver 80 bytes (640 bits) per line.

Those 80 bytes may come from a 128 byte section of the 2K RAM, to simplify the video addressing. Likewise the 10 scan lines come from a 16 byte section of the character ROM to simplify addressing. With a suitable design you can select a different page of character ROM with 14 or 16 bytes per character for a prettier font (and fewer lines of text on screen!) with only minor changes to the video hardware.

The 6845 video controller was a popular device that could handle this sort of addressing and simple bitmapped graphics; it should still be easy to find a lot of information on it.

4

Maybe you will decide that a serial LCD display will be the one for you: -

serial LCD

I've circled the bit in red that talks about the serial port. This is just one idea - there are plenty of LCDs that might suit. You can use the Z80 UART or DART (if they still make them and fire your info to the module.

Andy aka
  • 434,556
  • 28
  • 351
  • 777
1

I know this is an old question, but I am actually doing pretty much the same thing. I am designing an "80's style" console based on the Z80.

What I have decided to use is the Propeller microcontroller from Parallax. https://www.parallax.com

The Propeller (sometimes called "prop") has 8 cores that run at the same time. Each core is capable of displaying NTSC/PAL and VGA video with not much programming. It's a very capable chip and while it lacks some of the on-board hardware features of Atmel, it makes up for it in the 8 cores running 20 MIPS each (160 MIPS).

Plus the community is amazing and there have been many audio/video emulators written for it. In fact, I believe a complete Z80 is able to run on one core leaving 7 others to do other things like video and audio.

I can't recommend them enough. Especially for anything that deals with VGA or NTSC/PAL video.

cbmeeks
  • 1,190
  • 2
  • 13
  • 27
  • So what you're saying that you're doing nothing like the OP, you're making an emulator? What would the other 7 cores do part from the video? Sounds a little wasteful in this case. And how does it solve the problem with addressing the massive amount of video ram from the Z80? – pipe Sep 08 '17 at 17:51
  • @pipe No, I'm not saying that at all. I simply recommended checking out the Propeller because it's used in MANY homebrew computers for text and graphics output. And the OP is a little off with the math because a VGA (TEXT BASED) doesn't take that much RAM. Especially if you use a terminal driver. You just send characters to the Propeller. The 7 other cores are not wasted unless you waste them. Typically they would be used for control, audio, etc. For $8, you have a chip that can render 2-4 different VGA signals if you wanted. Not a bad deal. – cbmeeks Sep 08 '17 at 18:04
  • @pipe check out this example of a Z80 based computer that uses the Propeller to generate VGA and emulates disk drives at the same time. http://www.shaels.net/index.php/mini80/mini80-general/119-mini8o-overview – cbmeeks Sep 08 '17 at 18:06
0

You can use something like Tellymate, AVR VGA Generator, AVR-VGA, or Simple VGA/Video Adapter.

avra
  • 1,872
  • 3
  • 14
  • 21