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