(long rambling post; you know me
.. see below in bold for the actual answer.. the parts we need to build in software)
Lots to say on that arena but the hard part is.. and certainly, all help is welcome; I'm having fun designing it in a shoddy fun way, but when it comes to the software, hacking it, etc, that is all up to whoeveer has the bits. Its entirely open source and open hardware, and it can go as far as you guys want to take it. It would bring a tear to my eye if someone other than me puts together a little cart with a game or application on it. Naturally blank carts will be available .. just a cart fingerboard with an eeprom on it, but folks could put sensors onto a board or whatever too. The hardware is not serious .. it coudl certainyl ber designed much better, but I've got constraints in place to keep it simple (so everyone can understand it) and cheap and fun-old-school .. no 'video does it all chip'. A single chip computer is easy to do nowadays, but thats not the point; this is a goofy thing, that is fun to hack on, and all are welcome!
Initial goal was Z80 based computer/console, with all the random supporting bits; then could run original MS Basic for lulz, and I enjoy screwing with Z80.
But I was getting annoyed with eZ80, and rather than just use plain original Z80 I started to think about pluggable CPUs, so we could use 6502, 6809, 68000, or even microcontrollers like atmega and so on. As long as they can conform to the 'zikzak memory bus' or use their own sram, should work out just fine. And RAM bus are all more or less the same (assuming voltage level compatibility or on-cpu-pcb level adjustor).
So right now it is all separte pcbs just to keep prototyping easy (I've built them all on breadboard and perfboard, just moving them to actual pcbs now)
- gpu, power, base (audio, joysticks, ram, cart slot, etc), cpu adaptor, cart
Eventual goal is either to leave them all separate and people can bolt them down (and use the bits for other projects etc), or merge them onto one larger pcb thats easier to handle or put into case (or both options..)
... but the cpu may always be pluggable, because its really neat, and not too hard to do
(ie: an atmega pluggable cpu pcb is really just the atmega, plus ISP header, plus the 2 caps, plus the headers to the serial lines say, or it could have the RAM bus and drive gpu that way. For something like a honest real Z80, its a level adjustor o not (Depending on my RAM final selection) and not much else .. it won't need programming, since it'll just use the cart; you'll flash the cart. For an eZ80, its similar to an atmega, since it can have its own programming ISP and its own sram, or use the RAM bus. 6502, 6809, same sort of thing as honest Z80.. not needing much on there, just a pin mapping to the memory bus.
So the OS becomes a problem .. I'm not sure what cpu most people would want, and I'm not even sure msyelf anymore; The whole idea was Z80 and eZ80 based, and the whole current tree is still called 'zik80' in reference to that.
Myself, I think I will mostly be interested in eZ80 and atmega644 as CPU plugins; the eZ80 is an original z80, plus all sorts of fun peripherals and options, so its quite powerful, and very cheap (like $5ea IIRC.)
But if someone wants a 6809 or 6502 I can make up the mapping pcbs for those pretty easily. A 6809 is pretty hot in my books, one of the Great Chips. The 6502 was hot just because I was a vic-20 kid, and loved doing aSM on it, but its a pretty ugly chip in a lot of ways; mostly, they're hard to come by and expensive.. I don't think anyone is making 6502's or related anymore, and on ebay they're crazy expensive.
...
So likely a Z80 firmware of some sort.
But people able to plug a cpu, flash it with whatever.
Cart will be flashable with whatever, of course.
GPU will be STM32 F4 (that at least is 'well defined'), and of course you can flash that too with whatever graphic driver you want to code up.
Oh, sometime need to test if the gpu is flashable via serial; should work, to save people getting a jtag setup there (not expensive.. can get the stm32 f4 demo pcb for like $11, which can act as a jtag programmer via usb)
I'm assuming we need to build a few parts then..
- 'official' stm32 f4 GPU firmware, that offers a few protocols; serial, i2c, and memory bus in various ways; offer a basic text mode, and some graphics primitives, and a framebuffer on RAM sort of dump
- maybe a cart flasher from the GPU firmware as well, to avoid people needing to get or build a flasher there ("zikburner" is something I also designed, but did not make a PCB of yet; easily done though.)
- need an 'official' firmware for carts to use as starting point, in Z80 say
- for eZ80, we could put a bootloader or basic firmware into the eZ80, that checks for and then jumps to cart if present; that way a certain memory range could be reserved as a jump vector table to firmware functions like clear-screen/etc, for carts to leverage like a BIOS
- could try to in hardware on base pcb, map a certain chunk of ROM to go to a firmware chip, so that a BIOS could be provided; but I'm not sure I want that complexity on board or in the system .. ie: if firmware is entirely in the cart, and gpu, and maybe in eZ80 (or atmega/etc), then that works okay, and keeps costs/complexity down
So there are numerous pieces to work on, independently.
I have quite cleverly, left that for 'later'
Too much for me to worry about right now.. I've done basic proving of the parts as I go along (keyboard driver works, joystick reading works, RAM read/write works, ROM read works, etc), but worry about the higher level firmware stuff till I have some working pcbs all plugged together in 'rev1', and then if it all seems to work as basic firmware, revise and put out rev2 and start kitting it out as people want
It is very encouraging to see people replying today