Thank you, Adam! This board was my first learning experience in relatively complex PCB routing and layout. First few revisions were autorouted and did not look so good :)
This is a very nice project. Ive been looking for a while now for a ZX80 project that I can build with easy available components, and this is it! I cannot wait for your project files. Well done!!
What an absolute beauty! Classic but with real keyboard. I have been a software developer my whole life but I cannot understand how you hardware guys can create things this complicated! I have have incredible respect for that kind of work! Modern computer have CPUs 1000 times as fast but feels 10 times as slow. Thanks for sharing this. I really enjoyed it! 😀👍
Thank you, Morten! Unlike old 8-bit computers where you work with hardware directly, modern computer has 1000s layers of abstraction between hardware and end-user programs. This way corporate offshore teams of developers can quickly put out various applications with minimal development effort :) These abstraction layers are not optimized well, usually and that's why modern computers don't feel as snappy as 8-bit ones with instant launch times and reaction to input.
Thanks for the reply! And because all young people mostly learn stuff at the top of the abstraction layers, if something breaks below they have no clue how to fix it. So when all you lower-level guys gets to pension this world is doomed! So Ivan PLEASE wear a bicycle helmet… all the time! Please! 😅
This presentation has a coffee shop musician feel to it, but instead of saying "this next song I wrote when I was living on my best friend's couch" it's "this next program I wrote on my own computer. I hope you like it." 😄
This is what UA-cam used to be like, and it was better for it. New UA-cam is a bunch of stupid editing and graphics and dumb memes and bad acting stuck in for no reason. He's talking about his computer, so he talks about his computer.
Your video stability is fantastic... no jitter, no tearing, no weird colour artifacts, rock solid! Looking forward to the future installments of this project!
Thank you Clayton! It was not so stable initially and took some time to optimize PLD file to maintain low input-to-output gate delays in CPLD. But overall, this is due to 4 layer board design and relatively high speed capabilities of ATF1508 CPLD (>100 Mhz when VGA clock is 25.175 Mhz) and IDC7005 dual port SRAM (15ns). Additional inverters/buffers before the R2R DAC also helped to clean up signals fed into the DAC from the CPLD. VGA signal is a bit smeared and wavy if you feed sync and color outputs of the CPLD into the DAC directly.
Excellent video. I designed and programmed many top Spectrum games back in the day and I admire your work on this project. Rearranging the order of the video frame buffer is a huge improvement.
Thank you, Maciej! I do agree - Z80 is very nice CPU to work with and to program. Instruction set is good, bunch of handy 16-bit operations. Index registers are also very helpful. And block move instructions too.
Just a most beautiful, excellent design and full build! Just beautiful and perfect. I'd stick a few 8255 devices on the buss, though. I can't help myself. Maybe 10 of them....
Fantastic work! I love the case, all the connectivity, tight PCB design. You really have done a wonderful job! The only thing I would have done differently is the keyboard. I really would have tried hard to include some cursor keys in an inverted T in the bottom right. But overall; wow, I am so impressed!!
Thank you Mark! Actually, everything was designed around the keyboard. Mainboard PCB has the same footprint so both keyboard and mainboard can be stacked together with standard hex standoffs. I did not include cursor keys, because I did not want them to be in a single row like some computers in 80's had. In my opinion, the most convinient layout with T-shaped cursor keys required an additional column on the right. But I wanted as compact design as possible for people to be able to print parts of the enclosure on a regular FDM printer in one piece :) But still, my 3D printer has little bit smaller working area, so I had to order this case from 3D printing company.
@@solisted makes sense and I agree the compact design is essential. But I reckon the huge Shift key on the right could have been split into 2 keys, one being Up cursor. 😉
@@MarkOfBitcoin Agreed, I would totally rework the keyboard. Placing the inverted T in the bottom right, and removing the right CTRL, FN, and Pn keys; I rarely use my right hand with those keys.
Thank you Steve! It took me a few years to get to the final design I showed in the video. Many revisions, first on the breadboard then 4 revisions on PCB with different layouts and perepherials.
I've had my share with moderately complex PCB routing, but the top layer looks extremely tidy. Well done :) Also interesting choice with the AY-3-8913, which makes perfect sense at it's usually exclusively used as a sound generator - yet that variant being quite unknown til a few years ago.
Duuude! You're a maniac! and i mean that in the best way..ahaha. Sheesh.. reeally impressive mountain of work u did. Z80 Timex/Sinclair was also my 1st computer as a kid and soldered it as a kit..wrote a defenders game on it but also did digital art (unknowingly) for my awesome gf at the time.... Thx for the blast from the late 70s past ...really nice feeling it gave me. Big up yourself as we say over here!
Cool project. Not dissimilar from what I did with my computer - heavily inspired by the MSX architecture. I’ll have to look at your GitHub when I’m in front of the PC.
So cool. Great design. There is a new AY compatible chip available with the same pinout, it's designed as a replacement in old computers like the Speccy. :)
@@solisted I think it might be an FPGA on a DIP board. Check out the 'AY-3-8910 clone vs. original AY-3-8912 sound chip' video from ByteDelight on YT. Ben does a demo of it.
Thank you! This is because all software is written in an assembly language and directly accessing computer hardware. Zero abstraction layers between end-user software and computer hardware makes it feel really snappy.
Since learning arm assembly, I’m reluctant to put time to the simpler cpus these days .. I like the llvm linker for build chain and options from that! Still, nice work!
Very nice, complex serious design, well above the common Z80 sbc most people make, so one question why not use HD64180 or Z8S180. these are super Z80 ,fast and feature packed. Using the 180 type of Z80 with their dual channel inbuilt DMA that just inserts into normal machine cycles, , it's possible to have invisible screen memory transfer to a separate frame buffer and GPU,
Thank you Joe! I was looking into various 8-bit CPUs including Z180 and decided to go with Z80 to replicate (with some convinience tweaks) look, feel and architecture of home computers of that era. Most of the inspiration was taken from the first computer I had when I was a kid - Sinclair ZX Spectrum. Also, I wanted to use parts that are DIY friendly (DIP/PLCC) and easily obtainable. Z180 variants in PLCC packages are usually not stocked at major IC vendors, unlike Z80 that is always availabile in huge quantities. I suspect it is still widely used a lot in automation controllers. Third, I did not implement any hardware blitters, sprite engines and DMAs to make it more fun and challenging writing software for this computer :) At least, In my view. I like programming graphics in software. Do cycle counting to optimize graphics, music and game logic routines :)
2 роки тому
Z180 is nice, however if you plan to run/port existing Z80 software, you're in trouble, IIRC for example Z180 does not support some "unofficial" Z80 features used by many software like the ability to use IX and IY as two 8 bit registers in the form of IXL/IXH and IYL/IYH. At least I have already run into this problem once, while I tried to use Z180 inside an Enterprise-128 (Z80 based) computer just to fun to try another kind of "Z80-like" CPU to be fancy for just fun.
Would love to see how you made the CPLD’s work, I’ve been interesting in trying some but have read about many challenges using them, mainly trying to program them from a modern host computer.
Thank you, Darren! These particular CPLDs from Atmel/Microchip (ATF150x) are not very difficult to work with. You will need simple WinCUPL CUPL language editor/compiler, ATMISP 7.3 programmer software and Atmel's USB JTAG programming cable: ATDH1150USB. All works perfect in Windows 10. Please, check here: www.microchip.com/en-us/products/fpgas-and-plds/spld-cplds/pld-design-resources
Thank you! I wanted to make one, but also I needed to keep system compact and stable. The choice was - make unbuffered card edge connector with all bus signals exposed and risk having some peripheral devices drawing to much power to cause stability issues or increase mainboard footprint and add buffers between system bus and connector. Did not like both variants. I like the way 8-bit Atari periphery worked - through daisy chained serial port. That's I want to try, since SIO/0 IC has two serial ports and both a available on the back on the case via compact RG45 connector.
This is very cool, I think I'm going to have to build myself one! I've downloaded the emulator - have you published any of the demo code anywhere to have a play around with?
Thank you! This project was aimed to be DIY-friendly that requires minimum soldering skills to assemble it at home. HDMI converter and DAC ICs are available only in SMD packages, so I decided to go with VGA output because this video signal is very easy to generate, and it does not require any additional ICs, just simple R2R resistor DAC and couple of buffers.
@@solisted Gotcha. You should sell this or provide kits etc. Once you have the software side more fleshed out. I'd love to write simple games on this or run BASIC like the old times.
Why 7805 voltage regulator ? It does dissipate heat, there are more modern versions. They are pin compatible but have almost zero heat emission. I have one in my Spectrum.
Hi! I’m not very experienced in electronics design. This is my first relatively complex, serious project. Could you please suggest some parts I can use for voltage regulation instead of 7805?
Nice, your design very similar to my own KAPE 8bit homebrew target design. I'm not there yet tho. Gz on finishing the project! You use a CPLD to output to VGA? What CPLD are you using for it? My original idea for my own GPU was to use dualport RAM but getting those chips relatively cheaply for the amount I needed (I wanted to go full 256x192 16 color display, so the framebuffer would've needed to be 24k minimum, so in the end opted for a somewhat unorthodox kludge of AVR MCUs and a bunch of FIFO chips - and also the GPU itself is tile/sprite-based due to memory constraints, but the output FIFO buffer is big enough to handle the full image). Also it seems you have the brown-fix implemented? I decided to go for "mathematically correct" 16 color RGBI, just for the simplicity of outputting the RGB lines from a color bit line + intensity bit line, as everything would be symmetrical. The method of ROM having a monitor to load games to RAM is what I'm going to go for too. Currently I have only RAM installed in my breadboard prototype, and uploading to RAM is done with an additional Arduino UNO that also handles the proper signals for bus hijacking. My choice of system was a 6502 CPU and that ecosystem, so 6551 for UART and 6522 for peripherals. I'll be using an YM2149F for audio output and gameport reading. Awesome project, great stuff!
Thank you! Yes, I use Microchip (Atmel) ATF1508 CPLD and Renesas (IDC) 7005 8Kb dual port SRAM as a base for the video system. Dual port SRAM is expensive, but simplifies system design by a lot. Only thing you need is to feed BUSY output of the SRAM into WAIT input of the CPU to avoid "snow" effect when address collision happens between CPLD and CPU on opposite ports of the SRAM. I also have 256x192 16 color prototype graphics implemented using the same CPLD and 7008 64k dual port SRAM for 2 flippable pages (x86 SBC prototype briefly shown in my other video). It is possible to implement tiled graphics using the same CPLD, but without sprites - 128 is not enough macrocells/flip-flops available in it. Generally speaking, I've managed to implement 3 types of graphics engines with this awesome CPLD. Speccy like monochrome linear buffer with color attributes (8k buffer), 16-color linear framebuffer (24k buffer) and 256-color tiled graphics (8k + 16k buffers = 20k total). I think, it is possible to make full featured tile/sprite graphics engine by stacking multiple CPLD and dividing responsibilities between them. One renders tiles, another one overlays sprites, third one renders text-based layer for a scoreboard, for example. I have one more SBC prototype of 65c816-based computer with 320x240 8bpp color 8x8 tiled graphics with smooth scrolling (no sprites). But approach there was a bit different. Instead of reading from SRAM and sequencing pixels inside CPLD, that CPLD is driving address bus of one dual port SRAM dedicated to character memory which in turn drives part of the address bus (alongside with CPLD) of another dual port SRAM that holds tile pixels. And second SRAM data bus is directly fed into the R2R DAC (through buffers also). Brown/dark gray fix was easy to implement with CPLD, just changed boolean equation that converts IRGB to RRGGBB from: R1.d = R; R0.d = R & I; G1.d = G; G0.d = G & I; B1.d = B; B0.d = B & I; to: R1.d = R; R0.d = I & !G & !B # I & R; G1.d = !R & G # I & G # G & B; G0.d = I & !R & !B # R & G & !B # I & G; B1.d = B; B0.d = I & !R & !G # I & B; Like I mentioned above, I'm also interested in 65c02/65c816 series of CPUs by Western Design Center and made another prototype with enhanced 256-color tiled graphics with that CPU and 65c51/65c22 peripherals IC.
@@solisted Thanks for the detailed answer! Been looking into PLD's, tho mainly for address decoding (like ATF16V8 or ATF22V10), but doing a whole VDP/GPU out of a ATF1508 sounds dope! Great stuff!
Hi Ivan I bought boards from Ebay. They are quality product. Looking forward to solder the board. May I know source for AY-3-8913 chip and BOM for keyboard? Thanks
Rather than the serial port, I'd add an SD card, it would be so convenient, and with a good enough keyboard and display, you'd be able to develop directly on the Z80, the fun way! I bet your design isn't far from what Sinclair used, except you seem to have added useful colours, rather than just RGB + Bright, which gave a lot of useless duplicated colours, nobody really NEEDS two cyans, when instead things like pink or brown were missing. Then better greys, perhaps including a bright black. Of course the Spectrum couldn't do separate brightness for foreground and background colour, it was set per cell. Leaving 1 bit left for the equally useless Flash! Using the Bright and Flash bits to give 16 foreground and background colours would have been infinitely more useful in a machine that was already limited. If Clive had given more thought to it's obvious use for games, he might have thought about making things just a bit more friendly and useful. I'm sure he only put in colour begrudgingly. A modern CPLD and an '80s ULA probably have about the same number of gates to make your circuit from.
Serial port is a universal interface. It does not have to be used just for computer-computer transfers. External storage device can be built with any storage medium, communicating with computer via serial port, for example. And monitor ROM can be extended to support reading sectors from such device via serial port using some simple communication protocol. That's how expansion worked on Atari 8-bit computers - floppy drives, printers, modems were all connected to a daisy chained serial port.
thats how the MSX vidoe memory is organised, maybe the attribute table come 1st, same screen size too. Funny thing, if you program the MSX screen right to left, bottom to top, you can get 4 colors per byte, F+B per nibble, instead of 2 colors per byte.
The only thing frustrated me about programming graphics on MSX is a need to write to graphics buffer through I/O registers. It is much slower than having it memory mapped for direct CPU access.
@@solisted hence the use of DMA as an option from th VDU side. There is a "mod" in BlueMSX (and OpenMSX?) that "opens" VDU RAM as 16K PAGE MAPPED, based on a real world mod, not well known because is conflicts with some other common hardware (MSX-AUDIO or MSX-MUSIC) that the guy did not own at the time. I am glad your design doesnt need such hacks :)
Well that certainly kicked the ass of my old Tandy (Radio Shack) Model 1. I am also impressed by the tile editor. In my experiance tools written for a particular purpose, tend to really do the job,. I would be interested in the ROM soft/firmware. Do share if and when you get the opportunity. I look forward to you sharing your work the "IDE" you have planned. I am interested in you choosing BASIC rather than python; were you trying to keep the retro vibe? Well done for what you have acheived. Now, where do they put the subscribe button on this thing?
Thank you! This project is 50% nostalgia driven in any aspect - hardware and software, so BASIC is a choice for programming language. Maybe, with built-in compiler to add some juice :)
Hi, why you used diodes on keys? Are they necessary? In my ancient computers I never saw it. Usually I see the row/columns traces without anything else. What's the part code of these diodes?
Hi! Diodes in keyboard matrix are used to prevent so called "phantom" key presses when invoking multiple key combinations. Old keyboards were without diodes to reduce cost and limited in key combinations keyboard controller can detect without an error. Usually, standard 1N4148 fast switching general purpose diodes are used.
@@solisted I think someone should get behind this. But I would put more GP I/O on board for robotics and SCADA type stuff. Probably swap out the sound effects / joystick for motors and DACs. Does it have / can it run unmodified BASIC or FORTH?
Also... How is the memory layout of your screen RAM? The Spectrum used a really weird system of thirds, then arranged in a very odd way within those, where most 8-bit computers just had a flat, linear bitmap. You mention something about thirds in the video, is that what you mean? I know Sinclair claimed their design was easier to interface with a TV, and wasn't necessarily too bad to work out the location of a pixel, or 8 of them, but still I'm pretty sure it slowed things down, a bigger problem when your sprites are all in software. Hey, how about some sprites in your design? Does it have to have a separate chip for it's graphics RAM? Couldn't you just share the main memory? You just need a system of priority for when the graphics and CPU chips clash, have the graphics chip halt the Z80 if that happens. The Z80 spends a lot of cycles doing stuff other than RAM reading, you should generally have lots of time. How much slower did stuff run, in the contended 16K vs the upper 32K? Can't be too bad or else the 16K model wouldn't have been practical. Also you only need access 2 bytes per 8 pixels, or even less, if you cache the atttribute byte a line at a time, say. Would need 32 bytes and reduce RAM access from 2 bytes per 8 pixels, to 1.125 bytes, effectively. Oh, I love fantasy computer design! I really should get more into electronics when I have the space available. I can manage Arduino OK, and C on proper computers, a bit of Verilog can't be _too_ hard.
Hi! I implemented linear memory layout for the monochrome pixel buffer. I went with asynchronous dual port memory design for the video circuit to keep it compact and simple. I did not have enough experience to quickly come up with acceptable solution for shared video memory access and did not want to spend too much time on it. CPLD I used in the video circuit has just 128 macrocells and not suited for complex video cicruit implementations with tiles and sprites. Simple pixel shifter is easy to implement and fit, but more complex stuff would require much-much more logic gates and flip-flops than CPLDs of this class have.
Hi! These boards made by the channel viewer. He's got extra, bc of the minimum order, so decided to sell the rest. These are very easy to manufacture using Gerbers provided on the projects github. I did not compile complete BOM yet, please check my web site for more info.
Is it not compatible with any of the retrocomputers ? Why do we need this project ? It would be interesting to make a computer on Zilog ez80 , 56 MHz CPU, 16 MB memory, 256 colors, with a screen resolution of 320x240
No, it's not compatible with any of the retro computers. This project is meant to educate myself in electronics engineering field and for recreational retro programming.
Thank you, Thomas! Keycaps for the keyboard are ordered separately from WASD Keyboards. You can design your own keycaps on their web site and they will manufacture them for you. PCB for the keyboard is DIY, made in KiCad and manufactured by JLCPCB (like the mainboard). Cherry MX linear switches are ordered from mouser.com. Everything is DIY, hand-soldered.
@@solisted useful information, thsts the biggest hurdle ie problem with resurrecting ZX81 or Spectrum, their standard keyboards are yuck. and there no third party around these days making and selling complete ZX keyboards. a mere 35 years late lol. I haver an intact ZX81 , no idea if it wotks, best to keep it as a display item methinks.
Thank you! I have graphics engine based on the same CPLD that implements this mode. But it's impractical to put such mode with 8-bit CPU like Z80 @ 10Mhz. There would be very poor fill rate for any decent game animation - too much data to move around for such CPU. It will ruin the balance between the CPU and graphics subsystem. Also, video buffer would take a lot of RAM and will require external banking to be implemented. 16/256 color modes for 8-bit CPU is usually implemented using tiled/sprite mode, without linear framebuffer. But in this mode you cannot draw arbitrary graphics (yes MSX has 768 tiles in tiled mode you can fill entire screen with and do some bitmapped drawing, but it's very quircky to work with).
@@solisted I also think it's really disappointing about the Spectrum type attributes/colour bleed. I prefer graphics modes which don't suffer from this, like on the Amstrad CPC, BBC Micro, etc. The Timex Sinclair TS2068 and some other ZX Spectrum clones have an additional graphics mode without the attributes/colour bleed. Can you explain how this is done? Of course, the TS2068 CPU is clocked at 3.5Mhz, so wouldn't it be much easier at 10Mhz?
@@paulbraun5657 I don't know about BBC Micro, but Amstrad CPC has double width pixels which gives resolution 160x200 that takes 16k of VRAM and CRTC controller that can consume main RAM for the video buffer at the arbitrary address. With smart programming of this controller you can achieve smooth animation with double buffering and/or per pixel scrolling, but at small frame rates. Also 16k VRAM is not a big deal since Amstrad CPC supports memory banking and additional memory. It's a bit more advanced. ZX Spectrum 48k has only one bank of memory and no video hardware assistance of any kind. For this computer, such video layout was a necessity, I think. I tested another prototype with 256x192x16 color per pixel video mode with Z80 clocked at 10Mhz. It took 24k for the video buffer out of 64k address space and I could not achive smooth animation due to low throughput of the CPU even at these frequencies. To have smooth animation, you will need second back buffer and it's another 24k - somthing this computer cannot afford to have. Hardware assistance was needed for games to feel fast and snappy, at least some sprites or hardware blitter of some sort. At the end, I decided to make another computer with 256x192x16 color video mode and W65C816 CPU that has 16M address space. And keep this computer with ZX Spectrum-like video mode to preserve the original balance.
@@solisted the Amstrad CPC has three graphics modes which each take 16K. It uses the same 6845 graphics chip as the BBC Micro. However, the BBC Micro graphics have no border and the screens are 256 pixels high. I think this means the BBC Micro graphics modes each take 20K. The Spectrum and Commodore 64 graphics screens each take up 8K. I'm not aware of Amstrad CPC or BBC Micro games running much slower than Spectrum games, so I think there must be a flaw in your computer's design! I think it's very depressing seeing that large areas of Spectrum graphics screens have the same background and foreground colours. Sinclair tried to make everything as cheaply as possible and this is the result. I can't see the point of copying this limitation 40 years later, though.
@@paulbraun5657 What can I say, I don’t agree. I tested everything thoroughly on the prototype and was not happy with the performance with color per pixel mode. CPU was running at the full speed while accessing video RAM, no wait states. Also not agree that attribute clash is some bad thing. When memory is limited to just 64k, this mode totally makes sense, because it leaves as much RAM as possible to a program code. With clever programming you can make pretty good looking games, even with attribute clash. I’m pretty satisfied with my computer design and enjoy programming it.
Did not decide yet if it’s a good idea to publish ROM and CPLD sources, bc it could lead to platform fragmentation. But on the other hand it’s not so difficult to write other variants of the video code and ROM for this computer, so fragmentation is inevitable if this computer becomes popular among DIY builders.
@@solisted I have wrote verilog for my breadboard computer FPGA, but it's altera one, yours interesting that it's running on Atmel CPLD, but at the same time requires expensive programmer cable. Without looking at code and how easy that is I'm not sure I want to invest in that cable :D My take on this, if you make your schematic/pcb and etc open source, then it makes sense to make programming of it open source too, otherwise it's closed system and not sure you can even call that platform. Atmel is interesting for me that it's 5V compatible and doesn't require a bunch of level shifting to 3v3 fpga's. Anyway, your project is really cool. If you decide to share source code for cpld I would gladly read/learn something from it :)
No, 8x8 area of pixels can have distinct foreground color when pixel is lit and background color when it's not in 1bpp 256x192 bitmap. Color is controlled by a separate 768-byte attribute area in VRAM.
Good question MR Q, thank you! A lot of reasons, actually. A few of them are: I'm not a professional electronic engineer. Old computer systems are very easy to design and build for beginners like me. Sub-20Mhz frequencies allow you to use inexpensive debugging equipment like $300 oscilloscopes and $100 logic analyzers. And you will need a lot of hardware debugging when you start something like that. Due to low frequencies you can start on the breadboard with jumper wires and it will still work! We know how noisy circuts are on a breadboard. You don't need great soldering and PCB-design skills to build system like that also. At these frequencies it is very forgiving to various signal integrity mistakes you might encounter when designing PCB. First revisions of the PCB for this project were 2-sided and so ugly, because I used autorouter, but still worked well! :) Only final revision was manually routed on 4-layer PCB when I learned to do it well. I'm still not comfortable with SMD-soldering, so choice of old through-hole components helped me to avoid a lot of delays and frustrations caused by lack of advanced engineering knowlege and skills. I'm a X-generation computer enthusiast and computers from that era are still produce a lot of warm feelings and nostalgia for computer nerds like me. I'm very frustrated by the situation in the IT industry today with bloated operating systems, overengineered applications and frameworks that consume gigabytes of RAM for the simple tasks like IRC chat with fancy graphics (hello Slack based on Electron framework ;) Computer and network speeds improved by many magnitudes since 80s but still you have to wait couple of seconds for an application to start like you're running it from the floppy :) I'm a programmer and languages like JavaScript and its frameworks make me puke - want to go back to my cave, open text editor and start writing oldschool z80 assembly :) This project is a safe-space for myself as a software developer where I can work alone, without all that toxic scrums and kanban boards :) Working with 8-bit systems in assembly language is very easy and straightforward - it works the way you make it work (program), no more no less. Instant compilation times, instant launch, no need to have super powerful workstation for development. Also, I like an aspect of that era that you don't need to be Ubisoft or Epic to make a decent game for an 8-bit computer. You alone can make something very decent (matching system capabilities) in a month or so and that will include game graphics, level design and music. And it will be very captive and challenging to play if you do your job well - check how popular is Celeste game for the PICO-8 fantasy console. It was even ported to different modern platforms and selling very well!
Your board is so well laid out. Very compact, but yet it feels spacious!
Thank you, Adam! This board was my first learning experience in relatively complex PCB routing and layout. First few revisions were autorouted and did not look so good :)
it's gorgeous
The video output seems very clean. Good job. Great to see the Z80 chip still rockin' after all these years.
Thank you! It was captured with a decent VGA to HDMI converter/upscaler. But on the real CRT VGA monitor I have it looks much much better.
This is fantastic! Only missing items are:
A) a storage microSD unit ; B) a BASIC compiler and a Disassembler . Pretty awesome!
Thank you, Luis! A and B items are somthing I plan to work on in the near future.
This is a very nice project. Ive been looking for a while now for a ZX80 project that I can build with easy available components, and this is it! I cannot wait for your project files. Well done!!
Thank you Jaco! Project files are published on GitHub in the description of the video.
Holy smokes me too
What an absolute beauty! Classic but with real keyboard. I have been a software developer my whole life but I cannot understand how you hardware guys can create things this complicated! I have have incredible respect for that kind of work!
Modern computer have CPUs 1000 times as fast but feels 10 times as slow.
Thanks for sharing this. I really enjoyed it! 😀👍
Thank you, Morten!
Unlike old 8-bit computers where you work with hardware directly, modern computer has 1000s layers of abstraction between hardware and end-user programs. This way corporate offshore teams of developers can quickly put out various applications with minimal development effort :) These abstraction layers are not optimized well, usually and that's why modern computers don't feel as snappy as 8-bit ones with instant launch times and reaction to input.
Thanks for the reply! And because all young people mostly learn stuff at the top of the abstraction layers, if something breaks below they have no clue how to fix it.
So when all you lower-level guys gets to pension this world is doomed!
So Ivan PLEASE wear a bicycle helmet… all the time! Please! 😅
OMG! It doesn't look like a homebrew project but a professional high end machine from the era :O
Thank you, I tried to replicate that look and feel of 8-bit home computer era.
You are criminally under subscribed. Really cool project and first video of yours I've watched.
Thank you, R O!
This presentation has a coffee shop musician feel to it, but instead of saying "this next song I wrote when I was living on my best friend's couch" it's "this next program I wrote on my own computer. I hope you like it." 😄
Thank you, David! You got it right :)
This is what UA-cam used to be like, and it was better for it. New UA-cam is a bunch of stupid editing and graphics and dumb memes and bad acting stuck in for no reason. He's talking about his computer, so he talks about his computer.
Your video stability is fantastic... no jitter, no tearing, no weird colour artifacts, rock solid! Looking forward to the future installments of this project!
Thank you Clayton! It was not so stable initially and took some time to optimize PLD file to maintain low input-to-output gate delays in CPLD. But overall, this is due to 4 layer board design and relatively high speed capabilities of ATF1508 CPLD (>100 Mhz when VGA clock is 25.175 Mhz) and IDC7005 dual port SRAM (15ns). Additional inverters/buffers before the R2R DAC also helped to clean up signals fed into the DAC from the CPLD. VGA signal is a bit smeared and wavy if you feed sync and color outputs of the CPLD into the DAC directly.
Color, not col- "hour"
Excellent video. I designed and programmed many top Spectrum games back in the day and I admire your work on this project. Rearranging the order of the video frame buffer is a huge improvement.
Thank you!
@@solisted you're welcome. Are you going to be publishing/selling the code for the CPLD chip? Which chip(s) are you using?
I used Microchip/Atmel ATF1508 for the graphics and ATF1502 for the chipset. Not decided yet if I want to share PLD files.
@@solisted Interesting. Are you familiar with the Harlequin Spectrum clone? They essentially did the graphics/ULA in discrete TTL.
@@TheDradge Yes, very nice project. It can even fit in the original enclosure if I remember correctly.
Very nice, I remember the good old Z80 days. It was very nice CPU.
Thank you, Maciej! I do agree - Z80 is very nice CPU to work with and to program. Instruction set is good, bunch of handy 16-bit operations. Index registers are also very helpful. And block move instructions too.
Very nice! It really takes me back. A great way to honor those early home computers.
Thank you!
That's the sweetest motherboard I have seen in a long while, super clean design!
Thank you!
Just a most beautiful, excellent design and full build! Just beautiful and perfect.
I'd stick a few 8255 devices on the buss, though. I can't help myself. Maybe 10 of them....
Thank you!
Fantastic work! I love the case, all the connectivity, tight PCB design. You really have done a wonderful job! The only thing I would have done differently is the keyboard. I really would have tried hard to include some cursor keys in an inverted T in the bottom right. But overall; wow, I am so impressed!!
Thank you Mark! Actually, everything was designed around the keyboard. Mainboard PCB has the same footprint so both keyboard and mainboard can be stacked together with standard hex standoffs.
I did not include cursor keys, because I did not want them to be in a single row like some computers in 80's had. In my opinion, the most convinient layout with T-shaped cursor keys required an additional column on the right. But I wanted as compact design as possible for people to be able to print parts of the enclosure on a regular FDM printer in one piece :) But still, my 3D printer has little bit smaller working area, so I had to order this case from 3D printing company.
@@solisted makes sense and I agree the compact design is essential. But I reckon the huge Shift key on the right could have been split into 2 keys, one being Up cursor. 😉
@@MarkOfBitcoin Then you would cripple the keyboard from the standpoint of typing.
@@MarkOfBitcoin Agreed, I would totally rework the keyboard. Placing the inverted T in the bottom right, and removing the right CTRL, FN, and Pn keys; I rarely use my right hand with those keys.
You are giving me a lot of inspiration to continue with mine, but you are way ahead of me.
Thank you Steve! It took me a few years to get to the final design I showed in the video. Many revisions, first on the breadboard then 4 revisions on PCB with different layouts and perepherials.
If this had a cart port for expansion and roms, it would be straight out of the 80's. Amazing job.
Thank you!
All your PCBs look so neat and clean! By looking at this I'm getting aesthetic pleasure even if I don't understand how it works.
Thank you!
Absolutely lovely. Beautiful format and layout. Thanks for sharing it with us!
Thank you!
Amazing, wonderful! I love how everything is clean and compact. What about an on/off LED?
Thank you, Pasqualino! Just did't think about it at the time.
I've had my share with moderately complex PCB routing, but the top layer looks extremely tidy. Well done :)
Also interesting choice with the AY-3-8913, which makes perfect sense at it's usually exclusively used as a sound generator - yet that variant being quite unknown til a few years ago.
Thank you!
What a brilliant little machine ! I'm setting up to try make a similar project, is always nice to find sutch inspiring projects
Thank you, Silvestre!
Sutch???
Wow. wonderful project and cute game.
Hi! Thank you!
Very nice work! Thanks for sharing it with us.
Thank you, Steve!
Very cool, was looking forward to this video, and interested in building one.
Thank you, James!
Beautiful improvement on the Z80 flat keyboard
Thank you! Yes, this one feels much better :)
Can't wait till you release the build info for this. Thank you for sharing!
Thank you Terry! Will share soon schematics, gerbers, jedec and CAD files for this project.
Terry, I updated description of the video to link project files on GitHub. Can't wait to see some feedback on the design.
Would totally buy one.
Thank you Wes!
It is a very nice build. Added one to my fantasy shopping list
@@edabean007 Thank you! I may start selling kits of this computer, not decided yet.
Duuude! You're a maniac! and i mean that in the best way..ahaha. Sheesh.. reeally impressive mountain of work u did. Z80 Timex/Sinclair was also my 1st computer as a kid and soldered it as a kit..wrote a defenders game on it but also did digital art (unknowingly) for my awesome gf at the time.... Thx for the blast from the late 70s past ...really nice feeling it gave me. Big up yourself as we say over here!
Thank you, Greg!
Cool project. Not dissimilar from what I did with my computer - heavily inspired by the MSX architecture. I’ll have to look at your GitHub when I’m in front of the PC.
Thank you!
So cool. Great design. There is a new AY compatible chip available with the same pinout, it's designed as a replacement in old computers like the Speccy. :)
Thank you! Is it the actual DIP chip or an FPGA on a small board with DIP footprint? Could you please post a link - interesting.
@@solisted I think it might be an FPGA on a DIP board. Check out the 'AY-3-8910 clone vs. original AY-3-8912 sound chip' video from ByteDelight on YT. Ben does a demo of it.
This is a very elegant design. Congratulations
Thank you, Gregory!
This is a thing of beauty. Congrats, amazing work!
Thank you, Andy!
Unbelievable how fast it is compared to a modern computer.
Thank you! This is because all software is written in an assembly language and directly accessing computer hardware. Zero abstraction layers between end-user software and computer hardware makes it feel really snappy.
Nostalgia for me since my first year project at Uni was based on a z80
Yes, Z80 was an obvious choice for my first build for the same reason :) Not 6502, not 8088 :)
Really nice ASMR Voice!! And your Computer is Great! I Love that thing.
Thank you!
Stunningly well done, sir.
Thank you!
Since learning arm assembly, I’m reluctant to put time to the simpler cpus these days .. I like the llvm linker for build chain and options from that! Still, nice work!
Thank you!
This is truly excellent. Keep up the good work.
Thank you!
A watered down Supaplex game, cool.
That looks like a fun project, though, very clean.
Thank you, Saar! I would say, Supaplex is beefed up version of the original Boulder Dash game which is replicated for this computer :)
Impressive computer, looks like a well finished product.
Thank you!
I was expecting OPQA but WASD is ok too. Thanks for the video!
Thank you! Also Atari joystick works, I just forgot to show it in the video.
Very nice, complex serious design, well above the common Z80 sbc most people make, so one question why not use HD64180 or Z8S180. these are super Z80 ,fast and feature packed.
Using the 180 type of Z80 with their dual channel inbuilt DMA that just inserts into normal machine cycles, , it's possible to have invisible screen memory transfer to a separate frame buffer and GPU,
Thank you Joe! I was looking into various 8-bit CPUs including Z180 and decided to go with Z80 to replicate (with some convinience tweaks) look, feel and architecture of home computers of that era. Most of the inspiration was taken from the first computer I had when I was a kid - Sinclair ZX Spectrum.
Also, I wanted to use parts that are DIY friendly (DIP/PLCC) and easily obtainable. Z180 variants in PLCC packages are usually not stocked at major IC vendors, unlike Z80 that is always availabile in huge quantities. I suspect it is still widely used a lot in automation controllers.
Third, I did not implement any hardware blitters, sprite engines and DMAs to make it more fun and challenging writing software for this computer :) At least, In my view. I like programming graphics in software. Do cycle counting to optimize graphics, music and game logic routines :)
Z180 is nice, however if you plan to run/port existing Z80 software, you're in trouble, IIRC for example Z180 does not support some "unofficial" Z80 features used by many software like the ability to use IX and IY as two 8 bit registers in the form of IXL/IXH and IYL/IYH. At least I have already run into this problem once, while I tried to use Z180 inside an Enterprise-128 (Z80 based) computer just to fun to try another kind of "Z80-like" CPU to be fancy for just fun.
Toshiba do one with serial ports built in and timers for interrupts.
fantastic project! really clean layout and implementation
Thank you!
Very neat!! I'm working on a retro project currently with a Z180 which is an odd variant of the Z80.
Thank you! Cool!
Good job! Is perfect if it able to run the CP/M system.😀
Thank you!
Beautifully done. Thanks!
Thank you, Lawrence!
Excellent work!! Thanks for sharing.
Thank you!
Would love to see how you made the CPLD’s work, I’ve been interesting in trying some but have read about many challenges using them, mainly trying to program them from a modern host computer.
Thank you, Darren! These particular CPLDs from Atmel/Microchip (ATF150x) are not very difficult to work with. You will need simple WinCUPL CUPL language editor/compiler, ATMISP 7.3 programmer software and Atmel's USB JTAG programming cable: ATDH1150USB. All works perfect in Windows 10.
Please, check here: www.microchip.com/en-us/products/fpgas-and-plds/spld-cplds/pld-design-resources
Beautiful!
Thank you, Emre!
What a beauty!
Thank you!
Very nice work.
Thank you, Tyler!
This is amazing. Nice work.
Thank you, Mark!
Very interesting project, kudos, perhaps in a next revision an edge connector with all the data and address lines of CPU for expansion?
Thank you! I wanted to make one, but also I needed to keep system compact and stable.
The choice was - make unbuffered card edge connector with all bus signals exposed and risk having some peripheral devices drawing to much power to cause stability issues or increase mainboard footprint and add buffers between system bus and connector. Did not like both variants.
I like the way 8-bit Atari periphery worked - through daisy chained serial port. That's I want to try, since SIO/0 IC has two serial ports and both a available on the back on the case via compact RG45 connector.
Thanks Ivan, great work.
Thank you, Arto!
Very nice project and well done.
Thank you Bart!
Wonderful sharing, Ivan, 👍super excited to see some cooperation going between us
Thank you PCBWay! Will be happy to cooperate for sure!
Вань, красота!
Спасибо!
This looks amazing!
Thank you!
This is very cool, I think I'm going to have to build myself one! I've downloaded the emulator - have you published any of the demo code anywhere to have a play around with?
面白そう!色も15色使えていいね。Z80だけど10MHz出るんですね。
Looks interesting! I am interested to see what the specs are.
Nice to have 15 colors to work with!
Thank you!
is it just me, or apart from the fact that the screen looks great, the computer is incredibly fast ??
Thank you! I’m working right now on the MKII version of this computer.
Very cool. I'd buy it. Wish it had HDMI though.
Thank you! This project was aimed to be DIY-friendly that requires minimum soldering skills to assemble it at home. HDMI converter and DAC ICs are available only in SMD packages, so I decided to go with VGA output because this video signal is very easy to generate, and it does not require any additional ICs, just simple R2R resistor DAC and couple of buffers.
@@solisted Gotcha. You should sell this or provide kits etc. Once you have the software side more fleshed out. I'd love to write simple games on this or run BASIC like the old times.
You've convinced me. Now take my money :)
Why 7805 voltage regulator ? It does dissipate heat, there are more modern versions. They are pin compatible but have almost zero heat emission. I have one in my Spectrum.
It's ready for an OS.
Hi! I’m not very experienced in electronics design. This is my first relatively complex, serious project. Could you please suggest some parts I can use for voltage regulation instead of 7805?
@@solistedThe MC34063 is an old chip that I used in many designs because it is cheap and available.
Nice, Waiting for that Windows Emulator.
Thank you! Currently, making Z80 CPU emulator library in ANSI C.
Superb device!
Thank you, Roman!
Great work. It must have taken a lot of effort.
Thank you! Yes, a lot of learning, a lot of trial and error.
Elegant design!
Thank you!
Nice, your design very similar to my own KAPE 8bit homebrew target design. I'm not there yet tho. Gz on finishing the project!
You use a CPLD to output to VGA? What CPLD are you using for it? My original idea for my own GPU was to use dualport RAM but getting those chips relatively cheaply for the amount I needed (I wanted to go full 256x192 16 color display, so the framebuffer would've needed to be 24k minimum, so in the end opted for a somewhat unorthodox kludge of AVR MCUs and a bunch of FIFO chips - and also the GPU itself is tile/sprite-based due to memory constraints, but the output FIFO buffer is big enough to handle the full image).
Also it seems you have the brown-fix implemented? I decided to go for "mathematically correct" 16 color RGBI, just for the simplicity of outputting the RGB lines from a color bit line + intensity bit line, as everything would be symmetrical.
The method of ROM having a monitor to load games to RAM is what I'm going to go for too. Currently I have only RAM installed in my breadboard prototype, and uploading to RAM is done with an additional Arduino UNO that also handles the proper signals for bus hijacking.
My choice of system was a 6502 CPU and that ecosystem, so 6551 for UART and 6522 for peripherals. I'll be using an YM2149F for audio output and gameport reading.
Awesome project, great stuff!
Thank you!
Yes, I use Microchip (Atmel) ATF1508 CPLD and Renesas (IDC) 7005 8Kb dual port SRAM as a base for the video system. Dual port SRAM is expensive, but simplifies system design by a lot. Only thing you need is to feed BUSY output of the SRAM into WAIT input of the CPU to avoid "snow" effect when address collision happens between CPLD and CPU on opposite ports of the SRAM. I also have 256x192 16 color prototype graphics implemented using the same CPLD and 7008 64k dual port SRAM for 2 flippable pages (x86 SBC prototype briefly shown in my other video). It is possible to implement tiled graphics using the same CPLD, but without sprites - 128 is not enough macrocells/flip-flops available in it.
Generally speaking, I've managed to implement 3 types of graphics engines with this awesome CPLD. Speccy like monochrome linear buffer with color attributes (8k buffer), 16-color linear framebuffer (24k buffer) and 256-color tiled graphics (8k + 16k buffers = 20k total). I think, it is possible to make full featured tile/sprite graphics engine by stacking multiple CPLD and dividing responsibilities between them. One renders tiles, another one overlays sprites, third one renders text-based layer for a scoreboard, for example.
I have one more SBC prototype of 65c816-based computer with 320x240 8bpp color 8x8 tiled graphics with smooth scrolling (no sprites). But approach there was a bit different. Instead of reading from SRAM and sequencing pixels inside CPLD, that CPLD is driving address bus of one dual port SRAM dedicated to character memory which in turn drives part of the address bus (alongside with CPLD) of another dual port SRAM that holds tile pixels. And second SRAM data bus is directly fed into the R2R DAC (through buffers also).
Brown/dark gray fix was easy to implement with CPLD, just changed boolean equation that converts IRGB to RRGGBB from:
R1.d = R;
R0.d = R & I;
G1.d = G;
G0.d = G & I;
B1.d = B;
B0.d = B & I;
to:
R1.d = R;
R0.d = I & !G & !B # I & R;
G1.d = !R & G # I & G # G & B;
G0.d = I & !R & !B # R & G & !B # I & G;
B1.d = B;
B0.d = I & !R & !G # I & B;
Like I mentioned above, I'm also interested in 65c02/65c816 series of CPUs by Western Design Center and made another prototype with enhanced 256-color tiled graphics with that CPU and 65c51/65c22 peripherals IC.
@@solisted Thanks for the detailed answer! Been looking into PLD's, tho mainly for address decoding (like ATF16V8 or ATF22V10), but doing a whole VDP/GPU out of a ATF1508 sounds dope!
Great stuff!
@@solisted I'd be very interested in learning more about your video circuit design and how you work with CLPD devices to make it come to life.
very nice work!
Thank you!
Really amazing ! Congats !
Thank you!
Very impressive!
Thank you, Marcus!
So cool
Thank you!
very nice!
Thank you!
Hi Ivan
I bought boards from Ebay. They are quality product. Looking forward to solder the board.
May I know source for AY-3-8913 chip and BOM for keyboard?
Thanks
Rather than the serial port, I'd add an SD card, it would be so convenient, and with a good enough keyboard and display, you'd be able to develop directly on the Z80, the fun way! I bet your design isn't far from what Sinclair used, except you seem to have added useful colours, rather than just RGB + Bright, which gave a lot of useless duplicated colours, nobody really NEEDS two cyans, when instead things like pink or brown were missing. Then better greys, perhaps including a bright black.
Of course the Spectrum couldn't do separate brightness for foreground and background colour, it was set per cell. Leaving 1 bit left for the equally useless Flash! Using the Bright and Flash bits to give 16 foreground and background colours would have been infinitely more useful in a machine that was already limited. If Clive had given more thought to it's obvious use for games, he might have thought about making things just a bit more friendly and useful. I'm sure he only put in colour begrudgingly. A modern CPLD and an '80s ULA probably have about the same number of gates to make your circuit from.
Serial port is a universal interface. It does not have to be used just for computer-computer transfers. External storage device can be built with any storage medium, communicating with computer via serial port, for example. And monitor ROM can be extended to support reading sectors from such device via serial port using some simple communication protocol.
That's how expansion worked on Atari 8-bit computers - floppy drives, printers, modems were all connected to a daisy chained serial port.
thats how the MSX vidoe memory is organised, maybe the attribute table come 1st, same screen size too. Funny thing, if you program the MSX screen right to left, bottom to top, you can get 4 colors per byte, F+B per nibble, instead of 2 colors per byte.
The only thing frustrated me about programming graphics on MSX is a need to write to graphics buffer through I/O registers. It is much slower than having it memory mapped for direct CPU access.
@@solisted hence the use of DMA as an option from th VDU side. There is a "mod" in BlueMSX (and OpenMSX?) that "opens" VDU RAM as 16K PAGE MAPPED, based on a real world mod, not well known because is conflicts with some other common hardware (MSX-AUDIO or MSX-MUSIC) that the guy did not own at the time. I am glad your design doesnt need such hacks :)
@Paul Wratt Interesting mod, will check that out.
This is very nice man! Are you a “I share my gerbers kind of guy or uh you know 😉” I’d love to try this project!
Thank you, Atari Warrior! Awesome channel name! :) I did share gerbers and everything on my GitHub page, it's in the description of the video.
Well that certainly kicked the ass of my old Tandy (Radio Shack) Model 1. I am also impressed by the tile editor. In my experiance tools written for a particular purpose, tend to really do the job,. I would be interested in the ROM soft/firmware. Do share if and when you get the opportunity. I look forward to you sharing your work the "IDE" you have planned. I am interested in you choosing BASIC rather than python; were you trying to keep the retro vibe? Well done for what you have acheived. Now, where do they put the subscribe button on this thing?
Thank you! This project is 50% nostalgia driven in any aspect - hardware and software, so BASIC is a choice for programming language. Maybe, with built-in compiler to add some juice :)
Very nice 🙂
Thank you!
Repton Man!
Hi, why you used diodes on keys? Are they necessary? In my ancient computers I never saw it. Usually I see the row/columns traces without anything else. What's the part code of these diodes?
Hi! Diodes in keyboard matrix are used to prevent so called "phantom" key presses when invoking multiple key combinations. Old keyboards were without diodes to reduce cost and limited in key combinations keyboard controller can detect without an error. Usually, standard 1N4148 fast switching general purpose diodes are used.
wow! new fan here! 😍
Thank you, Phil!
Any chance someone might do a kit of your design?
It's possible, I published gerbers and schematics on GitHub under the MIT license.
@@solisted I think someone should get behind this. But I would put more GP I/O on board for robotics and SCADA type stuff. Probably swap out the sound effects / joystick for motors and DACs.
Does it have / can it run unmodified BASIC or FORTH?
Gracias. Thanks.
Thank you!
Also... How is the memory layout of your screen RAM? The Spectrum used a really weird system of thirds, then arranged in a very odd way within those, where most 8-bit computers just had a flat, linear bitmap. You mention something about thirds in the video, is that what you mean? I know Sinclair claimed their design was easier to interface with a TV, and wasn't necessarily too bad to work out the location of a pixel, or 8 of them, but still I'm pretty sure it slowed things down, a bigger problem when your sprites are all in software. Hey, how about some sprites in your design?
Does it have to have a separate chip for it's graphics RAM? Couldn't you just share the main memory? You just need a system of priority for when the graphics and CPU chips clash, have the graphics chip halt the Z80 if that happens. The Z80 spends a lot of cycles doing stuff other than RAM reading, you should generally have lots of time. How much slower did stuff run, in the contended 16K vs the upper 32K? Can't be too bad or else the 16K model wouldn't have been practical. Also you only need access 2 bytes per 8 pixels, or even less, if you cache the atttribute byte a line at a time, say. Would need 32 bytes and reduce RAM access from 2 bytes per 8 pixels, to 1.125 bytes, effectively.
Oh, I love fantasy computer design! I really should get more into electronics when I have the space available. I can manage Arduino OK, and C on proper computers, a bit of Verilog can't be _too_ hard.
Hi! I implemented linear memory layout for the monochrome pixel buffer. I went with asynchronous dual port memory design for the video circuit to keep it compact and simple. I did not have enough experience to quickly come up with acceptable solution for shared video memory access and did not want to spend too much time on it.
CPLD I used in the video circuit has just 128 macrocells and not suited for complex video cicruit implementations with tiles and sprites. Simple pixel shifter is easy to implement and fit, but more complex stuff would require much-much more logic gates and flip-flops than CPLDs of this class have.
Very interesting
Thank you!
Oooh, I know this. It's the precursor of Raspberry Pi 400 haha
I would say ancestor.
The 2 PCBs are listed for £24, but no shipping outside the UK 😔
What is the total parts cost?
Hi! These boards made by the channel viewer. He's got extra, bc of the minimum order, so decided to sell the rest. These are very easy to manufacture using Gerbers provided on the projects github.
I did not compile complete BOM yet, please check my web site for more info.
Is it not compatible with any of the retrocomputers ? Why do we need this project ? It would be interesting to make a computer on Zilog ez80 , 56 MHz CPU, 16 MB memory, 256 colors, with a screen resolution of 320x240
No, it's not compatible with any of the retro computers. This project is meant to educate myself in electronics engineering field and for recreational retro programming.
Very interesting, Good explanaition and great project! Where did you get the Keyboard from?
Thank you, Thomas! Keycaps for the keyboard are ordered separately from WASD Keyboards. You can design your own keycaps on their web site and they will manufacture them for you. PCB for the keyboard is DIY, made in KiCad and manufactured by JLCPCB (like the mainboard). Cherry MX linear switches are ordered from mouser.com. Everything is DIY, hand-soldered.
@@solisted useful information, thsts the biggest hurdle ie problem with resurrecting ZX81 or Spectrum, their standard keyboards are yuck. and there no third party around these days making and selling complete ZX keyboards. a mere 35 years late lol.
I haver an intact ZX81 , no idea if it wotks, best to keep it as a display item methinks.
This looks amazing Ivan. Is there an email address I can contact you on to ask some questions re referencing this video in a story?
Thank you! I published my email on the channel about page.
The Sinclair ZX Spectrum is a British computer so it really should be pronounced the British way, phonetically: ZED-EXX SPEK-TRUM. 😉
:)
Nice! would have been wonderful to have a full bitmap mode without color clash @16 colors. It would have required 32kvram
Thank you!
I have graphics engine based on the same CPLD that implements this mode. But it's impractical to put such mode with 8-bit CPU like Z80 @ 10Mhz. There would be very poor fill rate for any decent game animation - too much data to move around for such CPU. It will ruin the balance between the CPU and graphics subsystem. Also, video buffer would take a lot of RAM and will require external banking to be implemented. 16/256 color modes for 8-bit CPU is usually implemented using tiled/sprite mode, without linear framebuffer. But in this mode you cannot draw arbitrary graphics (yes MSX has 768 tiles in tiled mode you can fill entire screen with and do some bitmapped drawing, but it's very quircky to work with).
@@solisted I also think it's really disappointing about the Spectrum type attributes/colour bleed. I prefer graphics modes which don't suffer from this, like on the Amstrad CPC, BBC Micro, etc. The Timex Sinclair TS2068 and some other ZX Spectrum clones have an additional graphics mode without the attributes/colour bleed. Can you explain how this is done? Of course, the TS2068 CPU is clocked at 3.5Mhz, so wouldn't it be much easier at 10Mhz?
@@paulbraun5657 I don't know about BBC Micro, but Amstrad CPC has double width pixels which gives resolution 160x200 that takes 16k of VRAM and CRTC controller that can consume main RAM for the video buffer at the arbitrary address. With smart programming of this controller you can achieve smooth animation with double buffering and/or per pixel scrolling, but at small frame rates. Also 16k VRAM is not a big deal since Amstrad CPC supports memory banking and additional memory. It's a bit more advanced. ZX Spectrum 48k has only one bank of memory and no video hardware assistance of any kind. For this computer, such video layout was a necessity, I think.
I tested another prototype with 256x192x16 color per pixel video mode with Z80 clocked at 10Mhz. It took 24k for the video buffer out of 64k address space and I could not achive smooth animation due to low throughput of the CPU even at these frequencies. To have smooth animation, you will need second back buffer and it's another 24k - somthing this computer cannot afford to have. Hardware assistance was needed for games to feel fast and snappy, at least some sprites or hardware blitter of some sort.
At the end, I decided to make another computer with 256x192x16 color video mode and W65C816 CPU that has 16M address space. And keep this computer with ZX Spectrum-like video mode to preserve the original balance.
@@solisted the Amstrad CPC has three graphics modes which each take 16K. It uses the same 6845 graphics chip as the BBC Micro. However, the BBC Micro graphics have no border and the screens are 256 pixels high. I think this means the BBC Micro graphics modes each take 20K. The Spectrum and Commodore 64 graphics screens each take up 8K. I'm not aware of Amstrad CPC or BBC Micro games running much slower than Spectrum games, so I think there must be a flaw in your computer's design! I think it's very depressing seeing that large areas of Spectrum graphics screens have the same background and foreground colours. Sinclair tried to make everything as cheaply as possible and this is the result. I can't see the point of copying this limitation 40 years later, though.
@@paulbraun5657 What can I say, I don’t agree. I tested everything thoroughly on the prototype and was not happy with the performance with color per pixel mode. CPU was running at the full speed while accessing video RAM, no wait states. Also not agree that attribute clash is some bad thing. When memory is limited to just 64k, this mode totally makes sense, because it leaves as much RAM as possible to a program code. With clever programming you can make pretty good looking games, even with attribute clash. I’m pretty satisfied with my computer design and enjoy programming it.
Are sources for CPLD available somewhere? or it's binary only?
Did not decide yet if it’s a good idea to publish ROM and CPLD sources, bc it could lead to platform fragmentation. But on the other hand it’s not so difficult to write other variants of the video code and ROM for this computer, so fragmentation is inevitable if this computer becomes popular among DIY builders.
@@solisted I have wrote verilog for my breadboard computer FPGA, but it's altera one, yours interesting that it's running on Atmel CPLD, but at the same time requires expensive programmer cable. Without looking at code and how easy that is I'm not sure I want to invest in that cable :D My take on this, if you make your schematic/pcb and etc open source, then it makes sense to make programming of it open source too, otherwise it's closed system and not sure you can even call that platform. Atmel is interesting for me that it's 5V compatible and doesn't require a bunch of level shifting to 3v3 fpga's. Anyway, your project is really cool. If you decide to share source code for cpld I would gladly read/learn something from it :)
im your 169th sub ;)
Thank you! :)
Does it have a true bitmap mode where every pixel can be any color?
No, 8x8 area of pixels can have distinct foreground color when pixel is lit and background color when it's not in 1bpp 256x192 bitmap. Color is controlled by a separate 768-byte attribute area in VRAM.
Super but… why? What is a purpose to develop systems from the 80’s?
Good question MR Q, thank you! A lot of reasons, actually. A few of them are:
I'm not a professional electronic engineer. Old computer systems are very easy to design and build for beginners like me. Sub-20Mhz frequencies allow you to use inexpensive debugging equipment like $300 oscilloscopes and $100 logic analyzers. And you will need a lot of hardware debugging when you start something like that. Due to low frequencies you can start on the breadboard with jumper wires and it will still work! We know how noisy circuts are on a breadboard.
You don't need great soldering and PCB-design skills to build system like that also. At these frequencies it is very forgiving to various signal integrity mistakes you might encounter when designing PCB. First revisions of the PCB for this project were 2-sided and so ugly, because I used autorouter, but still worked well! :) Only final revision was manually routed on 4-layer PCB when I learned to do it well. I'm still not comfortable with SMD-soldering, so choice of old through-hole components helped me to avoid a lot of delays and frustrations caused by lack of advanced engineering knowlege and skills.
I'm a X-generation computer enthusiast and computers from that era are still produce a lot of warm feelings and nostalgia for computer nerds like me. I'm very frustrated by the situation in the IT industry today with bloated operating systems, overengineered applications and frameworks that consume gigabytes of RAM for the simple tasks like IRC chat with fancy graphics (hello Slack based on Electron framework ;) Computer and network speeds improved by many magnitudes since 80s but still you have to wait couple of seconds for an application to start like you're running it from the floppy :) I'm a programmer and languages like JavaScript and its frameworks make me puke - want to go back to my cave, open text editor and start writing oldschool z80 assembly :) This project is a safe-space for myself as a software developer where I can work alone, without all that toxic scrums and kanban boards :)
Working with 8-bit systems in assembly language is very easy and straightforward - it works the way you make it work (program), no more no less. Instant compilation times, instant launch, no need to have super powerful workstation for development.
Also, I like an aspect of that era that you don't need to be Ubisoft or Epic to make a decent game for an 8-bit computer. You alone can make something very decent (matching system capabilities) in a month or so and that will include game graphics, level design and music. And it will be very captive and challenging to play if you do your job well - check how popular is Celeste game for the PICO-8 fantasy console. It was even ported to different modern platforms and selling very well!
Is this a kit i can buy from you?
No, there is no kit available
..... But, but, but..... does it play Doom?
Z80-based TI calculator can, why not? :)