#Klooienmetcomputers

De basis van de 8080: pinnen en interrupts

Arnout van Kempen over rommelen in een digitale wereld.

De 8080 is de eerste echt succesvolle CPU van Intel en in zekere zin daarmee de belangrijkste voorvader van alle pc's. Om een computer pc te kunnen noemen is meer nodig dan de CPU, maar de CPU is wel een van de meest kenmerkende onderdelen.

Een CPU is uiteindelijk een flinke verzameling transistors die werkt op basis van elektrische spanningen die een 0 of een 1 vertegenwoordigen. De pinnen van de CPU zijn de fysieke lijnen naar de buitenwereld. Voor een 8080 gaat het dan om veertig pinnen. Hiervan zijn er zestien in gebruik om geheugen te adresseren, acht voor input of output van data, enkele pinnen om aan te geven of data gelezen of geschreven wordt, of gebruik wordt gemaakt van outputpoorten, kloksignalen en stroomvoorziening. Ten slotte zijn er drie belangrijke pinnen voor hardware interrupts: INT, INTA en RESET.

Deze pinnen hangen nauw samen met de manier waarop de 8080 werkt. Op het niveau van de electronica is dat interessant, maar wij beperken ons tot het abstractieniveau van programma's en data. Een CPU communiceert met de buitenwereld door op de zestien adrespinnen een adres te plaatsen, ergens tussen 0 en 2^16-1, wat in totaal een adresbereik geeft van 65.535 adressen. Korter geschreven, een 8080 kan 64K adresseren. Nadat het adres op de adresbus is geplaatst, wordt een signaal op de pinnen gezet om aan te geven of geheugen of outputpoorten worden benaderd en of data wordt geschreven of gelezen. Als wordt geschreven, plaatst de CPU de data op de acht data-pinnen en als wordt gelezen,  verwacht de CPU dat het geheugen die data op de acht data-pinnen plaatst. De woordlengte van de 8080 is dus extern acht bits, wat een maximale waarde van 255 betekent.

Omdat de 8080 de Von Neumann-architectuur volgt, maakt het geheugen geen onderscheid tussen data en programma. De ingelezen byte kan een instructie zijn of een waarde. Programma's zijn geplaatst op adressen in het geheugen, data op (andere) adressen. Onder normale omstandigheden voert de 8080 een instructie uit, verhoogt het adres waarvandaan wordt gelezen en leest de volgende instructie. Dat herhaalt zich zolang de CPU van stroom wordt voorzien in een vast tempo, dat door het kloksignaal wordt bepaald. Als de CPU informatie van andere apparaten, zoals een toetsenbord, nodig heeft, kan dat worden bereikt door in een soort wachtlus te gaan waarbij dat randapparaat steeds wordt gevraagd of er data is om te lezen. Dit wordt polling genoemd. Simpel, eenvoudig te programmeren en extreem inefficient. Immers, zolang de computer bezig is met polling kan niets anders worden gedaan en als je op een traag apparaat als een toetsenbord zit te wachten is de CPU dus grotendeels idle.

De oplossing hiervoor is de interrupt. Bij een 8080 werkt dat via de pinnen INT en INTA. Een apparaat, zoals een toetsenbord, meldt zich bij de CPU door een signaal op pin INT te plaatsen. De CPU gaat nu automatisch de lopende instructies pauzeren en plaatst een signaal op pin INTA (Interupt Acknowledge) om aan het aangesloten apparaat te laten weten klaar te zijn voor een instructie. Deze instructie bestaat uit een code die verwijst naar de interrupttabel van de 8080. Dit is een tabel met korte stukjes geheugen, waar veelal een spronginstructie staat naar een specialistisch stuk software, de interrupt handler, die vervolgens de communicatie met het externe apparaat afhandelt. De 8080 kent een interrupttabel met in totaal acht interruptvectors naar dergelijke handlers. Op deze manier kan een erg efficiënte communicatie met externe apparaten worden verkregen. Immers, de 8080 doet gewoon zijn werk en pas als de gebruiker een toets indrukt wordt de toetsenbord-data-ontvanger gestart, de data wordt ontvangen en de CPU keert terug waar deze was gebleven voor de interrupt.

Twee zaken zijn hier nog interessant. Vector 0 kan worden getriggerd via een normale interrupt, maar ook door een signaal op de RESET-pin. In dat geval wordt niet gewacht op een INTA en evenmin wordt nu teruggekeerd naar het lopende programma als de handler klaar is. Effectief betekent dat dus een herstart van de CPU. De naam RESET onderstreept dat.

Nog interessanter: alle interrupt handlers kunnen via een signaal op INT worden getriggerd, maar de 8080 kent ook een programmacommando om hetzelfde effect te bereiken: RST x

De X staat hier voor vector 0 tot en met 7. Het commando RST 0 levert dus een softwarematige reset op en met de andere zeven mogelijkheden zou je, bijvoorbeeld, afhandeling van het toetsenbord kunnen afdwingen, zonder dat een toets is ingedrukt.

Is dat handig? Dat hangt erg af van de manier waarop je computer is gebouwd en hoe de software is ingericht. Het softwarematig initiëren van de toetsenbordhandler is niet zo nuttig wellicht. Maar je zou de RST-instructie kunnen gebruiken als een snelle manier om bepaalde specifieke routines aan te roepen. CP/M maakte daar nog geen gebruik van, onder MS/DOS zou deze techniek veel worden gebruikt en in moderne besturingssystemen is het vanzelfsprekend geworden.

Wie mee wil doen met #klooienmetcomputers kan dat doen via GitHub. Maak een account op github.com en zoek naar Abmvk/kmc. Het account Abmvk volgen kan ook. Lezers zijn vrij te gebruiken wat ze willen en om zelf zaken toe te voegen of aan te passen, vragen te stellen of commentaar te leveren.

Arnout van Kempen di CCO CISA is directeur compliance & risk bij aaff, de fusieorganisatie van Alfa en ABAB. Hij schrijft op persoonlijke titel.

Gerelateerd

reacties

Reageer op dit artikel

Spelregels debat

    Aanmelden nieuwsbrief

    Ontvang elke werkdag (maandag t/m vrijdag) de laatste nieuwsberichten, opinies en artikelen in uw mailbox.

    Bent u NBA-lid? Dan kunt u zich ook aanmelden via uw ledenprofiel op MijnNBA.nl.