From e0304bf58ff84a6b475aae8743b6c90fa5fa03f9 Mon Sep 17 00:00:00 2001 From: Ruud van Falier Date: Fri, 4 Aug 2017 10:03:52 +0200 Subject: [PATCH] More readme and renaming the repository --- .gitignore | 3 +- README.md | 33 ++++++++++++++------- design/DesignSpark/revision1/schematic.pcb | Bin 201728 -> 201728 bytes design/DesignSpark/revision1/schematic.sch | Bin 275968 -> 275968 bytes docs/running_basic.png | Bin 0 -> 22820 bytes 5 files changed, 24 insertions(+), 12 deletions(-) create mode 100644 docs/running_basic.png diff --git a/.gitignore b/.gitignore index ace685b..9843965 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ design/DesignSpark/gbrl obj bin .vs -backup \ No newline at end of file +backup +export \ No newline at end of file diff --git a/README.md b/README.md index 871e4bd..48ff531 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,27 @@ -# Apple 1 Replica build - -This is my take on an Apple 1 replica. -[The schematic](https://github.com/DutchMaker/Apple-1-Replica/blob/master/design/DesignSpark/schematic%20-%20Schematic.pdf) is based on learnings I took from the Briel Computers Apple Replica 1. -Also lot's of lessons were learned and resources taken from The Ben Heck Show: https://github.com/thebenheckshow/158-tbhs-apple-1-replica +# Apple 1 Mini *This build is currently in progress* -The current state is that the board is working, but only supports serial connection through the Arduino. -The board itself is still in its first revision and is going to be significantly shrinked in size for the next revision. -**I am planning to release revision 1 as a kit! It will include the board and most components for a fully functional Apple 1 that can be controlled via a serial connection, with support for expansion cards for future development.** +This project is a shrinked replica of the Apple 1. +It's built around a 6502 CPU, 6821 PIA (Peripheral Interface Adapter), RAM and ROM chip - 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). -Pictures of the current state (revision 0): +The project is heavily inspired by the [*Briel Computers Apple 1 Replica*](http://www.brielcomputers.com/wordpress/?cat=17) and [*The Ben Heck Show*](https://github.com/thebenheckshow/158-tbhs-apple-1-replica)! - - +**What I have done:** +- [Redesigned the circuit](https://github.com/DutchMaker/Apple-1-Mini/blob/master/design/DesignSpark/revision1/schematic%20-%20Schematic.pdf) 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 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. + +**Pictures of revision 0 (very first PCB based on the schematic to verify that it functions properly):** + + + \ No newline at end of file diff --git a/design/DesignSpark/revision1/schematic.pcb b/design/DesignSpark/revision1/schematic.pcb index bdbce1f637d6847f1b599105b9c170492d7631f6..285cbc44f3da4e477817de2dddd059c28f963837 100644 GIT binary patch delta 680 zcmX|8IZFd!6nwjz!%cQIm+^=qX^fU$(e+BeDA-wBr1BsT;st^rB%oknVId-Dt)vtp z>~9bR{S7vzuuG|hGkauUzIpTBckFxHXc~>C@lsWThuP6`r*));73H;crghZd=R<~> z&{HUym!gPly@hk>+pL)iuySFUSC*;RmZ{$TMfBs{)5=NZpf+WH=-OAH-uZnm7?0!f zT$;pDLUGm!DLE=K)6KbwJ;-@Yq}QvjLQ`NARKX>Xcl3b70vPnj`X)%sajAnFAP=xe z?1J=bG{7`SUj*BlhzTWDK-MBOz#_xw_sn{E#@k%>K?9$^1Euc+ ziGnL)K!0?RWhmQ`8>!b@D@JQ)?->y(b^-I_hWJGhMhXQ;tT+Pew-V@ zdGVGZPuU868YFl#eUb){_Qy Sh6A2wn>^2-FZOjpt1ACCXg8<; delta 675 zcmYk3J4*vm5QXR7&BK^oO*Zje*_hagChGc1KqL4A1hKI4(Ii4jLC8W1!NwwrMQR}+ zh>&7`gTFvau~8vlVQb+zn@z}p@6J7Q=kD&zx-HXfna^b%cAxUq>vmN~m3nMn7{5CF zp2;y2d5FaGQWO#QyYpi=X03Eca8h@yE5}lvW9hp;CEi=i_z2Zr>}KJhIVZ2BdEB6s zzh>nW@$%d^{<4IXXFEY^B#3cD4YoiU3;}8#uzrsQ3Io=y4(z1{vkO?52h<{<-==|1 z0KG*66~UJwGE4()0^W(zKx=?63xQA6tsqioz{J<`StJJzfs_CfqcqSlpf^D$CQ?A8 zu=TZpmFJNlI*5sk2;Sv?*fOFP&rTRAW$ah#_t~UzQ%fS-6K@aBkNGLUJm<$a4k)%l zpQ3>{L;3^_)Emo8*Y?LU3C}u?1@TD6f&$Kk2X^4OC%yLBHZ|Q1{kA6p&$cQ4Y>I6w M@76ZTs2j>NP-nM+w!*C@-hN36A&|Rx8-H2RpjCw@j6dL5e!nb;W_k8iGI{>;Rhuqp{8!nTr4*_6S7fq~(`IZhL0 wHU=;o$OQujAQ{jMRM>3G+iuIt2*gZ4%)H%}m!(#bkzxB0Jr*1G$p%cE0Hn?vM*si- diff --git a/docs/running_basic.png b/docs/running_basic.png new file mode 100644 index 0000000000000000000000000000000000000000..d00ce0a7fde705090d2a078a30639dcda1da58de GIT binary patch literal 22820 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 lT-W2=$D{?*hPq9izh*xZe