APPLICATIONSPROGRAMMATION ★ BASIC-LOGO-TRANSLATOR MK1|CPC MAGAZIN) ★

Basic-Logo-Translator MK1 (CPC Magazin)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 ★ 

Um in Logo programmieren zu können, benötigt man entweder die Schneiderfloppy oder ein teures Programm. Logo und Basic zu mischen, war bisher unmöglich. Der Basic-Logo-Trans-lator-MK.1 macht diese Träume wahr. Das Programm funktioniert unter Verwendung einer kurzen Maschinenspracheroutine, die auf ROM-Routinen zurückgreift und deshalb nur auf dem CPC 464 läuft. Umgeht man diese Routine, läuft das Programm auf allen CPCs.

Das Programm arbeitet nach folgendem Prinzip:

  1. Ein Source-Programm in Pseudo-Logo (Pseudo deshalb, weil die Syntax etwas abgeändert wurde) wird eingegeben.
  2. Das Programm erfragt den Bereich, in den das übersetzte Programm geschoben werden soll. Dabei ist der Bereich bis Zeile 2000 gesperrt, da hier der Translator liegt.
  3. Der Translator übersetzt das Programm und schreibt es in den angegebenen Bereich.

Der Editor

Er kennt zwölf Befehle, die nur ihn betreffen, und führt außerdem einen einfachen Befehls-Check durch, ob die benutzten Logo-Befehle überhaupt im Befehlsvorrat enthalten sind. Ist das der Fall, wird der Befehl übernommen, ist er nicht vorhanden, erscheint eine Fehlermeldung.

Hier die zusätzlichen Editor-Befehle: list n (220-240) listet alle Source-Zeilen ab Zeile n. Der Listvorgang kann durch einen beliebigen Tastendruck unterbrochen werden.
edit n (250-260) listet die angegebene Source-Zeile so, daß sie mit COPY zeichenweise übernommen oder verändert werden kann.

delete n (270-280) löscht Source-Zeile n.

new (290) löscht sämtliche Source-Zeilen und startet das

Programm neu.

bye (300) beendet das Programm.

translate (430-540) überträgt das Source-Programm in ein

Basic-Programm (wird noch näher erläutert).

trun (550-560) startet das übersetzte Programm. Achtung:

Dabei wird das Source-Programm vollständig gelöscht.

Wer dies ändern will, muß den RUN- durch einen GOTO-

Befehl ersetzen.

ssave (570) speichert das Source-Programm ab. sioad (580) lädt ein Source-Programm zu einem eventuell schon im Speicher befindlichen hinzu. Damit können mehrere Source-Programme verknüpft werden. Ist keine Verknüpfung erwünscht, sollte zuvor new eingegeben werden, save (590-610) speichert den übersetzten Programmteil als ASCII-Datei ab. Hier muß zweimal die kleine ENTER-Taste gedrückt werden.

comand (810) gibt alle vorhandenen Editor- und Logo-Befehle auf dem Bildschirm aus.

Der letzte Befehl ist einfach ein der Eingabe vorangestelltes Leerzeichen. Dieses bewirkt, daß die Eingabe keinem Syntax-Check unterworfen und die eingegebene Zeile bei TRANSLATE direkt als Basic-Zeile übergeben wird. Es ist auf diese Weise möglich, Basic-Zeilen direkt in das Logo-Programm einzubauen.

Der TRANSLATE-Befehl

Zunächst wird erfragt, in welchem Zeilenbereich und mit welchem Zeilenabstand Basic-Zeilen generiert werden sollen. Als Untergrenze erlaubt das Programm keine Eingabe kleiner 2000, da es sich sonst selbst zerstören wurde (430-470). Dann wird eine Logo-Initialisierungszeile eingefügt (480-500). Diese befindet sich in DATA-Zeile 1160. Es 

sind auch mehrere solcher Initialisierungszeilen möglich. Dazu muß nur die 1 in Zeile 1160 in die neue Anzahl geändert und die neuen Zeilen in DATAs ab Zeile 1160 abgelegt werden. So könnte z.B. noch eine Routine zur Darstellung der Turtle eingefügt werden.

In Zeile 510 beginnt dann die eigentliche Obersetzarbeit. Zunächst wird eine Source-Zeile eingelesen und, falls das erste Zeichen ein Leerzeichen sein sollte, direkt übergeben (520). Wenn nicht, wird die Nummer des Befehls gesucht (530). Dann wird die entsprechende Obersetzerroutine angesprungen (540). In den Übersetzerroutinen wird ein Syntax-Check durchgeführt und dem String bb$ die entsprechende Basic-Zeile übergeben.

Weiter geht es mit Zeile 960. Hier wird sowohl die Source- als auch die Basic-Zeile auf dem Bildschirm ausgegeben und die Basic-Zeile mittels der Maschinencoderoutine erzeugt. Dann wird noch die Source-Zeilennummer um eins erhöht sowie die nächste Basic-Zeilennummer festgelegt und geprüft, ob eine der Nummern bereits das Ende überschreitet. Ist dies der Fall, so geht es zurück zum Editor, wenn nicht, wieder zu Zeile 520.

Die Error-Routine

Die Error-Routine befindet sich in den Zeilen 860-920. Um einen Error auszuführen, muß man nur der Variablen er-ro die Nummer des entsprechenden Errors übergeben und dann nach 860 springen. Will man einen zusätzlichen Error einbinden, so muß man hier nur ON erro GOTO um die Zeilennummer der neuen Error-Routine erweitern. Es empfiehlt sich, für den neuen Error entweder eine Zeile zwischen den vorhandenen Errors (z. B. 915) oder aber eine im freien Zeilenbereich von 1170-1199 zu wählen.

Wie einfach es ist, einen neuen Befehl einzufügen, zeigt folgendes Beispiel: Es soll der Befehl ct eingefügt werden, der nur das Textfenster löscht.

1. In Zeile 840 wird an das Ende der DATA-Zeile ct (mit

Komma abgetrennt) angehängt.

2. In Zeile 540 kommt an das Ende die neue Zeilennummer

(in unserem Fall 802).

3. Die neue Routine wird ab der angegebenen Zeile (802)

angefügt. Sie lautet in unserem Fall:

802 GOSUB 930: IF lan 2 THEN erro=1: GOTO 860

804 bb$=”CLS”: GOTO 960

In Zeile 802 wird zunächst die Routine bei 930 aufgerufen. Diese vernichtet unnötige Leerzeichen, stellt dann fest, wie viele Leerzeichen (und damit wie viele Wörter) die Befehlszeile noch besitzt und wie lang sie ist. In unserem Fall muß die Länge 2 betragen (nur ct), sonst ist der Befehl falsch eingegeben und kann nicht übersetzt werden, die Fehlerroutine wird angesprungen. In Zeile 804 wird der Befehl ct in den Basic-Befehl CLS übersetzt bzw. dem Basic-Befehlsstring bb$ übergeben und dann die Einbauroutine in Zeile 960 angesprungen.

Sollte einmal eine Variable bzw. ein Wert übergeben werden - was ja beides möglich ist -, so schauen Sie bitte bei einem Befehl wie z.B. fd nach, wie dies zu realisieren ist. Sie werden feststellen, daß es ebenfalls sehr einfach geht. In der Variablenliste sind die Namen und die Verwendung der Variablen angegeben.

1000 'Funktionstastenpuffer auf 300 Zeichen erweitern
1010 MEMORY &A3FF: RESTORE 1000: sum=0: FOR nn=&A400 TO &A40F
1060 CALL &A400: RETURN: 'Funktionstastenpuffer neu initialisiert
1070 DATA 01,10, A4,21, 2C, 01, CD, 15, BB, C9,00,00, 00, 00, 00, 00, 0369

Die Zeilen 1040,1050 und 1080 bis 1180 sind zu löschen.

Das folgende kleine Beispiel zeigt eine Anwendung. Starten Sie es nach der Übersetzung mehrfach mit GOTO. (Den Translator kann man dann wieder mit GOT0130 starten.)

pd fd 100 It 45

bk (100*sqr(2)) rt 45 fd 100 It 90 fd 100 It 45

bk (50*sqr(2)) rt 90

bk (50*sqr(2))

It 90

fd (100*sqr(2)) rt 45 bk 100

Mit folgenden Änderungen funktioniert das Programm auch auf dem CPC 664 und dem CPC 6128. Dann ist allerdings jede Zeile beim Übersetzen mit der kleinen ENTER-Taste zu bestätigen.

490 nn-nn+1: READ bb$: PRINT 1,<enter>": PEN 0: KEY 139, MID$ (STR$(z), 2) + " ” + bb$ + CHR$ (13) + ”GOTO 500” + CHR$ (13): END
500 PEN 1: z=z+sw: IF z<ze THEN IF nn<n THEN 490
960 PRINT nn; a$: PEN 3: PRINT z; bb$: PEN 0: KEY 139, MID$ (STR$(z), 2) + ” ” + bb$ + CHR$ (13) + "GOTO 970” + CHR$ (13): END

Markus Kohm, CPC Magazin

★ PUBLISHERS: CPC Magazin , CPC Magazin Codex
★ YEAR: 1986
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LICENCE: LISTING
★ AUTEUR: Markus Kohm

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listings:
  » Basic-Logo-Translator  Mk1    (464)    (CPC  Magazin)    GERMANDATE: 2020-05-29
DL: 2 fois
TYPE: ZIP
SIZE: 7Ko
NOTE: 40 Cyls
.HFE: NON

  » Basic-Logo-Translator  Mk1    (6128-664)    (CPC  Magazin)    GERMANDATE: 2020-05-29
DL: 2 fois
TYPE: ZIP
SIZE: 6Ko
NOTE: 40 Cyls
.HFE: NON

Je participe au site:
» Newfile(s) upload/Envoye de fichier(s)
★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Applications » 3D Megacode
» Applications » DDI-1 Firmware: The Complete CPC 464 DISC Operating System ROM Specification
» Applications » Variable Dump (Computing With the Amstrad)
» Applications » Graphic - Split Modes (Computing With the Amstrad)
» Applications » XLISP/Prolog
» Applications » Nightingale Software - Amslink

QUE DIT LA LOI FRANÇAISE:

L'alinéa 8 de l'article L122-5 du Code de la propriété intellectuelle explique que « Lorsque l'œuvre a été divulguée, l'auteur ne peut interdire la reproduction d'une œuvre et sa représentation effectuées à des fins de conservation ou destinées à préserver les conditions de sa consultation à des fins de recherche ou détudes privées par des particuliers, dans les locaux de l'établissement et sur des terminaux dédiés par des bibliothèques accessibles au public, par des musées ou par des services d'archives, sous réserve que ceux-ci ne recherchent aucun avantage économique ou commercial ». Pas de problème donc pour nous!

CPCrulez[Content Management System] v8.7-desktop/cache
Page créée en 091 millisecondes et consultée 841 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.