skeezix
Internal Development
edit: Got a website up now:
http://www.zikzak.ca/
'first post' is waaaay out of date now; hit up the wiki site for somethign useful, but here is a photo of the finished(?) thing .. Dec 2014:
edit: I've not been updating the first post(s) so you'll want to trail along at the end of the thread; don't worry if you skip the first 90% of the pages, its okay.. Iv'e shifted through a half dozen or more revisions/designs over time, trying varying levels of complexity and features out, but the end of thread is where things are happening
Schematic as of mid-November (still in flux as we figure out how retro, what things to include etc):
--
A few folks have shown interest in this crazy project of mine so I thought I'd open a thread about it; if people keep showing an interest (!?!) then I'll add a few bits here or there as they come! Comments, questions, thoughts are welcome.. but no negative criticism or flames here. Its a personal project, for fun, and to learn, and I know I'm doing it the most boneheaded way possible. (But hey, I get to use an oscilliscope, which makes me smile!)
So, yeah, screw it -- I'm going to make an early '80s style 8bit computer and game console, from scratch, using more or less the same kinds of parts as available back then. I've done SoC modern chips, where one chip is the whole computer; I've fiddled with FPGAs and so on.. thats all great, and thats how you work now, but its _cheating_. No, I want to put something together with cheap parts. The whole computer has to cost maybe $20 in parts, and be able to run a game like Pacman or Zelda and I'd like to reach even further. Lets see where I can go! I'm sure this is all first day EE class stuff, but I'm a software guy. I'm quite a good software guy. I've even done low level hardware and embedded software and worked on kernel drivers for obscure machines no one has heard of. Great. But hardware, thats something I'm blind at.
And hey, if I do my job right, my kids are going to want to build a robot. My dad is an airplane nerd, builds model aircraft. If I play my cards well, I'll see if I can make a quadropter drone with my old man, and with my kids.. or at least a lilne following little car... But first things first.. this little computer is not going to make itself!
I've been wanting to do this for years.. like, 10+ years ... and finally gotten around to doing it. Somehow, when I get the smallest amounts of free time, I get the biggest urge to get things done and to take on new projects.. andreally kill myself. Character flaw.. but if you're going ot be up all night and sleep deprived to hell with babies.. your brain is _on_, like it or not; its a messe dup brain, but its still alive. First kid got BattleJewels done. These guys, compo4all and now Zikzak, as well as unreleased RPG game engine Such is my way! Anyway I've always been a fan of general electronics .. my father is a machinist and general do-it-yourselfer so I've picked up a few things, but not much (sadly.); I'm one of those 'mostly useless' people .. software is great, but it doesn't fix the dishwasher or build a chair, you know? But I'll try anything.... make up for lack of skill with spirit and sweat! Anyway, in school I picked up some house-wiring classes (back when highschools _did_ that sort of thing.. a real shame they've mostly given up on shop classes ;/), and I've always had some interest in electronics... (building shit, and blowing shit up, good times..) but with so many other interests higher on the pole this hobby never got much attention. Still, years later I was one of the earliest emu authors and used to work over arcade machine schematics trying to figure out how they ticked .. I was working on Space Invaders emu, Phoenix emu, Galaxian emu, stuff like that, before most people (long before MAME ever existed) so that helped clue me into some basic digital electronics (figuring out how the banking worked, how multiple RAMs were hooked up, that sort of thing.) I used to do repair work on old PCBs as well, as I'm an avid arcade machine collector.. most of the old classics (Pacman etc) would come in rough shape, so you'd have to restore the cabinet a bit, and often tune up the pcb.. fix the audio, or some screwy graphics in one part of the screen.. lines on the display.. replacing caps in the monitor, etc. So I picked up a few things. But only general knowledge, nothing you could say was actually concrete. I couldn't design a circuit if my life depended upon it, but I knew enough to poke an audio probe into a cpu to see if it would squeel (so you knew power was getting to the cpu, say, or if it was crashed or working..) Being a software guy makes you ruthlessly logical, so debugging is a strength, and the same skills apply to electronics debugging (or automotive debugging, housewiring, etc.) Honestly, a lot of the same principles apply everywhere.. I've always thought it interesting how my father thinks through a project.. his machine and tooling perspective is much the same as a software guys, at some level. Anyway.
If theres one thing I want my kids to pick up from me is .. _never stop learning_. Sure, read comics, watch tv and movies, get tatooed up like your ol' man, but never ever stop absorbing information, and trying shit out.
Goal: The ZikZak
Features planned so far (this is a design in progress.. feel free to suggest things. Who knows, if people like this (christ only knows why , I may even build a dozen of them to sell )
- 120 wide by 240 height on colour VGA (currently getting about 40x240 fairly stable, but as I refine the GPU components (heavy in progress) I should be able to get to 120x, or possibly even 200x240 sort of resolution. (VGA baseline which is 480lines, so going to 240 with line-doubling is pretty easy. Its the X where you get some play, but with conventional 8bit chips its hard to drive a VGA without getting more clever than I can handle _right now_)
- cartridge slot (YEEEESSSSS!) .. I could do SD pretty easily, and may do, but I really want to go old school here
- 4bit or 8bit audio (I'm not big on audio development, so its not a high priority of mine. Still, need to have some Atari 2600 level of audio ability, right?)
- 16K of fast RAM in current design (cheating a little)
- multiple banks of 'slow ram' (traditional RAM, external to CPU. Old school!) <- currently aiming for hardware double buffered framebuffer, so dual 64k buffers
--> some of this ram may be reserved for sprite-lists andbasic effects (lighten/darken), but that may be a bit down the road. VGA is very demanding spec, so keeping my chips busy already!
- at least one joystick port, maybe two (or maybe expandable via cartridge slot) <- Atari 9-pin style. Your old amiga, atari, commodore sticks work fine
- not sure yet: small 2-text-line LCD panel for debugging or basic messages
- currently, 9V battery driven; maybe I should make it take 120VAC mains, or a wall wort; we'll see. Very low power, a 9V battery will last for aggggges.
- 128k flash for storing firmware (possible bootloader or a game or menu or something; for now, I just flash code right into the chips on the board, saves me dicking around with eproms in and out of sockets every few seconds.)
- 8bit cpu (currrently an avr 8bit, but could be swapped in with a 6502 or 6809 or z80..)
- 8bit gpu (currrntly an avr 8bit, but could cut over to a ubicom sx28 for speed, or even some faster chip entirely.. but hoping for now to stick with avr's since I'm a fan, and awfully convenient to keep to fewest number of chip families.. limited time here, lets not fight 3 different flavours of assembly at a time shall we?
Originally I went for a 6502 (or varient thereof) as target, since I love the old Commodore line (like Vic-20 and C64); but 6809 was such a great chip, and even the ol' Z80 has a special place in my heart. Or a 68000...... well, I schematiced out some of these guys in basic designs, and start fiddling on breadboard with a 6502 system.. and its very doable, but day-zero it was a lot to bite off. With these old guys you have to at least have a SRAM for RAM, and a flash or eeprom for ROM, and do a reasonable amount of software to get going; sorting out all those wires and supporting logic was a bit much, so I backed away from that (I'll be back soon!); ende dup fiddling with a Ubicom SX28 that I had lieing around (a few of, in fact, since I expected to burn/brick some .. its a very fast chip, so hobbyists use it quite a bit. (Chip can run 1-80MHz or so stably), though its not quite 1 cycle per instruction, and has no built in peripherals etc. Still, at that high speed, you can fake a lot of peripherals support.. interupts that can drive VGA and serial and so on direct, nice! But turns out a breadboard can't do high MHz without getting into all sorts of business I didn't know about then and do now. (The tie-points of a breadboard act a lot like capacitors when high speed is going on, causing all sorts of mischief, etc.) So having to go right to sockets and perfboards and so on, for the GPU, seemed like it was getting to be a bit much (I waqs making a lot of mistakes, and having to take hours to fiddle around with the soldering station was slowing me down; I have _very little_ free time, so wanted to spend it wisely.. I can change as I go, but want to have solid momentum, not bog myself down.)
So I have fallen back to old reliable Atmel avr 8bit chips; they're cheating a bit, since they they generally come with some build in RAM and flash space, so you can bring them up on a minimum of wiring; they're also 'slow' (usually 8/16/20mhz, no more); the built in RAM is very limited (usually a few K only), though the flash is fairly generous (a few K, to 128K on the bigger ones.) Available in various packages from DIP (big pins you can stick into a breadboard) to TQFA (quad flatpack, the surface mount style chips you think of, with tiny little fairline thin wires.) I was afraid to get into surface mount chips early on, but turns out they're actually _easier_ to solder to a designed board than DIP .. with some easy but unexpected techniques (look up 'drag soldering'); you can solder a 100pin SMT part in like 2 minutes, and it freaking works! -- but only if you've got a nicely etched board; when you're designing from scratch, usually best to stick with DIP or through-hole parts... or little adapter boards that have SMT packaging on one side, and DIP on the other, so you can use modern SMT parts on a prototype.
Anyway, I figure the atmels are great supported chips, that still feel very retro (8bit and all); its great to have thriving communities around these guys, but not be 'cheating' much. (Note the Arduino uses an Atmel avr chip, and that is a huge community; but the Arduino people are only half into hardware tinkering.. its more of a way to get 'up and going fast', so its all about cheating; you get ready to use 'shield' pcboards to stick onto your arduino, and ready to use library code, and so on; its all about glueing stuff together to get things done. So its great fun, and very encouraging to newbies, but its not where I'm going. I want to go from scratch and learn the details. Turns out there snot much to an arduino, I can build one from scratch myself, so I don't much see the point in arduino myself, but I totally get who its for.. and its a great project. Check it out.)
I also still have some schematics for my 6502 design, 6809 design and so forth; I'll dig them out for you one of these days.
AAAAANYWAY, all that said (sorry, up late as always, and had a few drinks after doing fireworks with the oldest kid, so I'm rambling..) -- what have I got _so far_? and pictures, thought process, etc?
I'll get to that next update. Just wanted to get this out, see if anyone likes how and what I'm writing about.
I will leave you with these pics for lulz; these are mostly the GPU-side of things in test form; the main cpu isn't in these test pics; the cpu and gpu are both microcontrollers, but they have separate responsibilities; the cpu is where game logic runs, and it controls the double buffering, reads joysticks etc; I may add a third chip, an I/O specialist chip, but for now aiming for a two microcontroller arrangement, plus all the ram and buffers and shifters and other supporting ICs.
LCD:
NTSC test:
http://www.skeleton.org/zikzak/zikzak1-ntsc-mono-line-001.jpg
VGA tests:
SRAM test; this is driving VGA while also talking to external (out of chip) RAM:
Links to later posts with topics..
- software (CADs): http://boards.openpandora.org/index.php/topic/13166-zikzak-crummiest-8bit-consolecomputer-ever-but-im-making-it/#entry248588
- tools (anti-state mat, solder iron or station, pliers, etc etc)
- parts and ordering (speed, timings, quality, family..)
- common ICs you should stock up on
- the power supply
- the overall plan
- peripherals
- revisions planned
- the programming and debugger interface
- the cpu
- the cpu
- the hardware double buffering and switching
- joystick inputs
- cartridge slot
- audio outputs
- oscilliscopes are awesome
- boardhouse to spit out a pcb
http://www.zikzak.ca/
'first post' is waaaay out of date now; hit up the wiki site for somethign useful, but here is a photo of the finished(?) thing .. Dec 2014:
edit: I've not been updating the first post(s) so you'll want to trail along at the end of the thread; don't worry if you skip the first 90% of the pages, its okay.. Iv'e shifted through a half dozen or more revisions/designs over time, trying varying levels of complexity and features out, but the end of thread is where things are happening
Schematic as of mid-November (still in flux as we figure out how retro, what things to include etc):
--
A few folks have shown interest in this crazy project of mine so I thought I'd open a thread about it; if people keep showing an interest (!?!) then I'll add a few bits here or there as they come! Comments, questions, thoughts are welcome.. but no negative criticism or flames here. Its a personal project, for fun, and to learn, and I know I'm doing it the most boneheaded way possible. (But hey, I get to use an oscilliscope, which makes me smile!)
So, yeah, screw it -- I'm going to make an early '80s style 8bit computer and game console, from scratch, using more or less the same kinds of parts as available back then. I've done SoC modern chips, where one chip is the whole computer; I've fiddled with FPGAs and so on.. thats all great, and thats how you work now, but its _cheating_. No, I want to put something together with cheap parts. The whole computer has to cost maybe $20 in parts, and be able to run a game like Pacman or Zelda and I'd like to reach even further. Lets see where I can go! I'm sure this is all first day EE class stuff, but I'm a software guy. I'm quite a good software guy. I've even done low level hardware and embedded software and worked on kernel drivers for obscure machines no one has heard of. Great. But hardware, thats something I'm blind at.
And hey, if I do my job right, my kids are going to want to build a robot. My dad is an airplane nerd, builds model aircraft. If I play my cards well, I'll see if I can make a quadropter drone with my old man, and with my kids.. or at least a lilne following little car... But first things first.. this little computer is not going to make itself!
I've been wanting to do this for years.. like, 10+ years ... and finally gotten around to doing it. Somehow, when I get the smallest amounts of free time, I get the biggest urge to get things done and to take on new projects.. andreally kill myself. Character flaw.. but if you're going ot be up all night and sleep deprived to hell with babies.. your brain is _on_, like it or not; its a messe dup brain, but its still alive. First kid got BattleJewels done. These guys, compo4all and now Zikzak, as well as unreleased RPG game engine Such is my way! Anyway I've always been a fan of general electronics .. my father is a machinist and general do-it-yourselfer so I've picked up a few things, but not much (sadly.); I'm one of those 'mostly useless' people .. software is great, but it doesn't fix the dishwasher or build a chair, you know? But I'll try anything.... make up for lack of skill with spirit and sweat! Anyway, in school I picked up some house-wiring classes (back when highschools _did_ that sort of thing.. a real shame they've mostly given up on shop classes ;/), and I've always had some interest in electronics... (building shit, and blowing shit up, good times..) but with so many other interests higher on the pole this hobby never got much attention. Still, years later I was one of the earliest emu authors and used to work over arcade machine schematics trying to figure out how they ticked .. I was working on Space Invaders emu, Phoenix emu, Galaxian emu, stuff like that, before most people (long before MAME ever existed) so that helped clue me into some basic digital electronics (figuring out how the banking worked, how multiple RAMs were hooked up, that sort of thing.) I used to do repair work on old PCBs as well, as I'm an avid arcade machine collector.. most of the old classics (Pacman etc) would come in rough shape, so you'd have to restore the cabinet a bit, and often tune up the pcb.. fix the audio, or some screwy graphics in one part of the screen.. lines on the display.. replacing caps in the monitor, etc. So I picked up a few things. But only general knowledge, nothing you could say was actually concrete. I couldn't design a circuit if my life depended upon it, but I knew enough to poke an audio probe into a cpu to see if it would squeel (so you knew power was getting to the cpu, say, or if it was crashed or working..) Being a software guy makes you ruthlessly logical, so debugging is a strength, and the same skills apply to electronics debugging (or automotive debugging, housewiring, etc.) Honestly, a lot of the same principles apply everywhere.. I've always thought it interesting how my father thinks through a project.. his machine and tooling perspective is much the same as a software guys, at some level. Anyway.
If theres one thing I want my kids to pick up from me is .. _never stop learning_. Sure, read comics, watch tv and movies, get tatooed up like your ol' man, but never ever stop absorbing information, and trying shit out.
Goal: The ZikZak
Features planned so far (this is a design in progress.. feel free to suggest things. Who knows, if people like this (christ only knows why , I may even build a dozen of them to sell )
- 120 wide by 240 height on colour VGA (currently getting about 40x240 fairly stable, but as I refine the GPU components (heavy in progress) I should be able to get to 120x, or possibly even 200x240 sort of resolution. (VGA baseline which is 480lines, so going to 240 with line-doubling is pretty easy. Its the X where you get some play, but with conventional 8bit chips its hard to drive a VGA without getting more clever than I can handle _right now_)
- cartridge slot (YEEEESSSSS!) .. I could do SD pretty easily, and may do, but I really want to go old school here
- 4bit or 8bit audio (I'm not big on audio development, so its not a high priority of mine. Still, need to have some Atari 2600 level of audio ability, right?)
- 16K of fast RAM in current design (cheating a little)
- multiple banks of 'slow ram' (traditional RAM, external to CPU. Old school!) <- currently aiming for hardware double buffered framebuffer, so dual 64k buffers
--> some of this ram may be reserved for sprite-lists andbasic effects (lighten/darken), but that may be a bit down the road. VGA is very demanding spec, so keeping my chips busy already!
- at least one joystick port, maybe two (or maybe expandable via cartridge slot) <- Atari 9-pin style. Your old amiga, atari, commodore sticks work fine
- not sure yet: small 2-text-line LCD panel for debugging or basic messages
- currently, 9V battery driven; maybe I should make it take 120VAC mains, or a wall wort; we'll see. Very low power, a 9V battery will last for aggggges.
- 128k flash for storing firmware (possible bootloader or a game or menu or something; for now, I just flash code right into the chips on the board, saves me dicking around with eproms in and out of sockets every few seconds.)
- 8bit cpu (currrently an avr 8bit, but could be swapped in with a 6502 or 6809 or z80..)
- 8bit gpu (currrntly an avr 8bit, but could cut over to a ubicom sx28 for speed, or even some faster chip entirely.. but hoping for now to stick with avr's since I'm a fan, and awfully convenient to keep to fewest number of chip families.. limited time here, lets not fight 3 different flavours of assembly at a time shall we?
Originally I went for a 6502 (or varient thereof) as target, since I love the old Commodore line (like Vic-20 and C64); but 6809 was such a great chip, and even the ol' Z80 has a special place in my heart. Or a 68000...... well, I schematiced out some of these guys in basic designs, and start fiddling on breadboard with a 6502 system.. and its very doable, but day-zero it was a lot to bite off. With these old guys you have to at least have a SRAM for RAM, and a flash or eeprom for ROM, and do a reasonable amount of software to get going; sorting out all those wires and supporting logic was a bit much, so I backed away from that (I'll be back soon!); ende dup fiddling with a Ubicom SX28 that I had lieing around (a few of, in fact, since I expected to burn/brick some .. its a very fast chip, so hobbyists use it quite a bit. (Chip can run 1-80MHz or so stably), though its not quite 1 cycle per instruction, and has no built in peripherals etc. Still, at that high speed, you can fake a lot of peripherals support.. interupts that can drive VGA and serial and so on direct, nice! But turns out a breadboard can't do high MHz without getting into all sorts of business I didn't know about then and do now. (The tie-points of a breadboard act a lot like capacitors when high speed is going on, causing all sorts of mischief, etc.) So having to go right to sockets and perfboards and so on, for the GPU, seemed like it was getting to be a bit much (I waqs making a lot of mistakes, and having to take hours to fiddle around with the soldering station was slowing me down; I have _very little_ free time, so wanted to spend it wisely.. I can change as I go, but want to have solid momentum, not bog myself down.)
So I have fallen back to old reliable Atmel avr 8bit chips; they're cheating a bit, since they they generally come with some build in RAM and flash space, so you can bring them up on a minimum of wiring; they're also 'slow' (usually 8/16/20mhz, no more); the built in RAM is very limited (usually a few K only), though the flash is fairly generous (a few K, to 128K on the bigger ones.) Available in various packages from DIP (big pins you can stick into a breadboard) to TQFA (quad flatpack, the surface mount style chips you think of, with tiny little fairline thin wires.) I was afraid to get into surface mount chips early on, but turns out they're actually _easier_ to solder to a designed board than DIP .. with some easy but unexpected techniques (look up 'drag soldering'); you can solder a 100pin SMT part in like 2 minutes, and it freaking works! -- but only if you've got a nicely etched board; when you're designing from scratch, usually best to stick with DIP or through-hole parts... or little adapter boards that have SMT packaging on one side, and DIP on the other, so you can use modern SMT parts on a prototype.
Anyway, I figure the atmels are great supported chips, that still feel very retro (8bit and all); its great to have thriving communities around these guys, but not be 'cheating' much. (Note the Arduino uses an Atmel avr chip, and that is a huge community; but the Arduino people are only half into hardware tinkering.. its more of a way to get 'up and going fast', so its all about cheating; you get ready to use 'shield' pcboards to stick onto your arduino, and ready to use library code, and so on; its all about glueing stuff together to get things done. So its great fun, and very encouraging to newbies, but its not where I'm going. I want to go from scratch and learn the details. Turns out there snot much to an arduino, I can build one from scratch myself, so I don't much see the point in arduino myself, but I totally get who its for.. and its a great project. Check it out.)
I also still have some schematics for my 6502 design, 6809 design and so forth; I'll dig them out for you one of these days.
AAAAANYWAY, all that said (sorry, up late as always, and had a few drinks after doing fireworks with the oldest kid, so I'm rambling..) -- what have I got _so far_? and pictures, thought process, etc?
I'll get to that next update. Just wanted to get this out, see if anyone likes how and what I'm writing about.
I will leave you with these pics for lulz; these are mostly the GPU-side of things in test form; the main cpu isn't in these test pics; the cpu and gpu are both microcontrollers, but they have separate responsibilities; the cpu is where game logic runs, and it controls the double buffering, reads joysticks etc; I may add a third chip, an I/O specialist chip, but for now aiming for a two microcontroller arrangement, plus all the ram and buffers and shifters and other supporting ICs.
LCD:
NTSC test:
http://www.skeleton.org/zikzak/zikzak1-ntsc-mono-line-001.jpg
VGA tests:
Very minimal GPU test, to see if this 8bit avr could drive VGA fast enough for monitor to deal with it:
http://www.skeleton.org/zikzak/zikzak2-vga-002-colour1.jpg
Doing a 1x240 (yes, 1 giant full width pixel, by 240 lines) colour test:
https://fbcdn-sphotos-c-a.akamaihd.net/hphotos-ak-ash3/6762_574814512550859_306771953_n.jpg
http://www.skeleton.org/zikzak/zikzak2-vga-002-colour1.jpg
Doing a 1x240 (yes, 1 giant full width pixel, by 240 lines) colour test:
https://fbcdn-sphotos-c-a.akamaihd.net/hphotos-ak-ash3/6762_574814512550859_306771953_n.jpg
SRAM test; this is driving VGA while also talking to external (out of chip) RAM:
Links to later posts with topics..
- software (CADs): http://boards.openpandora.org/index.php/topic/13166-zikzak-crummiest-8bit-consolecomputer-ever-but-im-making-it/#entry248588
- tools (anti-state mat, solder iron or station, pliers, etc etc)
- parts and ordering (speed, timings, quality, family..)
- common ICs you should stock up on
- the power supply
- the overall plan
- peripherals
- revisions planned
- the programming and debugger interface
- the cpu
- the cpu
- the hardware double buffering and switching
- joystick inputs
- cartridge slot
- audio outputs
- oscilliscopes are awesome
- boardhouse to spit out a pcb
Last edited by a moderator: