IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation d'OS Assembleur Discussion :

[OS] Lire et écrire sur disquette


Sujet :

Programmation d'OS Assembleur

  1. #1
    Membre actif Avatar de trax44
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 300
    Points : 233
    Points
    233
    Par défaut [OS] Lire et écrire sur disquette
    Bonjour,
    mon problème est le suivant :
    dans le case d'un micro OS, j'ai besoin d'écrire ou je veux sur une disquette. J'ai trouvé des bouts de code mais sa marche pas. Help!!

    Code d'écriture:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    [BITS 16]		
    [ORG 0x0100]		
    push cs                 ; creation de la pile pour avoir acce au dsp
    pop  ds
     
    xor ax , ax
     
    mov ah , 26h            ; acce au dsp
    mov al , 0              ; acce au lecteur de disquette a:
     
     
    mov cx , 01b            ; ecrire 1 secteur
    mov dx , 10b            ; sur le boot de la disquette 0 = a:
     
    mov bx , ecrit
     
    int 26h
     
    mov ah , 4ch
    int 21h
     
     
     
    ecrit :
    times 80h db 'T'	; 128 T
    times 80h db 'R'	; 128 R
    times 80h db 'A'	; 128 A
    times 80h db 'X'	; 128 X


    Code de lecture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    [org 0x07C0]
    [BITS 16]
    jmp debut
    boot db 0
    debut:
    mov [boot] , dl ; unite de boot
    	xor ax,ax
    	int 13h
     
     
    	mov ax,mem	; adresse qui va recevoir les donnees
    	mov es,ax
    	mov bx,0	; je sais pas
     
    	mov ah,10b   	; je sais pas
    	mov al,01b   	; nombre de secteurs
    	mov ch,00b   	; numero de la face
    	mov cl,10b   	; nunero de secteur
    	mov dh,0     	; numero de la piste
    	mov dl,[boot]	; unite de boot
    	int 13h
     
     
    ; et la normalement je me retrouve avec des T, des R... à l'adresse mem mais sa marche pas
     
     
    mov ah , 4ch
    int 21h
    mem :
    times 200h db 0 	; 200h = 512d un secteur quoi!
    Merci
    TRAX

  2. #2
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 101
    Points
    19 101
    Par défaut
    Pourquoi écrit-tu avec l'int26 et que tu lis ensuite avec l'int13 ?
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

  3. #3
    Membre actif Avatar de trax44
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 300
    Points : 233
    Points
    233
    Par défaut re
    Bonne remarque mais je sais pas j'ai juste rabouter du code. Je mis connais pas vraiment en pratique! Mais y faut bien commencé un jour!Tu pense que je devrais remplacé 26 par 13 (cependant je sais que le code pour écrire doit au moins en parti marché puisque sa fait activer mon lecteur!)
    Merci
    TRAX

  4. #4
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 101
    Points
    19 101
    Par défaut
    Essaye de trouver le DOC sur l'INT13 pour effectuer ton écriture, tu seras sur ainsi de lire et écrire de la même manière et donc au même endroit.
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

  5. #5
    Membre actif Avatar de trax44
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 300
    Points : 233
    Points
    233
    Par défaut re
    Salut,
    oui c'est fait (la liste d'interruption de Ralph Brown)
    http://www.ctyme.com/intr/rb-0608.htm (écriture)
    http://www.ctyme.com/intr/rb-0607.htm (lecture)

    Il y a just quelque petits trucs que j'ai pas compri :

    Ecriture
    CH = low eight bits of cylinder number
    CL = sector number 1-63 (bits 0-5) ; je croyais qu'il y avait un plus de secteurs sur une disquette!?!
    DH = head number

    Lecture
    CH = low eight bits of cylinder number
    DH = head number
    CL = sector number 1-63 (bits 0-5) ; je croyais qu'il y avait un plus de secteurs sur une disquette!?!


    Merci
    TRAX

  6. #6
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 101
    Points
    19 101
    Par défaut
    Non, il ne s'agit que du nombre de secteur sur une piste.

    Un disque-dur ou une disquette c'est :
    - Un ensemble de plateaux ( un seul pour une disquette )
    - Deux faces par plateau
    - Chaque face est constituée d'un certain nombre de pistes.
    - Chaque piste d'une certain nombre de sercteurs.

    Les pistes de toutes les faces situées les unes au dessus des autres, forme ce qui est appelé un cylindre.

    Chaque face à sa propre tête de lecture.

    Pour accéder à un secteur particulier, il faut donc donner :
    - Le numéro de tête de lecture
    - Le numéro de cyclindre, ( qui devient le numéro de piste sur une face particulière )
    - Le numéro de secteur sur la piste.
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

  7. #7
    Membre actif Avatar de trax44
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 300
    Points : 233
    Points
    233
    Par défaut re
    Salut,
    et le systeme de numérotation des secteurs marche comment ? Ils sont tous a la suite les uns des autres jusqu'a que le passe à la prochaine face ou c'est plus compliqué??

    Donc sa marche comment en pratique tout çà?
    Par exemple pour lire de X' secteur la piste Y sur la face 2 d'une disquette on fait comment???

    Merci
    TRAX

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 96
    Points : 116
    Points
    116
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    tete=(block%(Floppy.NbSecParTrack*Floppy.NbTetes) )/Floppy.NbSecParTrack;
    track=block/(Floppy.NbSecParTrack*Floppy.NbTetes);
    secteur=block%Floppy.NbSecParTrack+1;
    Voili voila

    Et comme d'habitude, tu as pleins de tutos sur les sites sur la prog d'os (on les a d ja donnés pleins de fois alors utiilise la fonction rechercher )
    Responsable du projet SKAN (OS à but didactique)
    Contactez moi pour toutes questions ou remarques sur le projet.

  9. #9
    Membre actif Avatar de trax44
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 300
    Points : 233
    Points
    233
    Par défaut re
    Salut,
    tu pourrais expliciter un peu ton code s.t.p. j'ai du mal à suivre!!
    Merci
    TRAX

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 96
    Points : 116
    Points
    116
    Par défaut
    tu pourrais expliciter un peu ton code s.t.p. j'ai du mal à suivre!!
    Pourtant c clair :o

    On utilise 3 données pour trouver la coordonnée d'un secteur dans un périphérique block (c komme ca que l'on appelle les périphériques de stockage) : la tête (de lecture), le cylindre, et le secteur dans le cylindre.

    tete: c la tete de lecture (les disquettes 1.44 en ont 2; donc entre 0 et 1) dans laquelle est placé ton secteur
    track:c le cylindre (disquettes 1.44 en ont 80 par tête; donc entre 0 et 79) dans lequel est placé ton secteur.
    secteur: "le secteur dans le cylindre" (disquettes 1.44 en ont 18 par cylindre; attention ! : le nb doit être entre 1 et 18 )
    block: c'est le numéro du block de donnée (en fait un secteur) que tu veux transformer en le mettant à la forme H/T/S (=Tête/Cylindre/Secteur)
    Floppy.NbSecParTrack: le nb de secteur par cylindre (18 )
    Floppy.NbTetes: le nb de t^tes (2)

    Responsable du projet SKAN (OS à but didactique)
    Contactez moi pour toutes questions ou remarques sur le projet.

  11. #11
    Membre habitué
    Avatar de TangiX
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 139
    Points : 168
    Points
    168
    Par défaut
    Ce systeme est obselete !!
    on passe maintenant par les secteur logique (donc un seul nombre)
    je crois qu'il faut regarder la fct 48h de l'int13h (dsl g pa la doc sur moi )

    BonDev'

  12. #12
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 939
    Points : 59 409
    Points
    59 409
    Billets dans le blog
    2
    Par défaut
    Les interruptions 25h - lecture absolue de secteur(s) - et 26h - écriture absolue de secteur(s) - travaillent avec des numéros de secteurs logiques.

    Attention que ces deux interruptions ne libèrent pas proprement la pile.

    http://lrs.fmi.uni-passau.de/support...57/RB-4035.HTM
    http://lrs.fmi.uni-passau.de/support...57/RB-4039.HTM
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 96
    Points : 116
    Points
    116
    Par défaut
    Ce systeme est obselete !!
    Quand tu programme en rmode oui; mais pas en pmode ou tu est obligé de travailler avec des in et des out pour controler ton floppy; et le controleur de floppy, lui, n'accepte que des adresses H/T/S et pas Absolues
    Responsable du projet SKAN (OS à but didactique)
    Contactez moi pour toutes questions ou remarques sur le projet.

  14. #14
    Membre actif Avatar de trax44
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 300
    Points : 233
    Points
    233
    Par défaut re
    Salut,
    en pmode ou tu est obligé de travailler avec des in et des out
    de 2PluS4
    stp tu pourrais développer ça m'interressen puisque justement à la base je demandais ça pour un OS.
    Merci

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 96
    Points : 116
    Points
    116
    Par défaut
    Oulala !! Bin je peux te dire que quand tu prog un os, le driver du floppy est un truc assez énervant à programmer (pas très difficile mais énervant).
    Et pis tu vas mettre du tmp (dans mon os, le driver fait 1100 lignes d'asm)
    Je v pas tt expliquer, c trop long; mais va sur des sites comme:
    http://www.nondot.org/sabre/os/articles
    http://www.osdev.org/cgi-bin/projects.cgi
    http://my.execpc.com/CE/AC/geezer/os/
    Et surtout http://www.osdever.net
    Responsable du projet SKAN (OS à but didactique)
    Contactez moi pour toutes questions ou remarques sur le projet.

  16. #16
    Membre actif Avatar de trax44
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 300
    Points : 233
    Points
    233
    Par défaut re
    Salut,
    merci pour la doc (j'en connaissaint certains mais pas tous). Il ya aussi le celbre bosokernel
    http://<br /> http://inferno.cs.uni...l00.html<br />

    Bon je vais voir ce ke sa vo et encor merci.
    Sinon si t sources son commentés es ce que je pourrais les voir?
    Merci
    TRAX

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 96
    Points : 116
    Points
    116
    Par défaut
    Sinon si t sources son commentés es ce que je pourrais les voir?
    Non dsl je ne distribus pas encore mes sources mais ca va venir;
    Mais si tu as des pb, envoie moi un mp
    Responsable du projet SKAN (OS à but didactique)
    Contactez moi pour toutes questions ou remarques sur le projet.

  18. #18
    Membre du Club

    Inscrit en
    Août 2003
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 33
    Points : 45
    Points
    45
    Par défaut
    Salut trax,
    tiens voilà un truc qui pourrait t'intéresser si tu comptes utiliser l'interruption 0x13 du BIOS: (en tout cas tu en auras surement besoin pour faire booter ton OS)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ;conversion lba vers CHS pour une disquette 1.44
    CST_FD:
    	mov	bl,	18
    	div	bl
    	mov	cl,	ah
    	inc	cl		;numéro de secteur (1 à 18).
    	mov	ch,	al
    	shr	ch,	1	;numéro de cylindre (0 à 79).
    	mov	dh,	al
    	and	dh,	1	;numéro de la tête (0 ou 1).
    	ret
    Sinon pour ce qui est de la gestion du lecteur disquette en pmode je compte faire aussi un driver pour mon OS, donc je vais bientôt me pencher là dessus. Si tu veux je pourais t'envoyer mon driver quand je l'aurais terminé.
    A+.
    Albus.

Discussions similaires

  1. Lire et écrire sur un port USB
    Par codesnicolas dans le forum Entrée/Sortie
    Réponses: 0
    Dernier message: 18/07/2009, 14h17
  2. [pyserial] lire et écrire sur le port série
    Par elscorpio dans le forum Bibliothèques tierces
    Réponses: 3
    Dernier message: 29/05/2008, 13h39
  3. Lire et écrire sur disquettes en mode protégé
    Par nono212 dans le forum Programmation d'OS
    Réponses: 7
    Dernier message: 07/04/2008, 15h19
  4. [VB6] Lire et écrire sur une fenêtre dos...
    Par Zenar dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 16/03/2008, 13h14
  5. Lire et écrire sur le post COM sous XP
    Par ishikawa dans le forum C
    Réponses: 4
    Dernier message: 04/04/2007, 17h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo