MSE

Aus C64-Wiki
Zur Navigation springenZur Suche springen
MSE
MSE
Entwickler N. Mann, D. Weineck; M. Pousen
Verleger Markt & Technik
Release 1985
Lizenz Vollversion
Plattform(en) C64
Genre Eingabehilfe 64'er-Magazin
Steuerung Icon tastatur.png
Medien Icon disk525 1.png, Listing
Sprache(n) Sprache:englisch
Information Versionen 1.x, 2.x und 3

Der MSE ist die Abkürzung für MaschinenSpracheEditor und ist ein Programm für den C64, das der zur Eingabeerleichterung von Maschinenspracheprogrammen dient. Es wurde in der Computerzeitschrift 64'er erstmals in Ausgabe 02/1985[1] vorgestellt.

Benutzung[Bearbeiten | Quelltext bearbeiten]

Anstelle von langen DATA-Zeilen oder Assembler-Listings (z.B. Hypra-Ass) werden zweistellige Hexadezimalzahlen eingegeben. Zeilenweise Prüfsummen sichern die Eingabe gegen Tippfehler ab. Der MSE selber wurde als BASIC-Programm mit Maschinenspracheroutine veröffentlicht. Es sind verschiedenen MSE-Versionen erschienen.

Eingabedatenbeispiel für MSE V1.0: (ergibt kein lauffähiges Programm!)

0801: 1c 08 c4 07 8b 20 c2 28  48
0809: 36 35 35 33 34 29 b2 37  53

Eine verbesserte Version des MSE, die Version 2.0, erschien in der 64'er-Ausgabe 07/1990[2]. Durch die Verwendung von fast allen Buchstaben in einer 4-stelligen Buchstaben-Zahlen-Kombination waren die MSE-Listings schlanker.

Eingabedatenbeispiel für MSE V2.0: (ergibt kein lauffähiges Programm!)

0801: apdl fa35 fhxc llw6 7777 75e7  bu
0810: vn3t lbdy b77x qtgw pp7x ikdd  ft

Wegen eines Fehlers in der Prüfsummenroutine des MSE V2.0 erschien in der 64'er-Ausgabe 5/1991 ein Patch[3]. Der Fehler konnte in äußerst seltenen Fällen dazu führen, dass unterschiedliche Zeilen die identische Prüfsumme haben, also eine Abweichung aus einem leicht zu übersehenden Unterschied (z.B. "i" statt "j") aufweisen.
Die korrigierte Version mit dem Patch nannte sich dann MSE V2.1. Alle drei MSE-Versionen sind inkompatibel zueinander!

MSE-Version gültig für Ausgaben
1.0 2/85 bis 6/90
2.0 7/90 bis 4/91
2.1 5/91 bis 5/94

Ab der 64'er-Ausgabe 06/1994 entfiel das Abtippen der MSE-Listings, da die Programmservicediskette dem Heft monatlich beigelegt wurde.

Für BASIC-Programme leistet das Programm Checksummer vergleichbares.

Technische Details[Bearbeiten | Quelltext bearbeiten]

Prüfsumme MSE V1.0[Bearbeiten | Quelltext bearbeiten]

Der MSE V1.0 berechnet die Prüfsummen mit folgendem Algorithmus (Pseudo-Code)[4]:

tmp = adr & 255
for b in bytes:
  tmp = (tmp + b) << 1
checksum = (tmp >> 8 + tmp & 255 + 1) & 255

MSE V2.x[Bearbeiten | Quelltext bearbeiten]

MSE V2.x kodiert jeweils 5 Bit pro Zeichen, so dass 32 Zeichen notwendig sind. Angefangen mit a-z und 0-9 (insg. 36 Symbole) wurden 0 und 1 mutmaßlich weggelassen, um Verwechslungen mit den Buchstaben i, l und o zu vermeiden, 8 und 9 waren dann auch überflüssig. a-z kodieren die 5 Bit Werte 1 bis 26. Die Werte 27-31 werden durch die Symbole 2-6 kodiert, die 7 steht für 0. (Beispielimplementierung)

Die Prüfsummen werden in 2.0 und 2.1 nach einem ähnlichen Schema berechnet: Die Adresse zu Beginn der Eingabezeile wird für den Startwert hergenommen. Anschließend wird für jedes Byte der Zeile erst die 8-Bit Zwischensumme 1 Bit nach links gerollt (also mit 2 multipliziert und das 9. Bit in Bit 0 geschoben), dann das aktuelle Byte aufaddiert. Die Versionen unterscheiden sich wie folgt:

Prüfsumme MSE V2.0[Bearbeiten | Quelltext bearbeiten]

Startwert: Es werden das Lowbyte der Adresse und ein modifiziertes Highbyte der Adresse (es wird ab 0x1c00+lowbyte gezählt, egal, wie das Highbyte der Startadresse lautet) exklusiv-oder-verknüpft.

Aufaddieren: Die Bytes fließen von rechts nach links in die Prüfsumme ein.

(Beispielimplementierung)

Prüfsumme MSE V2.1[Bearbeiten | Quelltext bearbeiten]

Startwert: Der Startwert ist das Lowbyte der Adresse der Zeile.

Aufaddieren: Die Bytes fließen von links nach rechts in die Prüfsumme ein.

(Beispielimplementierung)

Quellen[Bearbeiten | Quelltext bearbeiten]