PofoWiki

Die ultimative Informationsquelle zum ATARI Portfolio

Benutzer-Werkzeuge

Webseiten-Werkzeuge


software:diy:andere:machinecodetext

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Letzte ÜberarbeitungBeide Seiten der Revision
software:diy:andere:machinecodetext [02/01/2009 21:01] uxtsoftware:diy:andere:machinecodetext [11/09/2022 22:09] – [BLINDIN.COM] Quellcode hinzugefügt bttr
Zeile 101: Zeile 101:
 Man sage nicht, der Portfolio biete keine eingebauten Programmier-Möglichkeiten!\\ Man sage nicht, der Portfolio biete keine eingebauten Programmier-Möglichkeiten!\\
 \\ \\
 +==== OPCODES ====
  
  
-===== HT2B.COM ===== +=== MESSAGE.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!).\\ +
- +
-Code in Arbeit.\\ +
- +
-===== OPCODES ===== +
- +
- +
-==== MESSAGE.COM ====+
 Gibt Meldung aus.\\ Gibt Meldung aus.\\
 Dezimal:\\ Dezimal:\\
Zeile 120: Zeile 111:
 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). 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 ====+=== 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.\\ 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.\\
  
Zeile 141: Zeile 132:
 Hexadezimal:\\ Hexadezimal:\\
 B4 01 CD 21 EB FA\\ B4 01 CD 21 EB FA\\
 +
 +In Debug sieht der Quellcode dazu so aus:
 +
 +<code asm>
 +xxxx:0100 B401          MOV     AH,01
 +xxxx:0102 CD21          INT     21
 +xxxx:0104 EBFA          JMP     0100
 +</code>
 +
 +Arbeitsprinzip: Die [[https://fd.lod.bz/rbil/interrup/dos_kernel/2101.html|DOS-Funktion 01h]] ("READ CHARACTER FROM STANDARD INPUT, WITH ECHO") wird in einer Schleife ohne Abbruchbedingung aufgerufen. Funktion 01h prüft aber selbst, ob der Anwender <key>Strg</key>+<key>c</key> für einen Abbruch gedrückt hat.
 +===== HT2B.COM =====
 +Schön und gut, mit dem Printer Setup-Code haben wir also eine Möglichkeit Binärdateien zu erzeugen, die jegliche 8-Bit-Werte enthalten können (0..255). Aber mal ehrlich, die Lust am Programmieren ist schnell dahin, wenn man Byte für Byte in der nötigen Syntax (\xxx) eintippen muss. Außerdem ist die Darstellung der bereits eingegebenen Bytes nicht gerade komfortabel.\\
 +\\
 +Hinzu kommt, dass die Länge des Setup-Codes auf 128 Bytes begrenzt ist, und die Eingabezeile maximal 250 Zeichen lang ist. Schlimmstenfalls kann man also nur 62 Bytes eingeben, da jedes Byte vier Zeichen lang ist (\xxx). Um mehr als nur 62 Bytes eingeben zu können, sollte man die Byte-Werte, wann immer es geht, alphanumerisch eingeben, oder man überlässt es der Eingaberoutine des Setup-Codes, indem man die Bytes schrittweise eingibt. Man gibt zum Beispiel die ersten 8 Werte ein, dann verlässt man die Eingaberoutine (durch drücken der Eingabetaste) um sie ernuet aufzurufen. Zu dem Zeitpunkt hat die Eingaberoutine die Bytes bereits auf das kürzest mögliche Format gewandelt. Nun kann man weitere Bytes am Ende einfügen. Man wiederhole dies, bis alle Bytes eingegeben wurden.\\
 +\\
 +Dennoch wird man die maximale Länge von 128 Bytes nie erreichen, schon gar nicht überschreiten. 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. Ein solches Programm könnte durchaus kleiner als 128 Bytes sein. Nehmen wir die Mühe also einmal auf uns, um ein solches Programm zu schreiben, dann sind alle Einschränkungen behoben, und wir können von da an immer dieses Programm benutzen und können den Printer Setup-Code für immer vergessen.\\
 +\\
 +Nennen wir das Programm z.B. HT2B.COM (Hex-Text to Bin). In diesem Beispiel ist es nur 67 Bytes lang, da es nur Zeichenketten übersetzt, das Lesen und Schreiben von Dateien übernimmt DOS mit Hilfe einer Stapelverarbeitungsdatei. Aber dazu später.\\
 +\\
 +Um zum Beispiel das oben beschriebene "Hallo Welt!"-Programm zu erzeugen, würden wir es nicht mehr in den Printer Setup-Code eingeben, sondern in eine Text-Datei namens HALLO.HTX wie folgt:\\
 +<code dos>
 +B4 09 BA 09 01 CD 21 CD
 +20 48 45 4C 4C 4F 20 57
 +4F 52 4C 44 21 24 B4 4C
 +B0 00 CD 21.
 +</code>
 +HT2B.COM soll dann alle Zeichen paarweise auswerten und binär ausgeben. Das Ende der Datei erkennt HT2B an dem ".", werden die Bytes in eine Datei geschrieben, haben wir unser "Hallo-Welt!"-Programm.\\
 +HT2B selbst würde in solcher Form folgendermaßen aussehen:\\
 +<code dos>
 +B1 00 B4 07 CD 21 3C 2E
 +74 34 3C 1B 74 30 3C 30
 +72 F0 3C 46 77 EC 3C 39
 +77 05 2C 30 E9 06 00 3C
 +41 72 DF 2C 37 80 F9 00
 +75 0A B3 10 F6 E3 8A D0
 +FE C1 EB CE 00 C2 B4 02
 +CD 21 B1 00 EB C4 B4 4C
 +B0 00 CD 21.
 +</code>
 +Aber nun müssen wir es erstmal erstellen, leider mühsam mit dem Printer Setup-Code, aber es lohnt sich, Augen zu und durch. Um die Zeile der Eingaberoutine des Setup-Codes möglichst kurz zu halten und alle Bytes unterbringen zu können, geben wir sie stufenweise ein, z.B.:\\
 +  \177\000\180\007\205!<.t4<
 +
 +  \027t0<0r\240<Fw\236<9w\005,0\233
 +
 +  \006\000<Ar\223,7\128\249\000u\010\179
 +
 +  \016\246\227\138\208\254\193\235\206\000\194
 +
 +  \180\002\205!\177\000\235\196\180L\176\000\205!
 +
 +Nun leiten wir die Druckausgabe in den Systemeinstellungen in eine Datei namens C:\HT2B.COM um, öffnen eine leere Text-Datei und drucken sie. Denken sie daran alle Druckereinstellungen auf "Null" zu setzen (Ränder, Seitenlänge, und das Zeilenende auf nur CF. Haben wir alles richtig gemacht und auf Laufwerk C: war genügend Platz, ist unser Programm fertig.\\
 +Was machen wir nun damit? Was macht HT2B.COM? Starten wir es.\\
 +\\
 +Geben sie C:HT2B in der DOS-Befehlszeile ein und drücken sie die Eingabetaste. HT2B erkennt nur Ziffern (0 bis 9) und die Zeichen A,B,C,D,E,F und den ".", alle anderen Zeichen werden ignoriert. Da HT2B nur Großbuchstaben kennt, drücken sie die Feststelltaste. Nun geben sie Hexadezimalwerte ein, z.B.:\\
 +  54657374
 +wie man sieht gibt HT2B, nachdem zwei gültige Zeichen eingegeben wurden, das entsrechende Byte aus. Um das Programm zu beenden drücken sie die <key>.</key>-Taste.\\
 +\\
 +Wir wollen die Bytes aber nicht an der Konsole eingeben, und die Bildschirmausgabe bringt uns auch nichts. Nun, um das Programm klein und einfach zu halten, verwendet es nur die Standard Ein- und Ausgabe, Dateimanipulation würde viel Code brauchen. Aber kein Problem, lassen wir DOS die Arbeit machen und leiten die Ein- und Ausgabe mit Hilfe einer Stapelverarbeitungsdatei um: öffnen sie eine neue Datei in der Textverarbeitung und benennen sie sie HEX2COM.BAT:\\
 +<code dos>
 +@echo off
 +if exist %1.com del %1.com
 +ht2b <%1.htx >%1.com
 +</code>
 +In der zweiten Zeile wird eine evtl. bereits oder noch vohandene Zieldatei gelöscht. In der dritten Zeile findet die Umleitung statt: HT2B erhält die Eingabe von der angegebenen *.HTX-Datei und schreibt das Ergebnis in die entsprechende *.COM Datei.\\
 +\\
 +Haben sie die Quelldatei HALLO.HTX wie oben beschrieben erzeugt (nie den "." am Ende vergessen!), können sie sie "kompilieren" indem sie\\
 +  HEX2COM HALLO
 +in die DOS Befehlszeile eingeben. HT2B wird dann die Datei HALLO.HTX auswerten und das Ergebnis in HALLO.COM ablegen.\\
 +\\
 +Unsere neue "Entwicklungsumgebung" besteht aus den Dateien HT2B.COM und HEX2COM.BAT. Nun können wir uns den schwierigen Umgang mit dem Printer Setup-Code für immer sparen und komfortabel jegliche Programme bis zu einer Größe von 32KB erzeugen (der Texteditor kann nur Dateien bis 64KB handhaben und man braucht mindestens 2 Zeichen pro Byte). Voraussetzung ist natürlich, man kennt sich mit Opcode-generierung für den 8086-Prozessor aus, oder man hat eine Quelle zum abtippen.\\
 +Wer das Generieren von Opcode lernen will kann sich im Internet informieren, z.B. [[http://www.c-jump.com/CIS77/CPU/x86/lecture.html#X77_0330_intel_manual_opcode_bytes|hier]]\\
 +\\
  
software/diy/andere/machinecodetext.txt · Zuletzt geändert: 12/09/2022 21:09 von bttr