APPLICATIONSPROGRAMMATION ★ Selbstuntersuchung ★

Call (Happy Computer)Applications Programmation
★ 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 ★ 

Maschinencode-Routinen sind das Salz in der Suppe der selbstgeschriebenen Programme. Will man diese aber willkürlich irgendwo im Speicher ablegen, dann treten einige Probleme auf.

Besonders schnelle Programme, beziehungsweise Unterprogramme, entstehen, wenn man sie in Maschinencode schreibt. Allerdings erfordert solch eine maschinennahe Sprache höchste Sorgfalt bei der Entwicklung. Während man in Basic Unterprogramme mit einem Befehl GOTO < Zeilennummer > aufrufen darf, muß man bei Maschinencode-Routinen die genaue Adresse im Speicher kennen. Sind mehrere Programme geladen, so kann es passieren, daß zwei an der gleichen Adresse stehen.

Gute Maschinencode-Routinen sind deshalb immer so geschrieben, daß sie frei verschiebbar sind. Das erreicht man, indem man absolute Adressen vermeidet. Zum Starten braucht man aber noch die Startadresse. Wie man die aus dem Computer »herauskitzelt«, das lesen Sie hier.

Ein Weg fällt den meisten Z80-Programmierern sofort ein. Man ruft ein Unterprogramm auf, das die Rücksprungadresse vom Stack holt und in ein Register überträgt. Listing 1 (Basic-Lader in Listing 2) zeigt solch eine Routine. Nach dem Aufruf der Routine liegt die Startadresse im Speicher an der Adresse 0160 und 0161 hex und kann dort mit »PRINT(PEEK (&0160)+PEEK (&0161)*256)« abgefragt werden. Diese Lösung hat aber einen schwerwiegenden Nachteil. Sie verlangt eine absolute Unterprogrammadresse, was wir ja gerade vermeiden wollten. Folglich wandert sie in die Abteilung P - sprich Papierkorb.

Eine bessere und auch kürzere Routine bietet Listing 3 (Basic-Lader Listing 4) an. Sie macht sich die Eigenschaft der Schneider-Computer zunutze, im Betriebssystem-RAM einen Zeiger auf ein CALL-Unterprogramm oder eine RSX-Routine zu speichern. Beim CPC 464 liegt dieser Zeiger bei AE72 hex, bei den Nachfolgemodellen 664 und 6128 aber an der Adresse AE55 hex. Und das ist der Nachteil. Denn man muß immer die auszulesende Adresse für den Zielcomputer einsetzen. Die Ustings beziehen sich auf den CPC 464. Die Änderungen für die beiden Nachfolgermodelle stehen in Listing 5.

Erst die dritte Lösung entspricht unseren Anforderungen. Sie ist besonders universell, da sie weder absolute Sprünge innerhalb des Programms noch systemspezifische Adressen benutzt. Der Trick beruht auf den ausgeprägten Interruptfähigkeiten der Schneider-Geräte. Die beiden Maschinencode-Befehle »EI« lassen Interrupts zu und »HALT« stoppt alle Prozessoraktivitäten, bis der nächste Interrupt auftritt. Dieser läßt nicht lange auf sich warten, und hinterläßt auf dem Stack »als Geschenk an das Programm« die Rückkehradresse, die gleichzeitig die Programmadresse ist. Allerdings muß der Stackpointer SP mit einem zweifachen »DEC SP« manipuliert werden. Dann kann man aber die Adresse aus dem Register HL übernehmen. Dieses Verfahren beschränkt sich übrigens nicht nur auf den Schneider CPC, sondern läßt sich auf viele andere Z80-Computer übertragen. Listing 6 zeigt das Assembler-Programm und Listing 7 den zugehörigen Basic-Lader.

Martin Kotulla/hg, HC

★ PUBLISHER: Happy Computer
★ YEAR: 1986
★ CONFIG: AMSDOS + 64K
★ LANGUAGE:
★ AUTHOR: Martin Kotulla
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» Call    (Happy  Computer-Sonderheft)    GERMANDATE: 2021-03-11
DL: 182
TYPE: ZIP
SiZE: 4Ko
NOTE: 40 Cyls
.HFE: Χ

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

Lien(s):
» Applications » Hisoft - Turbobasic (CPC Amstrad International)
» Applications » BBC Basic
» Applications » Jetzt geht's rund (CIRCLE Basic-Routine)
» Applications » Strings als Basic-Kommandos
» Applications » Rsx - Nova Basic
» Applications » Microsoft Basic Compiler
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 604 millisecondes et consultée 832 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.