[Thomson] SDDRIVE
Modérateurs : Papy.G, fneck, Carl
Re: [Thomson] SDDRIVE
Effectivement, les modules Catalex ne sont pas tous équivalents. En particulier les versions 1.0 du 09/02/2013 ont un buffer Fairchild V125, alors que les versions 1.0 du 11/01/2013 ont un buffer Texas Instruments LV125A. Les seuils de basculement entre l'état bas et l'état haut ne sont pas identiques, je l'ai constaté lors de mes premiers essais du module TO8SD en 2013. Connaissant le problème, j'ai essayé les deux versions avec SDDRIVE. Avec le MO5 les deux fonctionnent bien, avec le TO8 les deux ne fonctionnent pas.
Pareil pour l'analyseur logique, j'avais déjà remarqué. Entre la mauvaise qualité de l'appareil et la longueur des fils, il y a beaucoup de raisons de perturber le montage, quelquefois dans le mauvais sens mais aussi quelquefois dans le bon sens : j'ai déjà eu un module qui marchait bien avec l'analyseur logique, et il ne marchait plus s'il était débranché. J'ai donc fait des tests avec et sans analyseur.
Un autre problème bien connu est la longueur du bus. Avec mon tripleur de bus à base de nappe à 20 fils il y a de subtiles différences selon la distance du module par rapport au connecteur de l'ordinateur. J'ai donc fait des essais avec le module SDDRIVE connecté directement au bus d'extension de l'ordinateur. Mais il y a quand même quelques centimètres de fils et les perturbations viennent peut-être de l'absence de protection contre les rebonds ou des parasites. A ces fréquences de l'ordre du MHz il se produit des phénomènes curieux.
Je soupçonne de plus en plus des anomalies dans les signaux du bus d'adresse, et je vais poursuivre les investigations dans ce sens. Le plus étonnant est la différence de comportement entre le TO8 et le MO5, je n'arrive pas à l'expliquer. Il faudra que j'essaie aussi avec un MO6.
[Edit]
Essai réalisé avec le MO6 : tout fonctionne parfaitement bien, comme avec le MO5.
Pour cet essai, exactement le même matériel, avec les mêmes cartes SD, a été utilisé. J'ai simplement débranché du TO8 pour brancher sur le MO6 sans rien changer. Le TO8 a bien une particularité, mais laquelle ? Je vais en essayer plusieurs, pour voir s'il y a une différence.
J'ai envisagé une erreur d'adresse, puisque la carte mémoire des TO et des MO est différente. Mais dans certaines conditions "anormales" (tension 5,2V abaissée par une LED en série) le montage fonctionne, donc le programme n'est pas en cause.
Pareil pour l'analyseur logique, j'avais déjà remarqué. Entre la mauvaise qualité de l'appareil et la longueur des fils, il y a beaucoup de raisons de perturber le montage, quelquefois dans le mauvais sens mais aussi quelquefois dans le bon sens : j'ai déjà eu un module qui marchait bien avec l'analyseur logique, et il ne marchait plus s'il était débranché. J'ai donc fait des tests avec et sans analyseur.
Un autre problème bien connu est la longueur du bus. Avec mon tripleur de bus à base de nappe à 20 fils il y a de subtiles différences selon la distance du module par rapport au connecteur de l'ordinateur. J'ai donc fait des essais avec le module SDDRIVE connecté directement au bus d'extension de l'ordinateur. Mais il y a quand même quelques centimètres de fils et les perturbations viennent peut-être de l'absence de protection contre les rebonds ou des parasites. A ces fréquences de l'ordre du MHz il se produit des phénomènes curieux.
Je soupçonne de plus en plus des anomalies dans les signaux du bus d'adresse, et je vais poursuivre les investigations dans ce sens. Le plus étonnant est la différence de comportement entre le TO8 et le MO5, je n'arrive pas à l'expliquer. Il faudra que j'essaie aussi avec un MO6.
[Edit]
Essai réalisé avec le MO6 : tout fonctionne parfaitement bien, comme avec le MO5.
Pour cet essai, exactement le même matériel, avec les mêmes cartes SD, a été utilisé. J'ai simplement débranché du TO8 pour brancher sur le MO6 sans rien changer. Le TO8 a bien une particularité, mais laquelle ? Je vais en essayer plusieurs, pour voir s'il y a une différence.
J'ai envisagé une erreur d'adresse, puisque la carte mémoire des TO et des MO est différente. Mais dans certaines conditions "anormales" (tension 5,2V abaissée par une LED en série) le montage fonctionne, donc le programme n'est pas en cause.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: [Thomson] SDDRIVE
Nouvel essai ce matin avec un TO8D : l'interface SDDRIVE fonctionne parfaitement bien, comme avec le MO6 et le MO5.
D'un côté ça me rassure : le schéma de SDDRIVE est bon et le logiciel fonctionne aussi bien sur TO que sur MO.
D'un autre côté je comprends de moins en moins cette incompatibilité avec le TO8.
Nouveaux essais prévus avec d'autres TO8 pour faire avancer le schmilblick.
D'un côté ça me rassure : le schéma de SDDRIVE est bon et le logiciel fonctionne aussi bien sur TO que sur MO.
D'un autre côté je comprends de moins en moins cette incompatibilité avec le TO8.
Nouveaux essais prévus avec d'autres TO8 pour faire avancer le schmilblick.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
-
- Messages : 7986
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: [Thomson] SDDRIVE
Oui c'est peut-être le TO8 de test qui pose problème.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: [Thomson] SDDRIVE
Nouveaux essais de l'interface SDDRIVE :
- Avec un TO7/70 : OK
- Avec un autre TO8 : même problème qu'avec le premier
Donc en résumé l'interface fonctionne bien avec les MO5, MO6, TO7/70, TO8D.
Elle ne fonctionne pas avec deux TO8 différents.
Pourquoi ? Le mystère reste entier...
A noter que le dernier TO8, quand je l'ai mis sous tension, était alimenté en 5,28V. Pas d'impact apparent sur le fonctionnement, mais c'est hors normes pour les circuits logiques. J'ai donc ajusté l'alimentation à 5,0V avant de faire le test de SDDRIVE.
Demain j'essaierai deux ou trois autres TO8 pour être sûr.
- Avec un TO7/70 : OK
- Avec un autre TO8 : même problème qu'avec le premier
Donc en résumé l'interface fonctionne bien avec les MO5, MO6, TO7/70, TO8D.
Elle ne fonctionne pas avec deux TO8 différents.
Pourquoi ? Le mystère reste entier...
A noter que le dernier TO8, quand je l'ai mis sous tension, était alimenté en 5,28V. Pas d'impact apparent sur le fonctionnement, mais c'est hors normes pour les circuits logiques. J'ai donc ajusté l'alimentation à 5,0V avant de faire le test de SDDRIVE.
Demain j'essaierai deux ou trois autres TO8 pour être sûr.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
- fneck
- Site Admin
- Messages : 17526
- Inscription : 01 avr. 2007 12:03
- Localisation : Drôme Provençale (26)
- Contact :
Re: [Thomson] SDDRIVE
C'est vraiment bizarre cette histoire de TO8
Fabien https://www.system-cfg.com
Les bonnes pratiques de l'utilisateur du forum viewtopic.php?f=14&t=3
Les bonnes pratiques de l'utilisateur du forum viewtopic.php?f=14&t=3
Re: [Thomson] SDDRIVE
Est ce que tu as fait le test avec un autre type de buffer que le 74LS125 ? par exemple avec un 74LS07 74LS241 ?
Ou du type 74HC ou 74HCT (plus rapide) ?
Ou ça n'a aucun impact sur le fonctionnement ?
Ou du type 74HC ou 74HCT (plus rapide) ?
Ou ça n'a aucun impact sur le fonctionnement ?
Re: [Thomson] SDDRIVE
Tous les Thomson sont en technologie LS, les niveaux ne sont pas compatibles avec la série HC. La série HCT pourrait convenir, mais elle est un peu plus lente, et je préfère ne pas mélanger. Le 74LS07 ne convient pas (il n'a que deux états en sortie). Le 74LS241 est peut-être utilisable mais je n'ai pas essayé, il faudrait pour cela faire un nouveau prototype et c'est très long.
Plutôt que de tester des solutions au hasard, je préfère mettre en évidence la cause du problème et je vais faire des mesures pour la déterminer scientifiquement. Finalement c'est une énigme assez passionnante, car il n'y a pratiquement aucune différence de schéma entre le TO8 et le TO8D, à part l'alimentation et le condensateur X2 anti-parasites. Personne n'aurait pu prévoir ce comportement, mais il a une raison et je la trouverai.
Plutôt que de tester des solutions au hasard, je préfère mettre en évidence la cause du problème et je vais faire des mesures pour la déterminer scientifiquement. Finalement c'est une énigme assez passionnante, car il n'y a pratiquement aucune différence de schéma entre le TO8 et le TO8D, à part l'alimentation et le condensateur X2 anti-parasites. Personne n'aurait pu prévoir ce comportement, mais il a une raison et je la trouverai.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
- gleike
- Messages : 1349
- Inscription : 16 oct. 2014 11:12
- Localisation : Ludres (54710) Meurthe & Moselle
Re: [Thomson] SDDRIVE
Les roms des TO8D sont elles différentes des roms des TO8 ?
Re: [Thomson] SDDRIVE
Les roms BASIC 1.0 et BASIC512 sont identiques pour tous les TO8 et TO8D que j'ai pu analyser.
Il y a deux ou trois roms différentes connues pour le moniteur TO8, une seule rom connue pour le TO8D. Ces roms sont assez semblables mais pas identiques. La plus grosse différence est le logo (TO8 ou TO8D). Il est difficile à priori de trouver dans le moniteur une raison au comportement différent de SDDRIVE, toutefois l'hypothèse d'un problème soft n'est pas exclue.
Il y a deux ou trois roms différentes connues pour le moniteur TO8, une seule rom connue pour le TO8D. Ces roms sont assez semblables mais pas identiques. La plus grosse différence est le logo (TO8 ou TO8D). Il est difficile à priori de trouver dans le moniteur une raison au comportement différent de SDDRIVE, toutefois l'hypothèse d'un problème soft n'est pas exclue.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: [Thomson] SDDRIVE
La mise au point de SDDRIVE se poursuit. C'est plus difficile que je l'imaginais, mais ça avance. La preuve avec cette démonstration de musique que je viens d'entendre pour la première fois ce matin sur un MO5. Elle m'a remonté le moral après des heures de galère sur le projet.
Pour résumer, c'est l'équivalent de SDMOTOPLAY avec une fréquence d'échantillonnage deux fois plus élevée. Sans être encore de la haute-fidélité, je trouve que c'est bien pour un MO5. Qu'en pensez-vous ?
Remarquez la vitesse d'affichage de l'image. Elle montre bien la différence de débit avec une disquette (à peu près quatre fois plus).
Pour résumer, c'est l'équivalent de SDMOTOPLAY avec une fréquence d'échantillonnage deux fois plus élevée. Sans être encore de la haute-fidélité, je trouve que c'est bien pour un MO5. Qu'en pensez-vous ?
Remarquez la vitesse d'affichage de l'image. Elle montre bien la différence de débit avec une disquette (à peu près quatre fois plus).
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: [Thomson] SDDRIVE
Si c'était facile, cela n'aurait aucun intérêt .
Je ne suis pas mélomane, mais je trouve ça très bien.
Je ne suis pas mélomane, mais je trouve ça très bien.
Patrick
Re: [Thomson] SDDRIVE
Après de nombreux tests, j'ai pu mettre en évidence une anomalie :
Le signal d'horloge SPI est généré par un 74LS133 (porte NAND à 13 entrées). C'est un créneau de 1µs que l'on voit bien avec l'analyseur logique. Mais on voit aussi qu'il est précédé, 1µs plus tôt, d'un "glitch" de 42 nanosecondes. Ce glitch est la cause de tous les problèmes rencontrés.
Curieusement, il n'y a pas de défaut quand le programme d'initialisation de la carte SD est en RAM ($9000-$9FFF). C'est le cas pour SDDRIVE_PLAY (démo Imagine), qui fonctionne parfaitement bien. Je l'ai lancé des dizaines de fois sans aucun problème. Le glitch apparaît lorsque le programme d'initialisation est dans une EPROM ($A000-$A6FF). Et en particulier avec le contrôleur SDDRIVE.
Les lignes d'adresse, en entrée du 74LS133, sont déjà filtrées par une résistance de 100 ohms en série suivie d'un condensateur de 100pF en parallèle (comme dans l'extension MO5). Je peux essayer d'augmenter la valeur de la résistance et/ou du condensateur, ou mettre aussi un filtre en sortie du 74LS133. Qu'en pensent les électroniciens ? Y-a-t'il des techniques connues et éprouvées pour supprimer ce genre d'erreur ?
Le signal d'horloge SPI est généré par un 74LS133 (porte NAND à 13 entrées). C'est un créneau de 1µs que l'on voit bien avec l'analyseur logique. Mais on voit aussi qu'il est précédé, 1µs plus tôt, d'un "glitch" de 42 nanosecondes. Ce glitch est la cause de tous les problèmes rencontrés.
Curieusement, il n'y a pas de défaut quand le programme d'initialisation de la carte SD est en RAM ($9000-$9FFF). C'est le cas pour SDDRIVE_PLAY (démo Imagine), qui fonctionne parfaitement bien. Je l'ai lancé des dizaines de fois sans aucun problème. Le glitch apparaît lorsque le programme d'initialisation est dans une EPROM ($A000-$A6FF). Et en particulier avec le contrôleur SDDRIVE.
Les lignes d'adresse, en entrée du 74LS133, sont déjà filtrées par une résistance de 100 ohms en série suivie d'un condensateur de 100pF en parallèle (comme dans l'extension MO5). Je peux essayer d'augmenter la valeur de la résistance et/ou du condensateur, ou mettre aussi un filtre en sortie du 74LS133. Qu'en pensent les électroniciens ? Y-a-t'il des techniques connues et éprouvées pour supprimer ce genre d'erreur ?
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: [Thomson] SDDRIVE
Impressionnant!Daniel a écrit : ↑05 déc. 2017 11:15 La mise au point de SDDRIVE se poursuit. C'est plus difficile que je l'imaginais, mais ça avance. La preuve avec cette démonstration de musique que je viens d'entendre pour la première fois ce matin sur un MO5. Elle m'a remonté le moral après des heures de galère sur le projet.
- boris
- Messages : 358
- Inscription : 04 mars 2011 13:55
- Localisation : Normandie (près d'Honfleur)
- Contact :
Re: [Thomson] SDDRIVE
Ouahhhh !!!! je suis bluffé
vraiment bravo Daniel
ps : étant fan des Beatles (67-70) cool d'entendre ce bon vieux John bien qu'a l'époque
il était déjà avec une certaine Yoko ...
vraiment bravo Daniel
ps : étant fan des Beatles (67-70) cool d'entendre ce bon vieux John bien qu'a l'époque
il était déjà avec une certaine Yoko ...
Re: [Thomson] SDDRIVE
Par rapport à vous j'ai un grand privilège : j'ai écouté la démo Imagine avec un vrai MO5
Avec un bon amplificateur et de bonnes enceintes derrière, ça rend encore mieux qu'en émulation. Le seul défaut est un petit bruit de fond parasite généré par les circuits logiques du MO5, mais ça ne s'entend que dans les passages à très faible niveau.
Ci-dessous le programme pour jouer la musique :
Maintenant que l'interface est au point, j'aimerais bien résoudre ce problème de glitch pour finir la mise au point de la partie "contrôleur de disquettes". J'ai hâte de savoir combien de temps il faut pour charger TurboCup. Avec le contrôleur de disquette du TO8D c'est 1'13", avec le contrôleur CS91-280 c'est 56". J'espère arriver à moins de 30" avec SDDRIVE.
Avec un bon amplificateur et de bonnes enceintes derrière, ça rend encore mieux qu'en émulation. Le seul défaut est un petit bruit de fond parasite généré par les circuits logiques du MO5, mais ça ne s'entend que dans les passages à très faible niveau.
Ci-dessous le programme pour jouer la musique :
Code : Tout sélectionner
/**************************************************\
* S D D R I V E _ P L A Y *
* (c) 2017 - Daniel Coulom *
* http://dcmoto.free.fr/ *
* http://forum.system-cfg.com/ *
*--------------------------------------------------*
* Ce code est distribue gratuitement dans l'espoir *
* qu'il sera utile, mais sans aucune garantie et *
* sans engager la responsabilité de l'auteur. *
* Vous pouvez l' utiliser, le modifier et le *
* diffuser librement, en conservant cette licence *
* et les références de l'auteur dans toutes les *
* copies. L'exploitation commerciale est interdite.*
\**************************************************/
* Ce programme utilise l'interface SDDRIVE pour
* jouer de la musique en streaming.
* Il est lance par le programme SDBOOT.BAS et
* ne necessite pas de controleur de carte SD.
* Frequence d'echantillonnage 11764 Hz
/**************************************************\
* Version 2017.12.04 *
\**************************************************/
* Historique
* 2017.12.04 premiere version avec interface SDDRIVE
*------------------------------------------------------
* INITIALISATIONS
*------------------------------------------------------
ORG $9D00
TFR DP,A valeur du registre DP
CMPA #$E7 test valeur DP
BEQ INIT2 initialisations TO
*------------------------------------------------------
* INITIALISATIONS COMMUNES MO5-MO6
*------------------------------------------------------
LDU #$A7C0 adresse selection banque video
LDY #$0000 adresse debut ecran
LDB #$07 octet couleur
BSR COLOR initialisation couleurs
LDA $FFF0 type d'ordinateur
BNE INIT3 MO6
*------------------------------------------------------
* INITIALISATION COULEUR CADRE MO5
*------------------------------------------------------
INIT1
LDA <$C0 port A du PIA systeme
ANDA #$E1 raz couleur cadre
ORA #$0E couleur cadre 7 (blanc)
STA <$C0 change couleur cadre
BRA INIT6 suite des initialisations
*------------------------------------------------------
* INITIALISATIONS COMMUNES TO7-TO8-TO9
*------------------------------------------------------
INIT2
LDU #$E7C3 adresse selection banque video
LDY #$4000 adresse debut ecran
STY DISPLAY+1 initialisation adresse ecran
LDB #$C7 octet couleur
BSR COLOR initialisation couleurs
LDA $FFF0 type d'ordinateur
CMPA #$02 test TO9
BEQ INIT4 initialisation couleur cadre TO9
CMPA #$03 test TO8, TO8D
BEQ INIT3 initialisation couleur cadre TO8
CMPA #$06 test TO9+
BEQ INIT3 initialisation couleur cadre TO9+
*------------------------------------------------------
* INITIALISATION COULEUR CADRE TO7 T07/70
*------------------------------------------------------
LDA <$C3 port C du 6846
ANDA #$8F raz couleur cadre
ORA #$70 initialisation couleur cadre
STA <$C3 changement couleur cadre TO7
BRA INIT6 suite des initialisations
*------------------------------------------------------
* INITIALISATION COULEUR CADRE MO6-TO8-TO9
*------------------------------------------------------
INIT3
LDA #$07 couleur cadre 7 (blanc TO8-MO6)
BRA INIT5 modification couleur cadre
INIT4
LDA #$0F couleur cadre F (blanc TO9)
INIT5
CLR <$E4 selection registre systeme 2
ORA <$E4 ajout des bits D7-D4 de <$DD
STA <$DD change couleur cadre TO8/MO6/TO9
BRA INIT6 suite des initialisations
*------------------------------------------------------
* Initialisation couleur noir/blanc (Y = debut ecran)
* Adresse du bit de selection banque video dans U
* Adresse octet couleur dans B
*------------------------------------------------------
COLOR
LDA ,U octet de selection banque video
ANDA #$FE clear bit 0
STA ,U selection video couleur
LDX #$1F40 compteur de boucles
TFR B,A code couleur sur deux octets
COLOR1
STD ,Y++ initialise deux octets
LEAX -2,X comptage
BNE COLOR1 boucle
INC ,U selection video forme
RTS
*------------------------------------------------------
* Initialisation CNA en sortie
*------------------------------------------------------
INIT6
LDA <$CF lecture registre de controle B
ANDA #$FB raz bit 2
STA <$CF selection DDRB
LDB #$3F set bits 0-5
STB <$CD bits CNA en sortie
ORA #$04 set b2
STA <$CF selection PB
*-------------------------------------------------------
* Lancement de la commande CMD18 et saut d'un bloc
*-------------------------------------------------------
READ
LDX $9FFC adresse EXCMD
LDU $9FFE adresse commande CMD17
INC ,U transforme CMD17 en CMD18
JSR ,X EXCMD = execution commande
LBSR SAUT lecture bloc (programme sddrive_play)
*------------------------------------------------------
* Affichage de l'image
*------------------------------------------------------
DISPLAY
LDU #$0000 adresse memoire video
LDY #$0010 nombre de blocs a lire
DISPL1
LBSR RBYTE lecture d'un octet
CMPA #$FE test debut de bloc
BNE DISPL1 attente debut de bloc
LDX #$0200 nombre d'octets a lire
DISPL2
LBSR RBYTE lecture d'un octet
STA ,U+ affichage
LEAX -1,X decrementation compteur
BNE DISPL2 lecture octet suivant
LBSR RBYTE lecture CRC1
LBSR RBYTE lecture CRC2
LEAY -1,Y decrementation compteur
BNE DISPL1 lecture bloc suivant
BRA PLAY
*------------------------------------------------------
* RETOUR AU BASIC
*------------------------------------------------------
FIN
PULS B depile compteur octets suppl.
PULS CC,A,B,DP,X,Y,U,PC depile tous les registres
*------------------------------------------------------
* Joue 2 octets et recupere 1 bit dans le premier
* avec test de fin sur le bit 7 de l'echantillon
* periode = 179 microsecondes
* decompte des cycles avec le BSR et le RTS :
* avant le premier echantillon : 7+64=71
* entre les deux echantillons : 4+2+6+6+64+3=85
* apres le deuxieme echantillon : 4+5+5=14
* 14(apres le deuxieme)+71(avant le prochain)=85
*------------------------------------------------------
PLAY2
* premier octet 64+4+2+6+6=82
LBSR RBYTE lecture echantillon (64)
STA <$CD envoi de l'echantillon (4)
ASLA b7 dans carry (2)
ROL ,X stockage b7 (6)
NOP temporisation (2)
NOP temporisation (2)
NOP temporisation (2)
* deuxieme octet 64+3+4+5+5=81 (+7 pour BSR)
LBSR RBYTE lecture echantillon (64)
* test de fin
BPL PLAY21 pas d'octet fin de fichier (3)
LDX #FIN adresse routine de FIN
STX ,S pour retour en FIN
PLAY21
STA <$CD envoi de l'echantillon (4)
LBRN $FFFF temporisation (5)
RTS retour (5)
*------------------------------------------------------
* Lecture de la musique
*------------------------------------------------------
PLAY
LEAU $E000,U adresse ecran = fin - $2000
LEAX $23,U adresse haute buffer ecran
LDB #$20 compteur octets supplementaires
PSHS B empilage compteur
*------------------------------------------------------
* Attente debut de bloc
*------------------------------------------------------
PLAY0
LBSR RBYTE lecture d'un octet
CMPA #$FE test debut de bloc
BNE PLAY0 attente debut de bloc
*------------------------------------------------------
* Boucle de lecture d'un bloc
*------------------------------------------------------
PLAY1
BSR PLAY2 joue 2 octets, stocke 1 bit
BSR PLAY2 joue 2 octets, stocke 1 bit
BSR PLAY2 joue 2 octets, stocke 1 bit
BSR PLAY2 joue 2 octets, stocke 1 bit
BSR PLAY2 joue 2 octets, stocke 1 bit
BSR PLAY2 joue 2 octets, stocke 1 bit
BSR PLAY2 joue 2 octets, stocke 1 bit
* joue 2 octets, complete l'octet supplementaire
LBRN $FFFF temporisation (5)
NOP temporisation (2)
LBSR RBYTE lecture echantillon (64)
STA <$CD envoi de l'echantillon (4)
ASLA b7 dans carry (2)
ROL ,X stockage b7 (6)
LEAX -1,X modifie pointeur octet sup (5)
NOP temporisation (2)
NOP temporisation (2)
LBSR RBYTE lecture echantillon (64)
STA <$CD envoi de l'echantillon (4)
DEC ,S compteur octets supplement. (6)
BNE PLAY1 boucle suivante (3)
*------------------------------------------------------
* Lecture des octets de CRC
*------------------------------------------------------
* premier octet CRC 64+3+5+4+5+2+2=85
LBSR RBYTE lecture octet CRC (64)
LDD #$0000 initialise A pour test $FE (3)
LDB 1,X chargement echantillon sup. (5)
STB <$CD envoi de l'echantillon 1 (4)
LEAX 2,X incremente pointeur oct sup (5)
NOP temporisation (2)
NOP temporisation (2)
* deuxieme octet CRC 64+2+6+4=76
LBSR RBYTE lecture octet CRC (64)
CLRA initialise A pour test $FE (2)
LDB ,X+ chargement echantillon sup. (6)
STB <$CD envoi de l'echantillon 2 (4)
*------------------------------------------------------
* Lecture des octets inter-blocs pendant l'envoi
* des echantillons supplementaires
*------------------------------------------------------
* Echantillon supplementaire n°3 (2+4+57+6+2+4=85)
LDB #$20 compteur echantillons sup. (2)
STB ,S stocke le compteur (4)
BSR INTER lecture octet inter-blocs (57)
LDB ,X+ chargement echantillon (6)
NOP temporisation (2)
STB <$CD envoi de l'echantillon 3 (4)
* Echantillons supplementaires 4 a 32
LDY #$001D compteur pour 29 boucles (4)
NOP temporisation (2)
NOP temporisation (2)
* La boucle SUPP s'execute en 161+6+4+5+3=179 cycles
SUPP
BSR INTER lecture octet inter-blocs (57)
LDB ,X+ chargement echantillon (6)
STB <$CD envoi de l'echantillon (4)
LEAY -1,Y decremente le compteur (5)
BNE SUPP nouvelle boucle (3)
* Preparation de la lecture du bloc suivant
LEAX -1,X retablit pointeur (5)
CMPA #$FE test début de bloc (2)
BEQ PLAY1 traitement du bloc suivant (3)
BRA PLAY0 attente octet $FE (3)
*------------------------------------------------------
* LIRE UN OCTET INTER-BLOCS SI NECESSAIRE
* Total avec BSR : 7+2+3+50+5=67
*------------------------------------------------------
INTER
CMPA #$FE test debut de bloc (2)
BNE RBYTE lecture octet inter-blocs (3)
*------------------------------------------------------
* Temporisation 55 cycles (equivalent RBYTE + RTS)
* boucle de temporisation : 9x5=45 cycles
* total : 2+45+3+5=55
*------------------------------------------------------
LDB #$09 compteur de boucles (2)
TEMPO
DECB decremente le compteur (2)
BNE TEMPO nouvelle boucle (3)
BRN TEMPO temporisation (3)
RTS (5)
*------------------------------------------------------
* Saut de 512 octets
*------------------------------------------------------
SAUT
BSR RBYTE lecture octet
CMPA #$FE comparaison avec $FE
BNE SAUT attente debut secteur
LDX #$0200 initialisation compteur
SAUT1
BSR RBYTE lecture d'un octet
LEAX -1,X decrementation compteur
BNE SAUT1 nouvelle lecture
BSR RBYTE lecture CRC1
BSR RBYTE lecture CRC2
RTS retour
*------------------------------------------------------
* LECTURE D'UN OCTET AVEC SDDRIVE (50+5 cycles)
* Le registre B n'est pas preserve
* Valeur de l'octet dans le registre A en sortie
*------------------------------------------------------
RBYTE
LDB #$7F initialiser B pour lecture (2)
CMPB <$BF lecture bit 7 (4)
ROLA pousser dans A (2)
RBYTE6
CMPB <$BF lecture bit 6 (4)
ROLA pousser dans A (2)
CMPB <$BF lecture bit 5 (4)
ROLA pousser dans A (2)
CMPB <$BF lecture bit 4 (4)
ROLA pousser dans A (2)
CMPB <$BF lecture bit 3 (4)
ROLA pousser dans A (2)
CMPB <$BF lecture bit 2 (4)
ROLA pousser dans A (2)
CMPB <$BF lecture bit 1 (4)
ROLA pousser dans A (2)
CMPB <$BF lecture bit 0 (4)
ROLA pousser dans A (2)
RTS retour octet dans A (5)
* longueur totale avec BSR: 7 + 50 + 5 = 62
* avec LBSR: 9 + 50 + 5 = 64
*------------------------------------------------------
ORG $9EFF
FCB $00 pour remplir 1 secteur complet
END
Maintenant que l'interface est au point, j'aimerais bien résoudre ce problème de glitch pour finir la mise au point de la partie "contrôleur de disquettes". J'ai hâte de savoir combien de temps il faut pour charger TurboCup. Avec le contrôleur de disquette du TO8D c'est 1'13", avec le contrôleur CS91-280 c'est 56". J'espère arriver à moins de 30" avec SDDRIVE.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.