The ZikZak is a retro-styled computer and game console project. The project is a moving target that will ultimately end up in a very small run of pcbs that can be assembled as a kit. The latest incarnation is nicknamed the 'zik80' due to its intended brain being the venerable Zilog Z80 processor (popularized in 1980's home computers, game console and business systems.)
As of 2014, the Zik80 is the main project. I've been through a half dozen variations over the year with varying degrees of complexity but in the name of keeping to the guiding principles below have settled on some less expensive parts, that are fun and hackable and flexible. See the Guiding Principles below for the self-imposed handicaps.
Zik80 Basic specification:
CPU: eZ80 (reasonably modern descendant of the beloved Z80 cpu from the 1980s)
GPU: STM32 microcontroller (F2 or F4 are fine) - a general purpose mcu that we abuse into a graphics generator
RAM: 128KB or 256KB or 512KB (easy to add more to the design, but settled on a workable amount for a retro-styled machine)
ROM: Uses cartridges! Each cartridge can be up to several MB in size .. 8bit CPUs of the 80s could only dream..
Ins and Outs: VGA output (full colour), PS/2 keyboard, Atari-style joysticks, classic era sound chip (AY-3-8910, YM2149, it goes by many names); multiple serial ports
Expansion options are plentiful .. some GPIO headers are exposed; i2c bus exposed; serial; the cart slot with full bus and 3.3V and 5V power feeds; USB pads exposed; and more! Designed for hackability! Reflash the eZ80, the STM32, or even the cartridge on the fly to change how the CPU and GPU work, or program your own cartridges!
For more information read on!
These are the ever changing specifications; No doubt wildly out of date.
|DIY||Full Do It Yourself Kit||Yes!||We want it moddable; yes thats a guiding principle, but its worth restating! Thats why we're here!|
|Display||VGA (Resolutions; at least 256×240, 320×240 and 320×480, and likely 640×480 and various text modes) - we're writing our own video code, so make your own resolutions.. not too hard.||Yes!||STM32 pure software VGA 320×240 works sharp!|
|GPU||STM32F4||Yes!||General purpose microcontroller being used as a software GPU, because we like to do things the hard way|
|CPU||Zilog eZ80||Yes!||Specifically: EZ80F93AZ020SG|
|RAM||128KB main RAM (easily changed in design); theres also 4KB SRAM built into the CPU, but thats a little cheating; maybe use it for stack, nice and fast.||Yes!||The eZ80 can actually manage up to 16MB of RAM, but current target is for kit to default to 128KB; fairly trivial to solder in larger pieces if you need .. headers should be exposed|
|RAM||512KB||Yes!||r3 and later pcb can support the higher RAM sizes; added up to 512KB in case I want to run an ancient Linux, or various other operating systems..|
|CPU Speed||20MHz (or less)||Yes!||Driven by a crystal .. use any speed you like up to 20MHz; it is also possible to drive the clock from the GPU (say), to make the speed variable; in practice, thats sort of goofy and confusing, so not in the earliest revision.. but maybe do later. For fun.|
|CPU Peripherals||I²C, UART/USART serial, GPIO||Yes!||These are in the breakout headers, if you like|
|CPU Flash||64KB||Yes!||This eZ80 has built in flash, which can be used for a basic firmware/BIOS standard, and directly programmed to make development easier than cartridge program-and-swap cycle. We're mostly using the cartridge ROM as Crom intended, but certainly a basic BIOS or BASIC or something will be in the flash … even if its only a “no cartridge installed” message.|
|CPU Programmable||Directly, or via GPU||Yes!||Can use a Zilog programmer device for CPU … or just update a ROM cartridge from the GPU; or from the CPU; the basic BIOS/bootloader should be able to take a plain serial connection and update cartridges or its own code .. no special hardware needed. Unless you want to get a Zilog Smart Cable (Ethernet or Serial or USB), or a ST Micro programmer, etc .. all good. Very awesome. And optional.|
|Cartridge Programmable||Depends on the cart||Yes!||The reference cart I'm designing uses a fairly expensive writable eeprom; could use a Zikburner, or update it from the CPU or GPU; the cartridge slot supports both 5V and 3.3V, so you have quite a range in parts you could use as cartridge ROM or EEPROMs; heck, stick an SD card slot in there.|
|Sprites||Should be a sprite-list generated in CPU, with GPU rendering the 'scene graph' each frame||Yes!||several hundred full colour sprites rendered per frame; the GPU can read the cartridge for sprite data, or the CPU can prepare a framebuffer, or the CPU could send a list over serial or via the RAM bus; or i2c; or …. you get the idea; we're writing the GPU firmware, go nuts.|
|Keyboard||PS/2 standard keyboard||Yes!|
|GPU Serial||USB-Serial||Yes!||Should be available at least for logging to a PC, but likely two way serial over the USB as a 'console'; or as a way to reflash components. Or to drive the video.|
|CPU Serial||USB-Serial||Yes!||May want CPU to have its own serial-over-usb channel for debugging; more to point, could perhaps have a bootloader in the cpu, which knows how to program the flash or the carts, and thus use serial custom protocol to reflash components…|
|Joystick||Classic Atari||Yes!||8way with fire button supported; two supported; they're actually GPIOs, that share serial pins; so one joystick plus some serial; or 1 joystick plus GPIOs for something else; theres a separate spare GPIO header as well, so two joysticks plus GPIO is good too; very flexible. Oh, you can have more than 1 fire button, since our joystick ports are 8 pins each .. 4 way + 4 buttons, say. Whatever you like, its up to you.|
|GPU Programmable||ST-Link V2||Yes!||The firmware for the GPU (and all ICs) is available in source and binary; hack your own GPU updates, add features and improve performance as you see fit!|
|Audio||AY-3-8910||Yes!||The famous audio chip from 80s arcade games and home computers/consoles like the Spectrum|
|Cartridges||36 pin slot||Yes!||“ROM Packs” or cartridges, like in the good old days; should fit into an Atari 2600 cart shell, too. Cart specification will allow nearly 2MB of storage on the carts, though they can be any size they want .. even exceed that with bank switching logic, etc.|