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

Assembleur Discussion :

Comment afficher et positionner un curseur clignotant ?


Sujet :

Assembleur

  1. #1
    sdx
    sdx est déconnecté
    Membre régulier Avatar de sdx
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 106
    Points : 90
    Points
    90
    Par défaut Comment afficher et positionner un curseur clignotant ?
    Bonjour,

    je ne suis plus vraiment débutant en assembleur et pourtant je ne saisis pas le fonctionnement des interruptions (BIOS) qui permettent de lire/positionner le curseur de texte et le curseur clignottant :

    Comment faire pour afficher un curseur clignotant ?? Pour le positionner là où l'on veut, et pour selectionner les coordonnées du prochain affichage ??

    merci,

    sdx

    ps: ne me revoyez pas d'int DOS svp, je n'y ai pas acces
    ps2: je suis sur PC/intel

  2. #2
    Membre habitué Avatar de Nico*3-3
    Inscrit en
    Octobre 2004
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 164
    Points : 145
    Points
    145
    Par défaut
    Salut !

    Pour positionner le curseur :

    Int 10h -> Fonction 02h
    - dh = Ligne
    - dl = Colonne
    - bh = Numéro de page

    (Déjà dit dans le sujet en-dessous) .

    Après, je ne sais pas comment on fait pour avoir un curseur clignotant mais ça ne doit pas être très difficile à trouver...

    A bientôt !
    Tout a une fin, sauf l'infini...
    Projet SKAN : Développement commun d'OS

    Nico*3-3

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Pour le positionnement du curseur, tu fais je suppose référence à la fonction 02h de l'intérruption 10H du BIOS ? Voici son fonctionnement :

    AH = 02h
    BH = Numéro de la page écran
    DH = Ligne de l'écran
    DL = Colonne de l'écran

    Comment faire pour afficher un curseur clignotant ??
    J'avoue que je ne comprends pas. Tu fais pointer ton curseur où tu le souhaites sur l'écran et il clignote d'office ?

    Voici un exemple illustrant mieux ce que tu souhaites probablement faire :
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    .Model small
    .stack       
    .DATA
            MSG1 DB "PREMIER MESSAGE$"
            MSG2 DB "DEUXIEME MESSAGE$"
    .CODE
     
            ; INITIALISATION DU SEGMENT DE DONNEES
            MOV AX,@DATA
            MOV DS,AX
     
    	; POSITIONNEMENT DU CURSEUR A LA LIGNE 5 COLONNE 20 POUR AFFICHER MSG1
    	MOV AH,02H
    	MOV BH,0
    	MOV DH,5
    	MOV DL,20
    	INT 10H
     
    	; AFFICHE MSG1
    	MOV AH,09H
    	MOV DX, OFFSET MSG1
    	INT 21H
     
    	; POSITIONNEMENT DU CURSEUR A LA LIGNE 8 COLONNE 20 POUR AFFICHER MSG2
    	MOV AH,02H
    	MOV BH,0
    	MOV DH,8
    	MOV DL,20
    	INT 10H
     
    	; AFFICHE MSG2
    	MOV AH,09H
    	MOV DX, OFFSET MSG2
    	INT 21H
     
    	; REND LE CONTROLE AU DOS
    	MOV AX,4C00H
    	INT 21H
    end
    Voilà j'espère que cela t'aidera un peu

    [EDIT] Je suis trop lent à écrire, tu m'as devancé Nico, je n'avais pas vu ;-)[\EDIT]

  4. #4
    sdx
    sdx est déconnecté
    Membre régulier Avatar de sdx
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 106
    Points : 90
    Points
    90
    Par défaut
    Merci, j'ai lu le post en dessous (que je n'avait même pas vu )

    je connaissait cette int et l'adresse 0B800:0000 pour le texte (il me semble), mais ce qui me posait le plus de problème c'était le curseur clignotant :
    - l'afficher quand le programme attend une entrée
    - l'afficher au bon endroit
    - le masquer quand le programme travail

    d'après ce que j'ai trouvé, il faut chercher vers l'int 10h, sous-fct 2 et 3. Je comprend pas le texte donnée dans ma doc

    je vais continuer mes recherches (les auteurs de google devraient recevoir un prix nobel )

    sdx

    [EDIT] Mon message venait juste après celui de Nico !![/EDIT]

  5. #5
    sdx
    sdx est déconnecté
    Membre régulier Avatar de sdx
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 106
    Points : 90
    Points
    90
    Par défaut
    Pour être clair :

    le "curseur" peut être compris de deux manières différentes :

    - la prochaine position où apparaitra un caractère (déplacement sur l'écran)
    - le petit tiret clignotant qui signifit à l'utilisateur que le programme attend une saisie au clavier.

    c'est surtout ce dernier que je cherche à controler.

    merci

    [EDIT] controler = controler les coordonnees && controler visible/invisible[/EDIT]

  6. #6
    Invité
    Invité(e)
    Par défaut
    il faut chercher vers l'int 10h, sous-fct 2 et 3. Je comprend pas le texte donnée dans ma doc Crying or Very sad
    As-tu vu mon post où j'explique grosso-modo le fonctionnement de la fonction 02H/int 10H :

  7. #7
    sdx
    sdx est déconnecté
    Membre régulier Avatar de sdx
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 106
    Points : 90
    Points
    90
    Par défaut
    OUI, je l'ai lu et bien lu

    si j'ai bien compris, tu montre comment ce déplacer, mais pas comment deplacer/afficher/masquer le tiret clignotant qui sert d'invite pour entrer du texte ...

    suis-je un : Parce que je ne vois pas ma solution dans ton post

  8. #8
    Invité
    Invité(e)
    Par défaut
    Non, il n'est pas question que tu sois un boulet, je tente simplement de savoir au mieux ce que tu désires faire dans le but de mieux te répondre

    Je ne sais pas comment tu peux afficher/masquer ton curseur, mais je pense que tu veux permettre à l'utilisateur d'entrer une phrase à la position LignexColonne et d'en entrer une autre à la position LignexColonne ?

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    Model small
    .stack       
    .DATA
         BUFFER DB 200 DUP ('$') 
    .CODE
     
         ; INITIALISATION DU SEGMENT DE DONNEES
         MOV AX,@DATA
         MOV DS,AX
     
         ; POSITIONNEMENT DU CURSEUR A LA LIGNE 5 COLONNE 20 POUR    
    AFFICHER MSG1
         MOV AH,02H
         MOV BH,0
         MOV DH,5
         MOV DL,20
         INT 10H
     
         ; ATTENTE SAISIE USER A CETTE POSITION
         MOV AH,0AH		
         MOV DX,OFFSET BUFFER
         INT 21H
     
         ; POSITIONNEMENT DU CURSEUR A LA LIGNE 8 COLONNE 20 POUR  AFFICHER MSG2
         MOV AH,02H
         MOV BH,0
         MOV DH,8
         MOV DL,20
         INT 10H
     
         ; ATTENTE SAISIE USER A CETTE POSITION
         MOV AH,0AH		
         MOV DX,OFFSET BUFFER
         INT 21H
     
         ; REND LE CONTROLE AU DOS
         MOV AX,4C00H
         INT 21H
    end
    Voilà, le curseur se met à la position x,y, laisse l'occasion à l'user de rentrer sa chaine, puis se met à une autre position x,y pour entrer une autre chaine. Cela t'aide-t-il ou n'est-ce pas du tout ce que tu souhaites ?

  9. #9
    sdx
    sdx est déconnecté
    Membre régulier Avatar de sdx
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 106
    Points : 90
    Points
    90
    Par défaut
    T'inquiète pas il en faut plus pour me vexer

    le truc (bin ouai, faut toujours qu'il y ai un problème, sinon l'asm ce serait pas drôle !!) c'est que pour ce que je doit écrire, les interruptions DOS --> pas le droit

    il me faudrait une interruption BIOS qui ce contente d'afficher/masquer/deplacer le tiret d'invite (le fameux tiret qui clignote ou bout des invites DOS), sans forcement demander à l'utilisateur de taper qqchose.

    C:\>DOSSIER\ _ <- le petit tiret là
    sdx

    ps: le pointeur (celui qu'on touche avec l'int 10, ss-fct 2) de placement peut-il être modifié sans passer par les interruptions BIOS, directement dans la mémoire (de la même manière que le texte peut être directement copié à 0B800:0000, ceci en vue d'un passage en mode protégé)

  10. #10
    Membre habitué Avatar de Nico*3-3
    Inscrit en
    Octobre 2004
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 164
    Points : 145
    Points
    145
    Par défaut
    Salut !

    Malheureusement il y a confusion...
    On ne sait pas vraiment ce que tu veux faire :
    Les fonctions du DOS (mais tu dis que tu n'y a pas accès) de lecture et écriture à l'écran se font par rapport au curseur (et il n'y en a qu'un, c'est le pavé en-dessous des caractères), mais tu peux très bien te passer de ces fonctions (réécrire tes propres procédures pour écrire dans la mémoire vidéo)... 8)

    Donc il faudrais que tu nous dises exactement et sans confusion ce que tu veux faire...

    PS : sdx -> Tu m'a devancé
    Pour répondre à la dernière question, il est possible de se passer totalement du BIOS pour tout, mais faut s'amuser avec les I/O.
    Tout a une fin, sauf l'infini...
    Projet SKAN : Développement commun d'OS

    Nico*3-3

  11. #11
    sdx
    sdx est déconnecté
    Membre régulier Avatar de sdx
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 106
    Points : 90
    Points
    90
    Par défaut
    Pour être le plus clair possible :

    je n'ai pas acces aux int DOS parce que la procédures doit tourner sur un noyau que j'ai écrit moi même.

    j'écrit une procédure qui demande à l'utilisateur de taper une chaine de chars au clavier. Il faut donc que je réussisse à faire les actions suivantes:
    - afficher un tiret clignotant pour que l'on sache que le prog attent qqchose
    - lire tout ce qui vient du clavier et l'afficher à l'écran
    - détecter les touches gauche et droite, dans ce cas il faut pouvoir déplacer le curseur et se débrouiller pour que le texte entré soit inséré au bon endroit
    - detecter la touche ENTRER, pour mettre fin à l'invite et masquer le petit tiret clignotant.

    voilà vous savez tout

    sdx

    ps: si là je ne suis pas assez clair, je retourne au CP pour apprendre a parler

  12. #12
    Invité
    Invité(e)
    Par défaut
    Je sais que j'y tiens, mais par ma manière, le curseur (" _ ") se déplace d'un point à l'autre en invitant l'utilisateur a entrer quelque chose, ce qui n'est pas nécessaire. Cependant, comme le dit Nico-3*3, si tu ne veux pas utiliser les interruptions du DOS, tu peux très bien écrire toi-même dans la mémoire vidéo (Il y a un post légèrement en dessous du tiens qui traite largement de ce sujet)

    Did2604.

    [EDIT] sdx, tu m'as également légèrement devancé, mon post vient au dessus du tiens [\EDIT]

  13. #13
    sdx
    sdx est déconnecté
    Membre régulier Avatar de sdx
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 106
    Points : 90
    Points
    90
    Par défaut
    OUI, il est facile d'écrire dans la mémoire vidéo, mais le BIOS propose de faire clignoter un petit tiret, et ça, on ne peut pas le réécrire "à la main".

    Il existe forcement une interruption permettant d'utiliser cette fonction du BIOS, puisque DOS l'utilise ...

    sdx

    ps: Suicide : H -2

  14. #14
    Invité
    Invité(e)
    Par défaut
    Jette un coup d'oeil sur l'Int 10h, Fct 01h, elle permettrait apparemment de définir l'apparence du curseur... je ne dis pas qu'elle te permet de faire spécialement ce que tu veux, mais je te donne une piste

    ps: Suicide : H -2
    Kézako ?

  15. #15
    sdx
    sdx est déconnecté
    Membre régulier Avatar de sdx
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 106
    Points : 90
    Points
    90
    Par défaut
    did2604 je croix bien que je t'adore !!!

    je vais chercher par là, je revient dans qq instants ...

    sdx

    ps: la cuisine c'est pas mon truc mais quand faut y aller faut y aller

  16. #16
    Membre habitué Avatar de Nico*3-3
    Inscrit en
    Octobre 2004
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 164
    Points : 145
    Points
    145
    Par défaut
    Citation Envoyé par sdx
    OUI, il est facile d'écrire dans la mémoire vidéo, mais le BIOS propose de faire clignoter un petit tiret, et ça, on ne peut pas le réécrire "à la main".
    Ho que si qu'on peut !

    Il faut s'amuser avec les I/O, je l'ai déjà dit, le BIOS est une couche logicielle, tu peux écrire ton BIOS si tu veux... 8)
    Effectivement c'est bien la fonction 01h à ce que je vois...

    Salut !
    Tout a une fin, sauf l'infini...
    Projet SKAN : Développement commun d'OS

    Nico*3-3

  17. #17
    sdx
    sdx est déconnecté
    Membre régulier Avatar de sdx
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 106
    Points : 90
    Points
    90
    Par défaut
    J'ai fait un test dans bochs, mais le curseur ne clignote pas ... je vais essayer "en vrai", c'est peut être normal ...

    merci encore à tous,

    sdx

    ps: ne croyez pas que c'est fini : je n'ai pas encore dit que ça marchait

  18. #18
    Membre habitué Avatar de Nico*3-3
    Inscrit en
    Octobre 2004
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 164
    Points : 145
    Points
    145
    Par défaut
    Je n'ai pas regardé en détails mais cette fonction utilise des bits spécifiques, pas une valeur dans un octet...

    As-tu bien défini ça :
    Tout a une fin, sauf l'infini...
    Projet SKAN : Développement commun d'OS

    Nico*3-3

  19. #19
    sdx
    sdx est déconnecté
    Membre régulier Avatar de sdx
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 106
    Points : 90
    Points
    90
    Par défaut
    Alors : c'est normal que ça ne clignote pas sous bochs, ça clignote bien sur un pc normal ...

    Moins bien : comment je fait moi maintenant pour l'effacer : :

    j'ai penser à mettre des valeurs hors du domaine mais ma doc me dit que cela peut faire planter le pc ... j'ai trouver une autre technique : "déplacer le curseur hors de l'ecran", mais à ce moment là, si je veut écrire à l'écran, il faudra que je le redéplace à l'interieur de l'écran ...


    si vous avez une autre idée ...


    sdx

    ps: Nico*3-3, j'ai peut être zappé qqch mais où es ce que cela parle de bits

  20. #20
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    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 937
    Points : 59 417
    Points
    59 417
    Billets dans le blog
    2
    Par défaut
    Pour effacer le curseur, tu peux, par exemple, définir 32 comme ligne de début et 33 comme ligne de fin (dans la forme du curseur, je veux dire).

    Ces valeurs se trouvent d'ailleurs dans les variables du BIOS aux adresses suivantes :
    0040h:0061h pour la ligne de début
    0040h:0060h pour la ligne de fin
    Il suffit d'aller lire ces valeurs avant d'effacer le curseur, pour les restaurer lorsque tu le réaffiches (mais il faut de nouveau passer par l'interruption : les changer directement dans les variables du BIOS n'aura aucun effet)
    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]

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [NETCF] Afficher curseur clignotant dans textbox
    Par koktel_dfr dans le forum Windows Forms
    Réponses: 1
    Dernier message: 12/02/2010, 12h45
  2. Comment positionner le curseur à l'aide d'une macro
    Par dede tabby dans le forum VBA Word
    Réponses: 3
    Dernier message: 15/11/2008, 19h22
  3. comment positionner le curseur?
    Par minota dans le forum Eclipse Platform
    Réponses: 0
    Dernier message: 24/10/2008, 10h02
  4. [FLASH MX2004] Comment positionner le curseur
    Par dgloris dans le forum Flash
    Réponses: 1
    Dernier message: 30/12/2007, 19h30
  5. Comment faire un positionnement de curseur?
    Par xmountain dans le forum Visual C++
    Réponses: 1
    Dernier message: 06/02/2007, 09h20

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