PofoWiki

Die ultimative Informationsquelle zum ATARI Portfolio

Benutzer-Werkzeuge

Webseiten-Werkzeuge


software:diy:andere:machinecodetext

Dies ist eine alte Version des Dokuments!


Maschinensprache ohne Programmiersoftware

Zu beginn der ATARI-Portfolio-Ära waren Interfaces, Speicherkarten und Software schwer erschwinglich, besonders Programmier-Software. Programmierwillige waren auf Stapelverarbeitungsdateien und die Tabellenkalkulation beschränkt. Doch gibt es tatsächlich Möglichkeiten mit dem DIP-DOS und den eingebauten Anwendungen Software zu schreiben. Dies ist allerdings nicht ganz problemlos und es gibt Einschränkungen.

Das Problem:
Programme sind als Binär-Code gespeichert, Werte zwischen 0 und 255 sind nötig, die Tastatur liefert allerdings nicht alle nötigen Zeichen. Diese müssen mit Hilfe der numerischen Tastatur als ASCII-codes (durch Drücken von Fn_N ändert sich der Cursor zu einem blinkenden Unterstrich und Ziffern sind mit den rot beschrifteten Tasten einzugeben) eingegeben werden.

Damit ist das Problem aber nicht gelöst, viele der so eingegebenen Codes werden von der DOS-Befehlszeile und vom Texteditor als Sonderzeichen interpretiert, die bei der Eingabe gewisse Funktionen auslösen (z.B: 0Dh wird als Zeilenumbruch interpretiert, DOS-Befehlszeilen werden somit beendet, der Text-Editor macht daraus ein 0Dh 0Ah und macht den Code unbrauchbar).

Um dies zu umgehen muß der gewünschte Code geändert werden. Soll ein Prozessor-Register den Wert 13 (0Dh) enthalten muß man zum Beispiel erst den Wert 14 übergeben und ihn nacher um 1 reduzieren. Dies ist natürlich nicht gerade elegant, aber der einzige Weg. Um sinnvoll zu arbeiten sollte man sich als erstes ein Tool schreiben, mit dem das Eingeben von Bytes jeglichen Wertes möglich ist. Aber dazu später.

Zunächst ein paar Beispiele um zu beweisen, daß es geht und um ein Bißchen Motivation zu bringen.

Mit dem ECHO-Befehl

In der DOS-Befehlszeile schreiben wir mit Hilfe des ECHO-Befehls ein Programm das die Meldung “Hallo!” herausgibt. Der Programm-Code ist wie folgt (dezimal):

180 009 186 009 001 205 033 205 032 072 065 076 076 079 033 036

Tippen sie ECHO, gefolgt von einer Leerstelle, schalten sie die Tastatur auf numerisch um (Fn_N). Nun halten sie die Alt-Taste gedrückt solange sie die drei-stelligen ASCII-Codes eingeben.

Alt_180 TAB Alt_186 TAB Alt_001 Alt_205 ! Alt_205 Alt_032

Schalten sie die Tastatur wieder zurück (Fn_N) und vervollständigen sie die Zeile:

HALLO!$>HALLO.COM

Die Befehlszeile sieht dann so aus:

ECHO ┤        ║       ^A═!═ HALLO!$>HALLO.COM

Nun drücken sie Enter und die Byte-Folge wird in die Datei HALLO.COM umgeleitet.
Geben sie nun HALLO als Befehl ein und

HALLO!

erscheint auf dem Bildschirm.

Dank des „>“-Zeichens wird die Datei HALLO.COM erzeugt, das heißt aber auch, daß man den ASCII-Wert 062 nicht als Code-Byte übergeben kann. Das gilt auch für folgende ASCII-Werte:

ASCIIFunktion
000Wird ignoriert.
003Strg_C: Abbruch
008BS: Löschtaste.
013Enter: Eingabe beenden.
019Wird ignoriert.
027ESC: Abbruch.
060<: DOS.
062>: DOS.

Manche dieser Bytes könnte man mit dem Text-Editor nachträglich einfügen. Dieser hat aber wiederum Probleme mit anderen Bytes, Vorsicht ist geboten. Die Meldung des Programms HALLO.COM kann allerdings problemlos mit dem Text-Editor auf bis zu einer Länge von 214 Bytes verlängert werden.

Mit dem Text-Editor

Portfolios Textverarbeitung kann man eine Menge zumuten, nicht aber Binär-code. Glaubt man. Mit ein paar Einschränkungen und Tricks kann man allerdings *.COM Programme schreiben!
Zunächst laden wir das mit dem ECHO-Befehl erstellte Programm in den Text-Editor, es klingt erst einmal seltsam eine COM-Programm in den Text-Editor zu laden, aber es geht. In dem Text-Editor sieht es so aus:

 ┤        ║       ^A═!═ HALLO!$

Nun können sie die Meldung „HALLO!“ durch einen beliebigen Text ersetzen und das Programm unter einem anderen Namen wieder speichern. Im Text-Editor kann man sogar „<“ und „>“ verwenden, dafür hat er aber enorme Probleme mit anderen Bytes die man mit ECHO eingegeben hat:

ASCIIFunktionASCIIFunktion
000-016-
001Cursor springt auf POS1017-
002Löscht rückwärts bis Zeilenanfang018Text-Editor: Ersetzen…
003-019Text-Editor: Suche…
004-020-
005Löscht bis Zeilenende021-
006-022-
007Text-Editor: Gehe zu Zeile…023Löscht bis Zeilenende
008Korrekturtaste, löscht ein Zeichen zurück024-
009TAB025-
010-026Springt zum Ende
011-027Esc
012Löscht gesmate Zeile028-
013Zeilenumbruch029-
014-030-
015-031-

Der Text-Editor kann nur Zeilen bis zu einer Länge von 250 Zeichen verarbeiten, ein Wortumbruch würde den Binär-Code stören. Vor dem Laden ist es unbedingt erforderlich die Zeilenlänge auf 250 Zeichen (mehr geht nicht) einzustellen und den Wortumbruch auszuschalten!

HT2B.COM

HexText to BIN. Um all die Umstände und Einschränkungen zu beseitigen, sollte man sich eine Software schreiben die z.B. in Textform geschriebene Hexadezimal-Ketten in Binärdateien übersetzt.
Um den Aufwand möglichst gering zu halten, sollen DOS und die eingebauten Anwendungen für das Erstellen, Laden und Speichern von Dateien und Programmen genutzt werden.
HT2B ist 67 Bytes lang und konvertiert Hexadezimalzahlen in ASCII-Werte. Nach dem Start kann man zweistellige Hexadezimalzahlen eingeben, alle Zeichen außer 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F und „.“ werden ignoriert. Drückt man „.“ wird das Programm beendet (so können auch mit dem Text-Editor erstellte Quelldateien das Programm beenden, dazu später).

Dezimal:
016 177 000 186 000 000 180 007 205 033 060 046 116 051 060 057 119 005 044 048 233 006 000 060 065 144 227 044 055 122 249 001 116 010 246 038 000 000 138 208 177 001 235 210 000 194 233 000 000 180 002 205 033 177 000 235 197 000 000

Hexadezimal:
10 B1 00 BA 00 00 B4 07 CD 21 3C 2E 74 33 3C 39 77 05 2C 30 E9 06 00 3C 41 72 E3 2C 37 80 F9 01 74 0A F6 26 00 01 8A D0 B1 01 EB D2 00 C2 E9 00 00 B4 02 CD 21 B1 00 EB C5 00 00

Das Programm HELLO.COM: Mit Hilfe der Textverarbeitung schreiben wir die Quelldatei in HEX-Zeichen:

 B4 09 BA 09 01 CD 21 CD 20
 48 41 4C 4C 4F 21 24
 .

Die Datei speichern wir als HELLO.HEX ab. Nun geben wir in der Dos Kommando-Zeile

 HT2C <HELLO.HEX >HELLO.COM

ein. HT2C wird mit den Zeichen von HELLO.HEX gefüttert und die Antwort wird in HELLO.COM geschrieben, fertig.
Um die Sache zu vereinfachen schreiben wir uns die Batch-Datei MC.BAT:

@echo off
HT2C <%1.HEX >%1.COM

Nun reicht es

 MC Hello

in die Kommando-Zeile zu tippen und der Code wird geschrieben.

OPCODES

MESSAGE.COM

Gibt Meldung aus.
Dezimal:
180 009 186 009 001 205 033 205 032 077 069 083 083 065 071 069 036
Die ersten 9 Bytes sind Opcode, der Rest ist der Text der Meldung, in diesem Fall „MESSAGE$“ (muß mit „$“ (036) enden!)
Dieses Programm kann mit dem Text-Editor bearbeitet werden, der Text (ab Byte 10) kann dann bis zu 226 Zeichen lang sein (ASCII 009 ist der Tabulator, in der Textverarbeitung 8 Zeichen breit, in der DOS-Befehlszeile 4).

BLINDIN.COM

Einfache Eingabe-Routine die Zeichen nicht übersetzt (anders als ECHO), zur Eingabe von ASCII-Werten mit der numerischen Tastatur (Alt_nnn). Durch Umleiten in eine Datei lassen sich so ASCII-Werte auch unter 32 eingeben.
Beispiel:
BLINDLIN>USERIN.TXT
Die eingegebene Zeile wird nach Drücken der Enter-Taste in die Datei USERIN.TXT geschrieben. Leider kann man die eingegebenen Zeichen nicht sehen, sie werden aber als reine ASCII-Werte gespeichert. Nur der ASCII-Wert 0Dh (036) kann nicht übergeben werden, er dient zur Beendung der Eingabe.
Programm-Code in Hexadezimal:
B4 01 CD 21 3C 0D 74 02 EB F6

software/diy/andere/machinecodetext.1159654678.txt.gz · Zuletzt geändert: 16/02/2024 17:02 (Externe Bearbeitung)