﻿# Formát obrazu kazety S1T

S1T je binární logický obraz kazety pro SAPI-1 Webulátor. Neuchovává vzorky
zvuku, ale časové mezery a bajty, které prošly sériovou cestou desky DSM-1.
Vícebajtová čísla jsou uložena v pořadí **little-endian**.

## Verze 1.0

Soubor začíná pevným šestnáctibajtovým úsekem:

| Offset | Délka | Hodnota / typ | Význam |
|---:|---:|---|---|
| `00h` | 8 | ASCII `BS1TAPE!` | MAGIC formátu |
| `08h` | 1 | `01h` | hlavní verze |
| `09h` | 1 | `00h` | vedlejší verze |
| `0Ah` | 2 | `08 00` | délka hlavičky bez MAGIC |
| `0Ch` | 4 | `0D 0A 1A 0A` | ochranná sekvence CR LF SUB LF |

Úplná hlavička S1T 1.0 v hexadecimálním zápisu:

```text
42 53 31 54 41 50 45 21  01 00 08 00  0D 0A 1A 0A
 B  S  1  T  A  P  E  !   v1.0  len=8   CR LF SUB LF
```

Pole `header_length` udává počet bajtů hlavičky následujících za osmibajtovým
MAGIC. První datový záznam tedy leží na offsetu:

```text
data_offset = 8 + header_length
```

Hodnota může být v budoucí verzi větší než osm. Čtečka musí neznámé rozšíření
přeskočit podle `header_length`; pevná ochranná sekvence zůstává na offsetu
`0Ch` až `0Fh`.

## Datové záznamy

Za hlavičkou následuje posloupnost záznamů bez samostatného ukončovacího
záznamu. Konec souboru je současně koncem obrazu pásky.

### Mezera

```text
00 <duration_ms:u16>
```

`duration_ms` je délka ticha v milisekundách. Mezera delší než 65 535 ms se
zapíše jako několik sousedních záznamů mezer.

### Souvislý blok dat

```text
01 <byte_count:u16> <data:byte_count>
```

`byte_count` udává počet následujících bajtů. Dlouhý proud je rozdělen do bloků
nejvýše 65 535 bajtů.

## Kontrola a kompatibilita

Čtečka verze 1.0 vyžaduje:

- přesné MAGIC `BS1TAPE!`,
- verzi `1.0`,
- délku hlavičky nejméně osm bajtů,
- přesnou ochrannou sekvenci `0D 0A 1A 0A`,
- úplné a známé datové záznamy.
