Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : programmation graphique en mode 12h [ Archives / Forum general 80xxx ] (masta_jigga)

samedi 14 mai 2005 à 02:55:08 | programmation graphique en mode 12h

masta_jigga

J'aimerai poser surement une bete question.
Comment puis-je faire pour travailler dans le mode 12h (640x480 en 16 couleurs)
en accedant directement à la mémoire vidéo et sans utiliser le VESA.
(puisque dans ce mode je dépasse 64Ko)

Si il n'y a pas moyen de faire cela, j'aimerai qu'on m'explique pourquoi quand j'écris directement dans la memoire en mode 12h de la maniere suivante :

mettre un byte (pour donner une couleurou allumer un pixel ) à la position de l'écran
ES:[DI] en incrémentant DI de 1 à chaque fois, j'obtiens à la place d'une ligne plusieurs point écarté.

j'ai éssayé d'agrandir la valeur de mon byte (ex: al) et je n'obtient plus des point mais un petite ligne.

ce serait cool si quelqu'un pourrai m'expliquer le pourquoi de la chose.

je re-précise que j'ai initialisé le segment à 0A000h et que je suis en mode 12 h
Le but de ceci est de me permettre d'afficher par exemple un rectangle d'une couleur donné dans ce mod evideo mais d'une maniere instantané puisqu'en utilisant les int. ça prend beaucoup trop de temps.

Merci d'avance.

vendredi 20 mai 2005 à 03:14:27 | Re : programmation graphique en mode 12h

Gobillot

Les paramètres sont dans la pile
(c'est un programme pour Turbo Basic)
(couleur, position X, position Y, Longeur X, Longeur Y)

DEB:    PUSH BP
        MOV  BP, SP
        PUSH DS

; couleur dans CH
        LDS  SI, [BP+22]       ; couleur
        MOV  CH, [SI]          ; dans CH

; controleur graphique: registre 1 = Enable Set/Reset
; la valeur inscrite provient du registre Set/Reset
        MOV  DX, 3CEh
        MOV  AX, 0F01h
        OUT  DX, AX

; controleur graphique: registre 0 = Set/Reset
; détermine la valeur pour les différents plans de bits
        XOR  AX, AX
        MOV  DS, AX
        MOV  AH, CH
        OUT  DX, AX

; calcul adresse vidéo
        MOV  SI, 44Ah          ;nombre colonnes / ligne
        MOV  CX, [SI]
        PUSH CX
        LDS  SI, [BP+14]       ; position Y
        LODSW                  ; dans AX
        MUL  CX
        LDS  SI, [BP+18]       ; position X
        MOV  DI, [SI]          ; dans DI
        MOV  DX, DI            ; et dans DX
        AND  DX,7
        MOV  CL,3
        SHR  DI, CL 
        ADD  DI, AX
        MOV  AX, 0A000h
        MOV  ES, AX

; masque et nombre de bits
        LDS  SI, [BP+10]       ; Longueur X
        LODSW                  ; dans AX
        DEC  AX
        ADD  AX, DX
        MOV  BX, 0FF80h
        MOV  CX, DX
        SHR  BH, CL            ; BH = masque début
        MOV  CX, AX
        AND  CL, 7
        SAR  BL, CL            ; BL = masque fin
        MOV  CL, 3
        SHR  AX, CL
        MOV  CX, AX

; controleur graphique: registre 8 = Bit Mask
        MOV  DX, 3CEh
        MOV  AL, 8
        OUT  DX, AL
        INC  DX

        LDS  SI, [BP+6]       ; Longueur Y
        LODSW                 ; dans AX
        POP  BP               ; reprise nb colonne/ligne
        DEC  BP
        SUB  BP, CX

; début Ligne
P10:    PUSH AX
        PUSH CX
; masque début
M10:    MOV  AL, BH
        JCXZ M30
        OUT  DX, AL
        MOV  AH, ES:[DI]      ; chargement des reg. Latches
        STOSB
; milieu ?
        DEC  CX
        JZ   M35
; masque fin
M20:    MOV  AL, 0FFh
        OUT  DX, AL

M25:    REP  STOSB
        JMP  short M35

M30:    MOV  AL, BH
        AND  AL, BL
        JMP  $+4

M35:    MOV  AL, BL
        OUT  DX, AL
        MOV  AH, ES: [DI]
        STOSB
; boucle
P20:    POP  CX
        ADD  DI, BP
        POP  AX
        DEC   AX
        JNZ   P10
;  on remet les registres
P30:    DEC  DX
        MOV  AX,1
        OUT  DX, AX
        MOV  AX, 0FF08h
        OUT  DX, AX

FIN:    POP  DS
        POP  BP

Daniel

samedi 28 mai 2005 à 02:05:18 | Re : programmation graphique en mode 12h

masta_jigga

merci de m'avoir répondu Daniel.
Comme je suis débutant, c'est plutot difficile pour moi de déchiffrer ton code mais, j'essayerai à partir de là pour un peu avancé.

samedi 3 décembre 2005 à 23:57:58 | Re : programmation graphique en mode 12h

Coralsnake

salut ca fait longtempt qu'il n'y à plus de post ici mais je vais quand même essayer ... as tu regler ton probleme car j'ai le meme les pixel sont eclaté et je sais pas pourquoi ? merci d'avance un debutant

mercredi 4 janvier 2006 à 23:45:02 | Re : programmation graphique en mode 12h

BLUEBIBUBBLE

Le mode 12h est en 16 couleurs (4bits). Dans ce mode la carte video est composée de 4 plans de 38400 octets chacun (640 * 480) / 8

Le pixel a la position 0,0 est composé du:
-bit 7 de l'octet 0 du plan 0
-bit 7 de l'octet 0 du plan 1
-bit 7 de l'octet 0 du plan 2
-bit 7 de l'octet 0 du plan 3

Le pixel a la position 1,0 est composé du:
-bit 6 de l'octet 0 du plan 0
-bit 6 de l'octet 0 du plan 1
-bit 6 de l'octet 0 du plan 2
-bit 6 de l'octet 0 du plan 3

etc...

Port 3C4h index  2  (r/W):
Sequencer: Map Mask Register

         bit 0  Autorize écriture plan 0 si 1

             1  Autorize écriture plan 1 si 1

             2  Autorize écriture plan 2 si 1

             3  Autorize écriture plan 3 si 1


Il y a plusieurs technique pour écrire dans la ram video, selon le travail a effectuer:
-1 seul pixel a écrire
-une zone de couleur unie
-une zone de couleur différente.
-etc...

Un liens pour l'utilisation des registres de la carte graphique:
[ Lien ]

A+

jeudi 5 janvier 2006 à 01:56:04 | Re : programmation graphique en mode 12h

Gobillot

La couleur d'un pixel est composé par les 4 bits correspondants des 4 plans de bits,
ce qui donne 16 couleurs possibles.

Controleur Graphique:

Registre 1: Enable Set/Reset
  Pour l'utilisation du mode Write 0, les bits 0 à 3 déterminent si la valeur inscrite
  dans les 8 bits de l'octet d'un plan de bit adressé doit être extraite de l'octet CPU
  ou du Registre Set/reset
  c'est ce mode qui est choisi, les 4 bits sont positionnés à 1, ce qui veut dire qu'en
  une seule opération, 8 bits pourront être traités en même temps.

Registre 0: Set/Reset
  c'est ici qu'on met la couleur une seule fois au début.

Registre 8: Bit Mask
  ensuite on joue sur les masques pour déterminer les bits que l'on va traiter.
  3 cas sont à prévoir:
  - le masque de début intervient pour les premiers bits qui ne sont pas à traiter,
  - masque FFh pour traiter tous les octets complets entre début et la fin
    cas pas toujours présent d'où le test milieu ?
  - masque de fin pour les derniers bits qui sont pas à traiter.

pour modifier un octet:
 - on charge le masque correspondant
 -  on lance une lecture
    qui petmet de Lire les 4 registres Latches correspondants
    ceux ci sont seulement utilisés en interne
    ça évite de modifier les bits non traités (grace au masque)
 - on lance une écriture d'un octet complet
   les 4 Registres Latches sont écrits dans la mémoire vidéo

Il n'y a plus qu'à boucler Ligne par Ligne jusqu'à la fin.
puis on remet les Registres à leur valeur par défaut.
et c'est fini


Daniel



Cette discussion est classé dans : directement, programmation, graphique, mode, 12h


Répondre à ce message

Sujets en rapport avec ce message

PIC:Debug&programmation probleme [ par flagyg ] Bonjour,J'ai fait un programme sur un PIC 16F873Je l'ai développé en mode debugger avec mplab et l'interface ronde de microship.Il marche a merveille Questions sur Windows et son mode protégé [ par Oeil_de_taupe ] Bonjour, J'utilise mes longue vacances pour me mettre à l'assembleur, et plus particulièrement la création d'exécutable assembleur pour Windows Programmation du sudoku en assembler 8086 [ par dan_katiemnn ] Salut á tous ,je suis débutant á assembler et je suis actuellement entrain de m`essayer sur la programmation du sudoku avec le 8086. J`aimerai bien av Où avez vous appris l'assembleur [ par Joe0557 ] Bonjour, Je m'interresse depuis quelques temps à la programmation en ASM, mon projet final serait de faire un OS (je sais qu'il est très compliquer d' help schema de carte graphique [ par busman ] salut a tous j ai recup une " saphirre radeon x1900 xtx 512m dual - dvi/vivo"SKU#21082-00PN 102-A 52021-52-ATje recherche desesperement le chema elect Impression d'une fenêtre [ par Nasman ] Bonjour,Je suis à la recherche des méthodes à employer pour permettre d'imprimer une fenêtre graphique sur une imprimante sélectionnée. Je n'ai pas de Vesa en mode Protégé [ par epineurien ] Voila , ca fait un moment que je souhaite quitter le mode réel , pour passer en mode protégé (faire tenir mon environnement 3d RayTracing dans moins d A L'AIDE SVP [ par gokudo ] j'ai besoin d'un tutorial detaillé sur les API, je commance en programmation 32bit et j'aimerai bien avoir le max d'information si qq'1 a un site ou j docs programmation duo-quad cores [ par raoulli ] salut.Y'a t'il quelqun qui saurrait, ou aurrait des infos sur, la programmation pour un dual ou un quad core.est ce que ce processeur, dispatch les th bug graphique [ par raoulli ] salut.c'est encore moi.je suis collant hein !Cette fois ci c'est donc pour un bug graphique.Voila, je ne vois pas dutout la maniere de debuguer ce pro


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,250 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.