Historisk datateknik

Mina första kontakter med datateknik var på 1960-talet då min far lånade hem en Olivetti Programma 101 ”dator” eller kanske bättre programmerbar (bords) räknemaskin. Datorn var stor som en modern resväska men den var programmerbar i 100 steg dock så att varje variabel förbrukade ett programsteg.
Olivetti_programma_101

Pappa programmerade maskinen till att bl.a. skriva ut lyftdata för olika vingprofiler. Ungdomarna i familjen (däribland jag) var intresserade av modellflyg.

Följande steg för mig var Science of Cambridge Mk14  som var en 8-bitars dator med 256 minnesplatser. Program kunde lagras på kassettband men man måste alltid börja med att knacka in ett laddprogram i hexadecimal form. Jag hade inbillat mig att jag skulle ha kunnat expandera maskinen till att bli den programmerbara funktionsräknare jag egentligen önskade mig. Resultatet blev att jag lärde mig programmering i assembler men så att jag själv översatte koden till binär (hexadecimal) form.

Några år senare jobbade jag i Tavastehus på ”Ammattikoulujen Opettajaopisto” som fungerade i anslutning till en teknisk skola. Man hade en Eclipse minidator som tidsdelat användes bl.a. till undervisning i programmering (Fortran).  Min uppgift var. bl.a. att skriva enkla undervisningsprogram. Jag märkte snabbt att det lönade sig att använda en fristående mikrodator som körde CP/M operativsystemet i stället för att dela minidatorn. Eclipse minidatorn hade en kapacitet som var en bråkdel (kanske 1/1000) av kapaciteten hos en modern PC och samma maskin användes samtidigt av tjugo elever till att kompilera Fortran. Resultatet var naturligtvis att Eclipsen under skoltid var fruktansvärt trög … man kunde vänta i flera sekunder på att en knapptryckning skulle noteras. Den lilla CP/M maskinen hade endast en användare (jag) så den var underbar att använda. En persondator innan den egentliga persondatorn (IBM PC) ens var uppfunnen.

Jag råkade för en kort tid sedan på nätet stöta på en artikel om emulering av CP/M maskiner med hjälp av Arduino processorer. Den mest extrema vartianten jag har sett är då en Arduino Nano, dock med stöd av extern hårdvara, har använts till att köra CP/M. En enklare variant, då processorn är mycket mera kraftfull, är att emulera CP/M med hjälp av en Arduino Due som är ett ARM-baserat processorkort som antagligen är några hundra gånger snabbare än den ursprungliga Intel 8080 processorn.

Arduino_Due_CPM_system.png

Mitt emulerade CP/M system med hårdskiva till höger. Skivenheten är ett 4G SD-kort som är så litet att man inte hittar sådana i butikerna längre. På kortet finns katalogerna A, B, D, D, E som motsvarar forntidens 8 tums skivminnen. Skillnaden är att mina skivstationer A, B  … har en nästan obegränsad kapacitet. De första 8 tums ”floppyna” hade en kapacitet på kanske 150 000 tecken. Min extrema SD-hårdskiva har en kapacitet som är 25000 gånger större än en forntida 8-tums floppyenhet. En floppy hade en så liten kapacitet att man normalt körde t.ex. en kompilator från en skiva och hade texteditorn och programmet som kompilerades på en annan skiva.

Man kan köra CP/M i normal hastighet på kortet. Processorn har så mycket RAM minne att det finns nästan 64kByte minne ledigt för program … ett sagolikt stort minne!  Maskinen är helt användbar bl.a. till textbehandling (Wordstar) trots att en modern PC har ett minne som är ungefär 125 000 ggr större!

CP_m_2.2_Arduino_Due

Bilden ovan visar hur jag kör CP/M i textterminal GtkTerm. Det dök egentligen upp endast två poblem.

Det första problemet var hur det var tänkt att det simulerade skivsystemet med skivenheterna A:, B:, C: osv skulle konfigureras för att maskinen skulle hitta systemfilen och starta. Jag blev tvungen att lägga till några kommentarer tll emulatorns uppstartsrutin för att se varför systemet inte först ville starta., därför finns kommentaren ”Looking for: CPM22.BIN. Jag visste helt enkelt inte om problemet var SD-kortet eller platsen där systemet var lagrat i förhållande till övriga CP/M rutiner.

Det andra problemet var trivialare … att hitta ett lämpligt terminalemulatorprogram för linux som skulle gå att använda direkt utan läsande av någon bruksanvisning.   Att hitta ett terminalemulatorprogram var egentligen det storsta problemet med att få igång CP/M systemet på riktigt. Arduinons utvecklingsmiljö har något de kallar ”Serial Monitor” d.v.s ett enkelt program som kan  skicka kommandon till Arduinon och skriva ut den text som kommer tillbaka från kortet. Monitorn visade nog att jag hade fått CP/M startat men det gick inte att i praktiken köra något eftersom monitorn inte motsvarade en riktig gammaldags intelligent terminal. För detta ändamål behövs det en terminalemulator som klarar av att tolka bl.a. kontrolltecken som CP/M systemet skickar till terminalen.

Det behövdes en aning debuggning av SD-kortet som används i stället för skivminne, därav min kommentar vid uppstart ”Looking for: CPM22.bin”.

MBASIC_1985-1986.png

Bilden visar hur systemet kör Microsoft MBASIC från 1986 i en CP/M emulator som körs i en Arduino Due. Arduino Due har följande specifikationer:

Processor 32-bitars ARM.

Flash programminne 512 kB

RAM-minne 96 kB

Klockfrekvens 84 MHz

Detta kan jämföras med orginalets processor Intel 8080 som körde på 2 MHz men så att en instruktion typiskt behövde mellan 4 och 8 klockcykler. Arduinon kör alltså ungefär 100 ggr snabbare vilket gör att den klarar av att emulera en Intel 8080 processor i full hastighet.

Det är intressant att jämföra CP/M maskinen ovan med kapaciteten hos en typisk persondator av idag.

Programminne RAM är 25 000-50 000 ggr större än hos en CP/M maskin.

Skivutrymmet på en modern dator är 20 000 000 ggr större än hos ett typiskt CP/M system med en skivenhet.

Processorn är idag ungefär 4000 ggr snabbare med en ordlängd d.v.s. storleken på de datapaket datorn behandlar är 8 ggr större.

 

Etiketter: , , , ,

Lämna en kommentar