CODING ★ Interrupt-Kursus für den CPC v1|CPC Amstrad International) ★

Interrupt-Kursus für den CPC v1 (CPC Amstrad International)
★ Ce texte vous est présenté dans sa version originale ★ 
 ★ This text is presented to you in its original version ★ 
 ★ Este texto se presenta en su versión original ★ 
 ★ Dieser Text wird in seiner Originalfassung präsentiert ★ 

Einen Moment mal!

Der vorliegende Kursus soll dem Computerbenutzer das breite Feld der Interrupt-Möglichkeiten erschließen, ohne die eine effektive Programmierung heutzutage kaum noch denkbar ist. Um sowohl dem Interrupt-Einsteiger als auch dem Assembler-Bewanderten eine Hilfe zu bieten, soll alles Wissenswerte von der Pike auf erklärt werden. Beispielprogramme demonstrieren die praktischen Anwendungsmöglichkeiten.

Zunächst stellt sich natürlich für den Einsteiger die Frage, was ein Interrupt überhaupt ist. Wenn man einmal von der schlichten Übersetzung des Wortes “Interrupt“, also “Unterbrechung“, ausgeht, kommt man der Wahrheit schon ein großes Stück näher. Ein Interrupt ist tatsächlich eine Unterbrechung, nämlich eine, meistens von einem Hardwarebaustein ausgelöste, regelmäßige Unterbrechung des laufenden Programms zugunsten eines

Interrupt-Unterprogramms.

Dieses wird vollständig abgearbeitet, bevor das unterbrochene Hauptprogramm an der Stelle weitergeführt wird, an der es verlassen wurde. Ein Interrupt kann aber auch eine softwaregesteuerte Unterbrechung (Event) sein, worauf wir aber noch an späterer Stelle genauer eingehen werden. Der größte Vorteil, den eine Programmierung mit System-Interrupts bietet, liegt darin, daß das CPC-Betriebssystem deren Verwaltung vollständig übernimmt. Der Programmierer wird entlastet, da zugehörige Unterprogramme automatisch aufgerufen werden. So wird das Hauptprogramm nur für die unbedingt notwendige Zeit unterbrochen, denn die Abfragen für einen bedingten Aufruf des Unterprogramms entfallen.

Wann sind Interrupts sinnvoll?

Die Interrupt-Programmierung ist vor allem für schnelle und gleichmäßig auftretende sowie für immer wiederkehrende Aktionen geeignet; hierzu zählen die flimmerfreie Bewegung eines Sprites, das Scrollen von Bildschirmteilen oder schnelle Programmzähler wie zum Beispiel eine Uhr. Die Interrupts ermöglichen aber auch den Einstieg in völlig neue Sphären der Programmierung wie Split-Screens, das heißt die simultane Darstellung verschiedener Bildschirmmodi. Auch die gleichzeitige Präsentation aller 27 Farben, die selbst in der Maschinensprache ohne Interrupts nicht ohne weiteres gelingt, läßt sich damit realisieren. Des weiteren sind Musikstücke, die parallel zu anderen Programmprozeduren liegen (man denke dabei nur an die vielen verschiedenen Spielprogramme), ohne so eine Programmierweise nicht umzusetzen.

Die BASIC-Interrupts

Das CPC-BASIC bietet nun auch die Möglichkeiten für eine ziemlich leistungsfähige Interrupt-Programmierung. So kann es optimal als Einstieg für eine spätere Programmierung in Assembler beziehungsweise Maschinensprache genutzt werden. Zum Teil gibt es sogar einzelne Übereinstimmungen der Befehle zwischen dem BASIC und der Assemblcrsprache. Um einen Überblick zu schaffen, sollen die für die BASIC-Interrupt-Programmierung relevanten Befehle erst einmal aufgelistet werden. Die komplette Palette an Interrupt-Befehlen ist mit nur fünf Anweisungen abgedeckt.

  • AFTER
  • EI
  • EVERY
  • DI
  • REMAIN

Aber zunächst muß an dieser Stelle noch auf einige Grundlagen beziehungsweise ein paar Absonderlichkeiten der BASIC-Interrupt-Programmierung eingegangen werden. Geben Sie dazu Listing 1 ein.

Das Programm gibt in einem Interrupt-Unterprogramm fortlaufend fünf Zahlen pro Sekunde auf dem Bildschirm aus, wobei jeweils ein kurzer Ton erklingt. Das Hauptprogramm läßt durch Zufallszahlen die Farbe des Bildrandes (Border) ändern. Der flackernde Bor-der ist also ein Indikator für die Aktivität des Hauptprogramms, während die Zahlenausgabe und der Ton Unterprogrammaktivitäten beziehungsweise deren Geschwindigkeit anzeigen. Nun halten Sie das Programm durch einmaliges Drücken der BREAK-Taste an und warten einen Augenblick. Danach lassen Sie das Programm durch Drücken einer beliebigen Taste weiterlaufen. Sie werden überrascht sein! Wiederholen Sie nun dieselbe Prozedur, verlassen das Programm dieses Mal aber (durch mehrfaches Drücken der BREAK-Taste). Nachdem ein wenig Zeit verstrichen ist, setzen Sie das Programm durch den Befehl CONT fort. Beide Male konnte man nach dem Fortfahren im Programm beziehungsweise nach dem Wiedereinstieg beobachten, daß nur noch Unterprogrammaktivitäten auftraten, die aber um so schneller. Das Unterprogramm holte sozusagen die Aktionen, die seit dem Unterbrechen fällig gewesen wären, wieder auf. Diese Tatsache läßt sich damit erklären, daß der computerinterne Interrupt-Zähler, der für die Anzahl der Aufrufe von Interrupt-Unterprogrammen verantwortlich ist, weitergelaufen ist. Das sollte bei jeder Art von Interrupt-Programmierung beachtet werden. Nun fügen Sie einmal in dem Beispielprogramm (Listing 1) folgende Zeile ein:

75 CALL &BB06

Dieser Call wartet, genau wie der Call &BB18, auf einen Tastendruck; die altbekannte “Press any key“-Routine. Jetzt starten Sie das Programm und drücken nach einiger Zeit eine Taste. Wie Sie sehen, läuft der Interrupt-Zähler also auch bei so einem Programm-stop weiter. Das kann natürlich zu bösen Überraschungen führen, wenn es bei der Programmierung übersehen wird.

Im folgenden sollen die einzelnen BASIC-Interrupt-Befehle anhand von praxisnahen Bei spiel Programmen erläutert werden. Das erscheint sinnvoller, als die sonst üblichen, zumeist sinnlosen Erklärungsprogramme, die das Eintippen kaum lohnen, zu verwenden. So kann auch schon eine Möglichkeit der späteren Befehlsanwendung aufgezeigt werden. Zunächst wollen wir uns dem Befehl AFTER zuwenden. Geben Sie dazu bitte Listing 2 ein und starten cs.

Die Zeile, auf die wir unser Augenmerk richten wollen, ist die Zeile 170, da dort der AFTER-Bcfchl auftritt. Was bewirkt nun dieser Befehl? Zuerst einmal die nüchterne Syntax:

AFTER (Zeit), (Interruptnummer)

GOSUB (Zeilennummer)

Die AFTER-Anweisung bewirkt, daß nach einer bestimmten Zeit (Parameter Zeit), angegeben in 1/50 Sekunden, automatisch ein bestimmtes Unterprogramm EINMALIG aufgerufen wird. Der Parameter Zeilennummer hat den gleichen Effekt, als ob genau in diesem Moment ein GOSUB im Programm gestanden hätte. Für die Zeit kann man Werte bis 32767 einsetzen, das entspricht in etwa einer Wartezeit von elf Minuten. Der Parameter Interrupt-Nummer, oft auch Zeitgeber genannt.

weist der AFTER-Anweisung einen eigenen Zähler zu. Man kann bis zu vier dieser Zähler (0 bis 3) einsetzen, wobei jeder Zähler einem eigenen Interrupt-Unterprogramm zugeordnet werden kann. Diese Interrupt-Zähler unterscheiden sich in ihren Prioritätsstufen, Zähler 3 hat die höchste und Zähler 0 die niedrigste Dringlichkeit. Wir wollen noch einmal darauf hinweisen, daß ein BASIC-Interrupt einen laufenden Befehl NICHT unterbricht, zum Beispiel auch nicht Befehle wie INPUT oder CALL &BB06!

In unserem Beispielprogramm wird nach zehn Sekunden (Zeitparameter: 500) das Unterprogramm ab Zeile 280 aufgerufen. Diese zehn Sekunden stellen das Zeitlimit dar, das man hat, um die Buchstaben einzutippen (solange wird nur das Hauptprogramm durchlaufen). Am Ende der Unterroutine könnte jetzt zwar ein Rücksprung ins Hauptprogramm erfolgen (RETURN), in unserem Fall jedoch wird das Programm beendet.

Die Befehle DI, EI, EVERY, und REMAIN werden in Listing 3 gemeinsam behandelt. Bitte geben Sie das Programm ein, starten Sie es, und weichen Sie mit dem Joystick den Meteoriten aus! Wie gesagt, sind in diesem Beispielprogramm sowohl die Befehle EVERY und REMAIN als auch DI und EI verwendet worden.

Zuerst soll aber auf die allgemeine Funktion der einzelnen Befehle eingegangen werden. Das für die BASIC-In-terrupt-Programmierung wohl wich-

tigste Kommando ist der EVERY-Be-fehl. Seine Syntax ist ähnlich aufgebaut wie die des AFTER-Befehls:

EVERY (Zeit), (Interruptnummer) GOSUB (Zeilennunimer)

Auch die Arbeitsweise des EVERY-Befehls läßt sich mit der des AFTER-Kommandos vergleichen. Nach Verstreichen der im Parameter Zeit ebenfalls in 1/50 Sekunden angegebener

Dauer wird ein Unterprogramm, das durch den Parameter Zeilennummer gekennzeichnet ist, aufgerufen. Der Parameter Interrupt-Nummer kennzeichnet wieder eine von vier Prioritätsstufen beziehungsweise eine von vier parallel laufenden Interrupt-Ebenen, die gleichzeitig eingesetzt werden können. Der große Unterschied besteht nun darin, daß der EVERY-Befehl bis zu seiner Aufhebung immer wieder sein Unterprogramm aufruft. In unserem Programm steuert das EVERY-Kommando den Aufruf und die Geschwindigkeit der scrollenden Meteoriten. Durch Verändern des Zeit-Parameters in Zeile 80 kann die Geschwindigkeit fast beliebig variiert werden, wobei aber darauf geachtet werden muß, daß der Wert 6 nicht unterschritten wird, da ansonsten dem System nicht genügend Zeit zur Ausführung des Hauptprogramms bleibt.

In der nächsten Folge:

  • Die Befehle DI und EI
  • Der Befehl REMAIN
  • Selbstprogrammierte Interrupts

CPCAI, Jens Buri/cd

★ PUBLISHER: CPC Amstrad International
★ YEAR: 1990
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LiCENCE: ???
★ COLLECTION: CPC AMSTRAD INTERNATIONAL 1990
★ AUTHOR: Jens Buri

 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listings:
» CPC-Interruptkurs  v1.1    (CPC  Amstrad  International)    GERMANDATE: 2020-04-22
DL: 143
TYPE: ZIP
SiZE: 7Ko
NOTE: 40 Cyls
.HFE: Χ

» CPC-Interruptkurs  v1.1    (CPC  Amstrad  International)    LISTING    GERMANDATE: 2020-05-27
DL: 149
TYPE: PDF
SiZE: 158Ko
NOTE: 4 pages/PDFlib v1.6

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Coding » Clefs2 07 - Logiciel Interne Vect Disque
» Coding » Fdc - 08 - Test Interrupt (SOS Programmeurs)
» Coding » Clefs2 08 - Logiciel Interne Adr Rom Disk
» Coding » Clefs2 09 - Logiciel Interne Table Var Systeme
» Coding Src's » SUB INVERT (CPC Amstrad International)
» Coding » Fdc - 10 - Affichages Causes d'Interruptions Secondaires du Fdc (SOS Programmeurs)
Je participe au site:
» Vous avez des infos personnel ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 511 millisecondes et consultée 519 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.