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 [18/11/2012 18:11] – ergänzt uxtsoftware:diy:andere:machinecodetext [12/09/2022 21:09] (aktuell) – [MESSAGE.COM] Korrigiert, umformuliert, Quelllisting eingefü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 ====
  
  
 +=== MESSAGE.COM ===
 +Gibt Meldung aus.
  
 +Dieses Programm kann mit dem Text-Editor bearbeitet werden. Ab Byte 10 (077 bzw. 4D) beginnt die auszugebende Meldung, die bis zu 226 Zeichen lang sein kann und immer mit "$" (036 bzw. 24) enden muss. Das Zeichen "$" selbst wird dabei nicht mit ausgegeben. Ein Tabulator kann mit ASCII 009 erzeugt werden.
 +
 +Dezimal:\\
 +180 009 186 009 001 205 033 205 032 077 069 083 083 065 071 069 036
 +
 +Hexadezimal:\\
 +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:
 +
 +<code asm>
 +0100 B409                       MOV     AH,9
 +0102 BA0901                     MOV     DX,OFFSET MESSAGE
 +0105 CD21                       INT     21H
 +0107 CD20                       INT     20H
 +0109 4D45535341474524   MESSAGE DB      "MESSAGE$"
 +</code>
 +
 +=== 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:\\
 +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:\\
 +
 +Dezimal:\\
 +180 001 205 033 235 250\\
 +
 +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 ===== ===== 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.\\ 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.\\
Zeile 118: Zeile 170:
 20 48 45 4C 4C 4F 20 57 20 48 45 4C 4C 4F 20 57
 4F 52 4C 44 21 24 B4 4C 4F 52 4C 44 21 24 B4 4C
-B0 00.+B0 00 CD 21.
 </code> </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.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.\\
Zeile 131: Zeile 183:
 FE C1 EB CE 00 C2 B4 02 FE C1 EB CE 00 C2 B4 02
 CD 21 B1 00 EB C4 B4 4C CD 21 B1 00 EB C4 B4 4C
-B0 00.+B0 00 CD 21.
 </code> </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.:\\ 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.:\\
Zeile 140: Zeile 192:
   \006\000<Ar\223,7\128\249\000u\010\179   \006\000<Ar\223,7\128\249\000u\010\179
  
-  \016\246\227\138\013\254\193\235\206\000\194+  \016\246\227\138\208\254\193\235\206\000\194
  
-  \180\002\205!\177\000\235\196\180L\176\000+  \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. Haben wir alles richtig gemacht und auf Laufwerk C: war genügend Platz, ist unser Programm fertig.\\+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.\\ 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 "a" nicht erkannt wird, drücken sie die Feststelltaste. Nun geben sie Hexadezimalwerte ein, z.B.:\\ +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.:\\ 
-  55657374 +  54657374 
-wie an 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.\\+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:\\ 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:\\
Zeile 159: Zeile 211:
 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.\\ 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 "komplieren" indem sie\\+Haben sie die Quelldatei HALLO.HTX wie oben beschrieben erzeugt (nie den "." am Ende vergessen!), können sie sie "kompilieren" indem sie\\
   HEX2COM HALLO   HEX2COM HALLO
 in die DOS Befehlszeile eingeben. HT2B wird dann die Datei HALLO.HTX auswerten und das Ergebnis in HALLO.COM ablegen.\\ in die DOS Befehlszeile eingeben. HT2B wird dann die Datei HALLO.HTX auswerten und das Ergebnis in HALLO.COM ablegen.\\
Zeile 165: Zeile 217:
 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.\\ 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]]\\ 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]]\\
- +\\
-===== 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:\\ +
-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:\\ +
- +
-Dezimal:\\ +
-180 001 205 033 235 250\\ +
- +
-Hexadezimal:\\ +
-B4 01 CD 21 EB FA\\+
  
software/diy/andere/machinecodetext.1353261039.txt.gz · Zuletzt geändert: 16/02/2024 17:02 (Externe Bearbeitung)