Final Notes

Contents | Back: BASIC Interpreter

I haven't tracked how much time I've spent on this project. It took roughly five months with more evenings in one week and less or none in another. Mostly it went on very well, thanks to the great tools we have available today. As always in hardware and software development, the most annoying task is debugging, when you have no clue what's currently going wrong in your design.

But if you got the basic building blocks up and running, project velocity starts to increase. And during the build the list of ideas for further enhancements gets longer and longer. So this could easily become a never ending project.

Fortunately there is no more free space on the 160mm x 100mm PCB. A bigger PCB would be needed if we want to add hardware like a graphics chip for video output.

But there are some optimizations that one could apply. Immediately after I finished the hardware design, I though about adding an SD card interface. But all IO pins of the VIAs are already in use for the keyboard and the LCD. To reclaim some of this pins, we could replace the 4 bit parallel LCD interface with an I2C interface by adding a small I2C-to-parallel-LCD adapter between the 6502 computer and the LCD. Of course we would need to implement a I2C software routine as well. But since we then have I2C, we could simply add more I2C based peripherals (e.g. a real time clock chip). Since we now have at least 4 free IO pins, we could connect these to a SD card socket.

Another option would have been to use a Johnson decade counter to drive the rows of the keyboard instead of using one output pin for each row.

I didn't include an expansion port to my PCB, so adding more complex hardware is a bit complicated and in most cases would require a redesign of the board. So most of the home computers in the 70s, 80s and 90s had at least one connector that provided direct access to the address, data and control bus lines of the microprocessor. In computers like the C64 this port was accessible from the outside of the case, so that the user could plug in extension cards without disassembling the computer.

But sometimes you'd like to add some hardware inside the computer (and leave the expansion port free for other uses). An example for this is the option to switch between two firmware ROMs. To accomplish this, we've built adapter boards containing pin headers that fit into the sockets of for example the ROM chip or the CPU. The board contains another IC socket - connected directly to the pin headers - that would hold the original chip. Now we were able to access the signals of the computer and had a PCB that holds our new circuit.

I could apply the same technique to my own home computer and add a new PCB between the 6502 IC socket and the CPU itself. With soldering some wires to the remaining pins of the 74137 address decoder, I could add four more peripheral chips to my system.

Lots of improvements can be done on the software side as well. For example the BASIC interpreter is missing some data types like arrays and a lot of commands like GOSUB, RETURN, FOR or commands to control the SID. Also its performance is very poor and needs heavy optimization.

As I've said, there is a long todo list, but for now I declare this project finished.