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 |
- Ein Block wird eingeleitet durch einen Doppelpunkt “:”.
Diesem dürfen beliebige Zeichen vorausgehen – diese werden ignoriert. - 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. - Die Adresse besteht aus zwei Bytes, dargestellt durch vier Hexziffern.
- Die Datensatztyp besteht aus einem Byte, dargestellt durch zwei Hexziffern.
- Es folgen die eigentlichen Daten: zwischen 0 und 255 Bytes (spezifiziert in Feld 2), dargestellt durch 0…510 Hexziffern.
- 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:
auf die Adresse80
,0040
auf die Adressefe
,0041
auf die Adresse43
,0042
auf die Adresse87
…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 zuFF
.
Mit anderen Datensatztypen wird die 64k-Limitierung beseitigt und die Start-Einsprungadresse für das codierte Programm angegeben.