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
software:diy:andere:machinecodetext [30/09/2006 23:09] – ergänzt. uxtsoftware:diy:andere:machinecodetext [12/09/2022 21:09] (aktuell) – [MESSAGE.COM] Korrigiert, umformuliert, Quelllisting eingefügt bttr
Zeile 46: Zeile 46:
  
 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.\\ 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.\\
 +
  
  
Zeile 67: Zeile 68:
 |010|-|026|Springt zum Ende| |010|-|026|Springt zum Ende|
 |011|-|027|Esc| |011|-|027|Esc|
-|012|Löscht gesmate Zeile|028|-|+|012|Löscht gesamte Zeile|028|-|
 |013|Zeilenumbruch|029|-| |013|Zeilenumbruch|029|-|
 |014|-|030|-| |014|-|030|-|
Zeile 75: Zeile 76:
  
  
 +===== Mit dem Printer-Setup =====
  
 +Im System-Menü hat man die Möglichkeit eine Steuersequenz für Drucker vor jedem Druck zu senden. Diese Steuersequenzen können dezimal oder alphanumerisch eingegeben werden, sie werden beim Drucken binär ausgegeben. Da man den Ausdruck im Systemmenü auch in eine Datei umleiten kann, haben wir ein Werkzeug um Binärdateien zu erstellen.\\
 +Einschränkungen:\\
 +Die Steuersequenz darf höchstens 128 Bytes lang sein.\\
 +Die erzeugte Datei ist immer zwei Bytes länger als der eingegebene Code. Es werden leider zwei Null-Bytes am Ende angehängt. Das erstellte Programm sollte unbedingt einen definierten Ausstieg besitzen (z.B.: \180\076\176\000).\\
 +\\
 +Als Beispiel ein einfaches "Hallo Welt!"-Programm:\\
  
 +Rufen Sie das System-Menü auf, und wählen sie "Ausdrucken".\\
 +Ändern sie das Druckziel auf Datei und geben sie den gewünschten Dateinamen ein (z.B.: HALLO.COM).\\
 +Nun geben sie den gewünschten Binärcode unter "Anfangskontrollcode" ein.\\
 +Zum Beispiel:\\
 +  \180\009\186\009\001\205\033\205\032\072\097\108\108\111\032\087\101\108\116\033\036\180\076\176\000
 +Die ersten 9 Bytes sind Opcode, dann folgen die ASCII-Codes der Begrüßung, die letzten 4 Bytes sind der Programm-Ausstieg.\\
  
 +Öffnen sie eine leere Textdatei im Texteditor und drucken sie sie (verwenden sie das Menü, Alt_P ist eine DOS Funktion die den Kontrollcode nicht sendet), die Datei HALLO.COM wurde erzeugt. Verlassen sie den Texteditor und starten sie HALLO.COM\\
  
-===== HT2B.COM ===== +HALLO.COM ist 27 Bytes groß (null-Bytes inkl.
-HexText to BINUm all die Umstände und Einschränkungen zu beseitigensollte 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 ErstellenLaden und Speichern von Dateien und Programmen genutzt werden.\\ +Im obigen Beispiel wurden alle Bytes als dreistellige Dezimalzahlen eingegebenum Platz zu sparen können alle "druckbaren" Zeichen (von 32 bis 255) alfanumerisch eingegeben werden (siehe Benutzer-Handbuch).\\ 
-HT2B ist 67 Bytes lang und konvertiert Hexadezimalzahlen in ASCII-WerteNach dem Start kann man zweistellige Hexadezimalzahlen eingebenalle Zeichen außer 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,und ".werden ignoriertDrückt man "." wird das Programm beendet (so können auch mit dem Text-Editor erstellte Quelldateien das Programm beenden, dazu später).\\+Die Eingabe-Routine für den Anfangskontrollcode hat eine interessante Dynamik. Sie können Dezimalwerte (durch "\" eingeleitete dreistellige Codes) und ASCII-Zeichen mischen. Die Eingabe-Routine konvertiert die Zeile sofort in das Platz-sparendste Format um. Dies hat keinen Einfluss auf die erzeugte Dateies betrifft nur die Darstellung des Codes wärend der Bearbeitung.\\ 
 +\\ 
 +Man sage nicht, der Portfolio biete keine eingebauten Programmier-Möglichkeiten!\\ 
 +\\ 
 +==== OPCODES ==== 
 + 
 + 
 +=== MESSAGE.COM === 
 +Gibt Meldung aus. 
 + 
 +Dieses Programm kann mit dem Text-Editor bearbeitet werden. Ab Byte 10 (077 bzw. 4D) beginnt die auszugebende Meldungdie bis zu 226 Zeichen lang sein kann und immer mit "$(036 bzw24) enden mussDas Zeichen "$" selbst wird dabei nicht mit ausgegeben. Ein Tabulator kann mit ASCII 009 erzeugt werden.
  
 Dezimal:\\ 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\\+180 009 186 009 001 205 033 205 032 077 069 083 083 065 071 069 036
  
 Hexadezimal:\\ 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\\+B4 09 BA 09 01 CD 21 CD 20 4D 45 53 53 41 47 45 24
  
 +Ein mit dem [[https://github.com/swanlizard/a72|A72-Assembler]] erstelltes Listing des Quellcodes:
  
-Das Programm HELLO.COM: +<code asm> 
-Mit Hilfe der Textverarbeitung schreiben wir die Quelldatei in HEX-Zeichen: +0100 B409                       MOV     AH,9 
-   B4 09 BA 09 01 CD 21 CD 20 +0102 BA0901                     MOV     DX,OFFSET MESSAGE 
-   48 41 4C 4C 4F 21 24 +0105 CD21                       INT     21H 
-   . +0107 CD20                       INT     20H 
-\\ +0109 4D45535341474524   MESSAGE DB      "MESSAGE$" 
-Nun geben wir in der Dos Kommando-Zeile +</code>
-   HT2C HELLO.HEX >HELLO.COM +
-ein. HT2C wird mit den Zeichen von HELLO.HEX gefüttert und HT2C´s Antwort wird in die *.COM-Datei geschrieben, fertig.  +
-\\+
  
-\\+=== 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.\\
  
-===== OPCODES =====+ Beispiel:\\ 
 +BLINDIN>USERIN.TXT\\
  
 +Die Zeichen werden bereits während der Eingabe in die Datei USERIN.TXT geschrieben. Leider kann man die eingegebenen Zeichen nicht sehen, sie werden aber als reine ASCII-Werte gespeichert.\\
 +Abgebrochen wird die Aufzeichnung mit <key>Ctrl</key>+<key>c</key>.\\
 +
 +<note classic>
 +Programme, die mit Hilfe von BLINDIN eingegeben werden, werden immer 2 Byte größer als der Programmcode, da BLINDIN am Ende "^C" (ASCII) anhängt.
 +Für das geschriebene Programm ist das aber ohne Bedeutung.
 +</note>
 +
 +Programm-Code:\\
  
-==== MESSAGE.COM ==== 
-Gibt Meldung aus.\\ 
 Dezimal:\\ Dezimal:\\
-180 009 186 009 001 205 033 205 032 077 069 083 083 065 071 069 036\\ +180 001 205 033 235 250\\
-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).+
  
 +Hexadezimal:\\
 +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
  
-==== BLINDIN.COM ==== +  \180\002\205!\177\000\235\196\180L\176\000\205! 
-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:\\ +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änderSeitenlänge, und das Zeilenende auf nur CF. Haben wir alles richtig gemacht und auf Laufwerk C: war genügend Platz, ist unser Programm fertig.\\ 
-BLINDLIN>USERIN.TXT\\ +Was machen wir nun damit? Was macht HT2B.COM? Starten wir es.\\ 
-Die eingegebene Zeile wird nach Drücken der Enter-Taste in die Datei USERIN.TXT geschriebenLeider kann man die eingegebenen Zeichen nicht sehen, sie werden aber als reine ASCII-Werte gespeichertNur der ASCII-Wert 0Dh (036) kann nicht übergeben werdener dient zur Beendung der Eingabe.\\ +\\ 
-Programm-Code in Hexadezimal:\\ +Geben sie C:HT2B in der DOS-Befehlszeile ein und drücken sie die Eingabetaste. HT2B erkennt nur Ziffern (0 bis 9und 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.:\\ 
-B4 01 CD 21 3C 0D 74 02 EB F6\\+  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 nichtsNun, 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 eingebenHT2B 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ürlichman 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.1159653590.txt.gz · Zuletzt geändert: 16/02/2024 17:02 (Externe Bearbeitung)