LIST 2 7.TXT/fr

From Atari Wiki
Jump to navigation Jump to search
     **********************************************************************
    *                                                                    *
    *               COURS D'ASSEMBLEUR 68000 SUR ATARI ST                *
    *                                                                    *
    *                   par Le Féroce Lapin (from 44E)                   *
    *                                                                    *
    *                 Listing numéro 2 / Cours numéro 7                  *
    *                                                                    *
    **********************************************************************

    *  Test résolution, car si on est en haute et que l'on essaye de *
    *  passer en basse, paf!  RESET !                                *

           MOVE.W    #4,-(SP)              numéro fonction  Getrez()
           TRAP      #14                   appel Xbios
           ADDQ.L    #2,SP                 correction pile
           CMP.W     #2,D0                 haute ?
           BEQ       CHARGE                oui, donc on charge tout de
                                           suite

    * Puisqu'on est pas en haute, on force en basse résolution
    * on note d'abord en mettant à 1 un drapeau de signalement

           MOVE.W    #1,RESOLUTION

           MOVE.W    #0,-(SP)              basse résolution
           MOVE.L    #-1,-(SP)             adresse écran inchangée
           MOVE.L    #-1,-(SP)             adresse écran inchangée
           MOVE.W    #5,-(SP)              fonction Setscreen()
           TRAP      #14                   du X bios
           ADDA.L    #12,SP                correction


    * Ouverture du fichier image

  CHARGE   MOVE.W    #0,-(SP)              ouverture en lecture
           MOVE.0L   #NOM_FICHIER,-(SP)    adr nom du fichier
           MOVE.W    #61,-(SP)             fonction Fopen()
           TRAP      #1                    du GEMDOS
           ADDQ.L    #8,SP                 correction pile


    * D0 contient le Handle ou bien un numéro d'erreur négatif

           TST.W     D0                    compare à 0
           BLT       ERREUR                inférieur donc erreur


    * On sauve le handle du fichier

           MOVE.W    D0,D3


    * Saute les 34 octets du début de fichier DEGAS
    * (2 octets d'en-téte, 32 de couleurs)

           MOVE.W    #0,-(SP)              décale à partir du début de
                                           fichier
           MOVE.W    D3,-(SP)              handle du fichier
           MOVE.L    #34,-(SP)             nbr d'octets à sauter
           MOVE.W    #66,-(SP)             fonction Fseek()
           TRAP      #1                    du GEMDOS
           ADDA.L    #10,SP              
           TST.W     D0                    test D0
           BLT       ERREUR


    * Détermine l'adresse de l'écran

           MOVE.W    #2,-(SP)              fonction Physbase()
           TRAP      #14                   du xbios
           ADDQ.L    #2,SP                 correction pile
           MOVE.L    D0,A5                 sauve l'adresse


    * Charge l'image directement dans l'écran

           MOVE.L    A5,-(SP)              adresse destination
           MOVE.L    #32000,-(SP)          nbr octets à lire
           MOVE.W    D3,-(SP)              handle du fichier
           MOVE.W    #63,-(SP)             fonction Fread()
           TRAP      #1                    du GEMDOS
           ADDA.L    #12,SP
           TST.W     D0
           BLT       ERREUR


    * Chargement de la palette dans notre buffer palette
    * D'abord repositionner le pointeur fichier

           MOVE.W    #0,-(SP)              décale à partir du début de
                                           fichier
           MOVE.W    D3,-(SP)              handle du fichier
           MOVE.L    #2,-(SP)              nbr d'octets à sauter
           MOVE.W    #66,-(SP)             fonction Fseek()
           TRAP      #1                    du GEMDOS
           ADDA.L    #10,SP
           TST.W     D0                    test D0
           BLT       ERREUR


  * Puis chargement

           MOVE.L    #BUFFER_PAL,-(SP)     adresse destination
           MOVE.L    #32,-(SP)             nbr octets à lire
           MOVE.W    D3,-(SP)              handle du fichier
           MOVE.W    #63,-(SP)             fonction Fread()
           TRAP      #1                    du GEMDOS
           ADDA.L    #12,SP
           TST.W     D0
           BLT       ERREUR


  * On place maintenant cette palette avec Xbios (6)

           MOVE.L    #BUFFER_PAL,-(SP)     adresse palette noire
           MOVE.W    #6,-(SP)              fonction SetPalette()
           TRAP      #14                   du XBIOS
           ADDQ.L    #6,SP


  * On referme le fichier

           MOVE.W    D3,-(SP)              handle
           MOVE.W    #62,-(SP)             fonction Fclose()
           TRAP      #1                    du GEMDOS
           ADDQ.L    #4,SP

           BRA       FIN                   et on se sauve


  * En cas d'erreur on vient ici

  ERREUR   MOVE.L    #MESSAGE_ERREUR,-(SP) prévient
           MOVE.W    #9,-(SP)
           TRAP      #1
           ADDQ.L    #6,SP

  FIN      MOVE.W    #7,-(SP)              attend un appui touche
           TRAP      #1
           ADDQ.L    #2,SP

           CMP.W     #0,RESOLUTION
           BEQ       NOT_MOYENNE


  * Puisqu'on est en basse, on reforce en moyenne résolution

           MOVE.W    #1,-(SP)              moyenne résolution
           MOVE.L    #-1,-(SP)             adresse écran inchangée
           MOVE.L    #-1,-(SP)             adresse écran inchangée
           MOVE.W    #5,-(SP)              fonction Setscreen()
           TRAP      #14                   du XBIOS
           ADDA.L    #12,SP                correction


  * Puis on quitte

  NOT_MOYENNE
           MOVE.W    #0,-(SP)
           TRAP      #1
  *-------------------------------------------------------------*
      SECTION DATA
  MESSAGE_ERREUR     DC.B                  "Désolé, erreur avec",13,10
                     DC.B                  "le fichier "
  NOM_FICHIER        DC.B                  "A:\IMAGE.PI1",0

      SECTION BSS
  BUFFER_PAL         DS.W                  16
  RESOLUTION         DS.W                  1

Back to ASM_Tutorial