Un client TPDD implémenté en pure* bash.
C'est du pur bash à l'exception de ce qui suit :
sttyest nécessaire une fois au démarrage pour configurer le port série.
mkfifoest utilisé une fois au démarrage
_sleep()sans
/usr/bin/sleep.
C'est ça. Il n'y a pas d'autres commandes ou dépendances externes, pas même de fourches enfants (pas de backticks ou de pipes).
N'importe quel Linux, macos/osx, bsd, n'importe quelle architecture.
D'autres Unix comme SCO, Solaris, etc. devraient fonctionner avec seulement des ajustements mineurs (noms de périphériques tty, arguments de ligne de commande stty).
Windows est un problème mais peut fonctionner avec effort.
Ne fonctionne pas dans WSL2 .
Peut-être que cette solution de contournement com2tcp fonctionne. Non testé.
Devrait fonctionner dans WSL1 . Non testé.
Ou peut-être que cela fonctionne enfin dans WSL2 maintenant.
Cette page décrit comment le faire fonctionner en créant un noyau personnalisé, mais indique également que cela n'est plus nécessaire pour le matériel courant. Non testé.
Encore une autre option est que les gens ont signalé que cela fonctionne tant que vous accédez d'abord au port com à partir de Windows, en utilisant n'importe quoi, IE mastic, ouvrez simplement le port une fois en utilisant n'importe quelle application, puis fermez l'application et c'est tout. Non testé.
git clone git@github.com:bkw777/pdd.sh.git cd pdd.sh sudo make install
pdd [tty_device] [command [args...]] [;commands...]
Sans arguments, il s'exécutera en mode de commande interactif.
Vous obtenez une
TPDD($mode)>invite où vous pouvez entrer des commandes.
tty_device sera automatiquement détecté dans la plupart des cas.
À défaut, vous obtiendrez une liste à sélectionner.
Ou vous pouvez en spécifier un comme premier argument sur la ligne de commande.
Accès aux fichiers TPDD1/TPDD2
commande | arguments | la description |
---|---|---|
statut | Signaler l'état du lecteur/disque (de base) | |
D | condition | Signaler l'état du lecteur/disque (plus informatif) | |
b | banque | <0-1> | (TPDD2 uniquement) Sélectionner la banque 0 ou 1 affecte list/load/save/del/copy/ren/read_smt |
ls | liste | directeur | Liste du répertoire | |
rm | del | nom de fichier | Supprimer un fichier |
cp | copie | nom_fichier_src nom_fichier_destination | Copier un fichier (sur disque à sur disque) |
mv | Ren | nom_fichier_src nom_fichier_destination | Renommer un fichier |
charger | nom_fichier_disque [nom_fichier_local] | Lire un fichier du disque |
enregistrer | nom_fichier_local [nom_fichier_disque] | Écrire un fichier sur le disque |
format | Formater le disque avec le format de système de fichiers "operation-mode" |
Accès au secteur TPDD1
commande | arguments | La description |
---|---|---|
F | ff | fdc_format | [0-6] | Formatez le disque avec des secteurs logiques de taille <size_code> et sans système de fichiers en "mode de fonctionnement". codes de taille : 0=64 1=80 2=128 3=256 4=512 5=1024 6=1280 octets par secteur logique. (par défaut 1280 si non spécifié) |
R | rl | read_logical | [0-79] [1-20] [nom de fichier] | Lire un secteur logique à l'adresse : physical(0-79) logical(1-20). Enregistrer sous le nom de fichier s'il est donné, sinon affichage à l'écran. par défaut physique 0 logique 1 |
Un | ri | read_id | [0-79] [nom de fichier] | Lire le secteur physique par défaut des données d'ID de secteur 0 |
B | wi | id_écriture | [0-79] <ignoré> 12_hex_pairs... | Écrivez les données d'identification de secteur de 12 octets. |
W | wl | écriture_logique | <0-79> <1-20> paires_hexadécimales... | Ecrire un secteur logique à l'adresse : physical(0-79) logical(1-20). |
rp | read_physical | [0-79] [nom de fichier] | Lire tous les secteurs logiques d'un secteur physique secteur physique par défaut 0 écrire dans le nom de fichier sinon s'afficher à l'écran |
Accès au secteur TPDD2
commande | arguments | La description |
---|---|---|
cache_secteur | <piste# 0-79> <secteur# 0-1> <mode 0|2> | Copiez un secteur de données entre le cache de secteur du lecteur et le disque. mode 0 = charger du disque vers le cache mode 2 = vider le cache vers le disque |
read_cache | <mode 0|1> <décalage 0-252> <longueur 0-252> | Lire <length> octets à <offset> à partir du cache de secteur du lecteur. mode 0 = données de secteur normales mode 1 = métadonnées |
cache_écriture | <mode 0|1> <décalage 0-252> <données...> | Écrivez <data...> à <offset> dans le cache du secteur du lecteur. mode 0 = données de secteur normales mode 1 = métadonnées |
Général/Autre
commande | arguments | La description |
---|---|---|
1 | pdd1 | Sélectionnez le mode TPDD1 | |
2 | pdd2 | Sélectionnez le mode TPDD2 | |
jj | dump_disk | [nom de fichier] | Lire un disque entier et écrire sur le nom du fichier ou l'afficher à l'écran |
rd | restore_disk | <nom de fichier> | Restaurer un disque à partir du nom de fichier |
read_smt | Lire la table de gestion de l'espace (pour TPDD2, lit le SMT de la banque actuellement sélectionnée) |
|
send_loader | <nom de fichier> | Envoyez un programme BASIC à un "Modèle T". Utilisez pour installer un client TPDD. Voir https://github.com/bkw777/dlplus/tree/master/clients |
q | quitter | au revoir | sortir | Commander une pizza | |
bauds | la rapidité | [9600|19200] | Vitesse du port série. La valeur par défaut est 19200. TPDD1 et TPDD2 fonctionnent à 19200. FB-100/FDD-19/Purple Computing fonctionnent à 9600 |
déboguer | [#] | Debug/Verbose level - Basculer entre 0 et 1, ou définir le niveau spécifié 0 = mode débogage désactivé 1 = mode débogage activé >1 = plus verbeux 9 = chaque tpdd_read() ou tpdd_write() crée un fichier journal avec une copie des données |
pdd1_boot | [100|200] | Émulez un modèle 100 ou 200 en exécutant la procédure d'amorçage TPDD1. WIP : le BASIC collecté est bon, le binaire collecté ne l'est pas |
pdd2_boot | [100|200] | Émulez un modèle 100 ou 200 en exécutant la procédure d'amorçage TPDD2. WIP : le BASIC collecté est bon, le binaire collecté ne l'est pas |
Plusieurs commandes peuvent être données à la fois, séparées par ' ; ' pour former une séquence préchargée.
Il existe également un tas de commandes brutes/de débogage de bas niveau qui ne sont pas présentées ici. Voir do_cmd() dans le script.
De plus, certains comportements peuvent être modifiés en définissant des variables d'environnement.
variable | évaluer | effet |
---|---|---|
Bauds | 9600|19200 | Identique à la commande baud ci-dessus |
DÉBOGUER | # | identique à la commande de débogage ci-dessus |
FLOPPY_COMPAT | vrai|faux | (la valeur par défaut est true) Remplir et décompresser automatiquement les noms de fichiers entre la forme naturelle et la forme 6.2 avec espacement rembourré nécessaire pour être compatible avec "Floppy" & "Flopy2". La désactivation vous permet de voir les noms de fichiers réels sur le disque "A .BA "et vous permet d'utiliser l'intégralité du champ de nom de fichier de 24 octets comme vous le souhaitez. |
TPDD_MODEL | 1|2 | (la valeur par défaut est 1) Supposons que le lecteur TPDD connecté est un TPDD1 ou TPDD2 par défaut |
Enfin, le nom par lequel le script est appelé est un autre moyen de choisir entre la compatibilité TPDD1 et TPDD2.
make installinstalle le script en tant que
/usr/local/bin/pdd, et installe également 2 liens symboliques nommés
pdd1et
pdd2.
pdd1 some_commandéquivaut à courir
pdd "1;some_command"
pdd2 some_commandéquivaut à courir
pdd "2;some_command"
Les mêmes commandes peuvent être données soit sur la ligne de commande, soit à l'invite interactive.
Exemple, pour lister le répertoire, où la commande est :
ls, peut être utilisé de l'une des manières suivantes :
pdd lsou
TPDD(opr)> ls
Copier un fichier du disque
pdd load DOSNEC.CO
Copiez un fichier du disque et enregistrez-le sous un autre nom local
pdd load DOSNEC.CO ts-dos_4.1_nec.co
Copier un fichier sur le disque
pdd save ts-dos_4.1_nec.co DOSNEC.CO
Listes de commandes avec ";"
Supprimer le fichier, répertorier le répertoire En mode interactif :
TPDD(opr)> rm DOSNEC.CO ;ls
pdd "rm DOSNEC.CO ;ls"
pdd2 "bank 1 ;save ts-dos_4.1_nec.co DOSNEC.CO ;ls"
État du lecteur/disque
$ pdd1 condition Disk Inserted, Writable
Mode verbeux/débogage
DEBUG=1 pdd ...ou
TPDD(opr)> debug 1
Enregistrez le trafic brut du port série :
faites en sorte que chaque appel à tpdd_read() ou tpdd_write() crée également un fichier local avec une copie de tout ce qui a été réellement lu ou écrit sur le port série.
DEBUG=9 pdd ...ou
TPDD(opr)> debug 9
Découvrez la taille du secteur logique d'un disque TPDD1 La
plupart des disques sont formatés avec 20 secteurs logiques de 64 octets par secteur physique, car c'est ce que fait la fonction de formatage du mode de fonctionnement dans le micrologiciel, mais il existe des exceptions. Le disque utilitaire TPDD1 ressemble à un disque normal, mais il est en fait formaté avec 1 secteur logique de 1280 octets par secteur physique. Vous devez le savoir pour utiliser certaines commandes du mode FDC.
La taille du secteur logique avec lequel un disque est formaté peut être vue en exécutant les commandes read_physical, read_logical ou read_id sur n'importe quel secteur.
Le plus rapide est d'exécuter soit
riou
rlsans arguments :
pdd1 riou
pdd1 rl
Lisez les données d'identification de secteur pour les 80 secteurs physiques (TPDD1)
(en utilisant l'extension du shell bash pour faire quelque chose que le programme ne fournit pas lui-même)
pdd1 ri\ {0..79}\;
Videz un disque TPDD1 entier dans le fichier mydisk.p1h
Suggestion : utilisez *.p1h comme nom de fichier pour les disques TPDD1 au format de vidage hexadécimal
pdd1 dump_disk mydisk.p1h
Videz un disque TPDD2 entier dans le fichier mydisk.p2h
Suggestion : utilisez *.p2h comme nom de fichier pour les disques TPDD2 au format de vidage hexadécimal
pdd2 dump_disk mydisk.p2h
Restaurez un disque TPDD1 entier à partir de mydisk.p1h
(recréez le disque utilitaire TPDD1)
pdd1 restore_disk TPDD1_26-3808_Utility_Disk.p1h
Restaurez un disque TPDD2 entier à partir de mydisk.p2h
(recréez le disque utilitaire TPDD2)
pdd2 restore_disk TPDD2_26-3814_Utility_Disk.p2h
Envoyer un programme de chargement BASIC à un "Modèle T"
Cette fonction n'est pas utilisée avec un lecteur TPDD mais avec un ordinateur "Modèle T" comme un TRS-80 Modèle 100, généralement pour installer un client TPDD comme TS-DOS, TEENY, ou DSKMGR.
pdd send_loader TS-DOS.100
http://tandy.wiki/TPDD
https://archive.org/details/TandyPortableDiskDriveSoftwareManual26-3808s/ ( copie locale )
http://www.bitchin100.com/wiki/index.php?title=Base_Protocol
http:// www.bitchin100.com/wiki/index.php?title=Desklink/TS-DOS_Directory_Access
http://www.bitchin100.com/wiki/index.php?title=TPDD-2_Sector_Access_Protocol
https://www.ordersomewherechaos.com/ rosso/fetish/m102/web100/docs/pdd2-sector-0.html
https://www.ordersomewherechaos.com/rosso/fetish/m102/web100/docs/pdd-sector-access.html
https://trs80stuff. net/tpdd/tpdd2_boot_disk_backup_log_hex.txt