I watched through most of Ben Eater's 6502 computer video series a while back (if you haven't yet I really recommend you go watch them; I really learned a lot). He uses a 65C02, a 65C22, a 62256, 28C256, and aather crude address decoding to make everything tick. I didn't watch all the way through the video series, but I don't think he made the system to be programmable without using the EEPROM and an external system. So, I thought it would be rather cool if I could make what was essentially the exact same computer, except with a bunch of switches and LEDs to input and output data in binary. It would be like a KIM-1 with better technoloty but much less features.
I also whipped up a much more complex yet efficient (in terms of address space usage) address decoding system that barely wasted any address space (more on that later). My new address decoding system used the 4 most significant bits, a bunch of logic gates, and was capable of separating the entire address space into chunks of 4 kilobytes or more that could be assigned to something. In the first design $0000-$7fff was assigned to all 32k of RAM the 62256 could provide. $C000-$FFFF was assigned to 16k of ROM. Wasting half the ROM space, but I didn't want to deal with bank switching and figured 16k ROM was plenty anyways. I gave $B000-$BFFF to I/O, which was at this point just a single 65C22; and that only uses 16 bytes of address space. A huge waste. $8000-$AFFF was assigned to an expansion bus, but I found these addresses to be particularly difficult to decode, so I split them into 3 chunks at 4k each. Now the address decoding was extremely unoptimized but in a theoretically functional state.
Now that the address decode logic was sorted, I got to designing the motherboard; I used datasheets and videos and everything to help wiring up some bits, but in the end I had all the ICs properly (I think) set up. At this point I was considering implementing some form of video output and keyboard input. I could use either hexadecimal keypad and 7 segment LED or 8 bit character LCD, a dumb terminal, or a composite output plus external keyboard. Implementing any of these would be a challenging, but composite video would be a lot more so than the others. However, I figured this might be a good opportunity to learn how NTSC video worked. I attempted to learn how the VIC, VIC-II, Apple I, and Apple II video circuits worked, but all of them had a lot of compromises. Cost, complexity, awfulness, etc. Then, carlsson suggested I use a Motorola MC6845 CRTC. The MC6845 is a really bare-bones IC, which means it can be highly customized to make it whatever I fancy, but also means that it would need lots of external circuitry to work. And if there's one thing want to meddle with the least in this project, it's video modulation. So naturally my next step was to use a MC6847.
The MC6847 had pretty much everything I wanted built into it apart from generating an actual, proper composite signal. It has an internal character ROM and everything, requiring nearly no additional circuitry. There are just two downsides though; 1) it can only output 32 columns of text per row 2) every computer that uses the MC6847 looks identical. A popular computer that used the MC6847 is the Tandy Color Computer; therefore unless I tweak some settings to change color and whatnot, video output will look exactly the same.
Another downside here is that I have no keyboard input. I found a schematic for a device that decodes a PS/2 signal to ASCII that is based on an ATTiny26. However, found no firmware for it. A friend of mine told me he could help me out a bit in this area but I'm not sure if he could actually come up with a solution. If it comes down to it, I might have to use a dumb terminal instead.
This is where I will end this blog post... It essentially summerizes day 1 of designing the 6502 computer, which is yesterday. I made some progress today (teaser: the design now contains a sound chip, rs232 interface, an extra 65C22, and an overhauled address decoding system), so expect more updates soon. I do have some bad news though: this computer will remain in schematics stage for a while. There is a very complicated reason (which I won't explain in detail) why I won't be able to start assembling this stuff until May. I will start breadboarding this computer as soon as I have parts and eventually I will perhaps produce a small run of PCBs to sell these computers (that is, once it has met all my goals I have set for it; I'll explain what the goals are in a following entry). I'll also promise some pictures from now on; I didn't take any on day 1 and the design has since changed drastically. And on that terrible disappointment, it is time for me to go sleep.