[ GOUPIL 3 ] debut émulation ROM
Modérateurs : Papy.G, fneck, Carl
Re: [ GOUPIL 3 ] debut émulation ROM
Je viens de jeter un oeil au accès disquettes mais à aucun moment la ROM accède aux adresses de la carte floppy
En utilisant la commande de boot en simulant l'appuie sur la touche "disquette" le moniteur fait bien un saut à la routine de boot disquette, mais avec le debuggueur il ne lit ou ecrit jamais les adresses F-F3F0 à F-F3D4
J'y reviendrai plus tard pour l'instant j'ai mis en place l'impression par le PORT B du VIA et j'ai émulé les aussi le PORT A qui doit fonctionner en impression aussi mais pas pu tester car le moniteur utilise d'origine le PORT B pour l'impression option O .
Je vais essayer de regarder pour le port séries ACIA ...
En utilisant la commande de boot en simulant l'appuie sur la touche "disquette" le moniteur fait bien un saut à la routine de boot disquette, mais avec le debuggueur il ne lit ou ecrit jamais les adresses F-F3F0 à F-F3D4
J'y reviendrai plus tard pour l'instant j'ai mis en place l'impression par le PORT B du VIA et j'ai émulé les aussi le PORT A qui doit fonctionner en impression aussi mais pas pu tester car le moniteur utilise d'origine le PORT B pour l'impression option O .
Je vais essayer de regarder pour le port séries ACIA ...
Re: [ GOUPIL 3 ] debut émulation ROM
Bonne nouvelle maintenant le secteur de boot ce charge bien en RAM, mais ne s’exécute pas parce que le bios détecte une erreur en fin de lecture !!
De plus j'ai était obligé de patché la ROM car il ne retrouvait pas le type de lecteur et je ne vois pas ou il reconnais exactement le bon type de lecteur, car le bios gère plusieurs type différent de controleur (WD1791, DMA, DD,...)
De plus j'ai plusieurs images disk mais elles ont plusieurs tailles différentes ???
Quel est le format exact des disquettes GOUPIL 3 ??
Voici ce que j'ai :
De plus j'ai était obligé de patché la ROM car il ne retrouvait pas le type de lecteur et je ne vois pas ou il reconnais exactement le bon type de lecteur, car le bios gère plusieurs type différent de controleur (WD1791, DMA, DD,...)
De plus j'ai plusieurs images disk mais elles ont plusieurs tailles différentes ???
Quel est le format exact des disquettes GOUPIL 3 ??
Voici ce que j'ai :
Code : Tout sélectionner
Taille nom
------------------------------------
368640 DOSTERM.DSK
264704 FLEXLOGO_IMD.DSK
324352 G3FLEX02_IMD.DSK
324352 G3FLEX03_IMD.DSK
162304 G3FLEX3_IMD.DSK
323584 G3FLEX9_IMD.DSK
162304 G3GAME1_IMD.DSK
161280 G3GAME2_IMD.DSK
322816 G3GASYS_IMD.DSK
368640 GOUPILutil.DSK
102400 GPFLEX2_IMD.DSK
327680 PACKG3_IMD.dsk
Re: [ GOUPIL 3 ] debut émulation ROM
Bonsoir,
J'ai vérifié les images des disquettes. L'émulateur lit les disquettes en format "RAW" aussi appelées "DSK". C'est le format habituel des émulateurs. C'est un format simple avec une suite de secteurs de 256 octets sans autre forme d'information. La détection des formats (faces, densités) se fait sur la taille.
40 pistes, 10 secteurs par piste, SF/SD -> 400 x 256 = 102 400 octets (100 Ko)
40 pistes, 18 secteurs par piste, DF/DD -> 720 x 2 x 256 = 368 640 (360 Ko)
Les formats IMG sont différents et embarquent toutes les informations nécessaires pour reproduire la disquette, ce qui n'est pas le cas des DSK. Il y a des utilitaires pour passer de IMD à DSK, mais pas l'inverse.
Quand on reproduit des disquettes avec un émulateur, on a souvent des problèmes avec les secteurs de boot, qui changent d'une machine à l'autre. Ma disquette de boot n'avait pas le bon secteur de boot. Celle de 6502MAN me semble corrompue... elle provenait du fichier IMG converti en DSK. Il y avait une erreur !
Pour le Goupil G3, le secteur de boot est aussi contenu dans le programme de formatage NEWDISK. Je l'ai donc recopié et désassemblé pour le comprendre. En fait il est en 2 parties. Le moniteur du G3 charge le secteur 1/ piste 0 et lance l'exécution en $C100. Là, quand il s'exécute, le programme de boot charge le secteur 2 / piste 0 en $C200.
Pendant que 6502MAN continue sur l'émulateur, je continue sur les disquettes ... On est à 2 doigts de trouver la solution ...
J'ai vérifié les images des disquettes. L'émulateur lit les disquettes en format "RAW" aussi appelées "DSK". C'est le format habituel des émulateurs. C'est un format simple avec une suite de secteurs de 256 octets sans autre forme d'information. La détection des formats (faces, densités) se fait sur la taille.
40 pistes, 10 secteurs par piste, SF/SD -> 400 x 256 = 102 400 octets (100 Ko)
40 pistes, 18 secteurs par piste, DF/DD -> 720 x 2 x 256 = 368 640 (360 Ko)
Les formats IMG sont différents et embarquent toutes les informations nécessaires pour reproduire la disquette, ce qui n'est pas le cas des DSK. Il y a des utilitaires pour passer de IMD à DSK, mais pas l'inverse.
Quand on reproduit des disquettes avec un émulateur, on a souvent des problèmes avec les secteurs de boot, qui changent d'une machine à l'autre. Ma disquette de boot n'avait pas le bon secteur de boot. Celle de 6502MAN me semble corrompue... elle provenait du fichier IMG converti en DSK. Il y avait une erreur !
Pour le Goupil G3, le secteur de boot est aussi contenu dans le programme de formatage NEWDISK. Je l'ai donc recopié et désassemblé pour le comprendre. En fait il est en 2 parties. Le moniteur du G3 charge le secteur 1/ piste 0 et lance l'exécution en $C100. Là, quand il s'exécute, le programme de boot charge le secteur 2 / piste 0 en $C200.
Pendant que 6502MAN continue sur l'émulateur, je continue sur les disquettes ... On est à 2 doigts de trouver la solution ...
Cordialement
Frédéric
Forget the C:\ prompt! Real computing starts with +++
Frédéric
Forget the C:\ prompt! Real computing starts with +++
Re: [ GOUPIL 3 ] debut émulation ROM
Le problème n'est pas les dumps des disquettes mais plutôt le déroulement du boot code, explications :
Le moniteur charge le secteur de boot en $C100 et execute le code à partir de cette adresse.
A cet instant la le translateur est positionné comme ceci (normale pour accéder à toute la RAM) :
E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED FF
Le code execute un premier SWI et retourne donc dans le moniteur et positionne le translateur comme ceci:
E0 E1 E2 E3 F4 E5 E6 E7 E8 E9 EA EB EC ED FF
et en exécutant la suite (en ROM) il se retrouve dans une zone de RAM remplis de 00 et donc "déraille".
Le problème est que le translateur n'est pas positionné correctement et je ne vois pas pourquoi, car c'est la ROM qui positionne justement le translateur !!!
Il devrait positionné comme ceci pour avoir accès à toute la ROM :
E0 E1 E2 E3 F4 F5 FA FB E8 E9 EA F8 F9 ED FF
Si je le place manuellement le code déroule correctement mais redéraille au prochain SWI ...
Le moniteur charge le secteur de boot en $C100 et execute le code à partir de cette adresse.
A cet instant la le translateur est positionné comme ceci (normale pour accéder à toute la RAM) :
E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED FF
Le code execute un premier SWI et retourne donc dans le moniteur et positionne le translateur comme ceci:
E0 E1 E2 E3 F4 E5 E6 E7 E8 E9 EA EB EC ED FF
et en exécutant la suite (en ROM) il se retrouve dans une zone de RAM remplis de 00 et donc "déraille".
Le problème est que le translateur n'est pas positionné correctement et je ne vois pas pourquoi, car c'est la ROM qui positionne justement le translateur !!!
Il devrait positionné comme ceci pour avoir accès à toute la ROM :
E0 E1 E2 E3 F4 F5 FA FB E8 E9 EA F8 F9 ED FF
Si je le place manuellement le code déroule correctement mais redéraille au prochain SWI ...
Re: [ GOUPIL 3 ] debut émulation ROM
Bonjour,
Effectivement, c'est bizarre ...
D'autant que le chargement du 1er secteur se passe bien (même s'il détecte une erreur), mais par la suite il déraille
Effectivement, c'est bizarre ...
D'autant que le chargement du 1er secteur se passe bien (même s'il détecte une erreur), mais par la suite il déraille
Cordialement
Frédéric
Forget the C:\ prompt! Real computing starts with +++
Frédéric
Forget the C:\ prompt! Real computing starts with +++
Re: [ GOUPIL 3 ] debut émulation ROM
Ah, j'oubliais, au sujet des disquettes.
Il y a une difficulté au niveau des disquettes Double Densité en format DSK.
En réalité, sur la disquette, la piste 0 est toujours en SD (standard FLEX). Donc le nombre de secteur effectif pour une disquette 40 pistes DF/DD est :
((39 x 18 x 2) + (10 x 2 )) x 256 = 364 544 soit 356 Ko au lieu de 368 640 (360 Ko).
En général, pour les émulateurs, on comble les 4 Ko qui manquent avec des secteurs vides pour faire une piste 1 de même longueur que les autres pistes.
Il y a aussi un risque de confondre une disquette 40 pistes DF/SD et une 80 pistes SF/SD car dans un cas il y a 40 pistes de (2 x 10) secteurs et dans l'autre 80 pistes de 10 secteurs. L'émulateur va se mélanger les pédales ...
Bref, quand on aura un émulateur qui marche bien, on traitera ce problème.
A noter qu'il est aussi présent sur l'émulateur de SWTPc que j'utilise et je pense sur l'émulateur de Tavernier de Daniel.
Il y a une difficulté au niveau des disquettes Double Densité en format DSK.
En réalité, sur la disquette, la piste 0 est toujours en SD (standard FLEX). Donc le nombre de secteur effectif pour une disquette 40 pistes DF/DD est :
((39 x 18 x 2) + (10 x 2 )) x 256 = 364 544 soit 356 Ko au lieu de 368 640 (360 Ko).
En général, pour les émulateurs, on comble les 4 Ko qui manquent avec des secteurs vides pour faire une piste 1 de même longueur que les autres pistes.
Il y a aussi un risque de confondre une disquette 40 pistes DF/SD et une 80 pistes SF/SD car dans un cas il y a 40 pistes de (2 x 10) secteurs et dans l'autre 80 pistes de 10 secteurs. L'émulateur va se mélanger les pédales ...
Bref, quand on aura un émulateur qui marche bien, on traitera ce problème.
A noter qu'il est aussi présent sur l'émulateur de SWTPc que j'utilise et je pense sur l'émulateur de Tavernier de Daniel.
Cordialement
Frédéric
Forget the C:\ prompt! Real computing starts with +++
Frédéric
Forget the C:\ prompt! Real computing starts with +++
Re: [ GOUPIL 3 ] debut émulation ROM
Pour ce problème ont peut créer une entête spécifique pour l’émulateur qui permettrait de spécifier la densité de la disquette, le nombre de secteurs, le type de la première piste, etc ...
Ou simplement comme pour d'autres émulateur rajouter des secteurs sur la piste 0.
Ou encore selectionner dans la liste déroulante le format de la disquette (moins pratique pour quelqu'un connaissant pas très bien le Flex).
Ou simplement comme pour d'autres émulateur rajouter des secteurs sur la piste 0.
Ou encore selectionner dans la liste déroulante le format de la disquette (moins pratique pour quelqu'un connaissant pas très bien le Flex).
Re: [ GOUPIL 3 ] debut émulation ROM
j'ai plus trop mémoire de ça, mais sur le Guépard il doit y avoir le même problème. C'est pour ça que le codage des disquettes c'est du DMK et c'est pour ça que j'ai décodé les disquettes avec ce standard. Tu peux regarder dans les sources de VBGuépard tu trouveras les info...
(le descripteur de piste indique si on est en SD/DD et les données des pistes en SD sont à chaque fois doublée (par exemple les données AA 1E 1C sont encodées dans le fichier en AA AA 1E 1E 1C 1C ...)
JJ
[Edit] J'ai regardé le prog vite fait:
Donc dans l'entête du fichier DMK on retrouve la structure de la disquette !
(le descripteur de piste indique si on est en SD/DD et les données des pistes en SD sont à chaque fois doublée (par exemple les données AA 1E 1C sont encodées dans le fichier en AA AA 1E 1E 1C 1C ...)
JJ
[Edit] J'ai regardé le prog vite fait:
Code : Tout sélectionner
Public Structure DMK
'Structure de fichier DMK
'Entête fichier
Dim Num_Track As Byte ' 1
Dim Lenght_Track As Integer ' 2/3
Dim Virtual_Disk As Byte ' 4
Dim IDAM(,) As Long ' Liste des IDAM (Track, N° IDAM)
Dim isSD(,) As Boolean
Dim Adresse(,,) As Long ' Liste des adresses face, piste, secteur
Dim LSector(,,) As Integer ' Liste des longueurs des secteurs face, piste, secteur
Dim SD_Flag(,,) As Boolean ' Simple densité ?
End Structure
Re: [ GOUPIL 3 ] debut émulation ROM
Bonjour,
Vous avez raison, autant utiliser les informations écrites sur le SIR pour le FLEX, c'est du standard :
Secteur #3: System Information Record (SIR)
Début Fin Information
0 1 2 octets à $00
16 26 Nom du volume ASCII
27 28 Numéro du volume en Binaire
29 30 Adresse du 1er secteur de données (Piste - Secteur)
31 32 Adresse du dernier secteur de données (Piste - Secteur)
33 34 Nombre total de secteurs de données en Binaire
35 37 Date en Binaire ((mois-jour-année)
38 38 Numéro de la dernière piste en binaire
39 39 Numéro du dernier secteur en binaire
Si on connait la taille du fichier et le numéro du dernier secteur et de la dernière piste, on ne peut plus se tromper !
En suite, on pourra améliorer le système pour accepter des formats DSK ou IMD.
Vous avez raison, autant utiliser les informations écrites sur le SIR pour le FLEX, c'est du standard :
Secteur #3: System Information Record (SIR)
Début Fin Information
0 1 2 octets à $00
16 26 Nom du volume ASCII
27 28 Numéro du volume en Binaire
29 30 Adresse du 1er secteur de données (Piste - Secteur)
31 32 Adresse du dernier secteur de données (Piste - Secteur)
33 34 Nombre total de secteurs de données en Binaire
35 37 Date en Binaire ((mois-jour-année)
38 38 Numéro de la dernière piste en binaire
39 39 Numéro du dernier secteur en binaire
Si on connait la taille du fichier et le numéro du dernier secteur et de la dernière piste, on ne peut plus se tromper !
En suite, on pourra améliorer le système pour accepter des formats DSK ou IMD.
Cordialement
Frédéric
Forget the C:\ prompt! Real computing starts with +++
Frédéric
Forget the C:\ prompt! Real computing starts with +++
Re: [ GOUPIL 3 ] debut émulation ROM
Bonjour,
Je pense après analyse du moniteur que le translateur d'adresse de 6502MAN n'est pas en cause. C'est simplement que la ROM de 16 Ko est comme sur une seule puce, soit 1 Chip Select, basé sur l'adresse $FFF4.
Ainsi, il faut que l'émulateur sélectionne toute la ROM dès que l'on positionne $FFF4 à $F4. Dès que l'on remet $E4 en $FFF4, alors les autres pages (de $FFF5 à $FFF7) deviennent actives en RAM.
A essayer ...
Je pense après analyse du moniteur que le translateur d'adresse de 6502MAN n'est pas en cause. C'est simplement que la ROM de 16 Ko est comme sur une seule puce, soit 1 Chip Select, basé sur l'adresse $FFF4.
Ainsi, il faut que l'émulateur sélectionne toute la ROM dès que l'on positionne $FFF4 à $F4. Dès que l'on remet $E4 en $FFF4, alors les autres pages (de $FFF5 à $FFF7) deviennent actives en RAM.
A essayer ...
Cordialement
Frédéric
Forget the C:\ prompt! Real computing starts with +++
Frédéric
Forget the C:\ prompt! Real computing starts with +++
Re: [ GOUPIL 3 ] debut émulation ROM
J'en serais pas aussi sur que toile translateur d'adresse de 6502MAN n'est pas en cause
J'ai testé ce que tu proposes mais ça ne fonctionne pas mieux et de plus il y a quelque chose de curieux c'est que le translateur est positionné de manière étrange mais pourtant c'est ce qui est codé dans la ROM !
Lorsque l'on est dans le moniteur :
Code : Tout sélectionner
FE F4 00 00 F4 F5 FA FB 00 00 00 00 F8 F9 EF FF
Code : Tout sélectionner
E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED 00
Et donc pendant l’exécution du boot secteur il exécute plusieurs SWI et dès le premier il "déraille" car le translateur est mal positionné puisqu'il arrive au bout de quelques instruction sur de la RAM rempli de $00 !!!
Code : Tout sélectionner
E0 E1 E2 E3 F4 E5 E6 E7 E8 E9 EA EB EC ED 00
Re: [ GOUPIL 3 ] debut émulation ROM
Bonjour à tous,
Un grand bravo à 6502MAN ...
Un grand bravo à 6502MAN ...
Cordialement
Frédéric
Forget the C:\ prompt! Real computing starts with +++
Frédéric
Forget the C:\ prompt! Real computing starts with +++
-
- Messages : 7967
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: [ GOUPIL 3 ] debut émulation ROM
Bravo! Mais vous avez ouverts un bug dans l'espace-temps. La date courante est antérieure à la date de fabrication de l'OS!
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