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