begin process at 2012 05 25 12:30:13
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Assembleur

 > 

Archives

 > 

Forum general 80xxx

 > 

programmation graphique en mode 12h


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

programmation graphique en mode 12h

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ée 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 assembleur [ par Rotsycs ] slt! j'ai un petit souci à propos de la programmation assembleur. prog: il s'agit d'un programme qui tester un chiffre entrée au clavier. si tu écrit Aide pour utilisation d'un LCD graphique + PIC 16F886 [ par radiumx ] Bonsoir à tous, Voilà, dans le cadre d'un projet, je dois réaliser une mini console de jeu à l'aide d'une écran LCD graphique 128*64 (de marque cct programmation en assembleur [ par isai2010 ] salut, je suis une nouvelle membre du forum,veuillez accepter mon amitié. s'il vous plait j'ai besoin de votre aide,j'ai un projet à rendre d'urgence Logique d'utilisation du registre DS (mode réel) [ par powel42 ] Bonjour à tous, je suis curieux de savoir quelle est la "bonne" manière d'utiliser le segment DS (s'il y en a une). Lorsque l'on démarre sous DOS Des codes, un programmateur oui mais après [ par OWLBLACK ] En tant que débutant, je me suis lancé dans la programmation des pics pour fabriquer des animations lumineuses à leds. Je trouve des modèles de pics, Programmation assembleur [ par DIJONCTER ] Bonjour, Je voudrais savoir si il y aurait une personne qui puisse m'aider en programmation assembleur en effet je suis débutant sur ce type de progra problème avec programmation pic16F690 [ par bibou1234 ] Bonjour j'ai un problème au niveau de la programmation en assembleur d'un pic16F690 J'ai trois fonctions a testé -la détection des defauts pour la pre


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,608 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales