APPLICATIONSPROGRAMMATION ★ STRINGS-EIN SICHERES VERSTECK (HAPPY COMPUTER) ★

Strings-ein sicheres Versteck (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 ★ 

Strings — ein sicheres Versteck

Maschinencode-Programme in einer Zeichen kette abzulegen und mit dem Varia-blen-Descriptor (@) aufzurufen, erlaubt eine sehr komfortable Programmierung.

Viele unter Ihnen kennen Strings als Speicherplatz für Maschinencode-Programme. Ist doch dort ein Überschreiben unmöglich. Im Listing 1 finden Sie als Beispiel eine Routine, die einen Pfeifton ausgibt. In Assembler sieht sie so aus:

LD A,7
JP &BB5A (&BB5A ist die Tonausgabe-Routine)

Da sich beim häufigen Benutzen des CALL-Aufrufs der Speicherplatzbedarf für die Formel schnell erhöht, versuchen manche Programmierer, dies zu umgehen, indem sie einmal die Adresse des Strings berechnen und im übrigen als Variable angeben. Wie das geht finden Sie im Listing 2,

Diese Methode ist aber sehr gefährlich, da eine meist unvermutet auftretende Garbage Collection die Strings neu ordnet und damit die Startadresse verschiebt. Der CALL-Aufruf geht dann ins Leere und führt zum »Aussteigen« des Computers.

Abhilfe schafft da ein geradezu simpler Trick. Verstehen kann ihn jeder, der den Aufbau des Variablen-Descriptors kennt. Bei »PRINT @ a$« wird nämlich bekannterweise nicht die Adresse des Strings angegeben, sondern die Adresse des zugehörigen Descriptors. Und zwar in folgendem Format:

1. Byte: Stringlänge

2. Byte: Lowbyte der Stringadresse

3. Byte: Highbyte der Stringadresse

Mit »CALL @a$« würde die String-Descriptor-Adresse aufgerufen und als Maschinencode interpretiert werden.

Mit einem Trick kann man das umgehen. Die Stringlänge wird auf 195 Bytes festgelegt, was gleichzeitig den Z80-0pcode für den JP-Sprungbefehl darstellt. Wird der Descriptor aufgerufen, interpretiert die CPU den Stringdescriptor als »JP String«. Da in dem String der Maschinencode abgelegt ist, kann das Programm nun ordnungsgemäß abgearbeitet werden. Als Programm sieht man das in Listing 3.

Eine Einschränkung muß man aber dabei beachten: Da der Basic-Interpreter den String nach Belieben im Speicher hin-und herschieben kann, darf die Maschinencode-Routine keine absoluten Adressen benutzen. So sind folgende Befehle beispielsweise verboten:

LD HL,(START+ 2), wobei START für die Programmstart-Adresse steht

CALL $+20, $ symbolisiert den Stand des Programmzählers

Absolute Sprünge und Lesebefehle aus dem Programm sind hingegen erlaubt:

CALL &BB5A

LD HL,(&C000)

JP &0000

Der Vorteil der Belegung von Strings mit Maschienprogram-men liegt einerseits in der schnelleren Verfügbarkeit der Programme (ein INPUT # 9-Befehl genügt schon), andererseits darin, daß keine Gefahr besteht, daß mehrere Maschinenprogramme im gleichen Adreßbereich zusammenstoßen.

Martin Kotulla, HC

★ PUBLISHER: Happy Computer
★ YEAR: 1986
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LiCENCE: LISTING
★ COLLECTION: HAPPY COMPUTER-SCHNEIDER SONDERHEFT
★ AUTHOR: Martin Kotulla
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» Strings-Ein  sicheres  Versteck    (Happy  Computer-Sonderheft)    GERMANDATE: 2021-03-19
DL: 170
TYPE: ZIP
SiZE: 3Ko
NOTE: 40 Cyls
.HFE: Χ

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

Lien(s):
» Applications » RSX String to Extra bank (Amstrad Action)
» Applications » String Split (Popular Computing Weekly)
» Applications » String Designer (The Amstrad User)
» Applications » Strings Vertauschen (CPC Amstrad International)
» Applications » String-Editor (CPC Amstrad International)
» Applications » String Routine 464 (CPC Amstrad International)
Je participe au site:
» Vous avez des infos personnel, des fichiers que nous ne possédons pas concernent ce programme ?
» 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 664 millisecondes et consultée 737 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.