重制1987年的自制游戏系统
Recreating a Homebrew Game System from 1987

原始链接: https://alex-j-lowry.github.io/z80tvg.html

## Z80电视游戏:极简8位游戏机 Z80电视游戏是一款完全可用的8位游戏机,由一位日本爱好者于1987年从零开始制作,仅使用19个集成电路——没有专用图形芯片!它配备了4MHz Z80处理器、32KB ROM地址空间、16KB系统ROM和8KB视频RAM,输出168x210像素的黑白图形,刷新率为60Hz,音频为1位。 尽管结构简单,该游戏机却支持令人惊讶的复杂游戏。目前有26款游戏,由原始设计师创作,并由开发者Inufuto扩展,他使用跨平台编译器。 该系统设计易于理解,非常适合学习计算机视频信号生成。有各种可下载资源可用,包括原理图、PCB文件,甚至多卡带(可容纳最多16款游戏)和实验性256KB卡带扩展的设计。软件开发通过Z88DK、Cate和Cross-Lib等工具支持,允许使用C语言和Z80汇编进行编程。

一个黑客新闻的讨论围绕着一个项目,该项目重现了1987年自制游戏系统(链接为 alex-j-lowry.github.io)。最初的帖子引发了人们对该系统技术限制的兴趣,特别是它的“1位音频输出”。 评论者们以一种有趣的方式探索了这个限制的可能性,有人建议通过超频可以达到“发烧级”效果,甚至提出了一种用于DSD输入的设备。另一位用户分享了Tristan Perich的作品,他专门使用1位音频创作音乐。有人提出了一个实际的建议,即从为熟悉的PC扬声器开发一个声音库开始。 最后,一条评论赞赏了网站的布局,并注意到其真实的“Netscape”生成器标签,暗示该项目对历史准确性的奉献。该帖子还包含一个Y Combinator申请提醒。
相关文章

原文
Z80 TV Game - Alex J. Lowry's Electronics Homepage
Z80 TV Game logo

Introduction

Z80 TV Game in operationIn 1987, an electronics hobbyist from Japan developed this 8-bit games console entirely from scratch! Despite the simplicity of its circuitry (Only 19 ICs are needed to construct the system, none of which are dedicated graphics chips), it's possible to write surprisingly advanced games for it!

The specifications are as follows:

  • 4MHz Z80 processor (The timing of the video circuit is derived from a source separate to the computer, so running the CPU at a higher clockspeed would be fairly simple.)
  • Address space of 32KB for ROM cartridges (ROMs larger than 32KB should be possible with bank switching.)
  • 16KB of system ROM
  • 8KB of separate video RAM
  • 168x210 pixel black/white graphics
  • 60Hz composite video output
  • 1-bit audio output
  • 1 controller (4 direction buttons, 2 fire buttons)
As of the time of writing, 26 game programs have been developed for the Z80 TV Game: 6 games by Mr. Isizu (the designer of the Z80 TV Game), and 20 games by Inufuto, who has developed a multi-platform compiler that supports the Z80 TV Game.

Technical Description

Close-up of assembled systemThe circuitry of the Z80 TV Game is relatively easy to understand, making it a good resource for learning how a computer generates a video signal.

Controller input and audio output are handled by either an Intel 8255 or Zilog Z80PIO I/O controller. There are two sockets on the PCB for either controller, depending on which is easier for you to obtain. These two ICs have to be controlled slightly differently by software, but it's possible to write games that are compatible with both, as demonstrated by the games written by Inufuto.

The controller interface is designed for two-button Sega Master System controllers and will also work with Mega Drive/Genesis controllers. Standard one-button joysticks will also work, aside from the lack of a second button.

The composite sync signal is generated with an EPROM, an unconventional method of simplifying the circuitry. Different ROMs have different data access times, so you may need to experiment with one or two models of ROM before you'll find one that produces a glitchless video signal, due to the high speed at which the raster generator steps through the ROM's address bus.

Fortunately, any size of ROM between 4KB (2732) and 64KB (27512) can be used, so long as the 4KB binary data file (available for download further down this page) is written to the upper 4KB of higher capacity ROMs. During testing, I found that a 150ns ROM worked well, while a 450ns ROM was too slow.

If the prospect of making a lot of cartridges doesn't appeal to you, I've designed a multi-cartridge that holds sixteen 32KB games on one 27C040 ROM. Game selection on the multi-cartridge is performed with DIP switches.

The maximum file size for games is 32KB, but I've designed an experimental bank-switching cartridge PCB (not tested yet!) that should allow games of up to 256KB to be accessed through two configurable 16KB page registers on the cartridge.

Software Development

Close-up of 32KB cartridgesThe memory map of the Z80 TV Game is as follows:
  • $0000-$7FFF: Cartridge ROM (32KB)
  • $8000-$BFFF: System RAM (16KB)
  • $C000-$DFFF: Video RAM (8KB)
  • $E000-$FFFF: Not used
Since it's possible to use either the 8255 or Z80PIO to handle I/O, there are two possible I/O maps:

8255:

  • Port $00: Controller input (bits 0-5, active low)
  • Port $01: Not used
  • Port $02: Audio output (bit 0)
  • Port $03: 8255 internal control register (Must be set to $9A for proper operation!)
Z80PIO:
  • Port $00: Controller input (bits 0-5, active low)
  • Port $01: Internal control register A (Must be set to $4F for proper operation!)
  • Port $02: Audio output (bit 0)
  • Port $03: Internal control register B (Must be set to $0F for proper operation!)
Z80 TV Game in operationAs mentioned earlier, 6 games (also a larger ROM containing all 6 games and a selection menu) have been developed by the creator of the Z80 TV Game, Mr. Isizu. These games were written in Z80 assembly, and the source code listings (with code comments in Japanese) are available for download here.

There's a selection of tools available for programming the Z80 TV Game in C:

  • The Z88DK development kit supports the Z80 TV Game.
  • Cate is a C-like programming language and multi-platform compiler developed by Inufuto that can compile code for hundreds of retro systems. Inufuto has ported 20 games written with it to the Z80 TV Game.
  • Cross-Lib is a multi-platform C programming framework with support for hundreds of retro systems, including the Z80 TV Game.

Changelog

Revision 0:
Initial prototype, as seen in the photos.
  • A jumper on the PCB was intended to allow usage of Atari 7800 controllers. After some research (which I should've done before ordering the PCBs...) I realized that the outputs of A7800 controllers are active high, so implementing A7800 controller support would require a lot more circuitry that wasn't worth adding.
  • The 74LS122 that generates the pixel clock wasn't oscillating, which was due to a misprint on the original schematic.
Revision 1:
This is the version available for download on this page.
  • VCC connected to pin 5 to allow usage of Sega Mega Drive/Genesis controllers.
  • 74LS122 clock circuit fixed.

Downloads

Close-up of assembled system Interactive Bill of Materials - Console
    HTML document, 531 KB

Schematic - Console
    PDF document, 941 KB

PCB Gerbers - Console
    ZIP archive, 744 KB

KiCad Files - Console
    ZIP archive, 1.33 MB - Useful if you want to make modifications to the PCB. Made with KiCad 9.

Interactive Bill of Materials - 32KB ROM Cartridge
    HTML document, 338 KB

Schematic - 32KB ROM Cartridge
    PDF document, 127 KB

Z80 TV Game in front of a local landmark PCB Gerbers - 32KB ROM Cartridge
    ZIP archive, 170 KB

KiCad Files - 32KB ROM Cartridge
    ZIP archive, 532 KB - Useful if you want to make modifications to the PCB. Made with KiCad 9.

Interactive Bill of Materials - 32KB x 16 Multi-Cartridge
    HTML document, 350 KB

Schematic - 32KB x 16 Multi-Cartridge
    PDF document, 151 KB

PCB Gerbers - 32KB x 16 Multi-Cartridge
    ZIP archive, 191 KB

KiCad Files - 32KB x 16 Multi-Cartridge
    ZIP archive, 564 KB - Useful if you want to make modifications to the PCB. Made with KiCad 9.

3D render of 32KB cartridge Interactive Bill of Materials - Experimental 256KB ROM Cartridge
    HTML document, 316 KB

Schematic - Experimental 256KB ROM Cartridge
    PDF document, 221 KB

PCB Gerbers - Experimental 256KB ROM Cartridge
    ZIP archive, 209 KB - Please note that the 256KB cartridge hasn't yet been tested!

KiCad Files - Experimental 256KB ROM Cartridge
    ZIP archive, 603 KB - Useful if you want to make modifications to the PCB. Made with KiCad 9.

Custom Fonts
    ZIP archive, 8.90 MB - Custom fonts used for the KiCad files. Only needed if you want to modify these files.

Original Schematics
    ZIP archive, 1.14 MB - Mr. Isizu's original schematics for the Z80 TV Game, with the 74LS122 timing circuit corrected. Includes the 1980's hand-drawn schematic, which has a different memory map to the 2000's CAD schematic that this PCB, emulators, C devtools, etc. are based on.

Game ROMs
    ZIP archive, 922 KB - All the games I know to exist for the Z80 TV Game thus far. Includes two combined ROMs for those who would rather have all 26 games on 2 multi-cartridges. If you know of any games that aren't mentioned on this page (or you've written a new game), please let me know! My email address is on the home page.

32KB Cartridge Dimensions
    PDF document, 61.3 KB - Useful for designing a 3D printed cartridge enclosure. Note that the standard PCB thickness used by most manufacturers is 1.6mm.

32KB x 16 Multi-Cartridge Dimensions
    PDF document, 67.1 KB - Useful for designing a 3D printed cartridge enclosure. Note that the standard PCB thickness used by most manufacturers is 1.6mm.

Z80 TV Game Logo (1920 x 846) (Variant 1)
    PNG image, 1.21 MB - The logo seen at the top of the page in full resolution.

Z80 TV Game Logo (1920 x 846) (Variant 2)
    PNG image, 1.08 MB - The logo seen at the top of the page in full resolution.


Thanks to:
    Mr. Isizu: The original designer of the Z80 TV Game.

    Inufuto: Developer of Cate, a multi-platform compiler that can generate software for the Z80 TV Game. All 20 of the games he has created with it thus far have Z80 TV Game versions. Inufuto has also designed a PCB version of the Z80 TV Game that outputs VGA video via a Raspberry Pi Pico.

    Takeda Toshiya: Developer of eZ80TVGAME, a Z80 TV Game emulator for Windows.

    lsluk: Developer of vdmgr, a multi-platform emulator for Windows that supports the Z80 TV Game.

Last updated on Oct 26, 2025.
This page was first uploaded on Oct 26, 2025.

联系我们 contact @ memedata.com