Cassettes, disquettes et sauvegardes
L’Oric chargeait ses programmes depuis une cassette audio, puis depuis des disquettes de 3 pouces. Phosphoric fait les deux, du raccourci instantané jusqu’au signal de la cassette et au temps d’un vrai lecteur.
Dans cette page
La cassette
Les programmes sur cassette sont des fichiers .tap : la suite des blocs que la ROM écrirait sur
la bande. Phosphoric les charge de trois façons :
| Mode | Option | Comment | Pour qui |
|---|---|---|---|
| Injection directe | -t prog.tap -f | le contenu est copié en mémoire, puis le programme est lancé | presque tout, instantanément |
| ROM corrigée | -t prog.tap | CLOAD de la ROM, dont la lecture de la bande est corrigée pour lire le fichier | ce qui passe par la ROM |
| Au signal | -t prog.tap --tape-signal | le vrai signal de la cassette arrive sur l’entrée CB1 du VIA, et la ROM le lit comme sur la machine | chargeurs maison et protections |
Le mode au signal est exact au cycle : il est cadencé par l’horloge maître, et sa parité de trame a été corrigée en 2.0 (impaire, pas paire). Il n’est pas le défaut, par choix : il charge le même contenu en 2,4 fois plus de cycles.
La gestion des cassettes suit plusieurs blocs, rechaîne un programme BASIC après CLOAD, et sait
écrire (CSAVE). L’outil tap2wav fait l’inverse : il transforme un .tap en fichier audio, que
l’on peut faire jouer à un vrai Oric.
Les disquettes : le Microdisc
Le Microdisc est une interface de disquette de l’Oric : un contrôleur WD1793, jusqu’à quatre lecteurs (A à D), et une ROM qui vient se superposer à celle du BASIC.
oric1-emu -r roms/basic10.rom --disk-rom roms/microdis.rom -d SEDO40u.DSK
Quand le Microdisc prend la main, la ROM BASIC disparaît : $C000-$DFFF devient de la RAM, et la ROM
du contrôleur apparaît en $E000. Les registres du contrôleur sont en $0310-$031F.
Le temps d’un vrai lecteur
Par défaut, le WD1793 suit le temps mécanique d’un lecteur 3 pouces :
- les vitesses de pas de la fiche technique : 6, 12, 20 ou 30 ms par piste ;
- une rotation à 300 tours par minute : il faut attendre que le secteur passe sous la tête ;
- « secteur introuvable » (Record Not Found) après 5 impulsions d’index sans le trouver.
--fdc-timing fast rend les délais courts d’avant, pour qui préfère la vitesse.
Ce que le contrôleur signale
| Situation | Ce que fait Phosphoric |
|---|---|
| Le processeur ne lit pas un octet dans les 32 µs | le bit LOST DATA est levé (et compté en fin de session) |
| Disquette protégée en écriture | l’écriture est refusée, bit 6 du statut ; déduit aussi d’un .dsk en lecture seule sur l’hôte |
| Lecture multi-secteur en fin de piste | fin sur « secteur introuvable », comme le vrai contrôleur |
| Secteur abîmé | --bad-sector [D:]S:T:N le rend illisible ; le défaut suit la disquette d’un lecteur à l’autre |
Les écritures
Les écritures d’un jeu restent par défaut en mémoire et dans les sauvegardes d’état. Avec
--disk-writeback, une disquette modifiée est réécrite dans son fichier .dsk à la sortie, ou quand
on l’éjecte depuis le menu F1.
L’autre interface : Jasmin
L’interface Jasmin utilise un contrôleur WD177x en $03F4-$03FF et une ROM d’amorçage de 2 Ko en
$F800. Elle démarre les disquettes TDOS. Elle exclut le Microdisc, et aussi le DTL 2000 et la carte
Mageco, qui recouvrent les mêmes adresses.
oric1-emu -r roms/basic11b.rom --jasmin-rom ROM_JASMIN -d DISQUE.DSK
Le format Sedoric
Sedoric est un système de disquette très répandu sur Oric. Ses images .dsk sont au format
MFM_DISK : un en-tête de 256 octets (faces, pistes, géométrie), puis un bloc de 6 400 octets
par piste, toutes les pistes de la face 0 d’abord. Chaque piste contient ses secteurs avec leurs
marques et leur CRC-16.
| Piste 20 | Rôle |
|---|---|
| secteur 1 | le nom du disque et la commande de démarrage (INIST, 60 octets) |
| secteur 2 | la table d’occupation : secteurs libres, nombre de fichiers |
| secteur 4 | le catalogue, par entrées de 16 octets (nom, extension, piste, secteur, taille, statut) |
Les outils du projet en tirent parti : tap2sedoric met un .tap dans une disquette, sedoric-info
inspecte une disquette, dsk2hfe produit une image HFE pour les émulateurs de lecteur (HxC,
Gotek, Greaseweazle). Voir Les outils.
Les sauvegardes d’état
Une sauvegarde d’état (.ost) fige toute la machine dans un fichier binaire :
- vérifié par un CRC32 ;
- découpé en 20 types de sections : processeur, mémoire, VIA, PSG, vidéo, horloge, clavier, contrôleur, disquettes, secteurs abîmés, cassette, série, métadonnées, plus une section par carte (ULA-NG, Mageco, DTL 2000, Jasmin, SP0256, MEA 8000) ;
- une section inconnue est ignorée : un fichier plus ancien ou plus récent reste lisible ;
- les ROM, les ressources de l’hôte et les tables recalculables n’y sont pas.
C’est un point de reprise exact : prise en pleine trame, elle reprend avec la même position du faisceau, le même état du VIA et le même échantillon d’interruption qu’une exécution sans interruption. Prise au milieu d’un transfert de disquette, elle recalcule au chargement le secteur en cours de lecture ou d’écriture.
| Faire | Comment |
|---|---|
| Sauvegarder vite, recharger vite | F2, F4 |
| Sauvegarder à la sortie, charger au lancement | --save-state FICHIER, --load-state FICHIER |
| Choisir dans une liste | menu F1, ligne « Instantanés » (snapshots/etatNNNN.ost) |
| Dans le navigateur | bouton de sauvegarde et de restauration .ost |
Le partage avec l’hôte
--hostfs DOSSIER donne à l’Oric émulé l’accès à un dossier de l’ordinateur hôte. La cartouche LOCI
offre aussi un stockage de masse complet (flash, clé USB, carte SD) : voir Le LOCI.