Viser innlegg med etiketten RC6502 Apple 1 Replica. Vis alle innlegg
Viser innlegg med etiketten RC6502 Apple 1 Replica. Vis alle innlegg

tirsdag 8. august 2017

RC6502 Apple 1 Replica SBC

Dette er et innlegg relatert til RC6502, mitt forsøk på å bygge en fungerende replika av den første Apple maskinen som ble laget. Det som trengs av tegninger og programvare for bruk av maskinvaren er lagt ut på https://github.com/tebl/RC6502.

RC6502 State of art

Mine opprinnelige mål med RC6502-maskinen min var å lage en maskin som var i stand til å fungere tilsvarende som en av de opprinnelige Apple 1 datamaskinene, eller i det minste så langt som det er praktisk å gjøre dette i dag (få av oss arbeider frivillig med en CRT-monitor, så denne biten er erstattet av en Arduino Nano som trer inn i rollen som tastatur og skjerm sett fra datamaskinens side).

Alt gikk selvsagt ikke på skinner, slik som man kan lese ut av gjennomgangen i innlegget Montering og feilsøking - konklusjonen for eventuelle lesere som aldri nådde frem til konklusjonen, var at maskinen fungerer uten endringer i maskinvaren. 

Mål oppnådd!

Hva gjør man når har oppnådd målene sine innenfor IT-sektoren? Det... Det skal jeg fortelle deg så snart jeg har luktet på muligheten til å i det hele tatt komme i nærheten. Historisk sett ut fra tidsalderen maskinen stammer fra så var svaret å lage dem enda mindre.

Challenge accepted!

RC6502 Apple 1 Replica SBC

Det neste logiske skrittet var vel egentlig det de fleste egentlig starter med, det vil si å lage en versjon av maskinen der alt av funksjonalitet er lagt ut på en enkel PCB. Disse versjonene er gjerne de som senere blir lagt ut for salg og blir da referert til som en Single Board Computer - SBC. Disse blir langt mer kompakte enn maskinen jeg så langt har bygd - borte er behovet for en backplane samt at eventuell logikk som tidligere var gjengitt på flere av kortene nå er begrenset til det minimale.

Den komplette tegningen over hvordan alle komponentene henger sammen, essensielt sett alle modulene komprimert ned til en enkel sammenhengende skisse uten overlapp, er gjengitt nedenfor. Det er relativt mye som foregår her, men mye må kunne sies om å det å se en komplett fungerende datamaskin på en enkelt A3-side.

(Last ned i PDF-format)

Det eneste som er nytt her er fire hull lagt inn for å sette inn "føtter" for maskinen, den andre er at det er lagt inn en 3.3K resistor fra CPU pin 36 til +5v. Kan ikke se at dette gjorde noen forskjell på maskinens funksjon, men det er dette som ser ut til å være anbefalt ved bruk av 65c02 prosessorer fra Western Design - ikke det at jeg har fått disse til å fungere så langt, men det får være en sak for mitt fremtidige jeg. Kortet fungerer med de langt billigere og langt mer tidsriktige versjonene av 6502-prosessoren, så er fornøyd så langt.

Slet kraftig med å få alt inn på en PCB med størrelse under 10 ganger 10 centimeter i og med at dette er nåværende grenser for å få produsert en PCB innenfor grensene til lommeboken min (konstant for lite penger, og alltid altfor lite tid til å bruke alt jeg likevel kjøper). Endte opp med å måtte gjemme en del av resistorene under pluggene for å koble til Arduino Nano-en. Resultatet kan du se nedenfor, og til tross for at noen med mer erfaring utvilsomt ville klart det langt bedre så er resultatet overraskende bra.


Man ser her også skruene for de allerede nevnte føttene, har her brukt hex-avstandsskruer tilsvarende de man gjerne vil bruke mellom pc-kabinett og hovedkort. Nederst er det også inkludert tilkoblingsmuligheter slik at man kan bruke SBC-modulen sammen med en eventuell backplane for bruk av andre tilleggs-moduler - her kan man selvsagt også bruke en 40 pins sokkel kuttet ned til 39 for bruk av en enkelt modul uten behov for backplane. Muligheter så langt øyet ser...

I og med at jeg først startet med å bygge slike maskiner for å lære om hvordan disse fungerer så tenkte jeg at det var på sin plass å bruke baksiden av kortet til noe fornuftig, derfor har jeg nærmest skrevet inn dokumentasjonen på selve kortet. På den måten skal det ikke være nødvendig å bla så veldig mye i notatene, de mest brukte kommandoene finner man ved å snu på kortet! Praktisk.


Den nevnte resistoren som ble lagt med i diagrammet kom selvsagt ikke inn i PCB-en, men den ble slengt inn på baksiden istedenfor.

SBC-versjonen av maskinen fungerer, så da har man gjort det også! Har fortsatt en håndfull av dem liggende, så dersom andre ønsker å bygge sin egen versjon av maskinen så er det gode muligheter for det. Muligens i bytte mot en Amiga 500, men den delen forblir nok bare en gammel teknologs drøm så får heller bare avslutte med et action-foto av maskinen i bruk!


mandag 5. juni 2017

RC6502 Montering og feilsøking

Dette er et innlegg relatert til RC6502, mitt forsøk på å bygge en fungerende replika av den første Apple maskinen som ble laget. Det som trengs av tegninger og programvare for bruk av maskinvaren er lagt ut på https://github.com/tebl/RC6502.

Montering

Da var det store øyeblikket kommet, PCB-ene er her og da er alt som gjenstår å brette opp ermene, skru på loddebolten og glede seg til å se hvordan maskinen yter. Ytelse er selvsagt begrenset, men det skal bli morsomt å se hvordan det blir å arbeide med en maskin som i utgangspunktet har en hastighet på 1 Mhz. Laptop-en min har en hastighet på 2.3 millioner ganger dette, men har liten tro på at den er like morsom i bruk som denne!


Bildene over viser henholdsvis PCB-ene slik de ble levert, fulgt av et bilde av maskinen der alt et loddet sammen og montert opp. Alt ser pent og flott ut, så da er det på tide å få på plass programvaresiden av prosjektet - det vil si koden som skal kjøre på Arduino Nano-enheten man ser montert på Seriell IO-modulen bakerst.

Gitt at jeg hadde store mengder logikk innenfor 74 LS-serien liggende i en skuff så tenkte jeg det kunne være greit å få brukt opp noen av disse. Strengt tatt så skal man selvsagt ikke bruke disse for nyere design siden de bruker langt mer strøm og skal visstnok være vanskelige å få til å fungere stabilt når man passerer 5-6 Mhz, men de koster en tiendedel og så virker det tilnærmet tidsriktig.

Prosessoren jeg har brukt er en Unicorn Microelectronics UM6502 - finnes langt nyere varianter, men betalte knapp femtilappen for fem av disse. Dessuten, enhjørning! RAM benyttet er standard HM62256 av en eller annen type, disse var knappe femmeren per stykk og fortsatt raskere enn det jeg trengte. Designet ROM for AT28C256B, så det var denne jeg brukte - innholdet skrevet til brikken finnes på github-repositoriet mitt (den du vil ha er den sier 8K, den andre var bare for å slippe mental omregning av adresser).



Første livstegn

En kraftig fordel, om ikke jeg egenhendig skal kalle det en genistrek fra min egen side, når det kommer til design av maskinvare er å begrense områdene der man kan få feil - spesielt på nybegynner-prosjekter slik som dette. Det vil si, at ved å ta utgangspunkt i en eksisterende maskin slik som Apple 1 så kan jeg konsentrere meg om å få maskinvaren til å fungere mens programvaren som kjører på maskinen i seg selv allerede er kjent og verifisert fungerende.

Tilbake til Arduino-koden. I og med at Apple 1 hadde et svært simplistisk oppsett der alt av data som skulle ut til skjerm gikk Port A på PIA-kontrolleren, keyboard var koblet opp via Port B, så skulle det være relativt enkelt å skrive litt kode som flytter tegn inn og ut av maskinen. Skissen under viser hvordan alt dette henger sammen, her har jeg brukt en MCP23S17-brikke for å utvide mengden IO-tilgjengelig for Nano-en.


I dag er vi vant til at et enkelt tegn må uttrykkes ved med alt fra 8 til 32 bit for å uttrykke alle verdens tegn, men på den tiden var 7-bit ASCII som ble brukt og dermed hadde man en til overs uten at dette hadde noen innvirkning på maskinen. Denne siste linjen tok Steve Wozniak i bruk for å indikere til de ulike komponentene hvorvidt man hadde data som skulle henholdsvis leses inn (fra tastatur) eventuelt hvorvidt "skjermkortet" var opptatt med å vise data allerede mottatt.

Uansett, tiden for å koble til strømmen var kommet. Kobler til strømmen, og absolutt ingenting skjer!

Strengt tatt så skulle det ikke skje noe i den positive retningen siden koden for å kommunisere enda ikke var skrevet (den ferdige koden ligger nå på github). På dette stadiet er man bare glad så lenge ingenting freser og kaster røyk i ansiktet ditt, dermed må alt så langt kunne regnes som en suksess.

Med mye frem og tilbake for å skrive koden, inkludert å grille en PIA-brikke siden jeg brukte feil innstillinger på Nano-en brøkdelen av et sekund (fint for meg at jeg kun fikk kjøpt dem i en 10-pakning), så fikk jeg endelig en enkelt '\' ut av den. For de som ikke kjenner forhistorien til Apple 1, så betyr dette at Woz-monitor programvaren kjører og jeg kan kommunisere med den!

Kortvarig glede

Glad og lykkelig over at den svarer, noe som dermed betyr at en måneds ettermiddager på tegninger, studering av manualer og en håndfull hundrelapper for å få PCB-ene produsert ikke har vært bortkastet! Sett bort fra...

At det er det eneste tegnet jeg får ut fra maskinen hver gang den resettes, klarer ikke å sende den noe og uansett hva jeg gjør så får jeg ingen annen respons - og ikke alltid at jeg får det heller! Noen ganger får jeg ingenting innen jeg napper ut strømmen og setter den i igjen.

Etter en uke med feilsøking, det vil si å tilfeldig endre på ting for å se om det gjør noen forskjell (det var her jeg svidde den ene PIA-brikken), så er det bare å krype til korset. Jeg trenger hjelp, men tror ikke Jesus har spesielt mye input på design av Apple-maskiner så da var det eneste som gjensto å lete etter et forum med likesinnede eksentriske sjeler med en fascinasjon for sære ting. Endte opp med å få mye hjelp fra gutta på forum.6502.org.

Det de hjalp meg med er å få gått gjennom de ulike linjene som finnes på prosessoren og så benytte meg av et enkelt Oscilloskop (DSO-138, byggesett kjøpt fra Kina det også) jeg hadde liggende for å se på hvorvidt maskinen hadde en regelmessig puls. Vi kan se at klokkelinjen oscillerer stabilt, den forskjøvne klokkelinjen Phi 2 ser normalt ut samt at RDY-signalet gjør noe lignende.


Så hva forteller alt dette meg? Svært lite, utover at tilsynelatende så fungerer alt slik det skal.

Desperate handlinger

Etter å nå ha med dette i snart en uke, så er det på tide å gjøre noe desperat. Første forsøk var å designe et kort som ved hjelp av noen MC14495P1-brikker i kombinasjon med noen 7-segment display (brikkene oversetter fra binært til hex) for å i realtime vise hva som foregår på databussen, og det viste seg å være en relativt teit ide (mulig jeg plukker den opp igjen på et senere tidspunkt). Grunnen til dette er at det fortsatt er snakk om 1 Mhz, noe som da vil si at informasjonen jeg ser på potensielt sett kan endre seg noen hundre tusen ganger i sekundet - alt man da ser er bare en smørje av hva som foregår.

Andre forsøk var å programmere en Arduino Uno til å gjøre dette for meg, men kun skrive ut adressene til en loggfil hver gang den endrer seg og med en filtrering på sånn omtrent hvilken enhet det er som "prater". Det jeg fant ut av dette var at tilsynelatende så ser jeg nesten data tilsvarende '\'-tegnet, det var alltid en eller annen feil i bitmønstret og etter en stund så gikk alt til helvete... Det vil si at alt som ble skrevet ut så ut som tilfeldig crap, inkludert forsøk på å skrive til ROM og gudene må vite hva!

Natten etter våkner jeg av et mareritt der jeg er fulgt av tilfeldig data uten mål og mening, men en snill kjempe sa noe om at det var noe jeg hadde glemt! Første regel når det kommer til design av datamaskiner er å ikke la mer enn en ting snakke sammen av gangen, det betyr tilfeldig data ettersom flere snakker i munnen på hverandre - litt for ofte fulgt av rykende varme silikon-brikker, en sjelden gang fulgt av flammer!

En av de tingene jeg hadde gjort var at RAM-modulen var ment å skulle ha en NAND-gate montert, det er den vist til venstre i bildet nedenfor - denne skulle tross alt ikke være tilgjengelig ikke være nødvendig siden jeg ikke trengte funksjonaliteten, men la oss likevel prøve å montere den likevel (hadde ikke flere DIP 14 sokler, det er derfor den ser ut til å være mindre enn den skal være).


Nå sluttet alt å fungere!

Tydeligvis må det ha påvirket noe til tross for at skissen eksplisitt ikke trenger den, sjekk tegningen ovenfor til høyre - gitt at minne plassert på rett plass, det vil si i den lavere (LOW) delen av adresserommet så skal signalet ikke gå via NAND-gaten i det hele tatt!

Sjekker kontinuitet ved hjelp av multimeteret... Adresselinjen A15 skal gå direkte til CS via jumperen, og jeg får ikke et eneste pip. La meg teste hvor den går, og sånn passe tilfeldig ender jeg opp med å få et pip på jumperen som angir plasseringen av minnet (HIGH) - feilen er altså den at med alt som kunne bli koblet galt så hadde jeg egentlig koblet alt rett, jeg hadde bare skrevet feil på forsiden av PCB-en - fungerende konfigurasjon er altså den vist i bildet ovenfor til venstre, til tross for at indikasjonene på forsiden antyder at det er helt komplett galskap.

Det burde lære meg å designe ting når man er dødstrøtt og klokken er for meget, men det er en del av utfordringen og objektivt sett så har man fått gjort MYE rart underveis.

fredag 2. juni 2017

RC6502 Apple 1 Replica

Dette er et innlegg relatert til RC6502, mitt forsøk på å bygge en fungerende replika av den første Apple maskinen som ble laget. Det som trengs av tegninger og programvare for bruk av maskinvaren er lagt ut på https://github.com/tebl/RC6502.

Apple 1

(Manual, kilde: archive.org)
Den første Apple maskinen ble lagt ut i salg i 1976, designet og skrudd sammen av Steve Wozniak, med det formål å skape en datamaskinen tilgjengelig for folk flest og til en pris som var oppnåelig. Strengt tatt så var hele den formåls-biten jeg nevnte mer eller mindre rekkevidden av det Steve Jobs la inn i prosjektet - Wozniak har selv i etterkant uttalt at hans største ønske var å selv eie en datamaskin, og da måtte han designe noe han selv hadde råd til basert på de komponentene som var tilgjengelig over disk.

Resultatet var en 8bit datamaskin basert på MOS 6502 prosessoren med en hastighet på hele 1 Mhz, kombinert med 4 KB RAM og en enkel monitor (la oss kalle det en forfar til det vi i dag kaller et operativsystem) integrert i 4 KB ROM. Det ble kuttet i alle ender for å holde kostnadene nede, og derfor går alt som skal ut til skjerm eller leses inn fra tastatur via en enkel integrert krets.

Vil ikke kalle elektronikk-skissene som ligger ute helt forståelig, men så blir det nok litt som å påstå at Russisk er vanskelig å forstå uten at man har brukt noe tid på å lære det - alt som skal til er tid og tålmodighet, så vil det meste åpenbare seg på egen hånd... eller ikke - isåfall, søk hjelp! Lenken under bildet ovenfor til høyre peker til selve manualen, slik det var vanlig på den tiden så er tegningene inkludert i sin helhet.

RC6502 Apple 1 Replica

Over til maskinen jeg holder på med, det vil si en fungerende replika av den første Apple datamaskinen - de originale maskinene koster tusenvis av dollar nå, hvis man er så heldig å finne et eksemplar så det får bli med å lage en replika isteden! Merk at jeg sier replika og ikke klone - tilsynelatende det samme ordet, men skulle man skue hunden på hårene så lager jeg en maskiner som fungerer likt uten å være en tilnærmet identisk gjenskapelse basert på tidsriktige komponenter.

Den allerede nevnte manualen er til stor hjelp når man prøver å fundere ut hvorfor noe eventuelt fungerer, eller ikke gjør det. Dette var en tid da man måtte være i stand til å reparere feil som oppstår, skjema-tegningene av hvordan maskinen fungerte var dermed en absolutt nødvendig og forventet del av produktet man kjøpte - dermed har man det meste man trenger for å, selv i dag gjenskape maskinen i sin helhet.

Personlig så forstår jeg svært lite av slike, men en tid tilbake skrev en dyktig tekniker med navn Tom Owad en lettforståelig bok kalt Apple 1 Replica Creation: Back to the garage. Boken kan lastes ned gratis fra hjemmesiden og anbefales for alle med et ønske om å bygge en datamaskin på egen hånd, uavhengig av om det er basert på Apple 1 eller ikke.

(Forside, kilde: applefritter.com)

Har brukt noen ukers ledige ettermiddager til å lese gjennom boken samt den originale dokumentasjonen for så å sette dette sammen til en helhet, boken ble tross alt skrevet som et utgangspunkt for å forstå og ikke nødvendigvis gjenskape maskinen helt direkte. Underveis har jeg delt opp maskinen i selvstendige moduler tilsvarende slik det var gjort med RC2014-maskinen, på den måten blir det langt enklere å holde oversikten over hva man arbeider med og hvordan den kommuniserer med resten av maskinen.

Som allerede nevnt i ingressen, så er alt det jeg har laget av skisser og tilhørende kode tilgjengelig på https://github.com/tebl/RC6502. Til forskjell fra programvaren Fritzing benyttet i innlegget Fra breadboard til PCB, så har jeg nå gått over til å bruke programvaren KiCAD for design av kretser og kretskort - langt enklere i bruk når man skal tegne opp andre ting enn små Arduino-prosjekter!

I skrivende øyeblikk så er jeg kommet såpass langt at det første utkastet av PCB-ene allerede er levert, og jeg tror jeg mest trolig kommer til å ta en separat gjennomgang av hver av modulene senere og i egne separate innlegg (ingen som har tålmodighet til lange tekster lenger uansett).

Utrolig å  fascinerende å se noe man har tegnet bli til noe håndfast!