ASSEMBLEUR

 

 
COURS D'ASM 68000
(par le Féroce Lapin)

retour au VOLUME 1


  **********************************************************************
  *                                                                    *
  *               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