Viser innlegg med etiketten RC2014. Vis alle innlegg
Viser innlegg med etiketten RC2014. Vis alle innlegg

tirsdag 8. august 2017

RC2014 CP/M Bruk av annen programvare

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.

Generelt

CP/M er et operativsystem med mye ferdig utviklet programvare, noe brukbart og mye som i dag vil virke obskurt og forholdsvist arkaisk - det meste er selvsagt ikke inkludert, så da må man finne ut hvordan man får overført den programvare som ikke fulgte med maskinen.

I og med at jeg fortsatt benytter meg av den MC68B50-baserte seriell-modulen som følger med RC2014-maskinen, så har jeg fortsatt komplikasjoner med buffer overflow slik som forklart i innlegget RC2014 CP/M Installasjon tidligere - kort sagt så sender datamaskinen data til RC2014-maskinen langt raskere enn hva den er i stand til å håndtere. Dette ble da løst ved å legge inn forsinkelser i overføring av data, dette er en funksjon som fins i noen få seriell-klienter og den jeg benyttet da var en trial-utgave av SecureCRT.

SecureCRT utgaven min er nå selvsagt gått ut på dato - med krav om penger for å la meg fortsette å bruke den, men kjip som jeg er så nekter jeg å bruke tusenlappen på programvare myntet på profesjonell bruk. Løsningen var da å bytte over til bruk av Tera Term. Nettsiden ser ut som et oppgulp fra 90-tallet og det samme gjør nok grensesnittet, men den er åpen og fritt tilgjengelig for bruk. Tilsvarende endringer for å legge inn forsinkelsene er å finne under seriell-instillinger, se skjermbilde nedenfor til venstre.



Fra tidligere så skal maskinen allerede være konfigurert for CP/M, det vil si at man har montert modulene Pageable ROM (med CP/M boot ROM), 64K RAM samt CF adapter med CP/M basis-system allerede installert på allerede være installert på stasjon A. Verifiser at du samtidig også har filen DOWNLOAD.COM på plass på systemet, se skjermbilde ovenfor til høyre.

Hvor finner man programvare?

Som alt annet i disse dager så finner man programvaren ved å bla litt rundt på det store vide Internettet, likevel så er det ikke alt som fungerer på alle maskiner ettersom de ulike systemene gjerne vil ha vidt forskjellige krav til maskinen - i og med at RC2014-maskinen med det nevnte oppsettet vil ha tilgjengelig alt av adresserbar minne, hele 64K, så er man godt stilt - bare pass på at mange programvare-pakker vil være laget spesifikt for enkelte maskiner, så vi vil her være begrenset til programvare utviklet for Zilog Z80-prosessoren og som oftest vil disse være beskrevet som kompatibel med CP/M-80.

Har funnet ut at The *HUMONGOUS* CP/M Software Archive ser ut til å lenke videre til alt som mest sannsynligvis fortsatt eksisterer av programvare. Her finner man alt fra Freeware, Shareware til kommersiell programvare - sistnevnte vil nok sikkert kunne regnes som pirat-kopiering i sin tid, men nå vil nok det meste av Copyright på slikt være utløpt for lenge siden så skal være greit nok så lenge man ikke selger dem videre. For spill-interesserte fant jeg en god samling på Z80.eu

Overføring av programvare

Overføring av programvare kan enklest gjøres ved bruk av programmet Binary to CPM Package (by G. Searle), dette er en del av filene lagt ut av Grant Searle - se i katalogen windowsApp. Programmet må startes som administrator (kunne ikke starte som min ordinære bruker, Windows 10 Home Edition).



Et program kan legges til ved å klikke på Import file og så angi filen - du vil få beskjed om at filen er lagt til i pkgFile.txt. Filen er opprettet i en midlertidig katalog, men helt enkelt kan du få innholdet ved å klikke på Open Package File. På samme måte som under installasjonen av de grunnleggende programmene så installerer du også andre programmer på denne måten. Legg merke til at programvaren automatisk vil filtrere på COM-filer, men du vil som oftest trenge en eller flere DAT-filer i tillegg.

Klikk på Open package file for å åpne den genererte filen, innholdet kan nå kopieres og limes inn i Tera Term (pass på å deaktivere Word-break i Notisblokk for å unngå at disse sniker seg inn). Pass på å bytte til stasjonsbokstaven der du ønsker å lagre filene først.

Bestemte meg for å laste inn spillet Leather goddesses of Phobos. Dette er nok et tekst-basert spill fra InfoCom, men skal visstnok ha vært en av datidens mest usømmelige av dem - så usømmelig som tekst kan bli vel å merke, her er det ingen grafikk i sikte. Kunne ikke finne noen bilder av esken til spillet for CP/M - mest trolig har tittelen bare vært distribuert uten de pene eskene man senere kom til å forvente. Bildet til høyre tilhører Amstrad-utgaven.

I utgangspunktet vil det virke som programvaren ikke gjør stort, det er på grunn av forsinkelsene lagt inn og størrelsen på programmet. Man vil jevnlig få lagt til prikker for å vise at ting fortsatt snurrer, men man må smøre seg med en god dose tålmodighet - et spill av denne størrelsesordenen inkludert innlagte forsinkelser vil ta rundt 30 minutter å overføre til maskinen. Du husker den biten om tålmodighet, ikke sant? Etter alt dette så starter i det minste spillet og etter en mengde særdeles morsomme advarsler om spillets innhold får man til og med spille!


mandag 5. juni 2017

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.


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.


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!

fredag 12. mai 2017

RC2014 Basic

RC2014 er datamaskin jeg har brukt en del på å bygge og studere virkningsmåten til den siste tiden, for mer informasjon om maskinen i seg selv se introduksjon. Basic var det de fleste av oss utover 70 og 80 tallet kjente som operativsystemet på maskinene, men i realiteten så var det egentlig et programmeringsspråk for hvordan man arbeider med maskinen.

Basic

Den etter hvert mest kjente versjonen av Basic er utvilsomt Microsoft Basic i og med at denne på det tidspunktet var en av de mer rimeligere av alternativene - til og med Apple 1 og 2 kjørte MS Basic!

Basic kan ikke sies å være en oppfinnelse fra fra Microsoft sin side, Bill Gates selv implementerte implementerte en egen versjon av rutinene i henhold til spesifikasjonene utviklet ved universitetet Dartmouth på slutten av 60-tallet - for den langt mer komplette historien se denne artikkelen. MS utgaven fokuserte på hjemmedatamaskinene som ble tilgjengelig fra slutten av 70-tallet mens den opprinnelige utgaven opptil da hadde fokusert på stordatamaskinen.

Til tross for at det hele virker noe arkaisk og til tider vanskelig å forstå, så var utgangspunktet for systemet et ønske om å lage et system som alle skulle være i stand til å skrive og forstå uten en doktorgrad innenfor relevante fag. Her må man huske på at sammenligningen da var sett opp mot systemer der man lastet inn data ved å flippe brytere og lese av svar i form av opplyste serier av lyspærer, innlesing av data via hullkort og utskrift på papir var fortsatt relativt moderne.

Basic la opp til å skrive inn operasjoner ved bruk av tastatur og så å kunne få resultatene direkte ut på skjermen, langt mer brukervennlig og manualen på noen få sider fulgte med datamaskinen. Mitt første møte med MS Basic var via Commodore 64-maskinen jeg hadde som liten, og den fikk jeg til å gjøre enkle ting selv om jeg fortsatt var for ung til å starte på skolen.

NASCOM Basic v4.7

NASCOM versjonen er en porting av MS Basic for bruk på Z80-baserte datamaskiner slik som RC2014-maskinen jeg har, noe som vil si at brøkdelen av et sekund etter å ha slått på maskinen så kan man begynne å bruke den. Skjermbildet nedenfor viser oppstarten av systemet samt et eksempel der man bruker PRINT-kommandoen for å skrive ut en tekst på skjermen.


I utgangspunktet litt fryktinngytende for selv dagens ferske IT-teknikere i og med at alt er tekstbasert, men det er tross alt ikke den svarte magien man husker fra tiden da jeg fortsatt ikke hadde lært bokstavene. Den komplette manualen til NASCOM Basic var tross alt kun på 31 sider, inkludert introduksjon, innholdsfortegnelse og forside - den er til og med tilgjengelig på Internett.

Praktisk eksempel

Det er egentlig ikke spesielt interessant å skrive ting ut til skjermen, så et mer praktisk anvendelig eksempel er gjengitt nedenfor. Dette skriptet skriver ut innholdet av de 88 første minneadressene, og var noe jeg laget for å lese ut den første delen av ROM på maskinen.

10 FOR I=0 TO 10
20 PRINT I*8;":";
30 FOR B=0 TO 7
40 PRINT PEEK(I*8+B);
50 NEXT B
60 PRINT
70 NEXT I
Hver av linjene skrives inn som skrevet, numrene foran angir rekkefølgen disse skal utføres i og vil lagre dem uten å kjøre disse direkte. Systemene hadde ikke noen editor i tradisjonell forstand, derfor var det lurt å legge inn hopp i numrene slik at man kunne angi noe mellom linjene - benytt samme nummer for å korrigere linje.

Kommandoen list lister ut programmet slik det er skrevet inn så langt, er man fornøyd så kan man kjøre det ved bruk av kommandoen run.


lørdag 22. april 2017

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?