S-Record
# S-Record

S-Record (également connu sous le nom SREC ou S19) est un format de représentation de fichier binaire en ASCII développé dans les années 1970 par la société Motorola. Il était utilisé alors pour la programmation du microprocesseur Motorola 6800. Le format textuel offre de nombreux avantages sur le format binaire : il peut être imprimé, inspecté ou modifié avec un éditeur de texte ordinaire. Ces fichiers sont utilisés pour le transfert de programmes vers les programmateurs d'EPROM en communication série (RS-232).

Il est toujours utilisé en informatique embarquée ainsi que son équivalent développé au même moment par la société Intel, le format HEX (Intel).

## Format

Un fichier au format S-Record est constitué de lignes de caractères ASCII ('enregistrement') relativement courtes commençant par le caractère 'S' (d'où le nom), contenant des paires de caractères hexadécimaux et terminées par un retour à la ligne. Tous les nombres hexadécimaux sont en big endian.

La structure de chaque enregistrement est la suivante :

* S, le caractère débutant l'enregistrement
* -, un chiffre de 0 à 9 définissant le type d'enregistrement.
* NN, le nombre d'octets de données contenus dans l'enregistrement (en comptant l'adresse et la somme de contrôle). Il s'agit d'une paire de chiffres hexadécimaux.
* AAAA, AAAAAA ou AAAAAAAA, une adresse de 2, 3 ou 4 octets représentée par 4, 6 ou 8 chiffres hexadécimaux (big endian). Il s'agit de l'adresse mémoire du premier octet de donnée.
* - - - - ..., une séquence de paires de chiffres hexadécimaux représentant les octets de données.
* NN, une somme de contrôle (en anglais, checksum) deux chiffres hexadécimaux qui représentent le complément à FF (hexadécimal) de l'octet le moins significatif de la somme des octets représentant le nombre d'octets de données, l'adresse et les données.

Il existe 8 types d'enregistrements :

| Enregistrement | Description | Octets d'adresse | Séquence de données |
| - | - | - | - |
| S0 | En-tête de bloc | 2 | Oui |
| S1 | Séquence de données | 2 | Oui |
| S2 | Séquence de données | 3 | Oui |
| S3 | Séquence de données | 4 | Oui |
| S5 | Nombre d'enregistrements | 2 | Non |
| S7 | Fin de bloc | 4 | Non |
| S8 | Fin de bloc | 3 | Non |
| S9 | Fin de bloc | 2 | Non |

L'enregistrement S0 contient des données spécifiques à un constructeurs plutôt que des données binaires. Le nombre d'enregistrements contenu dans S5 se trouve dans le champ d'adresse de deux octets. Le champ d'adresse de S7, S8, or S9 peut contenir l'adresse de départ du programme.

## Exemple

* Code de départ
* Type d'enregistrement
* Nombre d'octets
* Adresse
* Données
* Somme de contrôle
