Viser innlegg med etiketten Elektronikk. Vis alle innlegg
Viser innlegg med etiketten Elektronikk. Vis alle innlegg

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!

fredag 26. mai 2017

RC2014 IDE Compact Flash (PCB)

Dette er et innlegg relatert til RC2014 og vil mer eller mindre være mine egne notater relatert til denne oppdaterte versjonen av RC2014 IDE Compact Flash-modulen.

RC2014 IDE Compact Flash (PCB)

Hvis du bygger den så vil folket strømme til, eller noe lignende var det vel noen som sa en gang etter inspirasjon av noe som sto i bibelen (store båt, mye vann og alle dyr ombord mens menneskeheten generelt sett druknet). Oversatt til dagens valuta og kultur så vil det si at dersom du brifer med kredittkortet så får du ting levert til postkassen!

It's here! Wrapped in plastic!

Med denne tidens obligatoriske Twin Peaks-referanse unna veien, så er det på tide å gripe fatt i leveransen av de fabrikerte PCB-ene til RC2014 IDE Compact Flash-modulen som jeg bestilte 15. mai sent på kvelden fra seeedStudio.com. Kortene ble satt i produksjon allerede dagen etter og sendt derfra 22. mai og med DHL som leverandør så suste den fra Shenzhen til Tromsø med mellomlandinger i Hong Kong, Leipzig, København, Oslo og Trondheim på i underkant av fire dager.

PCB-ene må jeg si er et skikkelig løft fra prototypen jeg snekret sammen tidligere, men den fungerer tilsynelatende likedan selv om jeg ikke kan tro noe annet enn at over tid vil det nok vise seg å være en del mer solid. Man kan sikkert også si noe om jeg så langt ikke har brukt så veldig mye energi på å få komprimert innholdet på selve kortet, noe som gjerne viser seg i at det til tross for en brøkdel av "innholdet" så har det fortsatt dobbel høyde sammenlignet med de andre modulene - på den andre siden er prisen den samme så lenge man holder seg under 10 cm i høyde og bredde.


søndag 21. mai 2017

Fra breadboard til PCB

Har den siste tiden brukt altfor mye tid på små elektroniske prosjekter, alt fra små Arduino kretser til å lodde sammen en RC2014-maskin. Det jeg til nå ikke hadde gjort noe av var å ta designene videre fra breadboard til et noe mer varig format, og PCB er vel så permanent som det kommer.


Det hele, og da sikter jeg mer eller mindre på rotet øverst til høyre, startet med et behov for å lese/skrive fra/til en EEPROM-brikke (Flash-minne oftest benyttet for å holde programvare eller lagret data innenfor integrerte kretser). Som alt annet for tiden, så var det enda en ting jeg hadde rotet med relatert til RC2014-maskine, i dette tilfellet så var det et behov for å få lest ut innholdet på brikken som fulgte med settet i forkant av å montere brikken på kretskortet.

For å løse dette valgte jeg å bruke en standard Arduino Uno som hjernen i løsningen, men som man kan se så krever det en hel haug kabling - faktisk såpass mange at Uno-en i seg selv ikke har nok pin-er til å gjøre dette. Derfor benytter løsningen to MCP23S17-brikker for å utvide antallet tilgjengelig, hver av disse utvider med 16 pin-er og man kommuniserer med dem over SPI. Ønsket muligheten til å bruke løsningen uten en tilkoblet datamaskin, la derfor til en SD-kort modul - også denne koblet på SPI.

Medregnet de tre brikkene, SD-modulen og selve Arduino-en så er det fortsatt en relativt enkel løsning, men som man ser av skjermbildene så langt så er det ikke akkurat rett frem å skulle reprodusere løsningen med bildene som utgangspunkt - det er rett og slett altfor mange kabler involvert her. Den foretrukne løsningen for å dokumentere disse tingene, i alle fall for de av oss som aldri har deltatt i noen form for opplæring innenfor elektronikk - noe jeg vil anta vises - er bruk av programvaren Fritzing. Programvaren i seg selv er gratis og gjør det relativt enkelt å lage en visuell representasjon av hvordan man har koblet ting sammen - ved arbeid med prosjektene vil man forholde seg til et sett med arbeidsflater; Breadboard, Schematic og PCB.

Breadboard

Dette er den arbeidsflaten man vanligvis forbinder med programvaren Fritzing, man tar utgangspunkt i et breadboard og drar så komponenter ut av verktøykassen oppe til høyre til den plassen man ønsker å ha dem. EEPROM programmereren jeg snekret sammen ble seende ut som følger:


Ser relativt enkelt ut, ikke sant? Vel, dette er så enkelt som det blir, man trenger ingen forhåndskunnskap for å forstå hvordan man reproduserer løsningen på egen arbeidspult - sammenlignet med fotografiene øverst så er det langt enklere å følge ledningene som går mellom komponentene.

Schematic

De som arbeider med elektronikk i en litt mer profesjonell sammenheng forholder seg heller til elektroniske skjema-tegninger, til en viss grad kan Fritzing hjelpe til med å lage disse - den vil automatisk sørge for at elementer lagt inn i de ulike visningene automatisk også er å finne i skjema-visningen. Man må selv sørge for å plassere komponentene i forhold til hverandre og legge kablingen slik at disse ikke overlapper hverandre - en distinkt forskjell mellom disse visningene er at strøm og jord blir enkle symboler som går igjen i skissen.


Starter man med breadboard visningen som utgangspunkt så vil man mer eller mindre starte med et rot slik det vist ovenfor til venstre, herfra må man flytte komponenter utover tegneflaten og så tegne opp koblingen mellom enhetene på nytt igjen - de stiplede linjene viser delene som i følge breadboard oppsettet skal være koblet sammen. Etter litt omkalfatring så ender man opp med noe som fortsatt mer eller mindre ville fått langt mer erfarne teknikere til å kaste opp, men det er i det minste en start (det jeg endte opp med er vist til høyre).

Personlig så synes jeg ikke denne visningen gir spesielt mye utover den første, så jeg pleier vanligvis å hoppe over denne biten - de er mer eller mindre to ulike måter å dokumentere prosjektet ditt på. Grunnen til at jeg i det hele tatt nevner denne visningen er at dersom interessen for å lage elektroniske småting øker og man etter hvert ønsker å gå videre til mer profesjonelt rettede verktøy, så vil med arbeid innenfor denne visningen gjøre overgangen betraktelig enklere.

PCB

Endelig kommet frem til det punktet der man kan bruke penger på å få laget en fysisk utgave av det man har tegnet inn, men man har fortsatt en god del arbeid man må gjøre først; alle komponentene er bare kastet ut på tegneflaten uten noen tanke på at noe skal fungere. Den grå firkanten angir dimensjonene av det fysiske kretskortet du ønsker, denne kan du endre størrelsen på etter ønske - legg derimot merke til at de fleste produksjons-alternativene for PCB går fra rimelig til dyrt dersom noen av sidene overgår 10 cm!

Start med å dra komponentene ut til en omtrentlig plassering - det er ikke alltid mulig, men prøv å sørge for at så få som mulig av de stiplede linjene mellom komponentene krysser hverandre. Klikk på koblingspunktene og dra ut linjene mellom de tilsvarende tilkoblingspunktene for å definere en fysisk kobling.

Vanligvis vil en PCB ha to sider: en forside og en bakside. Vi kan kun tillate linjer å krysse hverandre så lenge som disse er på ulike sider av PCB-en (med mindre de selvsagt er ment å være koblet sammen) - høyreklikk på linjen og velg tilsvarende fra menyen for å flytte linjen mellom de ulike sidene. Dersom linjen må bevege seg mellom sidene, eksempelvis for å lage en bro over annen linje, så gjør vi dette ved å opprette en såkalt via. En via er et hull i PCB-en innlagt med metall for å lede mellom lagene, disse opprettes ved å høyreklikke på et av knekkpunktene på linjen. Fortsett å legge opp alle linjene på denne måten inntil alle de stiplede linjene er borte.


Produksjon

Med PCB-en lagt ut på en konsistent flate, så er man nesten klar til å gå til et selskap for å få produsert den. Før man derimot gjør dette så er det to ting man bør gjøre...

Den første er å la programvaren sjekke at alt er koblet sammen som forventet uten kortslutninger - bruk valget Design Rules Check (DRC) fra nedtrekksmenyen Routing. Reparer eventuelle feil som blir flagget før man går videre, alternativet er tross alt å betale for noe som i utgangspunktet mangler de grunnleggende forutsetningene for å fungere.

Den siste tingen er generere såkalte Gerber filer, dette er filene som produksjonsselskapene trenger for å vite hvordan alt PCB-en skal bygges opp - de har ingen formening om hvordan skissene dine er lagt opp, de trenger bare å vite hvor kobberet skal legges og hvor hullene skal drilles. Innenfor Fritzing genereres disse ved å klikke på knappen Export for PCB på den røde verktøy-linjen nede i skjermbildet - angi en tom katalog for hvor filene skal plasseres, dette for å unngå rot i strukturen.

Før man går videre med innsending av de genererte Gerber-filene bør man ta en titt på filene for å igjen se at ting vises korrekt også her (ingen lag byttet om på eller manglende). Fritzing i seg selv har ingen funksjon på dette, den anbefalte programvaren for å supplere Fritzing på dette området er GerbView (ovenfor til venstre). Flere av bestillingssidene har også en integrert løsning for å vise disse, man får da gjerne også de tilsvarende valgene om å skreddersy utseendet (forhåndsvisningen hos SeeedStudio.com ovenfor til høyre).

Når det gjelder valg produsent så finnes det mange alternativer, fellesnevneren for de fleste av dem er at de er plassert i USA og det koster skjorta å benytte seg av dem - av de mer populære av disse er AISLER (eier Fritzing programvaren og er derfor integrert i den) samt OSH Park.

For de av oss som har lyst til å prøve oss frem uten de helt store kravene til kvalitet, det vil si at vi forventer at de er trykt opp som produsert - vi kan bare ikke forvente at kortene skal kunne fungere etter tre år eksponert mot elementene, så må man bla litt mer rundt.

Den leverandøren jeg har sett på å benytte meg av er den allerede nevnte SeeedStudio, dersom man ikke har så veldig store krav til leveringstid eller lager kort på mer enn 10cm * 10cm så kan man få produsert et kort i 5 eller 10 eksemplarer for 5$. Rimelig billig i seg selv, men man må betale porto for disse og gitt at bedriften er plassert i Singapore så legger det på en signifikant del av kostnaden - da jeg bestilte disse endte jeg opp med med 8$ i porto for billigste alternativ. Inkludert en uke produksjonstid så tok det nesten en måned før jeg mottok det ferdige resultatet.


Hvite PCB-er er kanskje ikke de mest presentable i og med at de raskt blir misfarget av varmen, men for et førsteutkast er de perfekt - det er svært lett å se hvor koblingene går. Kvaliteten på selve kortene, materialene og ikke det jeg har gjort med dem, er overraskende godt - definitivt på nivå med de jeg har sett fra andre leverandører, så kommer ikke til å trenge noen betenkningstid for å bruke dem (SeeedStudio.com) som leverandør på et senere tidspunkt.

Resultatet

Kortet fungerte ikke og i etterkant vises det at jeg la opp en del av komponentene sent på kvelden, pull-up resistorene var blitt til motstand i serie på CS-linjene og knappene henger i løse luften ... Det eneste man kan si er dermed at det hele må kunne regnes som en opplevelse med mye potensiale for læring, det at man er pinlig berørt over å se på dem en måned etterpå betyr kun at man har lært mye underveis.


Selve leseren er i stand til å lese fra og skrive til EEPROM-brikker, data kan også hentes ut fra SD-kortet. Måtte kutte av en av sporene på forsiden og et på baksiden, la også inn en patch på baksiden. "Pull-up"-resistorene ble klippet vekk og loddet på plass en bro mellom koblingene istedenfor, knappene må jeg bare late som om ikke eksisterer.

Revisjon B kan ikke bli annet enn en markant forbedring.

torsdag 18. mai 2017

RC2014 IDE Compact Flash (revidert prototype)

Dette er et innlegg relatert til RC2014 og vil mer eller mindre være mine egne notater relatert til denne oppdaterte versjonen av RC2014 IDE Compact Flash-modulen.

RC2014 IDE Compact Flash

Har tatt en nærmere titt på andre Compact Flash (CF) kort som har vært utviklet for bruk sammen med Z80-baserte datamaskiner, ser ut til at disse løsningene legger på ekstra logikk for å kombinere direkte kombinere IOREQ med RD samt IOREQ med WR for å få de tilsvarende IORD og IOWR signalene.

(Designskisse, tilgjengelig i PDF-format

Ikke sikker på om dette gjør noen stor forskjell i og med at prototypen jeg loddet sammen på altfor lang tid tilsynelatende fungerte (det vil si; ETTER at jeg stokket om alle dataledningene slik at de ikke var bak fram). Uansett, det å bestille og få produsert nye PCB-er koster penger i tillegg til at de produsentene jeg har råd til er rundt en måned unna i postgang. Med andre ord... Jeg har råd til å bruke 5 kroner ekstra i komponenter for å unngå problemer jeg ikke har opplevd, bare for sikkerhetens skyld.

lørdag 13. mai 2017

RC2014 Bruk av Compact Flash

Dette er et innlegg relatert til RC2014, se introduksjon, og vil mer eller mindre være mine egne notater relatert til denne egenutviklede modulen. Har laget en egen Compact Flash modul basert på ATA-standarden, det vil si bruk av kortet som en IDE-enhet - les innlegget RC2014 IDE Compact Flash for detaljer om maskinvaren. Dette innlegget håndterer programvaresiden.

Compact Flash (CF)

Modulen benytter seg av en 74HCT138N-brikke for håndtering av adresseringen, dette gjøres på samme måte som på Grant Searle sitt design samt slik det gjøres på den tilsvarende offisielle RC2014-modulen - holder disse detaljene identisk for å på sikt kunne bruke den samme programvaren uten endringer. Modulen som jeg laget vil dermed ikke skille seg fra de offisielle, informasjonen nevnt her vil med andre ord være generell og ikke spesifikk for min modul.

Binær adresse (x = don't care)
x001 0???

Som ved tidligere IO-moduler så betyr don't care at man ikke tar stilling til verdiene, men det betyr ikke at man unngår kollisjoner dersom andre enheter benytter adresser som overlapper - typisk vil dette si at modulene vil gjentas flere ganger i adresserommet for hver av kombinasjonene, i dette tilfellet på adressen $10 (16) og $90 (144).

Helt spesifikt så må A6 være lav for å aktivere 74HCT138N, selve adapteren er koblet til Y2 på denne og avgjør dermed at A5, A4 og A3 må være L H L. De resterende bit-ene benyttes for å angi registrene benyttet for å snakke med den ATA-baserte enheten.

Registre

Med adressen $10 som utgangspunkt har man følgende relevante registre tilgjengelig på enheten:

AdresseBeskrivelse
HEXDECRegisterMerknad
$1016DataData ut (les) / Data ut (skriv)
$1117Error / FeatureFeilmelding (les) / Funksjon (skriv)
$1218Sector countAntall sektorer
$1319LBA 0LBA Adresse (A0 - A7)
$1420LBA 1LBA Adresse (A8 - A15)
$1521LBA 2LBA Adresse (A16 - A23)
$1622LBA 3LBA Adresse (A24 - A27), angi enhet
$1723Status / CommandStatus (les) / Utfør kommando (skriv)

Antallet sektorer angir hvor mange sektorer man skal håndtere innenfor en enkelt lese/skrive- operasjon, minste antallet er 1 og hver sektor er 512 byte (man må håndtere hele blokken). Sektorer angis sekvensielt ved bruk av en 28-bit adresse, disse angis gjennom LBA 0 - 3. LBA 0 - 2 de første 24 bit-ene av adressen, LBA 3 inkluderer de siste 4 bit-ene i den 28-bit sektor-adressen samt at man også her angir hvilken enhet som skal adresseres (Master / Slave) - for å holde ting enkelt bruker vi her bare E0 for å lese/skrive til Master.

For å arbeide med enheten vil man kort sagt skrive til et eller flere registre, deretter sende en kommando via kommando-registeret for å få den til å utføre den. Underveis må man sjekke status-registeret for å vite hvorvidt enheten fungerer som forventet, eventuelt er klar til å motta videre kommandoer - svaret vil være en enkel byte der hver bit har følgende betydning:
765x 3xx0 - Bit (x = don't care)
1         - Busy, enheten er opptatt
 1        - Ready, enheten er klar til å motta kommando
  1       - Write Fault, skrivefeil oppstått
     1    - Data request ready, data tilgjengelig for utlesing
        1 - Command error, forrige kommando feilet

Lese data

For å benytte seg av CF-kortet må man i praksis først initialisere kortet, det vil si å sette opp de innstillingene vi trenger for å arbeide med kortet i 8-bit modus (legg merke til CF er den eneste gjenlevende maskinvaren som støtter dette, moderne harddisker gjør ikke det). Deretter skriver man en 28-bit adresse til LBA adresse-registrene, sender kommando for å gjøre data tilgjengelig for lesning og til sist må vi lese ut hele sektoren.

Det meste av programvaren jeg har sett for Z80-baserte maskiner har vært implementert i Assembly, men har for tiden ikke noen løsning for å overføre kompilert programvare til maskinen så valgte å implementere rutinene i Basic isteden.

10 print "Set CF 8-bit mode"
15 OUT 17, 1
16 OUT 23, 239

20 PRINT "Disable write cache"
25 OUT 17, 130  
26 OUT 23, 239

30 PRINT "Set sector count = 0"
35 OUT 18, 1

40 PRINT "Set address = 0"
41 OUT 19, 0
42 OUT 20, 0
43 OUT 21, 0
44 OUT 22, 224
45 OUT 23, 32

50 PRINT "Read first sector:"
55 FOR I=0 TO 511 STEP 8
60 PRINT I;":";
65 FOR B=0 TO 7
70 PRINT INP(16);
75 NEXT B
80 PRINT
85 NEXT I

Dersom man får feilmeldinger, eller at ting ikke fungerer som forventet så kan man lese ut statusen fra registeret på $17. Strengt tatt bør man sjekke statusen mellom hver av kommandoene som utføres, dette for å være sikker på at CF-kortet er klart før man fortsetter - dette har jeg hoppet over her ettersom Basic i seg selv er såpass tregt at man ikke trenger dette, men skriver man tilsvarende Assembly-kode så må man gjøre dette.

For å verifisere at det man får lest ut er korrekt, så kan man åpne kortet i en Hex editor med støtte for dette (eksempelvis WinHex) - på mitt kort gir denne visningen under (til venstre). Gitt at ingenting ryker eller lukter brent elektronikk så vil man ved bruk av skriptet ovenfor få en utskrift slik den vist under til høyre.

  

Legg merke til at en Hex-editor viser, som navnet antyder alt av data i Hex mens skriptet jeg har lagt inn viser utskrift i desimal - for å sammenligne data må man oversette mellom tallsystemene, den vanlige kalkulatoren i Windows vil kunne gjøre dette. Får man det samme resultatet på begge sider, så vet man at kortet fungerer som forventet - i det minste under optimale forhold!

RC2014 IDE Compact Flash

Dette er et innlegg relatert til RC2014, se introduksjon, og vil mer eller mindre være mine egne notater relatert til denne egenutviklede modulen.


IDE Compact Flash (CF)

Compact Flash, heretter referert til som CF, er en type minnekort som har vært tilgjengelig på markedet siden 1994. Til tross for at man i dag bruker man de langt rimeligere SD-kortene på det meste av kameraer og lignende så er de gamle CF-kortene fortsatt tilgjengelig for salg, noe som er bra for oss ettersom CF til tross for prisen er langt enklere å benytte sammen med gammel maskinvare (eventuelt ny maskinvare basert på horribelt utdatert teknologi slik som RC2014). Grunnen til dette er at CF kan benyttes direkte i 8-bit modus mens SD gjerne er implementert gjennom SPI, en kommunikasjonsform som oftest assosiert med mikrokontrollere og ikke datamaskiner.

Det er tilgjengelig en modul på markedet som man kan kjøpe inn og benytte bruk av Compact Flash-basert lagring, blant annet denne fra skaperen av RC2014-maskinen. Denne benytter dessverre en SMD-basert komponent (selve CF-holderen), noe som for min del betyr smått som helvete og langt unna det jeg har utstyr og tålmodighet til å håndtere.

CF-holderen er ikke mulig å oppdrive i en utgave med mer håndterbare størrelse på ledningene (50 av dem i alt), så gode råd er med andre ord dyre! Eller ikke, bestilte en bunch av komponenter til nesten ingenting direkte fra Kina.

Løsningen jeg valgte falt på bruken av en billig CF til IDE ATA adapter, i utgangspunktet en løsning for å erstatte en IDE harddisk med CF - ikke det at fins et spor av logikk på kretskortet, og av den grunn kan vi benytte dem direkte innenfor gammel maskinvare. På nettbutikken der jeg kjøpte den, AliExpress - se også innlegg Erfaringer med AliExpress.com, er denne beskrevet som 3.5 inch 40 pin CF to IDE Compact Flash Card Adapter Bootable 3.5" HDD Hard Drive Converter Adaptor Male Connector til rundt 15 kroner.

(Designskisse, tilgjengelig i PDF-format

Skissen baserer seg i all hovedsak på skissene laget av Grant Searle, referanse-skissen i midten er hentet fra hans side på http://searle.hostei.com/grant/cpm/ med tilpasninger for å bruke IDE ATA pluggen gjennom adapteren benyttet.

Merk at jeg benytter meg av 74HCT138 for håndtering av adresser, ikke 74LS138 - denne vil være mer egnet "hastigheten" på maskinen, men i teorien kan det hende at det fungerer likevel. Sistnevnte var den jeg hadde tilgjengelig i KiCad-programvaren, lenge leve latskapen!

Har designet en PCB ved hjelp av KiCad, men har per nå hverken bestilt eller fått produsert noen fysiske utgaver av kortet så da får man se hvordan det går når man får gjort dette. Inntil videre så får man ta til takke med å vise frem skissen i 3D.


Har derimot brukt et par ettermiddager på å bygge en fungerende versjon av kortet ved å lodde dette sammen på prototyping-kort. Mye arbeid for det som strengt tatt er en veldig moderat mengde kabling, men når man mangler erfaring og vett på området så starter man bare i en ende og fikler til det fungerer - noe som definitivt ga utslag i at jeg loddet alle datakablene i omvendt rekkefølge!


Se det neste innlegget, RC2014 Bruk av Compact Flash, for detaljer om hvordan kortet fungerer på programvarenivå samt hvordan man kan gjøre noe så basalt som å hente ut data fra kortet!

lørdag 22. april 2017

FTDI-kabler?

USB TTL Seriell Adapter
For programmering av mikrokontrollere, deriblant den Atmega-baserte Arduino og annet morsomt kommer man raskt til å trenge en FTDI-kabel. Disse er mer eller mindre de gode gamle seriell kablene som forsvant fra datamaskinene for mange år siden nå, forskjellen er den at disse opererer på et lavere spenningsnivå enn de gamle. Selv trengte jeg den for å kommunisere med RC2014.

Alt vel og bra i og med at den adapteren jeg allerede hadde fungerte helt fint, den var bare ikke spesielt praktisk for meg (løse ledninger som sklir ut hele tiden). Gikk derfor til innkjøp av en ny kabel som eksplisitt var merket FTDI, den ser ut som følgende ved innkjøp:

(Kilde: AliExpress.com)

Fungerer ikke når jeg prøver å bruke denn, men burde kanskje sett ekstra nøye på fargene til de ulike lederne - nesten, men ikke helt kan man si. Referer man til standarden, se nedenfor, så kobler man her 5v der enheten i andre siden forventer jord (GND) og jord der CTS-signalet er forventet - ved tilknytning til 3.3v enhet ender man opp med 5v på en input-pin samt feil polaritet! Morsom, ha ha...

(Kilde: FTDI Data Sheet

Kabelen kan enkelt repareres ved å bruke en kniv for å bøye opp mothakene på hver av kablene mens man trekker dem ut en etter en. Kobles inn på korrekt plass ved å kryssreferere dokumentasjon fra selger med den fra FTDI, legg merke til at fargene heller ikke nødvendigvis er de samme. Referer til følgende tabell for korrigert rekkefølge:

FraTilFargeFunksjon
21SvartGND
62BlåCTS
13RødVCC
44GrønnTXD
35HvitRXD
56GulRTS


Endelig resultat, nå fungerer den faktisk.

RC2014 Device Map

Dette er et innlegg relatert til byggingen av RC2014, se introduksjon, og vil mer eller mindre være mine egne notater relatert til dette spesifikke temaet.


Device Map

Zilog Z80-prosessoren benyttet innenfor RC2014-maskinene, se RC2014 Prosessor, skiller mellom håndtering av minne (RAM og ROM) ved bruk av henholdsvis MREQ og IORQ signalene. Dette eksplisitte skillet er interessant, i dag er man mer vant til at alt er plassert innenfor det samme adresseområdet - hvis vi har et forhold til dem i det hele tatt!

Utover bruken av ekstra signaler for å skille mellom dem så forenkler det mye av logikken som kreves. For å referere RC2014 Memory Map så ser man at disse gjerne forbruker hele blokker av 4K adresser, men for enheter så trenger man gjerne kun en håndfull adresser - de resterende adressene innenfor den brukte blokken er vanligvis "bortkastet". En oversimplifisering av logikken fører også til en duplisering av enheter på alle adresse der det samme bit-mønsteret går igjen.

$00 00000000 0 Digital IO – 0 R=Knapper W=LED
$38 00111000 56 ROM/RAM Paging W=Bytt aktiv modul
$80 10000000 128 Serial IO – 0 R=Status W=Control
$81 10000001 129 Serial IO – 1 R=RX W=TX

torsdag 20. april 2017

RC2014 RAM

Dette er et innlegg relatert til byggingen av RC2014, se introduksjon, og vil mer eller mindre være mine egne notater relatert til denne spesifikke modulen.


RAM

RAM, eller uten forkortelsen - Random Access Memory, er hovedminnet i maskinen. Den dag i dag er beskrivelsen kanskje litt pussig, mer eller mindre fordi man sjelden ønsker å bli overlevert tilfeldige ting fra minnet. Forklaringen hadde nok mer med at sammenlignet med de tidligere typene minne basert på magnetbånd så var man her i stand til å hoppe rundt i minnet som ønsket, helt uten bruk av spoleknappen.

RC2014-maskinen kommer med 32 KB RAM montert, med tanke på at datidens datamaskiner gjerne kom med 4 KB minne så må dette kunne regnes som ekstravagant - gjerne kun et alternativer! Bruken av 62256-brikker i hjemmebygde 8-bit datamaskiner er svært vanlig, av den enkle årsaken av at disse brikkene er tilgjengelig for småpenger - kjøpte fem av dem for rundt 30 NOK. 

Adressering

Adresseringen utført når det kommer til RAM-brikken er svært enkel, vi vet at den øverste halvdelen av adresserommet er RAM (fra $8000 til $FFFF) - se RC2014 Memory Map.
Binær adresse (x = don't care)
1xxx xxxx xxxx xxxx
Med andre ord bryr vi kun om den øverste adresselinjen (A15), dersom denne er høy så vet vi at adressen spesifisert er innenfor RAM-brikken. 62256 i likhet med ROM er kun aktiv dersom vi sender Chip Enable til jord, med andre ord må vi bruke en HEX Inverter for å snu dette signalet (74LS04).

Resterende logikk benytter et sett med OR-gater (74LS04) for å avgjøre hvorvidt vi ønsker å skrive eller lese data fra brikken.


RC2014 Backplane

Dette er et innlegg relatert til byggingen av RC2014, se introduksjon, og vil mer eller mindre være mine egne notater relatert til denne spesifikke modulen.


Backplane-8

Denne modulen kan så lenge man fokuserer hardt på det kalles maskinens hovedkort, bare ikke i den grad vi funksjonsmessig tenker på dem i dag - alt etter ønsket oppsett vil kortet potensielt kunne benyttes uten en eneste aktiv komponent. Det har 8 spor for bruk av RC2014 moduler, de tilsvarende pin-ene på hver slot er koblet sammen slik at hver av disse potensielt sett kan kommunisere over de samme kablene.

RC2014 kommer i utgangspunktet med hovedkort for 5 spor, men kan oppgraderes til 8 for et tillegg i prisen. Selve maskinen i seg selv trenger 5 spor for å fungere, så denne konfigurasjonen etterlater ikke rom for andre tilleggs-moduler - enten disse er kjøpt inn i tillegg eller er noe man har laget selv.

Alternativer for montering

Bildet under viser modulen slik jeg valgte å montere den, men det er god del alternativer man bør vurdere i denne sammenhengen.


Reset

Denne kretsen, den samme kretsen er også duplisert på klokke-modulen (se RC2014 Klokke for detaljer). I utgangspunktet er dette praktisk gitt at man kommer til å benytte maskinen slik den, personlig har jeg noen noenlunde fjerne tanker om å en dag bygge en 6502-basert maskin med utgangspunkt i det samme kortet - 6502-prosessoren i seg selv krever en noe mer sofistikert metode for å gjøre dette, det å ha kretsen tilstede her vil da bli en potensiell feilkilde.

Med andre ord, skal du benytte modulen i sammenheng med andre typer prosessorer så anbefaler jeg å droppe knappen samt tilhørende resistor.

Strømplugg

Manualen var ikke helt forståelig på hvordan man skulle koble disse tingene sammen, men den nevner muligheten til å sette inn en LM7805-strømregulator samt noen uspesifiserte elektrolytiske kapasitatorer i posisjon C1 og C2 (en gjetning basert på Google, tilsier 100uF og 10uF). Dette gjør at man kan plugge inn noe med spenning fra 7V til 25V.

Selve maskinen i seg selv opererer med utgangspunkt i 5V, noe som er det samme vi benytter for alt av ladere til mobiltelefoner og lignende. Gitt at regulatoren alltid vil ha et spenningsfallet, det er det som gjør at vi må ha en spenning på minimum 7V for at LM7805-regulatoren skal være i stand til å regulere den ned til 5V. Gitt mobilladeren som strømkilde ville vi dermed endt opp med å sløse med strøm for å regulere fra 5V til eksempelvis 12V, for så å regulere denne ned til 5V igjen.

Dette løses ved at man dropper å montere disse komponentene, men heller lodder på en 2-pin header som så jumperes for å indikere at det som kommer inn er ren 5V. Risikoen er selvsagt at dersom du da kobler til noe med langt høyere spenning, så kommer stua til å lukte brent silikon en stund fremover.

Isolering av spor

Modulen Backplane-8 gir muligheten til å isolere sporene 1 og 2 samt 7 og 8 fra resten av systemet, med dette menes at disse ikke vil se adresselinjene samt data-bussen dersom man ikke ønsker det. 

Manualen antyder at man bør lodde på tvers av disse, i og med at dette virket å redusere mulighetene så trodde jeg at jeg visste bedre og heller gikk inn for å montere pin-headere og så brukere jumpere for disse.

Det første problemet som åpenbarte seg rimelig raskt var at jeg er altfor dårlig til å lodde at dette kunne fullføres helt uten å skape 3-4 ekstra koblinger mellom ulike punkter (ikke en god ting), endte opp med å angre avgjørelsen innen kort tid. Ikke sikker på om jeg hadde unngått problemstillingen ved å bare lodde på tvers, de fleste problemene jeg hadde var mellom linjene. Problem nummer to var selvsagt at dette krevde 60 headere, hvem har slikt liggende? Ikke denne karen, og Kina er en måned postgang unna.

En anbefaling dersom du mot formodning skal lodde sammen en maskin av denne typen, og snublet over denne bloggen (only Google can tell); monter dem på andre siden av kortet, det vil si at pin-ene peker nedover. Erfarer nå at headerne kommer litt i veien for noen av kortene, vil sterkt anta at når jeg selv kommer i gang med med prototyping av kort med forskjellig tykkelse så kan dette potensielt sett bli en uønsket irritasjon.

onsdag 19. april 2017

RC2014 ROM

Dette er et innlegg relatert til byggingen av RC2014, se introduksjon, og vil mer eller mindre være mine egne notater relatert til denne spesifikke modulen.

ROM

ROM, eller uten forkortelsen - Read Only Memory, er ofte den eneste formen for permanent lagring av data på digitale kretser. Den dataen man lagret var i utgangspunktet det vi i dag refererer til som et operativsystem, med andre ord den grunnleggende programvaren som var nødvendig for å utføre selv de mest grunnleggende funksjoner slik som å lese inn inndata fra et tastatur og så vise dette på en skjerm.

Vel å merke så var det ikke alle av de opprinnelige datamaskinene som hadde noen form for programvare tilgjengelig, flere av dem slik som eksempelvis Cosmac ELF var avhengig av at brukeren manuelt programmerte den ved bruk av fysiske brytere på forsiden av den - mye blod, svette og tårer der bare for å få et enkelt lys til å blinke. RC2014 kommer heldigvis med NASCOM Basic installert ROM, modulens dokumentasjon tilgjengelig på http://rc2014.co.uk/modules/switchable-rom/.

Adressering

Var i utgangspunktet litt usikker på hvor denne skulle plasseres innenfor minnet, se RC2014 Memory Map, ettersom modulen har jumpere for konfigurering innenfor et 64K adresser-rom. Sett fra prosessoren og operativsystemet (Basic) sin side så er ROM alltid plassert på adressene fra $0000  til $1FFF - jumperne på modulen lar deg avgjøre hvilket 8K vindu innenfor EPROM-modulen (standard er 27C512, det vil si 64KB) som man er i stand til å se.
Binær adresse (x = don't care)
000x xxxx xxxx xxxx
Implementasjonen av denne logikken utnytter det faktum at for å signalisere til ROM at den skal svare på "henvendelsen" (husk at bare en brikke kan være aktiv på bussen til ethvert tidspunkt) slik den er nå så må CE (Chip Enable-pin på EPROM-brikken) dras til jord, den gjør dette ved å detektere hvorvidt adresse-linjene A15-13 har positiv spenning ved bruk av et sett med OR-gater (74HCT32).

Husker absolutt ingenting av det jeg lærte om boolsk algebra fra videregående, så for å forstå hvordan denne logikken fungerte fremfor å dra frem mattebøkene (har denne boken fortsatt, nederst i en veldig stor stabel) så fant det enklere å bare simulere den isteden ved bruk av Logic Gate Simulator:


RC2014 Memory Map

Dette er et innlegg relatert til byggingen av RC2014, se introduksjon, og vil mer eller mindre være mine egne notater relatert til dette spesifikke temaet.

Memory Map

RC2014 er basert på prosessoren Zilog Z80, se også innlegg RC2014 Prosessor. Dette er en 8-bit prosessor med adressering basert på 16 linjer - dette gir i utgangspunktet et maksimalt adresse-rom på 64K. Kartet er basert på mitt magre utvalg av tilleggskort, men er godt mulig dette endrer når kreditt-kortet mitt har fått muligheten til å kjøle seg litt ned.

$0000 - $0FFFF ROM
$1000 - $1FFFF
$2000 - $2FFFF
$3000 - $3FFFF
$4000 - $4FFFF
$5000 - $5FFFF
$6000 - $6FFFF
$7000 - $7FFFF
$8000 - $8FFFF RAM
$9000 - $9FFFF
$A000 - $AFFFF
$B000 - $BFFFF
$C000 - $CFFFF
$D000 - $DFFFF
$E000 - $EFFFF
$F000 - $FFFFF

Hver av radene er blokker av 4K, med start og slutt-adresse for den spesifikke blokken angikk i HEX. Den siste kolonnen er inntil videre etterlatt tom i tilfelle jeg finner noe verdt å notere om de spesifikke blokkene, eventuelt så syntes jeg bare det virket mer symmetrisk. Hvem vet?

RC2014 Prosessor

Dette er et innlegg relatert til byggingen av RC2014, se introduksjon, og vil mer eller mindre være mine egne notater relatert til denne spesifikke modulen.

Prosessor

Den enkleste av RC2014-modulene ettersom de fleste av støtte-funksjonene utføres av andre moduler, RC2014 Klokke håndterer klokke-signalet samt reset-funksjonalitet. Opprinnelig dokumentasjon for modulene er tilgjengelig på http://rc2014.co.uk/modules/cpu/.

Prosessoren som benyttes her er en noe nyligere produsert utgave av Zilog Z80-prosessoren, Z840010PEC (10 Mhz Z84). Den originale prosessoren ble først lansert i 1976 med en hastighet på 2,5 Mhz, men utover en firedobling av hastigheten og overgang til CMOS-teknologi (lavere energiforbruk) så er denne prosessoren tilnærmet identisk når det kommer til funksjonalitet.

Selve kretsen er relativt enkel i og med at det meste bare kobler de tilsvarende pin-ene på prosessoren til pin-ene mot hovedkortet. Opprinnelige instruksjoner markerer montering av pin-headere øverst til venstre som valgfritt, men foretrekker å ha muligheten til å gjøre endringer senere. I vanlig bruk må man sette jumpere (eller lodde en kobling mellom) for WAIT, BUSRQ og NMI. Alle koblinger i denne regionen vil, dersom koblet sammen, dra signalet høyt gjennom resistoren til 5V.


Adressering

I utgangspunktet - og slik man forsåvidt forventer det så er prosessoren hjernen i systemet. Derimot, når det kommer til adressering, uansett om det gjelder tilgang til en tilkoblet enhet (IO) eller minne (RAM / ROM), så er dette mer eller mindre implisitt - prosessoren angir en adresse, det er logikken rundt som avgjør hvem som svarer.

Logikken må ta høyde for at kun en enkelt enhet skriver til bussen til ethvert tidspunkt, dersom to enheter "skriver" til en eller flere linjer vil i beste fall deler av signalet gå til jord og i verste fall føre til at det samlede spenningsnivået på linjen overgår det en eller flere komponenter er i stand til å tåle (det vil si varmgang, gnistring og potensielt sett flammer dersom man ikke oppdager dette fort nok).

For å unngå slike kollisjoner refererte man til en oversikt over minnet for hvilke områder man dedikerte til hva. Zilog Z80-prosessoren til forskjell fra annen maskinvare jeg har arbeidet med, et logisk skille mellom minne (se RC2014 Memory Map) og IO (se RC2014 Device Map). Prosessoren indikerer hva vi er ute etter ved bruk av pin-ene MEMRQ og IORQ.

RC2014 Klokke

Dette er et innlegg relatert til byggingen av RC2014, se introduksjon, og vil mer eller mindre være mine egne notater relatert til denne spesifikke modulen.

Klokke

Dette er en relativt enkel komponent, men merk her at denne både implementerer en enkel krets for reset i tillegg til å være klokken for prosessoren. Klokken i denne sammenhengen benyttes for synkronisering av signaler mellom ulike integrerte komponenter (deriblant seriell IO), ikke klokke i tradisjonell forstand (disse refereres til som en RTC-krets). Opprinnelig dokumentasjon på http://rc2014.co.uk/modules/clock/.

Kretsen består av en 7,3728 Mhz krystall som ved hjelp av to kapasitatorer, 22 pF, skaper en svingning i det elektriske signalet. 74HCT04 benyttes for fjerne ujevnheter i signalet slik at vi får en tilnærmet ren firkantkurve. Resistorene benyttes for å sette et øvre og nedre tak for signalet som benyttes.

Reset-kretsen er også inkludert på dette kortet, denne vil sørge for å nullstille prosessoren og eventuelle andre tilkoblede integrerte kretser i maskinen. Z80-prosessoren benyttet av RC2014-maskinen benytter dette signalet, men i og med at denne funksjonen er aktivt lavt så dras signalet høyt gjennom pull-up resistor. Når knappen trykkes ned kortsluttes kretsen til jord, dermed dras signalet lavt. Den samme kretsen er også duplisert på hovedkortet, se RC2014 Backplane.

Har ikke tidligere montert resistorer on-end slik som det forventes her, se bilde nedenfor. Fant ut at den enkleste måten å få dette til å se pent ut, sånn for oss perfeksjonister mellom, er å bøye lederen rundt kroppen av en annen resistor. DIP-modulene vil ha en markering både på komponenten og PCB-en for hvordan orienteringen skal være, på den måten unngår man å svi kretsen ved å sette dem inn feil vei.