La Place des Développeurs Lire le contenu d'un fichier en ASM
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 cassettele 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
aoineko
Membre non connecté
Conseiller Municipal
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.
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
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
aoineko
Membre non connecté
Conseiller Municipal
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).
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.
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 !
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.
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
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).
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
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 ...
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
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.
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.
On est toujours ignorant avant de savoir.
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 :
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.
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
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.
aoineko :
Le seul hook que je modifie est le H_TIMI (FD9Fh).
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
Metalion :
Je te confirme que c'est bien celui-là qui est modifié par la ROM Disk !
Relis mon 2e message.
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.
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 :
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
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
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.
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.
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
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
aoineko
Membre non connecté
Conseiller Municipal
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).
Erreur 0, 256 octets lu, tout semble ok... sauf qu'en C0BEh, aucun octet n'a était copié.
Une idée ?
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.
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie