[Apple 2] Faire un disque virtuel sur PC ?

Placez ici vos trucs et astuces, étalez sans retenue votre savoir-faire et votre science qui va nous permettre de redonner une apparence neuve et fonctionnelle à nos bouzes.

Modérateurs : Papy.G, fneck, Carl

Avatar de l’utilisateur
Eagle Protect II
Messages : 353
Inscription : 22 nov. 2017 22:17

Re: [Apple 2] Faire un disque virtuel sur PC ?

Message par Eagle Protect II »

Pour la suite du projet, il faut faire fonctionner le port parallèle côté PC, ce qui suppose :

1) De la connectique,
2) De la configuration,
3) Du driver et de la programmation.

Donc pour commencer, trouver une prise DB25 et la brancher sur la carte mère :

06-DB25 sur carte mère.jpg
06-DB25 sur carte mère.jpg (101.65 Kio) Consulté 3230 fois

Trouver une fiche DB25 et jouer du fer à souder, ce qui permet de tester les tensions sur le port parallèle :

07-Tensions port LPT.jpg
07-Tensions port LPT.jpg (80.51 Kio) Consulté 3230 fois

Je suis sensé avoir 0V pour une sortie à 0, et +5V pour une sortie à 1. Dans les faits, j'ai 4,2V au lieu de 0V, et 4,9V au lieu de 5V. Pour l'instant cela ne m'inquiète pas, parce que je suis nul en électronique, mais je me doute que les tensions à vide peuvent être variables. Au pire, on règlera ce problème plus tard.


Étape suivante, la configuration du port. Dans le BIOS, nous avons 3 possibilités :

- Mode SPP (Standard Parallel Port), qui sert à piloter une imprimante, avec 8 bits de donnée en sortie du PC, et 5 bits de contrôle en entrée (ready, paper error, etc.). Or, 5 bits en entrée, pour récupérer des signaux du contrôleur Disk II, cela risque d'être un peu léger.

- Mode EPP (Enhanced Parallel Port), qui permet la bi-directionnalité complète sur les 8 bits de données, mais en simplex seulement. Ce mode me convient car je ne vais pas à la fois lire et écrire sur le port.

- Mode ECP (Extended Capabilities Port), qui a été conçu pour augmenter la vitesse de transfert par deux moyens : l'utilisation du canal DMA, et un protocole rudimentaire de compression de données (lorsque la même valeur est envoyée plusieurs fois, il l'envoie une seule fois en précisant le nombre d'occurrences). Ce mode est à éviter absolument, car cette compression de données fausserait mes transferts, sauf à gérer le protocole de compression, ce que je n'ai pas du tout l'intention de faire !


BIOS configuré en EPP, il faut enfin trouver de quoi piloter ce port par programme.

(à suivre)
Avatar de l’utilisateur
Eagle Protect II
Messages : 353
Inscription : 22 nov. 2017 22:17

Re: [Apple 2] Faire un disque virtuel sur PC ?

Message par Eagle Protect II »

Et donc, la partie programmation.

Nous avons déjà un petit utilitaire fort sympathique : Parallel Port Monitor http://www.01net.com/telecharger/window ... 11282.html qui permet de monitorer ce qui se passe sur le port en temps réel. Mais ce n'est qu'un gadget, il me faut aussi un langage de programmation capable d'accéder au port.

Je vous fais grâce de toutes mes déconvenues, mais j'en arrive à :

PERL 5.26
+ Le module Device::ParallelPort qu'on trouve dans CPAN
+ Le module Device::ParallelPort::drv::win32, également dans CPAN
+ la DLL inpout32.dll, qu'on trouve dans un coin du web : http://www.highrez.co.uk/downloads/inpout32/ et qu'il faut copier dans le répertoire system32 de Windows.

Et enfin les résultats arrivent :

Le script...

Code : Tout sélectionner

	my $port = Device::ParallelPort->new();

	$control = ord($port->get_control());
	$port->set_byte(2, chr($control | 32));		# Pour mettre le port en mode réception (bit 5 à 1)

	while (true) {
		print ord($port->get_byte(0)) . "\n";
	}
...me renvoie la valeur des 8 bits du port parallèle toutes les fractions de secondes.


Vient le grand moment : connecter ma prise à la nappe by-pass du Disk II, en prenant un petit risque (est-ce que ça va exploser ?) mais pas énorme. Pour l'instant je fais l'essai avec le GND du Disk II relié au GND du port parallèle, et le signal READ du Disk II, connecté au bit D0 du port parallèle.

Sur un scan disk de Locksmith 6.0 (qui a le mérite de lire tout le disque et d'y passer 30s), cela donne ceci :

Locksmith 6.0 :

08-Locksmith.jpg
08-Locksmith.jpg (61.76 Kio) Consulté 3227 fois

L'oscilloscope :

09-Oscillo.jpg
09-Oscillo.jpg (27.3 Kio) Consulté 3227 fois

Le petit outil de monitoring qui clignote :

10-Parmon255.png
10-Parmon255.png (2.76 Kio) Consulté 3227 fois
11-Parmon254.png
11-Parmon254.png (2.81 Kio) Consulté 3227 fois

Et mon scipt Perl :

12-Perl receive.png
12-Perl receive.png (3.57 Kio) Consulté 3227 fois

Là, je suis heureux, car la connexion est valable, déjà dans le sens Disk II -> PC, mon script est capable de lire ce le contrôleur envoie sur le lecteur de diskette, donc la suite ne sera que programmation ; ça commence à sentir le bon !
Avatar de l’utilisateur
fneck
Site Admin
Messages : 17423
Inscription : 01 avr. 2007 12:03
Localisation : Drôme Provençale (26)
Contact :

Re: [Apple 2] Faire un disque virtuel sur PC ?

Message par fneck »

C'est un très bon début je trouve 8)
Fabien https://www.system-cfg.com
Les bonnes pratiques de l'utilisateur du forum viewtopic.php?f=14&t=3
Avatar de l’utilisateur
6502man
Messages : 12286
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: [Apple 2] Faire un disque virtuel sur PC ?

Message par 6502man »

Ton projet est très intéressant :D

Si j'ai bien tout compris tu veux émuler sur le PC un lecteur de disquette Apple II ?

Je connais très peu la technique Apple II et du lecteur DISK II, l'encodage est du type CGR ou FM/MFM ?
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Avatar de l’utilisateur
Eagle Protect II
Messages : 353
Inscription : 22 nov. 2017 22:17

Re: [Apple 2] Faire un disque virtuel sur PC ?

Message par Eagle Protect II »

6502man a écrit : 11 mars 2018 22:12 Si j'ai bien tout compris tu veux émuler sur le PC un lecteur de disquette Apple II ?

Je connais très peu la technique Apple II et du lecteur DISK II, l'encodage est du type CGR ou FM/MFM ?
Je ne sais pas si "émuler" est le bon terme, mais oui c'est ça : brancher mon Apple sur le PC, lancer un programme sur le PC dans lequel je lui dis "j'insère la diskette PacMan" (en précisant le chemin du fichier correspondant, diskette-pacman.dsk"), et booter l'Apple.

J'appellerais plutôt cela un "serveur de diskettes".

Sur l'encodage je ne connais pas les termes que tu emploies, mais il me semble qu'ils concernent la manière dont la magnétisation est réalisée au niveau de la tête, et qui est gérée par la carte analogique située dans le boitier du lecteur.

Je ne m'en préoccupe pas car je vais intercepter les bits "logiques" qui passent entre le contrôleur et le lecteur. Le CPU dit "je veux envoyer un 1" et j'intercepte ce "1" à la sortie du contrôleur et avant la carte analogique.

La seule question à laquelle je n'ai pas encore la réponse (que j'avais posée plus haut), est, sachant qu'un "1" est codé comme un "reversal" (changement de 1 à 0 ou l'inverse), est-ce que je vais récupérer un "1" ou un "reversal" ? Mais on verra bien quand je commencerai à synchroniser la réception des données et que je pourrai afficher les bits reçus.
mar II

[Apple 2] Faire un disque virtuel sur PC ?

Message par mar II »

Il existe le source d'un lecteur sdcard connecté sur une interface Disk II

Dedans il y a les routines de codage et décodage de l'interface disk II
il me semble que c'est sur le site de Nishida
mere cu foietaj :)

[Apple 2] Faire un disque virtuel sur PC ?

Message par mere cu foietaj :) »

Le source doit être sur cette page

http://tulip-house.ddo.jp/DIGITAL/SDISK2/english.html
Avatar de l’utilisateur
Eagle Protect II
Messages : 353
Inscription : 22 nov. 2017 22:17

Re: [Apple 2] Faire un disque virtuel sur PC ?

Message par Eagle Protect II »

mere cu foietaj :) a écrit : 12 mars 2018 21:03 Le source doit être sur cette page

http://tulip-house.ddo.jp/DIGITAL/SDISK2/english.html
Yes, c'est un émulateur physique pour carte SD. Je regarderai de plus près mais apparemment il y a quand même un processeur qui gère le programme. C'est donc un outil de nature différente de mon projet.

En attendant, petite victoire de la soirée, le branchement de mes 8 bits de données :

D0 = Têta0 (moteur pas à pas)
D1 = Têta1
D2 = Têta2
D3 = Têta3
D4 = RD DATA
D5 = WR REQ
D6 = WR DATA
D7 = -ENABL1

Il manque une entrée pour WR PROT (que je pourrais prendre sur une autre entrée du port parallèle, paper error ou ce qu'on veut), mais a priori il n'y en a aucune utilité. L'utilisateur gèrera la protection de ses diskettes virtuelles par l'attribut "READ ONLY" de Windows plutôt que par un signal Write Protect simulé sur le PC (et que je serais bien embêté de stocker dans un fichier DSK sans le corrompre).

13-Branchement 8 bits.jpg
13-Branchement 8 bits.jpg (42.31 Kio) Consulté 3163 fois

Et avec mon script rudimentaire :

14-Essai 8 bits.png
14-Essai 8 bits.png (6.62 Kio) Consulté 3163 fois

Étapes suivantes : tout est dans la programmation.

1) Trouver un module PERL pour gérer le temps réel, si ça existe (car il va bien falloir un jour que je décompte les 4 µs entre chaque bit),
2) Synchoniser ma lecture avec les bits envoyés à la bonne vitesse,
3) Assembler les bits en octets et sauvegarder cela dans un fichier binaire.

Quand j'en serai là : Champomy !
pere cu foietaj

[Apple 2] Faire un disque virtuel sur PC ?

Message par pere cu foietaj »

En fait non c'est exactement la même chose, dans l'avr c'est du bit banging sur un port

En prime rien n'empeche d'ameliorer le projet et faire de l'assemblage /désassemblage dans un avr connecté au port parallel
Ou un port série usb connecté a un ftdi

Pas fait le calcul mais un avr a 20Mhz doit sortir sur le port série et un bon débit


Je compte faire quelque chose de similaire mais dans un fpga lattice (c'est pour ca que je me suis fait livrer des tinyfpga)
http://tinyfpga.com/
Avatar de l’utilisateur
Eagle Protect II
Messages : 353
Inscription : 22 nov. 2017 22:17

Re: [Apple 2] Faire un disque virtuel sur PC ?

Message par Eagle Protect II »

Hum... avr, banging, ftdi, fpga... je n'ai pas le dictionnaire ! J'ai cliqué sur le lien que tu donnes, et j'y vois une carte électronique avec un processeur dessus. Soit le concepteur y a mis un programme pour faire ce que je veux faire (solution toute faite), soit le processeur est programmable et c'est toi qui vas le programmer (dans ce cas on fait la même chose, mais moi sur un PC, toi sur une carte programmable). Bon, le plus important est au bout du compte d'arriver à notre but, de démontrer que ça marche, d'expliquer comment et de le partager pour que d'autres puissent l'utiliser. Quand ta solution fonctionnera, fais-nous un compte rendu !

De mon côté j'ai trouvé un module Perl pour gérer le temps réel : Time::HiRes::Value. Ça marche, j'arrive à récupérer la date (calculée en µs depuis le 1er janvier 1970 à 1h du mat).

Mais quand je fais :

Code : Tout sélectionner

$time1 = Time::HiRes::Value->now();
$time2 = Time::HiRes::Value->now();
print $time2 - $time1;
Je trouve en moyenne 0.000010s, soit 10 µs. Impossible de se synchroniser avec un débit de 4µs... c'est l'inconvénient d'utiliser un langage interprété.

Parade : compiler le code, ce qui est possible avec le module PAR::Packer. L'exécutable de mes 3 lignes de codes fait 7 Mo ! En fait ce n'est pas un compilateur mais un utilitaire qui met dans un pack exécutable le code et l'interpréteur. Cela n'a donc aucun intérêt en termes de performances puisque le code sera de toute façon interprété.

Donc soit je trouve un vrai compilateur qui créé un vrai code en langage machine, soit il faut que je change de langage.

Affaire à suivre...
capsuni cu frisca

Re: [Apple 2] Faire un disque virtuel sur PC ?

Message par capsuni cu frisca »

Suivre un flot de bits dans un micro controleur c'est facile parce qu'il ne fait quasiment que ca
Faire la même chose sur une machine beaucoup plus récentes c'est beaucoup plus difficile

Il suffit d'une interruption un peu longue et on se desynchronise du flux
ou sur un multi tache, un tache consomme plein de resources et même chose on desynchronise

Pour le langage, le C ca doit le faire, les compilos sont disponible partout

Mon idée avec le tinyfpga est de connecter le disk II a un port série usb

En fait en gros déporter la RWTS dans le fpga et le commander par le port série

- read block
- write block
- format

Je n'ai pas commencé pour moi c'est un projet futur, j'avais pensé a tinyfpga ou tinyfpga + atmega1284
L'interet de l'atmega 1284 est qu'il a 16k de ram et plein de flash

C'est a dire la possibilité de lire / ecrire en mode bloc ou même d'implementer un dos capable de faire des operations de haut niveau
open/close/read/write...
Avatar de l’utilisateur
6502man
Messages : 12286
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: [Apple 2] Faire un disque virtuel sur PC ?

Message par 6502man »

Tu veux faire un programme sur PC , dans ce cas pourquoi pas en C, une fois compilé ca seras le plus rapide ?
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Avatar de l’utilisateur
Eagle Protect II
Messages : 353
Inscription : 22 nov. 2017 22:17

Re: [Apple 2] Faire un disque virtuel sur PC ?

Message par Eagle Protect II »

6502man a écrit : 15 mars 2018 10:54 Tu veux faire un programme sur PC , dans ce cas pourquoi pas en C, une fois compilé ca seras le plus rapide ?
Parce que je n'aime paaaaas le C ! (je trouve la syntaxe absconse, ça m'ééééénerve !)

J'ai fait beaucoup de TurboPascal dans ma folle jeunesse, puis de l'ADA (oui oui !) pendant mes études, mais ça fait un peu vieillot tout ça... et puis Ada, c'est vraiment trop pénible (genre : tu déclares que A est un integer, et B est un longint ; quand tu vas faire B := A il va t'aboyer un type mismatch parce que tu n'as pas fait la conversion !). À l'inverse, en PERL tu dis que A = "cinq" et B = "VIII", il va te pratiquement te faire A+B = 13 (j'exagère, mais c'est presque ça !). Donc je prendrais volontiers ADA pour une application bancaire, mais pour mon bricolage, PERL irait très bien.

Bref, j'aimerais bien un langage plus "moderne", plus souple que ceux de ma folle jeunesse, je pensais à Python mais il est également interprété. Donc un langage qui se compile, qui tourne sous XP, avec un compilateur gratuit, et sans environnement de développement de pro ; on est dans un contexte de bricolage, pas d'atelier de génie logiciel... Et enfin un langage facile à apprendre.
Je cherche la perle rare !
PS : et pas VBA, il m'énerve encore plus que C !
Avatar de l’utilisateur
F1FCO
Messages : 501
Inscription : 26 juin 2015 23:22
Localisation : NIMES

Re: [Apple 2] Faire un disque virtuel sur PC ?

Message par F1FCO »

Bonjour Arnaud,
personnellement, je ne comprends et je n'utilise que le BASIC
Regardes du coté des compilateurs BASIC en freeware : FREEBASIC, PUREBASIC, SMALL BASIC...

Pierre.
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: [Apple 2] Faire un disque virtuel sur PC ?

Message par hlide »

Eagle Protect II a écrit : 15 mars 2018 15:06
6502man a écrit : 15 mars 2018 10:54 Tu veux faire un programme sur PC , dans ce cas pourquoi pas en C, une fois compilé ca seras le plus rapide ?
Parce que je n'aime paaaaas le C ! (je trouve la syntaxe absconse, ça m'ééééénerve !)
Bizarre... si tu trouves la syntaxe du C absconse alors que penser de celle du Perl ?
Répondre