Aller au contenu
Phosphoricwiki
Sommaire

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).

OutilEntrée → sortieRôle
bas2tap.bas → .tapun programme BASIC en texte devient une cassette
bin2tap.bin → .tapun binaire de code machine devient une cassette, avec ses adresses
tap2sedoric.tap + disquette de base → .dskmet un programme dans une disquette Sedoric
sedoric-info.dsk → texteinspecte la table d’occupation et le catalogue d’une disquette Sedoric
tap2wav.tap → .wavle signal de cassette, à faire jouer à un vrai Oric
dsk2hfe.dsk → .hfeune 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.
OptionDéfautEffet
--rate44 100fréquence d’échantillonnage (Hz)
--leader512trames de synchronisation 0x16 en tête
--amp16 000amplitude de crête
--lead-silence, --tail-silence200, 500silences 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

ScriptRôle
dsk_raw2mfm.pyune image brute (secteurs bout à bout) devient un conteneur MFM_DISK
sedoric_inject.pyrange un binaire comme fichier Sedoric dans une image
sedoric_mkbare.pyfabrique une disquette Sedoric « nue », sans commande de démarrage
make_bootable_sedoric.shla 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

Sources dans le dépôt : docs/TOOLS.md, docs/SEDORIC.md.