LIST 2 7.TXT/fr
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