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.

RC2014 CP/M Installasjon

Dette er et innlegg relatert til RC2014, og vil mer eller mindre være mine egne notater relatert til konfigurasjon og installasjon av operativsystemet CP/M ved bruk av Compact Flash som lagringsenhet. For mer informasjon om hva CP/M er for noe samt systemkrav se innlegget RC2014 CP/M.

CP/M Installasjon

Som allerede nevnt i det forrige innlegget så skal vi her installere systemet på Compact Flash istedenfor disketter, mer eller mindre fordi disse fortsatt eksisterer i noen tilgjengelig form. Selvsagt får vi ikke brukt hele kapasiteten fullt ut i og med at 128 MB tross alt er eventyrlige størrelser for et system designet i en tid da disketter var på 8 tommer og hadde en kapasitet fra 80 KB til rundt 500 KB, gitt begrensningene i filsystemet så kan hver enhet maksimalt være på opptil 8 MB.

På selve CF-kortet vil vi få opprettet et sett med 8 MB disker, hver med sin egen stasjonsbokstav. I utgangspunktet så er kortet jeg mottok på 128 MB, men i praksis så var det litt mindre enn som så og jeg fikk dermed ikke brukt hele kapasiteten - uansett, begrenset til 64 MB så får man fortsatt enorme disker hele veien fra A til H!

Dette gjorde samtidig at jeg selvsagt ikke fikk brukt den ferdiglagde img-filen tilgjengelig på github fra skaperen av RC2014. Dette betyr at jeg må gjøre alt grunnarbeidet selv, mer moro å gjøre det på denne måten uansett - de stegene jeg brukte er for det meste basert på arbeidet Grant Searle gjorde da han i utgangspunktet designet utgangspunktet for det som etter hvert inngikk i programvaresiden av RC2014.

Første steg

Det første man må gjøre før man kan komme i gang med installasjonen... er å irritere seg over at seriell-modulens basis i 68B50 kretsen involverer et totalt fravær av flyt-kontroll! Det dette vil si er at den ikke er i stand til å gi beskjed dersom maskinen vi sender data fra, men heller bare kræsjer i stillhet uten å si stort - når man tar til etterretning av at laptopen min har en regnekraft som rundt gjettet ligger i skalaen 500 000 ganger kraftigere så sier det seg selv at dette skjer FORT.

For å komme rundt dette trenger vi en seriell-programvare som er i stand til å legge inn pauser mellom hver bit av data som sendes, dette er dessverre støttet i et fåtall av dem og kunne dermed ikke bruke PuTTY til dette. Endte opp med å benytte meg av en prøve utgave av SecureCRT, men dette er profesjonell programvare ment for alt annet enn småprosjekter og prisen er deretter så tror ikke jeg kommer til å betale inngangsprisen for denne etter evaluerings-perioden som heldigvis er lang nok til å få fullført installasjonen (fant senere ut at Tera Term også fungerer, helt åpen og uten en prislapp) - innstillingene jeg brukte er vist nedenfor til venstre.


Med det unna veien er man klar til å starte selve installasjonen, dersom alt er satt opp rett vil man ikke få opp BASIC lenger ettersom ROM-brikken med denne installert på nå ligger på roterommet et sted - du vil nå få opp CP/M bootloader slik vist ovenfor til høyre. Dersom denne ikke dukker opp, rykk tilbake til start - det vil si RC2014 CP/M.

Installasjonsfiler

Dette burde kanskje vært det første steget, men nå til dags har alle raske Internett-linjer så rekkefølge betyr ikke noe lenger. Med mindre man har Telenor, da må man vente litt lenger (true story).

Grant Searle laget som allerede nevnt den opprinnelige maskinen og har også satt sammen det meste av det som trengs av programvare - disse finner du på hans hjemmeside! Ikke les så nøye på alt annet som står der, det er altfor interessant til å klare å unngå å bli værende  - dessuten så vil det gjøre det absolutt åpenbart at jeg på dette tidspunktet bare oversetter det som står der (i det minste er jeg ærlig). Dersom jeg senere ikke eksplisitt sier hvorvidt filene kommer fra RC2014 eller Grant Searle, så er det sistnevnte jeg refererer til!
RC2014 har som allerede nevnt en annen brikke for håndtering av seriell trafikk, med andre ord vil vi måtte substituere filer med innhold tilpasset maskinvaren. Disse filene finner du på githup-repositoriet for RC2014:

Formatering av Compact Flash

CP/M kan selvsagt ikke lese filsystemer oppfunnet nesten 20 år sender, langt mindre dagens versjoner som tross alt annet snart er 40 år nyere. Med andre må kortet formateres med noe helt annet enn hva Windows tilbyr via sine tidvis amputerte menyer, heldigvis har Grant Searle skrevet rutiner for å gjøre dette direkte på maskinen.

Gitt at vi skal bruke et kort på 64 MB, eller på annen måte blir tvunget til det, så starter man med å overføre programvaren for dette mens man står inne i CP/M bootloader. Fra nedtrekksmenyen Transfer innenfor SecureCRT velger du alternativet "Send ASCI..." og angir filen form64.hex (form128.hex ved større kort). Konsollet vil printe ut prikker etterhvert som at programvaren lastes over, dersom denne låser seg eller at programvaren etterpå ikke kan kjøres - juster opp mengden forsinkelse ved overføring i klienten. Kort oppsummert, overfør følgende filer:

  • form64.hex (form128.hex ved større CF-kort)


Når man får opp "Load complete" så er programvaren lastet opp, angitt innad i filen er informasjon om at informasjonen vil være skrevet til minne på adressen $5000 og oppover. For å kjøre programmet på denne adressen angir du kommandoen G5000, dersom alt gikk bra så vil du få en utskrift slik som vist i bildet ovenfor - her vil du også se stasjonsbokstavene som vil være tilgjengelig senere.

Installasjon av CP/M

Jeg plagdes en del med dette steget, jeg tror grunnen til dette var at programmet for å formatere lagringsenheten fortsatt var i minnet - derfor anbefaler jeg å nullstille maskinen nå (det vil si koble fra strømmen) for å være sikker på at minnet nå er tomt!

CP/M installeres ved å laste over et nytt sett filer på samme måte som tidligere, men legg merke til at her skal to av filene substitueres med de som tilhører RC2014. Følgene filer lastes over, sjekk at det står "Load complete." etter hver overføring. Følgende filer skal lastes over:
  • cpm22.hex (RC2014)
  • cbios64.hex (RC2014, cbios128.hex ved større CF-kort)
  • putsys.hex
Med disse tre filene på plass i minnet, så er vi klar til å kjøre installasjonsprogramvaren - denne er igjen plassert på adressen $5000 så vi skal dermed igjen gi kommandoen G5000. Gitt at alt går som det skal så skal du få beskjeden "System transfer complete" - se skjermbilde nedenfor til venstre.


Nå skal systemfilene være på plass, trykk på reset-knappen for å bli kvitt eventuelle rester av installasjonsprogramvaren. Trykk på X fulgt av Y, gitt at nå får noe slikt som det vist ovenfor til høyre - så kan man ikke gjøre annet enn å ønske deg velkommen til CP/M!

Støtteprogrammer

Moro ikke sant? Ikke det? Det har nok en del å gjøre med at vi ikke har noe programvare å leke med, heller ikke noen måte å få de overført heller. Dette har også Grant Searle ordnet med, men for å gjøre det så må vi tilbake til CP/M bootloader så trykk på reset-knappen igjen!

Overfør følgende fil på samme måte som tidligere:
  • download2.hex
Dette vil ha lagret et program til minneadresse $FFE8, gi kommandoen GFFE8 for å kjøre dette. Maskinen vil nå i full fart gjøre en del omkalfatring før man forhåpentligvis igjen er tilbake i CP/M. Du kan nå lagre det nedlastede programmet til disk ved å gi kommandoen SAVE 2 DOWNLOAD.COM.


Dette vil nå ha lagret et program på A som vi kan benytte for å senere motta programmer uten å være nødt til å hoppe mellom systemene slik vi nettopp gjorde. Med DOWNLOAD.COM på plass så kan vi nå sende over programmer ved å lime dem inn i terminalen, i og med at vi fortsatt mangler grunnleggende kommandoer for å arbeide filer og lignende så er det en god ting.

Grant Searle har inkludert disse andre støtteprogrammene i en separat fil, filen CPM211FilesPkg.txt plassert i transientAppsPackage-katalogen. Du kan potensielt sett denne over på samme måte som tidligere, men slet med at denne ikke fungerte - endte opp med at innholdet ble listet ut i terminalen fremfor å bli lagret. Løste dette ved å laste dem over, en etter en ved å kopiere de tre tilhørende linjene til hver av dem - dette ser ut som noe slikt som følger:
A:DOWNLOAD LOAD.COM
U0
:C3400220434F505952494748542028432920313937382C204449474954414C2052455345...

Med litt tålmodighet så er alt straks på plass, og alt det som en grunninstallasjon av CP/M hadde å by på står nå til rådighet for deg. Du kan opprette filer, redigere dem og alt slikt - alt man kunne komme til å trenge fra en datamaskin. Selvsagt ingen Facebook, men ingen trenger egentlig Facebook...

søndag 4. juni 2017

RC2014 CP/M

Dette er et innlegg relatert til RC2014, og vil mer eller mindre være mine egne notater relatert til konfigurasjon og installasjon av operativsystemet CP/M ved bruk av Compact Flash som lagringsenhet.

Control Program/Monitor (CP/M)

Operativsystemet CP/M, i følge Wikipedia offisielt registrert med varemerket Control Program for Microcomputers, ble utviklet rundt 1976 av Gary Kildahl for å lette bruken av datamaskiner. Der Basic i seg selv i hovedsak var en måte å programmere på en datamaskin, så var dette et operatisvsystem der man fikk komplette programmer for å utføre de mest grunnleggende tingene på en datamaskin.

Av funksjoner som var inkludert så må det nevnes at en av de mer sentrale må være muligheten til å forholde oss til filer på lagringsenheter fremfor å håndtere blokker av data direkte - med andre ord et filsystem. Hans opprinnelige måte å håndtere de ulike enhetene ved bruk av bokstaver lever helt frem til den dag i dag, så dersom du vil klage på noen for at man må sjonglere på A: og C: så er altså dette mannen man må skylde på, hans definisjon av hvordan man angir et filnavn - navn og så en tre-bokstavs endelse etter formål - er også en av hans bidrag.

Høres veldig ut som MS DOS, ikke sant? Slik historien går så nektet Gray Kildahl å undertegne en konfidensialitetsavtale som ville forhindret han å holde programvaren tilgjengelig for folk flest - det skulle være et lavkostnadsalternativ! Omsider kom det på plass en kontrakt der IBM skulle ha enerett på salg av CP/M, sleipt nok hadde IBM til da klart å lage en kopi av systemet som ble kalt DOS (Disk Operating System, rett og slett fordi det krevde en diskettstasjon). Takket være rom for tolkning i avtalen kunne IBM selv bestemme utsalgsprisen, noe de utnyttet for å sette prisen på CP/M til det femdobbelte av DOS til tross for at innsalgsprisen i utgangspunktet var billigere enn det de tok for DOS.

For de av oss som gikk på barneskolen på 80-tallet så husker man sikkert en maskin kalt Tiki, disse kjørte et operativsystem kalt KP/M. Dette var essensielt sett en ulisensiert kopi av CP/M med enkelte tilpasninger - selskapet bak ble selvsagt saksøkt ettersom dette tross alt var organisert piratkopiering, men i og med at lovene fortsatt ikke var i stand til å håndtere annet enn en tyveri av fysiske gjenstander så slapp de unna med det. Stiller ting i et litt annet lys.

Nok avsporinger, videre selve systemet...

Systemkrav

  • Intel 8080-prosessor
    • Zilog Z80 er bakoverkompatibel med Intel 8080
  • 16 KB RAM plassert på $0000-$3FFF
  • CP/M bootloader
  • Diskett-stasjon
RC2014-prosessoren er allerede støttet av CP/M, så der trenger man heldigvis ikke gjøre noe - greit å allerede ha noe av det man trenger fra starten av. Derimot når det kommer til minnet så begynner man å få problemer, dersom man tar en titt på RC2014 Memory Map så ser man at vi allerede bruker $0000-$1FFF til ROM - minnet er også plassert fra $8000-$FFFF, ingen av disse to er med andre ord plassert der vi trenger dem!

De opprinnelige modulene støtter heller ikke rekonfigurasjon av adressene for RAM og ROM (vi trenger denne til CP/M bootloader), vi må med andre ord bytte ut disse to. Modulene som trengs i tillegg er følgende:
  • RC2014 64K RAM
  • RC2014  Pageable ROM
Med dette oppsettet vil vi få på plass en ekstra blokk med minne, det vil si totalt 64K tilgjengelig hukommelse - helt absurd mye, i alle fall sett opp mot at man på den tiden betalte i dyre dommer for minnebrikker med en størrelse med 1, 2, eller 4 KB kapasitet per brikke! I utgangspunktet løser dette ingenting i forhold til overlappingen i adresserommet, men som den sistnevnte modulen indikerer så støtter disse modulene en teknikk kalt "paging". Dette betyr i dette tilfellet at man kan aktivere (page inn) eventuelt deaktivere (page ut) disse modulene fra programvaren.



Paging kan også hentyde på å veksle hvilken vindu man ser innenfor en enkelt brikke, på den måten kan man benytte seg av langt større RAM-brikker til tross for at maskinen i seg selv kun kan adressere 64K direkte. Uansett, det er den førstnevnte betydningen av teknikken som vi skal benytte oss av her, så dersom dette ikke var forståelig så er ikke det så nøye.

Bildene ovenfor viser hvordan dette er koblet sammen, den grønne kabelen mellom modulene sørger for at RAM pages inn når ROM pages ut. Pass også på å sette opp jumperne slik som det er angitt her, dette tar utgangspunkt i EPROM med CP/M bootloader levert fra skaperen av RC2014 (dersom du har lagt denne opp selv, korriger page-selection deretter).

CP/M bootloader er et enkelt program som tar for seg å starte opp systemet, denne vil på mange utgjøre funksjonene til det vi i dag refererer til som en BIOS (grovt forenklet; grunnleggende rutiner for å lese ut data tilstrekkelig for å starte et annet operativsystem). Det er denne programvaren som i vårt tilfelle kommer til å bruke paging-teknikken for å løse problemene våre med overlappende adresser...

Ved oppstart vil bootloader være plassert i ROM på adressene $0000-$1FFF, det første den vil gjøre er kopiere seg selv til RAM plassert fra $8000-$FFFF og dermed page ut ROM og så page inn det andre minnebrikken på adressene $0000-$7FFF. For å få rutinene sine på korrekt sted igjen, så vil den igjen kopiere seg selv over i ram på adressene $0000-$1FFF.

Det siste vi trenger er altså en diskett-stasjon, men utover å ha gått så langt som å spore opp en diskettstasjon med tilhørende kontroll-brikke så har jeg enda ikke fått startet på denne delen av prosjektet. En enklere metode som oftest benyttes i disse dager når det kommer til lignende retro-prosjekter er derimot å benytte seg av Compact Flash for denne delen av systemet. Med andre ord så har funnet en bruk for RC2014 IDE Compact Flash modulen jeg har brukt så mye tid på å snekre sammen.


lørdag 3. juni 2017

Til minne ...

Du gikk i klassen vår på barneskolen, så alt for lenge siden. Siden skilte lag - vi holdt ikke kontakten, til tross for intensjonene om at vår klasse var den beste av de alle og vi måtte jo det. Veien vi kom til å gå var tross alt den samme; vi skulle bli voksen, få jobb, barn og alt det livet hadde å  by på underveis.

Skal jeg være helt ærlig så var vi ikke venner, tror ikke en gang vi forsto hverandre selv om du lærte meg en del ting jeg først forsto flere tiår etterpå. Jeg så på følelser som noe som skulle presses nedi en liten boks innerst inne for å forhåpentligvis aldri bli sett igjen, du skrev dem i pannen din slik at alle skulle se.

Du hylte til alle om at alle ting var så mye bedre der du kom fra, en plass kalt Honningsvåg - vet ikke engang hvilken, ung som jeg var tenkte jeg at livet hadde en iboende logikk som gjorde det unødvendig for meg å i det hele tatt tenke tanken på at det kunne være flere av dem. Du hadde en litt rar dialekt, så  jeg tenkte nok at det var en plass langt langt borte som måtte være helt fantastisk siden der vi var - var en straff å måtte være.

"Eg ska drep mæ" ropte du til læreren, som måtte selvsagt måtte ta en alvorsprat om det hele ute på gangen. Da friminuttet var over så lå du stille der i hjørnet av klasserommet, med barne-saksen plassert over over halsen og noen røde tusje-streker for effekt!

"Hvem er det du lurer?" Tenkte jeg bare, uten å si noe som helst den ene veien eller den andre. Slike sakser kunne knapt nok i stand til å håndtere de få arkene vi hadde til rådighet, men så ville du jo selvsagt ikke dø heller. Døden var ikke noe noen av oss forsto hva var, heller ikke nå, du ville jo bare leve som du var. Omgitt av et indre stormfullt hav, med et stort håp om mer nøyaktige værmeldinger.

(Kilde: Et av Marianns bilder, for vakkert til å ikke deles)

Senere forsto jeg de tingene du forsto allerede da - for følelser er ikke en vond ting, selv om de er vonde og du visste hvor terapeutisk det er å hyle dem ut i verden! Alt av det vakre vi omgir oss av springer ut av følelser, det er de som på magisk vis forvandler havet fra så mye saltvann til den vakre utsikten vi vokste opp omgitt av. De som har flest av oss gjør dem til kunst, så mange år uten at våre veier har krysset så var det selvsagt at du ble kunstner og musiker. Jeg håper du også du ville likt disse ordene fra Shayne Koyczan, som langt bedre setter ord på ting enn hva jeg er i stand til:
you were honest
despite your instinct to say
"it's alright I'm okay"
you said how you felt
without fear or guilt
without remorse or complexity
lucid in your explanation
sterling in your repose
if you thought for a second that no one knew
what you've been going through
I hope you realized the fact that you were wrong
that the long drawn and heavy breaths of despair
have at times been felt by everyone
that pain was and is part of the human condition
and that alone
made you legion
Så hva er egentlig et minneord? Det virker alltid som om at vi kommer tilbake til oss, og så føler vi oss skyldige i å få alt til å handle om oss selv - selv når noen er gått bort! Jeg tror egentlig alle minneord til sist handler om oss selv, for de som allerede har gått bort er dette det siste kapitlet mens vi må finne en måte å plukke opp de restene vi kan og gå videre. Tankene er mine, det er ikke sikkert du ville kjent deg igjen i dem, men det er de vi sitter igjen med.

Et siste ord til deg, Mariann... Jeg kjente deg ikke da og enda mindre nå, men jeg kjente deg godt nok til å vite at du er savnet av de som var deg nær.

Hvil i fred.

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!