close-circle
Close
0%
0%

Apple 1 Mini

A minified replica of the Apple 1 computer

Similar projects worth following
close

This project is a minified replica of the Apple 1. It's built around a 6502 CPU, 6821 PIA (Peripheral Interface Adapter), RAM and ROM - just like the original Apple 1, but it uses an Arduino Nano to enable serial communication between the Apple 1 board and an external computer that acts as terminal. That means you can't hook up a keyboard and monitor directly to the board (yet!).

The project is heavily inspired by the Briel Computers Apple 1 Replica and The Ben Heck Show!

What I have done:

  • Redesigned the circuit so I would fully understand every aspect of it.
  • Designed a PCB that can be easily produced and included in a modular DIY kit for anyone that wants to build this at home.
  • Programmed the ROM so it only contains BASIC, Krusader (assembler) and the Woz Monitor (memory monitor).
  • Written firmware for the Arduino to enable serial communication in a way that gives the real Apple 1 feeling.
  • Written a simple utility to upload data to the computer. This proved to be difficult with existing tools as there need to be specific delays in sending the data.

What I have planned:

  • Design an expansion board that allows you to connect a keyboard an monitor directly to the board and run the Apple 1 standalone. The main PCB has an expansion header that allows an expansion board to be put on top of it (like a breakout board).
  • Design a modular casing with laser cut parts. The casing will house the main board, but additional layers can be put on top of it to increase its size and allow for expansion boards to be added later on.
  • Release several varations of a DIY kit for this project (PCB only, PCB + passives, PCB + passives + casing, complete kit, etc.) so others can easily build the computer at home.

schematic - Schematic.pdf

Circuit diagram for revision 1

Adobe Portable Document Format - 525.71 kB - 08/05/2017 at 08:37

eye
Preview
download-circle
Download

  • 9 × Capacitor 100nF
  • 1 × Capacitor 4.7uF Electrolytic capacitor
  • 1 × Capacitor 10 uF Electrolytic capacitor
  • 1 × Capacitor 100 uF Electrolytic capacitor
  • 1 × Diode 1N5817 Schottky diode

View all 22 components

  • STM32 experiment

    Ruud van Falier09/10/2017 at 16:34 0 comments

    Just ordered some STM32F103CB boards for $3 each. I'm hoping that I can use one to generate the composite video signal for the expansion board that I'm working on.

    It's about the same size as the Arduino Nano board and will easily plug into the PCB and it can supposibly be programmed with the Arduino IDE.

    We'll find out in a few weeks!

  • Thanks for your interest

    Ruud van Falier09/04/2017 at 08:15 0 comments

    It's awesome to see so many people interested in this project.
    I've been quiet for some days because I was on a holiday but work will continue soon!

  • New PCB came in!

    Ruud van Falier08/23/2017 at 15:29 0 comments

    The redesigned PCB came in today!
    Quickly assembled it and everything seems to be in working order.

    I will do some more thorough testing, but if everything checks out, this will be the PCB used for the first production run of DIY kits. 

    In the mean time, I've been busy trying to design the first expansion board that adds composite display and keyboard functionality to the Apple 1 Mini.
    Unfortunately the progress is slow and I haven't succeeded yet in rendering the 40x24 characters that the original Apple 1 support on screen...
    But there are still some options open, so more news on that will follow later!

  • Data upload utility

    Ruud van Falier08/06/2017 at 18:56 0 comments

    Transferring data from my PC to the Apple 1 Mini proved challenging.
    The transfer requires a delay after each byte and a bit more delay after a carriage return.
    Without these delays and a few other details, the transfer fails.

    I added a simple utility that handles this upload process and I've been using it to test the small library of program code that I found for the Apple 1.
    It uploads data at a whopping 29 bytes per second!
    The utility seems to work very well at this point and I've enjoyed playing a few simple games on my Apple 1! :-)

    Source code and binary for the utility is available from the GitHub repository.

  • Sneak preview of revision 1

    Ruud van Falier08/05/2017 at 08:48 0 comments

    Here is a sneak preview of the (much smaller) revision 1 PCB that is currently being produced for testing.

  • Let's get it started...

    Ruud van Falier08/04/2017 at 14:37 0 comments

    A good month ago I was contemplating what to build next...
    I had just finished building an 8-bit CPU on a breadboard - thanks to Ben Eater's amazing teaching skills - and figured I could step it up a notch.
    That's when I came across the other Ben's (Heckendorn) videos on him building an Apple 1 on a piece of perf board and my new goal had been set: to build myself an Apple 1.

    I started by researching the resources Ben Heck had left behind, which was mainly based on Briel Computers' Apple 1 Replica project.
    During that research I began creating a new circuit diagram for my own build.
    Starting a new circuit from scratch really helped me understand every aspect of the computer. That and troubleshooting it with my oscilloscope and logic analyzer once I put everything on a prototype board.

    Once the prototype was functional, I decided to produce one (inefficient) PCB to verify my circuit diagram was correct.
    The result of that first PCB (revision 0) can be found in the gallery; it's a rather large board, but works exactly as I hoped!

    What I have so far:

    • 6502 CPU with 6821 PIA, 8 KB (EEP)ROM and 32 KB RAM
    • ROM containing BASIC, Krusader and WozMonitor
    • Firmware running on an Arduino that provides serial communication between the computer and an external terminal client (PuTTY, for example)
    • The firmware mimics Apple 1 visual representation (only uppercase, blinking "@" as cursor)

    I intentionally started with a board that does the bear minimum; run 6502 code and provide serial communication.
    The idea is that the computer is expanded in the future by adding boards on top of the main board using the expansion header.

    What I have planned for this project:

    • Produce a smaller PCB that is easy to fit into a casing.
    • Create one or more expansion boards, for example to provide an interface for a monitor and keyboard so the computer can run standalone.
    • Create a modular casing from laser cut pieces. Modular in the sense that it can fit just the main board, but the casing itself can be expanded (using interlocking tabs) once expansion boards are added.
    • And most importantly: release the computer as DIY kit, in different variations!

View all 6 project logs

Enjoy this project?

Share

Discussions

chmod775 wrote 10/04/2017 at 20:28 point

It's a pleasure to still find some people interested in Single Board Computers using old style DIP ICs! I think this will be even better if you replace that Arduino Nano with a DIP Microcontroller.

  Are you sure? yes | no

trevor langevin wrote 08/30/2017 at 01:21 point

Your XTAL 1 mounting is unusual.  The typical mini computers for arcade and computer games of the early 1980's were 1mhz machines with 300-500ppm tolerances in the crystals.  Todays crystals are significantly better with 5-30ppm for simple 2 pin devices.  The way you have mounted this 4 pin crystal is just cause for induced interferrence.  Hope a more standard configuration is used in the final product.

  Are you sure? yes | no

Ruud van Falier wrote 09/25/2017 at 12:45 point

I have been thinking about this and I'm now planning to add additional pads on the PCB so you can choose to either use a traditional through hole "full can" oscillator or the SMD version.

  Are you sure? yes | no

juandelacosta wrote 08/28/2017 at 01:42 point

will you release the pcb files?

  Are you sure? yes | no

Ruud van Falier wrote 08/28/2017 at 14:21 point

Circuit schematic and PCB design is available from the Github repository: https://github.com/DutchMaker/Apple-1-Mini/tree/master/design/DesignSpark

  Are you sure? yes | no

Vincent wrote 08/27/2017 at 16:51 point

Great project.  Is the BASIC Eprom source avaialble? Thx

  Are you sure? yes | no

Ruud van Falier wrote 08/27/2017 at 18:29 point

The BASIC interpreter source can be found here: https://github.com/jefftranter/6502/tree/master/asm/a1basic

  Are you sure? yes | no

rpmchugh wrote 08/27/2017 at 00:21 point

You might consider using the Intel formatted file protocol for uploading the data.  It's simple enough to implement and has a two-complement checksum for each hex line sent.  It was used extensively in CPM, and it's easy enough to find (LOAD.COM in CPM).   It also seems to me that the 6551 series chip could handle all serial bi-directional comm, although i believe it's a 28 pin package, but it might give you some ideas in that area that could be interrupt driven through the 6502.  Single 5-volt supply on it with full modem control signals. 19,200 with internal crystal - up to 128kb external.  Even a PIC processor would be easy to implement. Something to think about.

  Are you sure? yes | no

Ruud van Falier wrote 08/27/2017 at 18:30 point

I will look into that. Thanks for the suggestion!

  Are you sure? yes | no

Hacker404 wrote 08/25/2017 at 06:24 point

I love the three legged hardware <s>bug</s> feature :)

+10 for the project

I probably would have used a more modern 5v Programmable FLASH instead of EEPROM but then I would also have used a 64 or 100 pin atMEGA(something) that has enough pins to control the whole 6502 bus for FLASH programming and design / software debugging.

  Are you sure? yes | no

Ruud van Falier wrote 08/25/2017 at 10:43 point

Thanks!

I found that simply stacking an Arduino Nano onto the board was an easy and cheap way of adding the serial interface.
There are definitely things I could have done different and may still do in the future, so suggestions like these are highly welcomed!

  Are you sure? yes | no

Hacker404 wrote 08/25/2017 at 11:23 point

I see a lot of the board on board now and I like it.

You could write a small boot routine in the 6502 to check a ATmega pin on reset to see if the FLASH needs to be updated. The ATmega can have a pin to reset the 6502 to start that routine. Then it could be done with far less pins because a large square chip will look out of place with all that DIP.

I don't remember all of the chip numbers 29xx 39xxx 49xxx but I think the 39xxx FLASH could even be programmed by the 6502. You need to send a data bus sequence first and there are some programming time constraints as well. Not the low pin count (LPC) interface, just a parallel interface that needs the correct start sequence to prevent accidental re-FLASHing. This would cut development time and hassle.

The problem is that modern 39xxx chips have more FLASH and pins than a 8kB chip. They start around 128kB but you could just ground the higher address pins to that your current ROM addressing scheme works the same.

  Are you sure? yes | no

davedarko wrote 08/23/2017 at 16:14 point

that's an interesting oscillator mounting style you've got there :)

  Are you sure? yes | no

Ruud van Falier wrote 08/23/2017 at 17:16 point

hehe, couldnt source a tin can oscillator for a decent price so went with the SMD version :D

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates