Deplacer le curseur en mode texte sans les interruptions [Résolu]

kezsolo 7 Messages postés mercredi 18 janvier 2006Date d'inscription 19 mai 2009 Dernière intervention - 6 mai 2009 à 19:17 - Dernière réponse : BLUEBIBUBBLE 116 Messages postés samedi 4 juin 2005Date d'inscription 10 avril 2013 Dernière intervention
- 5 juin 2009 à 22:36
Bonjour à toutes & à tous

J'aimerai savoir s'il existe un moyen de deplacer le curseur en mode texte sous dos
sans utiliser les interruptions Dos / Bios ??

Tasm 4
winxp

MErci d avance et bonne prog ;-)
Afficher la suite 

Votre réponse

14 réponses

Meilleure réponse
bofur 39 Messages postés lundi 13 novembre 2000Date d'inscription 5 juin 2009 Dernière intervention - 10 mai 2009 à 23:01
3
Merci
pour pouvoir déplacer le curseur en mode texte, il faut pouvoir modifier des registre de la carte video

la carte video comprend la position du curseur comme une adresse (num du caractère + num de ligne x nombre de collonne)

voici le code pour faire ça (il faut au préalable mettre dans bx la position du curseur):
mov dx,3D4h     ;sav pos cur 
mov al,0Eh
out dx,al  
mov dx,3D5h
mov al,bh
out dx,al  
mov dx,3D4h
mov al,0Fh
out dx,al  
mov dx,3D5h
mov al,bl
out dx,al

G.I.G.O.

Merci bofur 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 125 internautes ce mois-ci

Commenter la réponse de bofur
cs_ghuysmans99 3983 Messages postés jeudi 14 juillet 2005Date d'inscription 30 juin 2013 Dernière intervention - 6 mai 2009 à 21:21
0
Merci
T'es sous XP, alors pas question d'interruptions ou de toute autre horreur du même genre.
http://msdn.microsoft.com/en-us/library/ms648394(VS.85).aspx
Commenter la réponse de cs_ghuysmans99
kezsolo 7 Messages postés mercredi 18 janvier 2006Date d'inscription 19 mai 2009 Dernière intervention - 7 mai 2009 à 14:47
0
Merci
Hello !!
& tout d'abord merci pour ta reponse, mais elle ne correspond pas a ce que  je cherche, mais ma demande n'etait peut etre pas tres precise.

=>Concernant SetCursorPos je suis tout a fait d'accord !!! (mais c'est une fonction windows et mon but est de na pas utiliser la librairie "standard").

Bref je m'explique : mon objectif est purement didactique et consiste a connaitre reellement le fonctionnement du pc. Je code sous dos & windows depuis 15ans (bp, tpw, tasm, delphi...) et je suis tout a fait d'accord que l'utilisation de la librairie standard est tres pratique, le resultat est rapide certe, mais j'ai toujours le meme problème : comment ca marche ?? Depuis des annees je me sert de librairies, d'api, de composants etc... qui sont ecrits par d'autres et dont je ne sait jamais (ou tres mal) ce qu'ils font reellement (tout en augmentant de maniere considerable la taille du code - cela va sans dire ;-( ).

Ma question est la suivante :

Comment est codé le curseur (en mode texte sous dos) en memoire video ???

Merci a+ & Bonne prog!!

PS : si pour toi les interruptions sont des horreurs !!???!! comment fait tu pour terminer un exe sans la 21h ?? Donne moi ta reponse je ne demande qu'a apprendre !! et c'est d'ailleurs pour ca que je me suis inscrit sur ce forum !!

(stp ne repond pas exitcode merci ;-)
Commenter la réponse de kezsolo
cs_ghuysmans99 3983 Messages postés jeudi 14 juillet 2005Date d'inscription 30 juin 2013 Dernière intervention - 7 mai 2009 à 20:16
0
Merci
Si tu veux savoir comment fonctionne le positionnement du curseur, regarde par exemple des parties du source de Linux.
<hr size="2" width="100%" />Comment quitter ??
xor (e)ax,(e)ax
ret
<hr size="2" width="100%" />Les interruptions MS-DOS sont à proscrire quand on est sous Windows : on est maintenant en mode protégé, les process possèdent leur mémoire virtuelle de 4Go, n'accèdent pas à celle des autres, on ne fait plus ce que l'on veut avec les périphériques et on possède des registres 2x plus grands (16 bits => 32 bits)
.
Plus question d'utiliser les interruption, car tu fais appel à NTVDM, l'émulateur de DOS de Windows et, par conséquent, tu perds le plus grand avantage de l'assembleur : sa vitesse. Le vrai DOS a totalement disparu depuis Windows NT.
Et ce n'est qu'avec les APIs que tu peux exploiter toutes les possibilités de la machine !
Commenter la réponse de cs_ghuysmans99
kezsolo 7 Messages postés mercredi 18 janvier 2006Date d'inscription 19 mai 2009 Dernière intervention - 9 mai 2009 à 18:25
0
Merci
Merci pour ta reponse !!
Je vais essayer  ta combine !! Quand au source de linux je vais essayer mais je ne connait pas bien, je me sert occasionnellement de kde mais je ne suis jamais allé voir dans les sources du systeme. Quand a tes remarques sur windows je suis tout a fait d'accord mais mon objectif est simplement didactique ;-) Quand j'ai besoin de coder en asm sous xp c juste des fonctions pour delphi et là j'ai pas besoin de me preoccuper de l'affichage !


@+ & bonne prog!


PS : le dos est mort sauf chez moi !! j'ai toujours un 80286, un 80386, un 80486 et un des premiers pentiums !!
Commenter la réponse de kezsolo
cs_ghuysmans99 3983 Messages postés jeudi 14 juillet 2005Date d'inscription 30 juin 2013 Dernière intervention - 9 mai 2009 à 18:52
0
Merci
J'ai aussi un 486 DX 4 avec la carte-mère et la carte son.
Commenter la réponse de cs_ghuysmans99
kezsolo 7 Messages postés mercredi 18 janvier 2006Date d'inscription 19 mai 2009 Dernière intervention - 11 mai 2009 à 15:03
0
Merci
Hello bofur
et Merci pour ta réponse !!
Je vais examiner ton code & le tester dès que possible !! A priori c'est exactement ce que je cherchait !! =;-) Comme quoi c'etait à priori bien possible !!
Je me souvient maintenant avoir lu un truc y'a des annees sur le DAC de la carte video (de memoire je pense que c'est ca). C'est ce que ton code utilise ou ca n'a rien a voir ?


Merci pour tout a+ & bonne prog ;-)
Commenter la réponse de kezsolo
kezsolo 7 Messages postés mercredi 18 janvier 2006Date d'inscription 19 mai 2009 Dernière intervention - 11 mai 2009 à 15:51
0
Merci
A priori je croit bien que ca n'a rien n'a voir !!
Ne serait-ce pas les ports du crtc ?


@+ et merci d'avance
Commenter la réponse de kezsolo
bofur 39 Messages postés lundi 13 novembre 2000Date d'inscription 5 juin 2009 Dernière intervention - 12 mai 2009 à 23:46
0
Merci
oui c'est les port du crtc (cathodic? ray tube controleur), c'est les ports de la carte EGA ou CGA il me semble, le dac c'est pour changer les couleurs du mode 256 couleurs (et ptet meme 16 couleurs)

le pti bout de code ne peut que marcher je l'ai uttilisé dans un os-maison

G.I.G.O.
Commenter la réponse de bofur
kezsolo 7 Messages postés mercredi 18 janvier 2006Date d'inscription 19 mai 2009 Dernière intervention - 13 mai 2009 à 13:24
0
Merci
Hello
j'ai retrouvé mes docs Vga et c'est effectivement le Crtc, & le Dac pour gerer la palette.
Je ne doute pas que ton code fonctionne (aux vues de mortimer ;-)) c'est juste que je veut toujours savoir comment ca marche plutot que de copier coller bêtement sans comprendre.

Voyons voir si j'ai bien compri : pour acceder au crtc 
   => index = 3d4h
   => donnees = 3d5h

la fonction 0eh => octet poid fort de la position du curseur et 0fh => partie basse.  On utilise dx car le n° de port est >256 et on envoie les 2 bytes respectifs vers le port pour deplacer le curseur.

J'ai (encore) une petite question : les fonctions 0eh & 0fh requierent-elle de désactiver le bit 7 du reg 11h du Crtc (bit de protection) et si oui pourquoi ? Quel est le risque ?

MErci & vivement ce weekend que je puisse coder tout ca.
@+ & bonne prog
Commenter la réponse de kezsolo
bofur 39 Messages postés lundi 13 novembre 2000Date d'inscription 5 juin 2009 Dernière intervention - 13 mai 2009 à 23:35
0
Merci
je dirait que tou a bien été comprit ^_^

pour ce qui est de la protection par le bit 7 du registre 11h,
elle ne concerne que les 8 premiers secteurs donc rien a craindre de ce problème

G.I.G.O.
Commenter la réponse de bofur
kezsolo 7 Messages postés mercredi 18 janvier 2006Date d'inscription 19 mai 2009 Dernière intervention - 19 mai 2009 à 13:37
0
Merci
Hello
ca marche nickel merci !!
J'avais juste un bug mais c'etait pour l'adresse du curseur dans bx.
J'avais mal compri ton "num caractere" je pensais au depart que c'etait l'ascii
du curseur mais comme je ne trouvai pas dans ma doc je l'ai remplacé par
(numero de ligne desiré*nb de colonnes du mode txt)+colonne désirée
et c'est ok.
Juste une petite question : on passe toujours par al pour envoyer sur un port ?

Merci @+ et bonne prog
Commenter la réponse de kezsolo
bofur 39 Messages postés lundi 13 novembre 2000Date d'inscription 5 juin 2009 Dernière intervention - 20 mai 2009 à 20:55
0
Merci
j'aurait du dire position du curseur au lieu de adresse

on peut aussi de servir de ax pour envoyer des données aux ports, mais dans ce cas le processeur envoie d'abord al puis ah car on a toujour que des port de 8bit

y'a d'autre instriction comme par exemple "mul" qui font automatiquement les opération avec ax (ou dx:ax ou edx:eax et dans ces cas ci les LSB sont dans ax et les MSB sont dans dx)

G.I.G.O.
Commenter la réponse de bofur
BLUEBIBUBBLE 116 Messages postés samedi 4 juin 2005Date d'inscription 10 avril 2013 Dernière intervention - 5 juin 2009 à 22:36
0
Merci
Hi !
Si tu est en mode texte sous MS-DOS, écrit directement dans la mémoire vidéo (Seg: 0B800h en mode texte, 0A000h en mode graphique).
En mode texte, chaques caractères prend 2 octets (1 pour le code ASCII du caractère et 1 pour la couleur(fore/front/clignotement), mais je ne me souvient plus dans quel ordre! Fais des essais!)
Pour la position du curseur (si 80 colonnes=160 octets par lignes), calcul l'offset avec un truc du genre : y*160+x*2
Commenter la réponse de BLUEBIBUBBLE

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.