Sista semesterdagen

Jag och barnen ägnade sista semesterdagen åt att besöka tekniska museet. Bland alla roliga föremål var en Cray 1, Prirate Bay-servern, en Imsai 8080 och..

Gamla fröken Ur
Gamla fröken Ur

Paket från andra sidan “pölen”

Idag kom det massor av paket.

I det ena var det ordentligt inslagna Z80180-CPUer till PC02, nästa retro-PC-projekt. Z80180 är en upphottad variant av Z80, och har begåvats med ett gäng periferienheter på chippet. Den viktigaste är i mitt tycke MMU-delen, som gör det möjligt att adressera 1M fysiskt RAM. Den här typen av MMU kallas i bland för “bankswitcher”, vilket tydligt talar om hur den arbetar, dvs visar en minnesbank i taget. Konstruktionen är direkt hämtad från populära CP/M-system från 80-talet.

I det andra paketet var det lämpligt minne till PC02; 1G räcker till att fylla upp hela den fysiska adressrymden för 1000 st PC02.

Massor med minne, och en massa CPUer
Massor med minne och CPUer

Vad är PC02 för något?

PC02 är den logiska uppföljaren till PC01 (fortfarande under konstruktion) med nya “features” i form av

  • PS/2-tangentbordsanslutning
  • pipljud med möjlighet till olika tonhöjd
  • monokrom teckengrafik med möjlighet att omdefiniera tecknen

Möjligen kan PC02 få stöd för Ethernet, även om det tidiga 80-talets PC inte ens kunde hallucinera om nätverksstöd. Med dagens enkla 10 Mbit ethernetcontrollers från bla. Microchip är det enkelt att fixa även på en spenig Z80.

PDP-11

I veckan blev jag ägare till en riktig milstolpe i satorhistorien, en PDP-11. Förre ägaren till PDPn avslöjade att hans företag köpt den för runt 180000 kr när den var ny. Jag gav en krona. Man köper inte nya datorer som investeringsobjekt direkt.

Datorn stog på en vind på kungsholmen. Jag tänkte att “Med en pirra ska det inte vara några problem att få ner den.” Tänk vad fel man kan ha! Efter att ha lyft ur de båda 8″ diskettenheterna (RX01) blev den någorlunda hanterbar, och säljaren hjälpte mig att bära den ner för trapporna.

Efter att ha lyckats få den ända fram till bakluckan på volvo-kombin skulle den lyftas in. RX01’an låg ovanpå racket, så den la jag in först. Efter en enorm kraftansträngning lyfte jag hela racket från marken och in i skuffen. Nästan. RX01-enheten låg lite snett så racket kom bara in med ett hjul och hakade i plåten på diskettlådan. För att få in racket var jag tvungen att peta med foten för att försöka skjuta undan RX01’an tillräckligt mycket. Det var i detta ögonblicket CPU-lådan bestämde sig för att kasa ut 60cm på sina gejdrar och låsa sig med ett resolut KLICK i ytterläge.

Det måste sett ganska komiskt ut.

Där stod jag i något slags spagat med högerfoten inne i bilen och balanserade en 50-kilos dator med CPUn hängande ute som en fullpackad byrålåda i ena handen, medan jag försökte köra in CPUn med axeln och släppa på gejderspärren med den andra.

Med en sista anstängning lyckades jag till sist få in allt i bilen. Med msuklerna darrande av anspänning och blodet sakta sipprande ur en reva i låret från en diskettstationens skarpa kanter rullade jag hemåt.

Min PDP-11/23 tillverkades att dömma av komponentdatum här och där, någon gång mellan 1973 och 1983.

DEC tillverkade PDP-11 mellan 1970 och 1990. De första åren med separata TTL-kretasar för all logik, precis som alla andra på den tiden. Senare modeller, typ från 1975 hade oftast en mikroprocessor, LSI11. Mitt exemplar är en PDP-11/23 och har generation 2 av denna processor som då kallas F11.

pdp11-cpu-mini.jpg

Ovan är en bild av detta CPU-kort som ansluts till den sk QUBUS-bussen. För den intresserade finns mycket mer information på Wikipedia.

Bland de papper som fanns i det lilla rack-skåpet hittade jag dan lilla kartan som skymtas bakom CPU-kortet ovan. Kartan är ganska lik den karta jag själv ritade över spelet “Adventure” när jag jobbade 3 månader på Data General runt 1991. (Om du läst “Soul of a new machine” vet du att Adventure var särskilt populärt på DG)

Det finns fortfarande en tjock bunt med papper och utskrifter att titta igenom, sen ska jag putsa upp den lite för att fota av den till samlingen. Sen får jag se om jag kan få liv i den. Det finns inga disketter kvar, och hårddisk har den aldrig haft…

Ett litet kul projekt vore att göra ett hårddiskinterface för vanliga IDE-diskar till den… men det får vänta tills alla nixie-projekt är klara.

Retroläsning

Under sommaren läste jag (bland annat) boken Digital Retro, av Gordon Laing. Det är en översiktlig genomgång av 44 olika datorer från 70- och 80-talet.

Boken är rikt illustrerad med massor av bilder på varje dator och pryder sin plats på varje “kaffebord”.

digital-retro-mini.jpg

Allt är dock inte perfekt. Urvalet verkar lite tveksamt ibland, med en klar övervikt av brittiska datorer. (Inte en ABC-80 eller Compis i hela boken!) Vissa av bildtexterna stämmer dåligt med bilderna, särskilt när det handlar om anslutningar som ibland rabblas upp utan att det går att identifiera vilken port det talas om.

Ibland önskar man lite fler bilder av varianter på datorerna, tex. C64 som åtminstone borde avbildas som ursprunglig modell, “cost-reduced” C64c och C64G, eller Atari ST som kunde visat såväl 520 ST som Mega.

Vissa datorer som beskrivs är inte alls avbildade, tex Amiga 1000 där det visas en Amiga 500! Eller Macintosh, där bilderna visar en Macintosh plus.

Jag skulle gärna se en rad uppföljare till den här boken, där författaren utgår från en tillverkare och visar upp alla modeller med mycket tekniska detaljer.

Jag rekommenderar Digital Retro till alla som var med på den tiden eller har ett intresse för gamla “burkar”.

Boken har en egen webbplats här.

Optimerad klocka

Koden till drivningen av IV-18-displayen på min sovrumsklocka är numera optimerad. Den ursprungliga C-koden var snyggt skriven och använde structar och bitfält för att bli tydlig, lättläst och enkel att ändra. Det senare inte minst viktigt, eftersom displayen i labbuppkopplingen är ansluten annorlunda än den i målsystemet.

Problemet med bitfält (och pekare) på en 8-bitars PIC-processor är att det inte passar så bra på en minnesmodell som är tänkt för enkla assemblerprogram, och dessutom är av Harward-arkitektur, vilket innebär att program- och dataminne har helt olika adressrymd. Dettta gör att processorn kan hämta data och operation samtidigt, men passar inte så bra till språket C.

Resultatet av denna mis-match blev att mitt 200-raders C-program (kommentarer och tomma rader medräknade) översattes till över 2000 rader assembler, varav det mesta var kod för att hitta bittarna i minnet. Prestanda blev lite lidande. Displayen uppdaterades ca 500ggr/s, vilket nog är sisådär 5 gånger snabbare än nödvändigt.

Optimering var således av nöden. Jag ville dock inte göra avkall på ändringsbarheten, så kodgenerering var ett bra alternativ.

Mappning mellan bitar och segment och galler, samt hur segmenten ska kombineras till symboler sker i en XML-fil.

<vfd>
<segments>
  <segment nam="a" bit="15">
  <segment nam="b" bit="13">
  ...
  <segment nam="dp" bit="4">
</segment>

<grids>
  <grid nam="g1" bit="17">
  ...
</grid>
<symbols>
  <symbol nam="0">
    <segment nam="a">
    <segment nam="b">
    <segment nam="c">
    <segment nam="d">
    <segment nam="e">
    <segment nam="f">
  </symbol>

</symbols>
   ...
</vfd>

Denna tolkas av ett litet perl-program som genererar en .h-fil med macro-definitioner.

#define GRID_g1_a 0x00
#define GRID_g1_b 0x00
#define GRID_g1_c 0x01
...

#define SEGMENT_a_a 0x00
#define SEGMENT_a_b 0x40
#define SEGMENT_a_c 0x00
...

#define SYMBOL_0_a 0x07
#define SYMBOL_0_b 0x70
#define SYMBOL_0_c 0x00
...

Nu spelar det inte längre så stor roll och macro-definitionerna blir oläsbara, eftersom facit finns i form av XML-filen.

Resultatet då?

Fortfarande 200 rader C översätts till 200 rader assembler. Tiden för att ladda ner programmet i processorn har krympt från knappt 15 s till drygt 4. Alla segment lyser när de ska, liksom alla sifffror.

Uppdateringsfrekvensen har gått från 500Hz till drygt 2000Hz.

Resultatet blev en klar förbätttring på alla punkter. Kostnaden var en lite mer komplicerad byggprocess.