LIST 2 7.TXT/fr: Difference between revisions

From Atari Wiki
Jump to navigation Jump to search
(Created page with "<pre> ********************************************************************** * * * CO...")
 
(Replacing content with updated version)
 
(3 intermediate revisions by 2 users not shown)
Line 1: Line 1:
  +
{{Languages|LIST 2 7.TXT}}
 
<pre>
 
<pre>
−
**********************************************************************
+
**********************************************************************
 
* *
 
* *
 
* COURS D'ASSEMBLEUR 68000 SUR ATARI ST *
 
* COURS D'ASSEMBLEUR 68000 SUR ATARI ST *
 
* *
 
* *
−
* par Le F
+
* par Le Féroce Lapin (from 44E) *
 
* *
 
* *
−
* Listing num
+
* Listing numéro 2 / Cours numéro 7 *
 
* *
 
* *
 
**********************************************************************
 
**********************************************************************
   
  +
* Test résolution, car si on est en haute et que l'on essaye de *
−
* Test r‚solution, car si on est en haute et que l'on essaye de *
 
 
* passer en basse, paf! RESET ! *
 
* passer en basse, paf! RESET ! *
   
−
MOVE.W #4,-(SP) num
+
MOVE.W #4,-(SP) numéro fonction Getrez()
 
TRAP #14 appel Xbios
 
TRAP #14 appel Xbios
 
ADDQ.L #2,SP correction pile
 
ADDQ.L #2,SP correction pile
Line 20: Line 21:
 
suite
 
suite
   
−
* Puisqu'on est pas en haute, on force en basse r
+
* Puisqu'on est pas en haute, on force en basse résolution
−
* on note d'abord en mettant
+
* on note d'abord en mettant à 1 un drapeau de signalement
   
 
MOVE.W #1,RESOLUTION
 
MOVE.W #1,RESOLUTION
   
−
MOVE.W #0,-(SP) basse r
+
MOVE.W #0,-(SP) basse résolution
−
MOVE.L #-1,-(SP) adresse
+
MOVE.L #-1,-(SP) adresse écran inchangée
−
MOVE.L #-1,-(SP) adresse
+
MOVE.L #-1,-(SP) adresse écran inchangée
 
MOVE.W #5,-(SP) fonction Setscreen()
 
MOVE.W #5,-(SP) fonction Setscreen()
 
TRAP #14 du X bios
 
TRAP #14 du X bios
Line 42: Line 43:
   
   
−
* D0 contient le Handle ou bien un num
+
* D0 contient le Handle ou bien un numéro d'erreur négatif
   
−
TST.W D0 compare
+
TST.W D0 compare à 0
−
BLT ERREUR inf
+
BLT ERREUR inférieur donc erreur
   
   
Line 53: Line 54:
   
   
−
* Saute les 34 octets du d
+
* Saute les 34 octets du début de fichier DEGAS
−
* (2 octets d'en-t
+
* (2 octets d'en-téte, 32 de couleurs)
   
−
MOVE.W #0,-(SP) d
+
MOVE.W #0,-(SP) décale à partir du début de
 
fichier
 
fichier
 
MOVE.W D3,-(SP) handle du fichier
 
MOVE.W D3,-(SP) handle du fichier
−
MOVE.L #34,-(SP) nbr d'octets
+
MOVE.L #34,-(SP) nbr d'octets à sauter
 
MOVE.W #66,-(SP) fonction Fseek()
 
MOVE.W #66,-(SP) fonction Fseek()
 
TRAP #1 du GEMDOS
 
TRAP #1 du GEMDOS
Line 67: Line 68:
   
   
  +
* Détermine l'adresse de l'écran
−
* D‚termine l'adresse de l'‚cran
 
   
 
MOVE.W #2,-(SP) fonction Physbase()
 
MOVE.W #2,-(SP) fonction Physbase()
Line 75: Line 76:
   
   
−
* Charge l'image directement dans l'
+
* Charge l'image directement dans l'écran
   
 
MOVE.L A5,-(SP) adresse destination
 
MOVE.L A5,-(SP) adresse destination
−
MOVE.L #32000,-(SP) nbr octets
+
MOVE.L #32000,-(SP) nbr octets à lire
 
MOVE.W D3,-(SP) handle du fichier
 
MOVE.W D3,-(SP) handle du fichier
 
MOVE.W #63,-(SP) fonction Fread()
 
MOVE.W #63,-(SP) fonction Fread()
Line 90: Line 91:
 
* D'abord repositionner le pointeur fichier
 
* D'abord repositionner le pointeur fichier
   
−
MOVE.W #0,-(SP) d
+
MOVE.W #0,-(SP) décale à partir du début de
 
fichier
 
fichier
 
MOVE.W D3,-(SP) handle du fichier
 
MOVE.W D3,-(SP) handle du fichier
−
MOVE.L #2,-(SP) nbr d'octets
+
MOVE.L #2,-(SP) nbr d'octets à sauter
 
MOVE.W #66,-(SP) fonction Fseek()
 
MOVE.W #66,-(SP) fonction Fseek()
 
TRAP #1 du GEMDOS
 
TRAP #1 du GEMDOS
Line 104: Line 105:
   
 
MOVE.L #BUFFER_PAL,-(SP) adresse destination
 
MOVE.L #BUFFER_PAL,-(SP) adresse destination
−
MOVE.L #32,-(SP) nbr octets
+
MOVE.L #32,-(SP) nbr octets à lire
 
MOVE.W D3,-(SP) handle du fichier
 
MOVE.W D3,-(SP) handle du fichier
 
MOVE.W #63,-(SP) fonction Fread()
 
MOVE.W #63,-(SP) fonction Fread()
Line 133: Line 134:
 
* En cas d'erreur on vient ici
 
* En cas d'erreur on vient ici
   
−
ERREUR MOVE.L #MESSAGE_ERREUR,-(SP) pr
+
ERREUR MOVE.L #MESSAGE_ERREUR,-(SP) prévient
 
MOVE.W #9,-(SP)
 
MOVE.W #9,-(SP)
 
TRAP #1
 
TRAP #1
Line 146: Line 147:
   
   
−
* Puisqu'on est en basse, on reforce en moyenne r
+
* Puisqu'on est en basse, on reforce en moyenne résolution
   
−
MOVE.W #1,-(SP) moyenne r
+
MOVE.W #1,-(SP) moyenne résolution
−
MOVE.L #-1,-(SP) adresse
+
MOVE.L #-1,-(SP) adresse écran inchangée
−
MOVE.L #-1,-(SP) adresse
+
MOVE.L #-1,-(SP) adresse écran inchangée
 
MOVE.W #5,-(SP) fonction Setscreen()
 
MOVE.W #5,-(SP) fonction Setscreen()
 
TRAP #14 du XBIOS
 
TRAP #14 du XBIOS
Line 163: Line 164:
 
*-------------------------------------------------------------*
 
*-------------------------------------------------------------*
 
SECTION DATA
 
SECTION DATA
−
MESSAGE_ERREUR DC.B "D
+
MESSAGE_ERREUR DC.B "Désolé, erreur avec",13,10
 
DC.B "le fichier "
 
DC.B "le fichier "
 
NOM_FICHIER DC.B "A:\IMAGE.PI1",0
 
NOM_FICHIER DC.B "A:\IMAGE.PI1",0

Latest revision as of 00:44, 17 December 2023

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