Les outils de conversion
Six outils en C et quelques scripts accompagnent l’émulateur. Ils fabriquent des cassettes et des disquettes, les inspectent, et vont jusqu’au signal qu’on peut faire écouter à un vrai Oric.
Dans cette page
Vue d’ensemble
make tools construit les six outils ; chacun se construit aussi seul (make tap2wav, par exemple).
| Outil | Entrée → sortie | Rôle |
|---|---|---|
bas2tap | .bas → .tap | un programme BASIC en texte devient une cassette |
bin2tap | .bin → .tap | un binaire de code machine devient une cassette, avec ses adresses |
tap2sedoric | .tap + disquette de base → .dsk | met un programme dans une disquette Sedoric |
sedoric-info | .dsk → texte | inspecte la table d’occupation et le catalogue d’une disquette Sedoric |
tap2wav | .tap → .wav | le signal de cassette, à faire jouer à un vrai Oric |
dsk2hfe | .dsk → .hfe | une image magnétique pour écrire une vraie disquette |
bas2tap et bin2tap
bas2tap jeu.bas -o jeu.tap --auto-run
bin2tap demo.bin --start 0x9800 --exec 0x9800 -o demo.tap --name DEMO
bas2tap met le programme en jetons et écrit l’en-tête de cassette de 9 octets que lit la ROM ;
--auto-run le fait démarrer après CLOAD. bin2tap prend l’adresse de chargement et celle
d’exécution ; attention, --start lit les nombres comme strtol en base 0 : il faut le préfixe 0x
pour de l’hexadécimal.
tap2sedoric et sedoric-info
tap2sedoric jeu.tap -o jeu.dsk -b master.dsk -n JEU.COM -a
sedoric-info jeu.dsk
sedoric-info jeu.dsk --check 640:3
tap2sedoric copie une disquette de base (au format MFM_DISK) et y range le programme comme fichier
Sedoric : -a le rend automatique, -e donne une adresse d’exécution, -i la commande de démarrage
de la disquette. sedoric-info --check LIBRES:FICHIERS sort en erreur si les compteurs diffèrent : un
garde-fou pour la CI.
tap2wav : vers une vraie cassette
tap2wav jeu.tap jeu.wav
# jouer jeu.wav dans l'entrée cassette de l'Oric, puis taper CLOAD""
L’outil produit le vrai signal de cassette de l’Oric, avec le même encodage que le générateur du
mode au signal de l’émulateur, calqué sur le CSAVE de la ROM :
- une trame de 14 bits, bit de poids faible d’abord : un bit de départ, 8 bits de données, une parité impaire, 4 bits d’arrêt ;
- chaque bit est un demi-créneau bas de 208 cycles, puis un demi-créneau haut de 208 cycles (bit 1) ou de 416 cycles (bit 0), à 1 MHz ; la ROM sépare les deux vers 512 cycles.
| Option | Défaut | Effet |
|---|---|---|
--rate | 44 100 | fréquence d’échantillonnage (Hz) |
--leader | 512 | trames de synchronisation 0x16 en tête |
--amp | 16 000 | amplitude de crête |
--lead-silence, --tail-silence | 200, 500 | silences avant et après (ms) |
dsk2hfe : vers une vraie disquette
dsk2hfe jeu.dsk jeu.hfe
# copier jeu.hfe sur la carte SD d'un HxC ou d'un Gotek, ou l'écrire avec un Greaseweazle
L’outil encode chaque piste en flux MFM (16 cellules par octet, avec les marques de
synchronisation standard) et écrit une image HFE v1, le format que lisent et écrivent les
émulateurs de lecteur HxC, les Gotek sous FlashFloppy et les Greaseweazle. Options : --bitrate
(250 kbit/s) et --rpm (300).
L’image est vérifiée avant toute écriture : signature MFM_DISK, une ou deux faces, 1 à 84
pistes, fichier assez long. Une image refusée laisse intact un .hfe existant.
Les scripts
| Script | Rôle |
|---|---|
dsk_raw2mfm.py | une image brute (secteurs bout à bout) devient un conteneur MFM_DISK |
sedoric_inject.py | range un binaire comme fichier Sedoric dans une image |
sedoric_mkbare.py | fabrique une disquette Sedoric « nue », sans commande de démarrage |
make_bootable_sedoric.sh | la chaîne complète, jusqu’à une disquette Sedoric qui démarre seule |
Les chaînes typiques
# Un programme BASIC sur une disquette qui démarre
bas2tap jeu.bas -o jeu.tap --auto-run
tap2sedoric jeu.tap -o jeu.dsk -b master.dsk -n JEU -a
# Vers du matériel réel
tap2wav jeu.tap jeu.wav # par l'entrée cassette
dsk2hfe jeu.dsk jeu.hfe # une vraie disquette
# Une image brute, puis MFM, puis HFE
python3 tools/dsk_raw2mfm.py brut.dsk mfm.dsk
dsk2hfe mfm.dsk sortie.hfe