Aller au contenu
Phosphoricwiki
Sommaire

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 :

ModeOptionCommentPour qui
Injection directe-t prog.tap -fle contenu est copié en mémoire, puis le programme est lancépresque tout, instantanément
ROM corrigée-t prog.tapCLOAD de la ROM, dont la lecture de la bande est corrigée pour lire le fichierce qui passe par la ROM
Au signal-t prog.tap --tape-signalle vrai signal de la cassette arrive sur l’entrée CB1 du VIA, et la ROM le lit comme sur la machinechargeurs 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

SituationCe que fait Phosphoric
Le processeur ne lit pas un octet dans les 32 µsle bit LOST DATA est levé (et compté en fin de session)
Disquette protégée en écriturel’é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 pistefin 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 20Rôle
secteur 1le nom du disque et la commande de démarrage (INIST, 60 octets)
secteur 2la table d’occupation : secteurs libres, nombre de fichiers
secteur 4le 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.

FaireComment
Sauvegarder vite, recharger viteF2, F4
Sauvegarder à la sortie, charger au lancement--save-state FICHIER, --load-state FICHIER
Choisir dans une listemenu F1, ligne « Instantanés » (snapshots/etatNNNN.ost)
Dans le navigateurbouton 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.

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