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.



søndag 16. april 2017

RC2014 Introduksjon

Med tøffe uttalelser angående forholdet vårt til elektronikk, så må man samtidig innrømme at til tross for en forholdsvis lang utdannelse innenfor datateknikk (føltes i alle fall lang) inkludert ørten timer med forelesninger over hvordan datamaskiner fungerer på så har jeg aldri bygd en selv. Jeg har satt sammen datamaskiner med utgangspunkt i ferdiglagde komponenter, men jeg har hverken designet eller egentlig bygd noen av komponentene på egen hånd.

Design får nok bli et prosjekt for den kommende høsten - sommer først selvsagt! Det å bygge dem skulle derimot vise seg å være langt enklere enn man først skulle tro, det viser seg å være store Internett-miljøer brakt sammen over kjærlighet til horribelt utdaterte datamaskiner. Man kan til og med å få tak i komplette byggesett for en forholdsvis billig penge (man må regne med en tusenlapp).

Hva?

Den jeg endte opp med å kjøpe inn var en maskin kalt RC2014 (se rc2014.co.uk). Maskinen er ikke ment å være en direkte gjenskapelse av noen spesifikk datamaskin fra starten av 80-tallet, men den skal likevel gi alt jeg håper folk husker fra de gode gamle maskinene som var i salg i perioden da jeg ble født (Spektrum ZX81, Apple I osv).


RC2014-maskinen har spesifikasjoner få hadde råd til da, men så må det være lov å kombinere følelsen av nostalgi og det å kunne eie noe man tidligere ikke hadde råd til. Her er spesifikasjonene for min maskin:
  • Zilog Z80 CPU 1 Mhz
  • 32 KB RAM
  • 8 KB ROM
Mer eller mindre tilsvarende Commodore 64-maskinen (ytelse, ikke teknologi) jeg og broren min var så heldig å få i gave fra foreldrene våre noen år senere.

Med utgangspunkt i den langt mer budsjett-orienterte datamaskinen jeg bruker for å skrive dette, så er den i stand til å utføre rundt gjettet 60 000 flere kalkulasjoner per sekund samt at den har noe slikt som 260 000 ganger mer minne!

Hvordan?

Byggesett av den elektriske variasjonen blir som oftest distribuert som et sett med ferdiglagde kretskort, selve komponentene i seg selv er ikke alltid inkludert eller i det hele tatt tilgjengelig fra den som lagde settet. Med andre ord må man potensielt handle disse inn selv, eventuelt håpe på at man allerede har noe av dette liggende i skuffen. RC2014-settet selges heldigvis med alternativer for å få hele settet, inkludert alt man måtte trenge av komponenter utover PCB-ene. Kommer derimot til å trenge en del utstyr for å komme noen vei.


Nødvendig utstyr:

LoddeboltAnbefales bruk av temperatur-regulert loddebolt ved lodding av kretskort, tilgang til en lettere fuktet svamp man kan bruke for å skrape av overflødig loddetinn på.
LoddetinnBlyfritt anbefales IKKE for amatører som meg. Økt bruk av giftige stoffer for å slippe bruk av bly høres ikke ut som en god ide.
TinnsugerHjelper når man har loddet feil ting på feil plass, brukes for å fjerne flytende tinn.
MultimeterHer trenger man et multimeter med kontinuitet, denne funksjonen hjelper en med å finne de plassene der man har koblet ting litt for mye ting sammen (eventuelt ikke i det hele tatt).
USB TTL seriell adapterDisse byggesettene kommer som regel ikke med mulighet for å koble til skjerm eller tastatur, når man skal kommunisere med maskinen vil må man bruke seriell-porten på en annen maskin - den som forsvant for 10 år siden.

Hvorfor?

I utgangspunktet så har hobbyer i seg selv ikke behov for begrunnelser, det relevante spørsmålet til en hobby er hva dette gir meg og ikke hvorfor? Dagens datamaskiner er langt mer komplekse, men like fullt er de bygd med de samme teknikkene i bunn - det å bygge en gammel utdatert datamaskin gir oss muligheten til å studere dem i detalj. Og, så er det veldig underholdende prosjekt (gitt at man har en sær interesse for datamaskiner)!