software:diy:andere:machinecodetext
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
software:diy:andere:machinecodetext [01/10/2006 00:10] – Formatierung. uxt | software: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 | + | |012|Löscht |
|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!" | ||
+ | Rufen Sie das System-Menü auf, und wählen sie " | ||
+ | Ä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 " | ||
+ | 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, | ||
+ | Ö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\\ | ||
+ | HALLO.COM ist 27 Bytes groß (null-Bytes inkl.) | ||
+ | Im obigen Beispiel wurden alle Bytes als dreistellige Dezimalzahlen eingegeben, um Platz zu sparen können alle " | ||
+ | Die Eingabe-Routine für den Anfangskontrollcode hat eine interessante Dynamik. Sie können Dezimalwerte (durch " | ||
+ | \\ | ||
+ | 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 | |
- | ===== HT2B.COM ===== | + | |
- | HexText to BIN. Um all die Umstände und Einschränkungen zu beseitigen, sollte man sich eine Software schreiben | + | |
- | Um den Aufwand möglichst gering | + | |
- | HT2B ist 67 Bytes lang und konvertiert Hexadezimalzahlen in ASCII-Werte. Nach dem Start kann man zweistellige Hexadezimalzahlen eingeben, alle Zeichen außer 0, | + | |
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:// | ||
- | Das Programm HELLO.COM: | + | <code asm> |
- | Mit Hilfe der Textverarbeitung schreiben wir die Quelldatei in HEX-Zeichen: | + | 0100 B409 |
- | B4 09 BA 09 01 CD 21 CD 20 | + | 0102 BA0901 |
- | 48 41 4C 4C 4F 21 24 | + | 0105 CD21 |
- | . | + | 0107 CD20 |
- | Die Datei speichern wir als HELLO.HEX ab. Nun geben wir in der Dos Kommando-Zeile | + | 0109 4D45535341474524 |
- | | + | |
- | 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:\\ | + | |
- | <code dos> | + | |
- | @echo off | + | |
- | HT2C <%1.HEX >%1.COM | + | |
</ | </ | ||
- | Nun reicht es | ||
- | MC Hello | ||
- | in die Kommando-Zeile zu tippen und der Code wird geschrieben. | ||
- | \\ | ||
- | <> | ||
- | ===== OPCODES ===== | + | === 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.\\ | ||
+ | | ||
+ | BLINDIN> | ||
+ | |||
+ | 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 < | ||
+ | |||
+ | <note classic> | ||
+ | Programme, die mit Hilfe von BLINDIN eingegeben werden, werden immer 2 Byte größer als der Programmcode, | ||
+ | Für das geschriebene Programm ist das aber ohne Bedeutung. | ||
+ | </ | ||
+ | |||
+ | 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 " | + | |
- | 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 | ||
+ | </ | ||
+ | Arbeitsprinzip: | ||
+ | ===== 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, | ||
+ | \\ | ||
+ | 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!" | ||
+ | <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. | ||
+ | </ | ||
+ | HT2B.COM soll dann alle Zeichen paarweise auswerten und binär ausgeben. Das Ende der Datei erkennt HT2B an dem " | ||
+ | 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. | ||
+ | </ | ||
+ | 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!< | ||
+ | \027t0< | ||
+ | \006\000< | ||
+ | \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 | + | |
- | 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 " |
- | BLINDLIN> | + | Was machen wir nun damit? Was macht HT2B.COM? Starten wir es.\\ |
- | Die eingegebene | + | \\ |
- | Programm-Code in Hexadezimal:\\ | + | Geben sie C:HT2B in der DOS-Befehlszeile ein und drücken sie die Eingabetaste. HT2B erkennt nur Ziffern |
- | 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 < | ||
+ | \\ | ||
+ | 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 > | ||
+ | </ | ||
+ | In der zweiten | ||
+ | \\ | ||
+ | Haben sie die Quelldatei HALLO.HTX wie oben beschrieben erzeugt (nie den " | ||
+ | HEX2COM HALLO | ||
+ | in die DOS Befehlszeile eingeben. HT2B wird dann die Datei HALLO.HTX auswerten und das Ergebnis in HALLO.COM ablegen.\\ | ||
+ | \\ | ||
+ | Unsere neue " | ||
+ | Wer das Generieren von Opcode lernen will kann sich im Internet informieren, | ||
+ | \\ | ||
software/diy/andere/machinecodetext.1159655005.txt.gz · Zuletzt geändert: 16/02/2024 17:02 (Externe Bearbeitung)