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 :

Programmation graphique en mode 12h


Sujet :

Assembleur

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2003
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 16
    Points : 17
    Points
    17
    Par défaut Programmation graphique en mode 12h
    Salut,

    je fais du splash screen pour un bootstrap et le but est à un moment donné de charger une palette et d'afficher un bmp compressé en RAM.

    Mon code marche correctement en 320x200x256 et en 640x480x2 (mode 13h et 11h) mais dés lors que je passe en mode 12h ca part violemment en vrille.

    Pour écrire mon image je commence à écrire octet par octet en partant de a000:0000 évidemment dans le mode 12h mon image ne tenant pas sur un segment j'update le segment lorsque j'arrive à la fin du segment a000.
    Ce que j'ai peur c'est que le segment b000 est normalement réservé pour le mode texte donc en gros je ne le sent pas très bien...

    Peut-être que lorsque l'on on ait en mode 12h il y a des choses à faire que je n'ai pas faites ou autre.

    Merci d'avance pour votre aide.

  2. #2
    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
    Bonjour !

    En effet, l'adressage en mode 12h est plus compliqué.

    Chaque octet de la RAM vidéo code pour 8 pixels consécutifs à l'écran (1 bit par pixel). Mais la couleur d'un pixel (nécessitant 4 bits) est répartie sur 4 plans de bits !
    Le bit 0 de la couleur du 3ème pixel est le 3ème bit en partant de la gauche du 1er octet du plan de bits 0; le bit 1 de la couleur est le 3ème bit du 1er octet du plan de bits 1; et ainsi de suite pour les 2 derniers bits de la couleur du pixel.

    Pour calculer l'offset de l'octet de la RAM vidéo, il faut appliquer la formule :
    Offset = Ordonnée * ( 640 / 8 ) + Abscisse / 8
    Pour calculer le n° du bit correspondant au pixel :
    Bit = 7 - ( Abscisse modulus 8 )

    Il faut créer un masque de 1 octet correspondant à ce n° de bit. Dans l'exemple ci-dessus (le 3ème bit en partant de la gauche) : 00100000b.
    Ce masque doit être chargé dans le registre de masquage du contrôleur graphique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    mov dx,03CEh
    xor ax,ax
    mov al,Masque
    out dx,al
    Ensuite, il faut fixer le mode "Write2" du contrôleur graphique à "Read0" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mov ax,( 02h shl 8 ) + 5
    out dx,ax
    Ensuite, il faut aller lire l'octet dont on a calculé l'offset dans la RAM vidéo puis y écrire la couleur désirée.

    Enfin, il faut rétablir le contrôleur graphique dans son état d'origine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ; Masque binaire
    mov ax,( 0FFh shl 8 ) + 8
    out dx,ax
    ; mode "Write2"
    mov ax,( 00h shl 8 ) + 5
    out dx,ax
    Je n'avais pas menti en disant que c'était plus compliqué !
    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]

Discussions similaires

  1. exécuter un programme à distance en mode graphique
    Par [Hugo] dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 27/05/2008, 16h24
  2. [TP]Problème de programme exécutable en mode graphique
    Par GoodVibe dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 24/09/2004, 09h47
  3. Programmation graphique ... SDL ??
    Par Franck.H dans le forum C
    Réponses: 9
    Dernier message: 29/04/2004, 20h51
  4. Réponses: 3
    Dernier message: 15/03/2004, 00h55
  5. Programmation Graphique VESA
    Par rulianf dans le forum C
    Réponses: 5
    Dernier message: 30/06/2003, 20h31

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