MSX Village forum

La Place des Développeurs Outils pour lire les secteurs

ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5481

Le 27/03/2019 à 13h56
Bonjour,

Je cherche un outils sous MSX-DOS qui pourrait lire et afficher le contenu des secteurs d'une disquette.
Est-ce que cela existe ?


banniere-ericb59e
Site web    
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10318

Le 27/03/2019 à 15h23
Shem le fait
CTRL ( Secter Read
CTRL ) Secter Write


:noel
Site web    
Visiteur

Vagabond

Rang

Avatar

Message : 0

Le 27/03/2019 à 16h49
ericb59 :
Je cherche un outils sous MSX-DOS qui pourrait lire et afficher le contenu des secteurs d'une disquette.


Bientôt possible avec Fusion-C ! ;)

Bientôt disponible avec Fusion-C ^^

Je viens d'ajouter les fonctions SetDiskTA(buffer_pointer) et GetDiskSector(int sector_number, unsigned char drive, unsigned char nb_sectors_to_read);

1) SetDiskTA indique où placer les données lues

2) GetDiskSector lit les données depuis un secteur de départ, pour le lecteur donné et pour le nombre de secteurs voulus.
Edité par Visiteur Le 27/03/2019 à 17h20
   
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5481

Le 27/03/2019 à 17h37
sylvain :
ericb59 :
Je cherche un outils sous MSX-DOS qui pourrait lire et afficher le contenu des secteurs d'une disquette.


Bientôt possible avec Fusion-C ! ;)

Bientôt disponible avec Fusion-C ^^

Je viens d'ajouter les fonctions SetDiskTA(buffer_pointer) et GetDiskSector(int sector_number, unsigned char drive, unsigned char nb_sectors_to_read);

1) SetDiskTA indique où placer les données lues

2) GetDiskSector lit les données depuis un secteur de départ, pour le lecteur donné et pour le nombre de secteurs voulus.


M'enfin ! Je les ai déjà faites, c'était pour vérifier que mes fonctions étaient bonnes que je voulais un autre logiciel ! :lol


banniere-ericb59e
Site web    
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5481

Le 27/03/2019 à 17h40
J'ai aussi fait la fonctions : GET DISK PARAMETERS

Par contre j'aimerai savoir si les données sorties sont bonnes ....
Sur un floppy disk sous opeMSX J'obtiens ces données là :



banniere-ericb59e
Site web    
Visiteur

Vagabond

Rang

Avatar

Message : 0

Le 27/03/2019 à 18h03
ericb59 :
M'enfin ! Je les ai déjà faites, c'était pour vérifier que mes fonctions étaient bonnes que je voulais un autre logiciel ! :lol


Ha, ben comme c'était facile et que j'avais 5mn j'ai voulu voir si ça fonctionnait ^^
Bon alors la prochaine fois, j'attends un peu avant de démarrer au quart de tour... :lol
   
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5481

Le 27/03/2019 à 18h20
sylvain :
ericb59 :
M'enfin ! Je les ai déjà faites, c'était pour vérifier que mes fonctions étaient bonnes que je voulais un autre logiciel ! :lol


Ha, ben comme c'était facile et que j'avais 5mn j'ai voulu voir si ça fonctionnait ^^
Bon alors la prochaine fois, j'attends un peu avant de démarrer au quart de tour... :lol


5 minutes ! Pfff... J'y ai passé la matinée ! Mais oui je confirme c'est facile en fait :p


Pour Disk Info c'est plus compliqué par contre, j'ai utilisé une structure pour stocker les données retournées.
Ca te semble bon comme ça ?

Code C :
 
#include "fusion-c/header/msx_fusion.h"
#include <string.h>
#include <stdio.h>
typedef struct {
  char DriveN; 
  int SectorSize;  
  char SectorPerCluster;  
  int NumberReservedSector;  
  char NumberFatCopy;
  int NumberRootDirEntries;
  int TotalLogicalSectors;
  char MediaDescriptionByte;
  char NumberSectorsPerFat;
  int FirstRootSectorNumber;
  int FirstDataSectorNumber;
  int MaximumCluster;
  char DirtyFlag;
  char VolumeId[5];
  char Reserved[9];
} DSKINFO;
DSKINFO info;
 
void getit(DSKINFO *info) __naked
{
  __asm
  push  ix
  ld ix,#0
  add ix,sp
  ld  e,4(ix)
  ld  d,5(ix)
  ld l,#0
  ld c,#0x31
  call  #5
  pop ix
  ret
  __endasm;
}
void GetDiskParam(void)
{
  int i;
  getit(&info);
 
printf("\n\r DriveN : %d",info.DriveN);
printf("\n\r SectorSize : %d",info.SectorSize);
printf("\n\r SectorPerCluster : %d",info.SectorPerCluster);
printf("\n\r ReservedSector : %d",info.NumberReservedSector);
printf("\n\r NumberFatCopy : %d",info.NumberFatCopy);
printf("\n\r NumberRootDirEntries : %d",info.NumberRootDirEntries);
printf("\n\r TotalLogicalSectors : %d",info.TotalLogicalSectors);
printf("\n\r MediaDescriptionByte : %d",info.MediaDescriptionByte);
printf("\n\r NumberSectorsPerFat : %d",info.NumberSectorsPerFat);
printf("\n\r FirstRootSectorNumber : %d",info.FirstRootSectorNumber);
printf("\n\r FirstDataSectorNumber : %d",info.FirstDataSectorNumber);
printf("\n\r MaximumCluster : %d",info.MaximumCluster);
printf("\n\r DirtyFlag : %d",info.DirtyFlag);
printf("\n\r VolumeId : %x",info.VolumeId);
printf("\n\r Reserved : %x",info.Reserved);
 
}
void main(void)
{
  int i;
    GetDiskParam();
    Exit(0);
}
Edité par ericb59 Le 27/03/2019 à 18h21


banniere-ericb59e
Site web    
Visiteur

Vagabond

Rang

Avatar

Message : 0

Le 28/03/2019 à 08h18
Oui Eric, ça me parait très bien :top . Et les données affichées dans ta copie d'écran me paraissent correctes. Peut-être que pour l'affichage de volumeID sur 5 octets ce n'est pas tout à fait ça.
Il faudrait comparer avec un outil d'info disque, peut-être que Igal connait ça, même si l'outil n'est pas sous DOS...
   
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie