Das INTEL Hex-Format

Nanopascal erzeugt eine Ausgabedatei im Intel-Hex-Format.

  • Die Codierung benutzt ausschließlich die ASCII-Zeichen “0”…“9” und “A”…“F” sowie “:”.
  • Sie ist sowohl maschinenlesbar als auch menschenlesbar.
  • Die Daten werden blockweise codiert und mit einer Prüfsumme gesichert.
  • Jeweils ein Byte wird durch zwei hexadezimale Ziffern (“0”…“9” und “A”…“F”) codiert.
  • Die ursprüngliche Version war auf einen 64kB Adreßraum begrenzt; diese Beschränkung wurde durch erweiterte Blocktypen aufgehoben.

Ein Block im INTEL-Hex-Format hat folgenden Aufbau:

1 2 3 4 5 6
: 07 0040 00 80fe43870380fb f3
: 02 0000 00 803e 40
: 00 0000 01 ff
  1. Ein Block wird eingeleitet durch einen Doppelpunkt “:”.
    Diesem dürfen beliebige Zeichen vorausgehen – diese werden ignoriert.
  2. Die Datensatzlänge besteht aus einem Byte, dargestellt durch zwei Hexziffern.
    Üblich sind 16 oder 32 Bytes je Datensatz – denn dann passt ein Datensatz in eine Druckzeile.
  3. Die Adresse besteht aus zwei Bytes, dargestellt durch vier Hexziffern.
  4. Die Datensatztyp besteht aus einem Byte, dargestellt durch zwei Hexziffern.
  5. Es folgen die eigentlichen Daten: zwischen 0 und 255 Bytes (spezifiziert in Feld 2), dargestellt durch 0…510 Hexziffern.
  6. Die Prüfsumme besteht aus einem Byte, dargestellt durch zwei Hexziffern.
    Bei einem gültigen Datensatz ist die Modulo-256-Summe der Bytes aus den Feldern 2 bis 6 gleich 0.

Ich verwende nur die Datensatztypen 0 und 1:

Datensatztyp 0: Daten

Die Datenbytes des Datensatzes werden ab der angegebenen Adresse abgelegt. Im obigen Beispiel:
80 auf die Adresse 0040,
fe auf die Adresse 0041,
43 auf die Adresse 0042,
87 auf die Adresse 0043

Datensatztyp 1: Ende der Daten

Dieser Datensatz beendet eine Datei im Intel HEX-Format.
Die Datenlänge und Datenadresse sollten 0 sein; damit ergibt sich die Prüfsumme zu FF.

Mit anderen Datensatztypen wird die 64k-Limitierung beseitigt und die Start-Einsprungadresse für das codierte Programm angegeben.