MSX Village forum

La Place des Développeurs Lire le contenu d'un fichier en ASM

Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10337

Le 21/04/2011 à 16h37

Reprise du message précédent

sur un MSX de base il n'y a pas de commandes pour le disque mais juste pour faire fonctionner la cassette

le disk basic et le dos sont dans la romdisk de l'interface du disque qui était en option sur les MSX1

sur les MSX2 avec lecteur de disquette incorporé les routines sont dans la rom disk de la machine

le disk basic est accessible sur des machines de 16k ou 32k de RAM ( voir les commandes dans un livre MSX )

pour faire fonctionner le DOS il faut obligatoirement 64K de RAM et une disquette contenant le DOS1

le MSXDOS2 est encore une extension et les commandes sont une version étendue de celle du DOS1 et un mapper 256k est nécessaire


:noel
Site web    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2699

Le 21/04/2011 à 18h56
Jipe :
sur les MSX2 avec lecteur de disquette incorporé les routines sont dans la rom disk de la machine




La "rom disk" est dans la Sub-ROM ou est-ce encore différent ?



Donc, si j'ai bien compris, tout MSX2 avec lecteur de disquette à toutes les instructions de gestion du disque de dispo dans une ROM (instructions liés au DOS et au Basic) ; il suffit que cette ROM soit initialisé pour qu'on puisse les utiliser. J'ai bon ?


On est toujours ignorant avant de savoir.
Github    
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10337

Le 21/04/2011 à 19h03
la romdisk est différente de la sub-rom

tout ce que je sais c'est qu'une cartouche de jeu insérée dans un slot 1 ou 2 démarre forcément avant et shunte la romdisk

pour initialiser cette romdisk a partir de la cartouche je n'en sais rien mais sur le principe c'est bon


:noel
Site web    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2699

Le 21/04/2011 à 23h25
En utilisant le code de GDX, le système rend bien la main à mon programme après l'initialisation de toutes les ROMs.
Ensuite, mon programme continue normalement.
A partir de la, je peux considérer que je peux utiliser librement les fonctions du DOS et du Disk-Basic ?
En tout cas, appeler directement BLTVD ne crash pas, mais ne copie rien en VRAM non plus. :(
Reste surement l'histoire du changement de slot lors de l'appel de cette instruction que j'ai pas encore compris.
J'ai essayé avec CALSLT, mais sans succès.
En fait, je sais pas ce que je suis censé faire. ^^
Pour info, mon code de lecture du fichier se trouve dans la Page 2 (2e partie de ma cartouche 32K), dans le slot 1-0 (port cartouche 1).


On est toujours ignorant avant de savoir.
Github    
GDX Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 17/01/2011 à 08h52

Messages: 3004

Le 22/04/2011 à 03h23
La Sub-ROM est différente de la ROM Disk en effet et je comprends que tu sois étonné qu'il y ait des routines qui accèdent à la ROM Disk. Quoiqu'il en soit, il ne faut pas oublier que ça a été fait par Microsoft ! :lol

aoineko :
A partir de la, je peux considérer que je peux utiliser librement les fonctions du DOS et du Disk-Basic ?


On est plus libre avec l'MSX-DOS car il y a un maximum de RAM sélectionnée par défaut. Gérer ça à partir d'une cartouche oblige à jongler avec les Slot. J'insiste encore. :)

aoineko :
En tout cas, appeler directement BLTVD ne crash pas, mais ne copie rien en VRAM non plus. :(

Reste surement l'histoire du changement de slot lors de l'appel de cette instruction que j'ai pas encore compris.

J'ai essayé avec CALSLT, mais sans succès.



En fait, je sais pas ce que je suis censé faire. ^^

Pour info, mon code de lecture du fichier se trouve dans la Page 2 (2e partie de ma cartouche 32K), dans le slot 1-0 (port cartouche 1).


La routine du disque a sans doute besoin de RAM dans le Bank 2.



Le Livre du Disque MSX de Manu Devos est la seule doc en français sur le sujet que je connaisse. D'après mes souvenir ce livre est un peu léger mais il y a peut-être les infos sur les buffer utilisés par les routines du disque. Sinon, il va falloir persévérer et chercher ailleurs.



C'est logique que les cartouches se lancent avant tout. Ça permet d'installer toutes sortes de périphériques, voir même de remplacer le lecteur de disquette par autre chose. Mon exemple marche bien sauf si tu appuies sur Shift pendant le démarrage du MSX. Ça ne marche plus parce que la ROM Disk ne s'installe pas en faisant cette manip. Edité par GDX Le 22/04/2011 à 03h40
   
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 22/04/2011 à 08h18
Attention à une chose : la routine ISR de la ROM est utilisée par toutes les interruptions systèmes et périphériques, y compris les lecteurs de disquettes. Il est donc possible que lors de l'initialisation de la ROM Disk, celle-ci vienne placer une dérivation du hook en $FD9A $FD9F pour ses propres besoins, notamment lors des accès disques.

Si tu remplace cette dérivation par la tienne à l'init de ta ROM, cela peut peut-être expliquer le problème ...


MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2699

Le 22/04/2011 à 08h18
Ah, si ces routines ont besoin de RAM en Bank 2, ça expliquerait les changement de slot à effectuer.
Si c'est le cas, je pourrai déplacer mon code dans la 1re partie de ma cartouche (Bank 1) ; ça permettra de switcher la Bank 2 facilement.

J'ai trouvé le bouquin chez MSX Legend, je vais y jeter un oeil. Merci. :top


On est toujours ignorant avant de savoir.
Github    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 22/04/2011 à 09h02
Je viens de vérifier dans BlueMSX et ce que je disais se confirme.
Si on initialise avec le lecteur de disquette, il y a en $FD9F :

Code :
rst 0030h
87h
00h
79h
ret

Ce code réalise un appel à la routine située en $7900 dans le slot codifié par $87 sous le format F000EEPP.
Ce n'est peut-être rien, mais ce bout de code est peut-être nécessaire au fonctionnement correct de l'accès disque.


MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2699

Le 22/04/2011 à 10h47
Metalion :
Si tu remplace cette dérivation par la tienne à l'init de ta ROM, cela peut peut-être expliquer le problème ...




Le seul hook que je modifie est le H_TIMI (FD9Fh).



Sinon, j'ai récupéré Le Livre du Disque MSX chez MSXLegend mais la très faible qualité du scan le rend complétement illisible. :(



Quelqu'un aurait ce bouquin ?


On est toujours ignorant avant de savoir.
Github    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 22/04/2011 à 10h53
aoineko :
Metalion :
Si tu remplace cette dérivation par la tienne à l'init de ta ROM, cela peut peut-être expliquer le problème ...


Le seul hook que je modifie est le H_TIMI (FD9Fh).


Je te confirme que c'est bien celui-là qui est modifié par la ROM Disk !

Relis mon 2e message.


MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2699

Le 22/04/2011 à 11h26
Metalion :
Je te confirme que c'est bien celui-là qui est modifié par la ROM Disk !

Relis mon 2e message.




Ah oui, désolé. J'essayerai de le virer pour voir si ça marche. Merci.



EDIT : Ça ne marche pas mieux. Personnellement, je pencherai bien pour le fait qu'il n'y ait pas de RAM en Page 2 ; si la Disk ROM l'utilise comme tampon, ne pouvant pas écrire dans cette zone (alloué a ma cartouche), ça pourrait expliquer que rien n'est copié en VRAM. Edité par aoineko Le 22/04/2011 à 12h07


On est toujours ignorant avant de savoir.
Github    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2699

Le 22/04/2011 à 23h19
Personne n'aurait de la doc sur la DiskROM ?
Je trouve rien sur le net. :(


On est toujours ignorant avant de savoir.
Github    
GDX Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 17/01/2011 à 08h52

Messages: 3004

Le 23/04/2011 à 09h23
Pour définir l'emplacement du buffet du disque, c'est la commande 01Ah en MSX-DOS. Lorsque ce n'est pas en MSX-DOS, on peut tout de même lancer cette commande de la façon suivante :

Code ASM :
LDC,01AH
LDDE,buffer_adrs
CALL0F37Dh


Par contre, je ne sais pas si BLTVD l'utilise. Faut tester et faire attention à ne pas charger un trop gros bloc.


Voici quelques liens vers des docs sur les disques :

http://map.grauw.nl/resources/

http://fms.komkon.org/MSX/Docs/

http://www.ascat.jp/tg/tgdindex.htm

http://homepage3.nifty.com/Tatsu_syo/MySoft/index.html#MSX-Clang

http://ngs.no.coocan.jp/doc/wiki.cgi/TechHan?page=4%BE%CF+%A5%B7%A5%B9%A5%C6%A5%E0%A5%B3%A1%BC%A5%EB%A4%CE%BB%C8%CD%D1%CB%A1


Ça serait bien de traduire celui-là :

http://www.ascat.jp/tg/tgdindex.htm

Il a l'air assez complet. Edité par GDX Le 27/04/2011 à 05h38
   
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2699

Le 26/04/2011 à 21h39
GDX :
Pour définir l'emplacement du buffet du disque, c'est la commande 01Ah en MSX-DOS. Lorsque ce n'est pas en MSX-DOS, on peut tout de même lancer cette commande de la façon suivante :

Code ASM :
    LD    A,01AH
    LD    DE,buffer_adrs
    CALL    0F37Dh




Ça fait crasher le jeu. :(

Tu es sur de l'instruction 01Ah ? J'ai pas trouvé d'explication à son sujet.

L'instruction, c'est dans le registre C, non ? De toute façon, ça plante tout autant. ^^



EDIT : Comment vérifier que l'initialisation du DiskROM s'est bien faite ?



EDIT 2 : Pour tester, j'ai essayé l'instruction 1Bh (Get allocation information). Voici le résultat :

Code TEXT :
A = 02h (Sectors per cluster)
BC = 200h ( Sector size; always 512)
DE = 2C9h (Total clusters on disk)
HL =24Dh ( Free clusters on disk)
IX = F197h (Pointer to DPB)
IY = E597h (Pointer to first FAT sector)
 


Sachant que ça plante s'il n'y a pas de disque dans le lecteur et que les donnés semblent cohérentes ; j'en conclu que tout marche bien. :) Edité par aoineko Le 26/04/2011 à 22h03


On est toujours ignorant avant de savoir.
Github    
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10337

Le 26/04/2011 à 22h08
un peu de pub pour un autre site MSX Français

http://www.passionmsx.org/modules/mydownloads/viewcat.php?cid=76&min=10&orderby=titleA&show=10

il faut que tu y charges le livre du disque MSX ou c'est bien détaillé

les commandes sous DOS et les commandes sous Basic

petit détail important : les dos 1 et le dos ne sont pas indentiques et ce livre ne traite que du DOS1


:noel
Site web    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2699

Le 26/04/2011 à 22h37
Merci ; en fait j'ai déjà feuilleté cet ouvrage, mais c'est très techniques ; je m'y suis vite perdu. ^^

De toute façon, je semble sur la bonne voie : j'ai réussi à Open un fichier (instruction 44h) sans erreur !!
Par contre, la, je bute sur le Read (instruction 48h).

Code TEXT :
     Parameters:    C = 48H (_READ) 
                    B = 0 (File handle)
                   DE = C0BEh (Buffer address)
                   HL = 100h (Number of bytes to read  )
     Results:       A = 0 (Error)
                   HL = 100h (Number of bytes actually read)
 


Erreur 0, 256 octets lu, tout semble ok... sauf qu'en C0BEh, aucun octet n'a était copié. :(
Une idée ?


On est toujours ignorant avant de savoir.
Github    
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie