ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ E.O.S. Eclipse Operating System Version 2.08 Documentation Copyright (c) Eclipse 1995-96 ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ __ /\_\ _______ _______ / / / / ___ /\ / _____/\ / / / / /\_/ / / / /\____\/______ / / / __ / _____/ /_______ / _____/\ /\ ___\ / /_/ /\ \ / /\____\//\ ____\ / /\____\/ \ \ \__/ \ \ \ \ \ \ /_/ / \ \ \___/_ /______/\ \ \ \____\ \_\ \ \ \\_\/_______ \ \ ____\ \______\/ \ \_____\\/_/ \ \_\ /\ ____\ \ \ \___/_ \/_____/ \/_/ \ \ \___/_ \ \______\ \ \_____ \ \/______/ \/_____\ \ /\______\ \/______/ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Pr‚sentation des diff‚rents modules de l'E.O.S ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ L'E.O.S est constitu‚ de plusieurs fichiers. Objet de base : þ KERNEL.OBJ Le coeur du systŠme. þ DIAMOND.OBJ Le player 32 voies. þ EOS.OBJ La version complŠte qui supporte Diamond. þ EOSLITE.OBJ La version all‚g‚e si vous n'utilisez pas Diamond. þ DEBUG.OBJ Le debugger 32 bits. þ EOS.INC Le fichier include. Librairies : þ VESA.OBJ Pour acc‚der directement au buffer de la carte graphique sans se pr‚occuper des changements de bank en VESA. þ FLI32.OBJ Pour visualiser les fichiers FLI et FLC. þ SNAP.OBJ Pour la capture d'‚crans 256 couleurs au format IFF. þ JOYSTICK.OBJ Pour la gestion des manettes de jeux. Utilitaires : þ Light Link Pour cr‚er un seul fichier EXE compress‚. þ Crypt Pour prot‚ger vos donn‚es. þ Scancode Pour afficher les codes du clavier. þ 132 Pour passer en mode 132 colonnes. þ 90 Pour passer en mode 90 colonnes. þ Edconfig Pour configurer le debugger þ Diet Pour compresser vos donn‚es ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Gestion de la m‚moire avec l'E.O.S ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Avec l'E.O.S, finit les problŠmes de m‚moire ! Vous pouvez d‚sormais adresser lin‚airement toutes la m‚moire disponible et cela quelques que soit la configuration de votre systŠme. þ Mode RAW sans Himem. þ Mode XMS avec Himem. þ Mode VCPI avec EMS (Emm386 highscan). þ Mode VCPI sans EMS (Emm386 noems). þ Mode DPMI avec Windows 3.1x (avec quelques restrictions *). þ Mode DPMI avec Windows 95. þ Mode DPMI avec OS/2 2.1 ou OS/2 Warp. * Voir compatiblit‚ avec Windows Vous pouvez allouer ou restituer de la m‚moire sup‚rieur … l'aide d'une simple interruption de l 'E.O.S. Allocation : mov ah,Allocate_Memory mov edx,Taille_Allocation Int_EOS jc Not_Enough_Memory mov [Logical_Address_Of_Block],edx Restitution de la derniŠre allocation : mov ah,DeAllocate_Memory Int_EOS Vous pouvez avec la mˆme simplicit‚ cr‚er vos propre s‚lecteurs et profiter pleinement de la segmentation du mode prot‚g‚. Allocation d'un s‚lecteur : mov ah,Allocate_Selector mov esi,0a0000h ; base mov edi,0ffffh ; taille Int_EOS jc No_Free Selector mov [_0a0000h_Sel],bx Restitution d'un s‚lecteur : mov ah,DeAllocate_Selector mov bx,[_0a0000h_Sel] Int_EOS jc Invalid_Selector ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Gestion de fichiers avec l'E.O.S ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Charger un fichier en m‚moire n'est guŠre plus compliqu‚. Chargement d'un fichier externe : mov ah,Load_External_File mov edx,offset File_name Int_EOS jc Error_File mov File_Buffer,eax Chargement d'un fichier link‚ avec LightLink (Linker founit avec l'E.O.S) : mov ah,Load_Internal_File mov edx,offset File_name Int_EOS mov File_Buffer,eax La fonction Load_Internal_File fonctionne aussi si le programme n'est pas link‚. L'E.O.S est capable de distinguer les deux cas ce qui permet de d‚velopper et tester un programme sans avoir … linker les donn‚es. De plus, si votre fichier est compact‚ avec un format de type LZ comme Diet 1.44 l'E.O.S le d‚compresse automatiquement ! Il est aussi possible de faire l'op‚ration inverse : mov ah,Write_External_File mov edx,O File_name mov esi,[Buffer] mov ecx,[Size_Buffer] Int_EOS jc Error_File ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Gestion des cartes sonores avec l'E.O.S ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ La gestion des cartes sonores n'a pas ‚t‚ oubli‚e. L'E.O.S est en effet capable de jouer un sample ou un module Amiga (de 2 … 32 voix) sans la moindre programmation de votre part sur les sept cartes suivantes : þ Sound Blaster þ Sound Blaster Pro þ Sound Blaster 16 Asp þ Sound Blaster AW32 þ Gravis Ultrasound þ Gravis Ultrasound Max þ Gravis Ultrasound Ace Exemple : mov ah,Detect_Sound_Card xor bx,bx mov cx,1 Int_EOS mov ah,Load_Module mov al,4 mov ebx,22000 mov edx,offset Module_name Int_EOS jc error_file mov ah,Play_Module Int_EOS Plusieurs fonctions sont alors disponibles : Set Volume Pour changer le volume de la musique Play Sample Pour jouer un sample Get Info Pour obtenir des infos sur la musique (synchronisation par exemple) Set Pattern Pour changer de position dans un module call Pause mov ax,4c00h int 21h Comme vous le voyez ci-dessus, vous n'ˆtes pas oblig‚ d'arrˆter la musique ou de lib‚rer la m‚moire avant de quitter votre programme. C'est l'E.O.S qui s'en charge. A chaque fois qu'il rencontre la fonction 4c00h ou lors d'un plantage programme, l'E.O.S restitue automatiquement l'environnement de d‚part : þ Le mode vid‚o y compris les modes VESA (132x60,etc...) þ L'heure de l'horloge. þ Les interruptions. þ La m‚moire allou‚e. þ Stoppe la musique. Bien entendu, il est toujours possible de lib‚rer la m‚moire et d'arrˆter un module pour en charger un autre comme ci-dessous: mov ah,Stop_Module Int_EOS mov ah,Clear_Module Int_EOS Pour les erreurs, l'E.O.S dispose d'une sortie sp‚cialis‚e qui permet d'afficher un message d'erreur : mov ah,Exit_Error mov edx,Offset Error_Txt Int_EOS Cette fonction est identique … : mov ah,9 ; Fonction Display String mov edx,Offset Msg int 21h mov ax,4c01h int 21h Il est ‚galement possible de restituer … tout moment le mode vid‚o de d‚part... mov ah,Restore_Video_Mode Int_EOS ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Gestion d'un second ecran monochrome ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Pour faciliter le d‚buggage de vos programmes, l'E.O.S fournit des fonctions de bases qui permettent de controler un deuxiŠme ‚cran via une carte monochome de type Hercule. L'E.O.S d‚tecte automatiquement votre ‚cran. Cependant, si celui-ci n'‚tait pas reconnu, vous pouvez utiliser la s‚quence suivante : mov ah,Set_Mono mov bx,On Int_EOS De nombreuses fonctions sont alors disponibles comme par exemple l'affichage d'une chaine de caratŠre ASCII ou d'une valeur Hexad‚cimal. Afficher une Chaine ASCII : mov ah,Set_String_Mono mov bx,Coordonee X mov cx,Coordonee Y mov edx,Offset Chaine_A_Afficher Int_EOS Afficher une Valeur Hexadecimal : mov ah,Set_Value_Mono mov bx,Coordonee X mov cx,Coordonee Y mov edx,Valeur_A_Afficher Int_EOS Une macro est ‚galement disponible : Send qui permet une utilisation plus simple de la fonction Set_Value_Mono Afficher une Valeur sur l'‚cran monochrome : Send Valeur_A_Afficher,X,Y La chaine ASCII peut se terminer soit par $ soit par le caractŠre NULL. La fonction prend aussi en compte les caractŠres retour chariot (13 et 10). Les valeurs en hexad‚cimal ne doivent pas d‚passer 16 Bits. Attention : Pour un gains de temps aucun test n'est effectu‚ au niveau des coordonn‚es de l'‚cran. Note : L'ecran Monochrome est automatiquement effac‚ au d‚but et a la fin d'un programme. ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Gestion du clavier avec l'E.O.S ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Une gestion clavier tr‚s simple … ‚t‚ implant‚e dans l'E.O.S afin de vous faciliter la vie. Pour l'activer il faut prendre le controle de l'interruption 09 comme ci-dessous : Activation du gestionnaire de clavier mov ah,Use_Int_09 mov bx,On Int_EOS Le clavier est alors entiŠrement g‚rer par l'E.O.S qui dialogue directement avec lui. Il n'y a plus aucun appel vers les anciens gestionnaires du DOS. L'interruption 16h ne fonctionne donc plus. La lecture du clavier devient alors trŠs facile grace … la variable Key_Map. Cette variable est en r‚alit‚ un tableau de 128 octets qui correspond au 128 scancodes renvoy‚s par le clavier. Pour connaitre l'‚tat d'une touche il suffit de savoir si sont scancode et … 0 ou 1 (On ou Off). Exemple, pour tester si la touche Escape est actuellement enfonc‚e : cmp Key_Map[Escape],On je Touche_Escape_Enfonc‚ ... Touche_Escape_Enfonc‚: mov Key_Map[Escape],Off Un scancode special "All" est utilis‚ pour savoir une touche a ‚t‚ enfonc‚e puis relach‚e. Exemple, pour tester si la touche Escape … ‚t‚ enfonc‚e : cmp Key_Map[All],Escape je Touche_Escape_Enfoncer Ce qui permet d'attendre une touche quelconque : @@Attend_Touche: cmp Key_Map[All],Off je @@Attend_Touche mov Key_Map[All],Off Il est bien entendu possible de d‚sactiver le clavier et de revenir … l'ancien gestionnaire. Restauration du clavier : mov ah,Use_Int_09 mov bx,Off Int_EOs Note : A la fin du programme, l'E.O.S restitue toutes les interruptions la restauration de l'interruption 09 n'est donc pas obligatoire. ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Synchronisation avec le balayage ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ L'E.O.S possŠde son propre systŠme de synchronisation. Controle du retracage de l'ecran : mov ah,Wait_Vbl Int_EOS L'utilisation de l'interruption 08 ou timer permet d'augmenter les capacit‚s de cette fonction. Comme pour l'interruption clavier il n'y a pas d'appel vers les anciens gestionnaires. Activation du gestionnaire de synchronisation : mov ah,Use_Int_08 mov bx,On Int_EOS En retour, Wait_Vbl renvoie alors le nombre de balayage ‚ffectu‚ depuis le dernier appel. Cette fonction renvoie toujours 1 si l'interruption 08 est Off. Grace … l'utilisation de cette interruption et … la fonction Wait_Vbl votre programme est toujours capable de savoir combien de frame il … perdu. On dispose ainsi d'un compteur r‚gulier tr‚s pratique pour le calcul des d‚placements. Attention : Cette fonction est instable sous Windows 3.xx. Si vous changez de mode video, vous devez vous resynchroniser avec Synchro_Int_08 comme ci-dessous : mov ax,13h DosInt 10h mov ah,Synchro_Int_08 Int_EOS Une macro est aussi disponible : Colors qui permet de changer une couleur temporairement pour d‚composer chaque routine de votre programme. Fonction Colors: colors Numero_de_couleur,Valeur_Rouge,Valeur_Verte,Valeur_bleue Exemple d'utilisation des fonctions de balayage : @@Boucle: colors 0,63,0,0 ; PremiŠre couleur en Rouge vif call Procedure_1 colors 0,0,63,0 ; DeuxiŠmme couleur en Ver Vif call Procedure_2 mov ah,Wait_Vbl Int_EOS @@Compt: add [Valeur_Reguliere],1 dec eax ; On additionne des valeures reguliŠres jne @@Compt cmp [Key_Map+All],On jne @@Boucle ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Les variables de l'E.O.S ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ L'E.O.S possŠde quelques variables global qui peuvent ˆtre n‚cessaires … tout moment lors de l'execution d'un programme : Code32_Sel : Selecteur de code (CS). ---------- Exemple : D‚tourner l'interruption 70h : mov ah,Set_Int mov bx,70h mov cx,[Code32_Sel] ; Selecteur mov edx,O New_Int_70h ; Offset de la nouvelle routine Int_EOS Attention ! En mode prot‚g‚ il est interdit de faire : mov cs:[Valeur],10 Cela declencherait une exception et arreterait votre programme. Data32_Sel : Selecteur de Donn‚es (DS). ---------- Exemple d'utilisation de Data32_Sel : Valeur dd 0 mov [Valeur],10 En fait, les selecteurs Code32_Sel et Data32_Sel sont identiques. La diff‚rence porte sur leur acc‚s. Code32_Sel est en lecture alors que Data32_Sel est en lecture et ‚criture. Au debut d'un programme tout les registres de segment (sauf CS) sont initialis‚s avec la valeur de Data32_Sel. Zero_Sel : S‚lecteur qui a pour origine l'adresse zero de la -------- mŠmoire. TrŠs utile pour lire par exemple les variables du BIOS. Lire le mode video courant : push es mov es,cs:[Zero_Sel] mov al,es:[449h] ; 40h:49h en mode r‚el pop es Real_DS,Real_ES,Real_FS,Real_GS,Real_SS,Real_SP : ----------------------------------------------- Ces variables contienent les futures valeurs des differents segments lors d'un appel en mode r‚el (Voir Le mode R‚el). ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Les macros de l'E.O.S ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ L'E.O.S possŠde des macros qui permettent de simplifier la programmation. Macro Colors: colors Numero_de_couleur,Valeur_Rouge,Valeur_Verte,Valeur_bleue (Voir Synchronisation avec le balayage) Get_Param: Get_Param Param_Buffer ... Param_Buffer db 128 dup (0) Renvoie dans Param_Buffer les paramŠtres de la ligne de commande. Macro Send: Send Valeur_A_Afficher,X,Y (Voir Gestion d'un second ecran monochrome) Macro DosInt: DosInt Numero_d_interruption (Voir Le mode r‚el) Macro DosCall: DosCall Addresse Mode reel (Voir Le mode r‚el) Macro Init_es_di: Init_es_di Offset adresse 32 bits (Voir Le mode r‚el) Macro Init_ds_dx: Init_ds_dx Offset adresse 32 bits (Voir Le mode r‚el) ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Le fichier Include (EOS.INC) ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Le fichier include EOS.INC est certainement le fichier le plus important. Il contient en effet toutes les d‚clarations des diff‚rentes fonctions, macros et variables de l'E.O.S. C'est grace … lui que votre programme est en mesure de dialoguer avec l'E.O.S. Il sert ‚galement de guide de r‚f‚rence. ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Le mode r‚el ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Le mode r‚el est accessible … partir de l'E.O.S … l'aide de macros. Pour appeller une interruption (Int) du mode r‚el : DosInt Numero_d_interruption Exemple : mov ax,13h ; Mode 320x200 256 Couleurs DosInt 10h ; Appel de la fonction BIOS ; Set Video Mode Pour appeller une fonction (Call) en mode r‚el : DosCall Adresse Mode reel Exemple : XMS_Adresse dw 0,0 mov ax,4300h ; Fonction qui teste si un DosInt 2fh ; Driver XMS est pr‚sent cmp al,80h je No_XMS_Driver mov ax,4310h ; Si oui demande son point DosInt 2fh ; d'entr‚ mov [XMS_Adresse],bx mov eax,[Real_ES] mov [XMS_Adresse+2],ax xor ah,ah ; Fonction 0 du driver XMS DosCall Dword Ptr [XMS_Adresse] ; Get XMS Version Pour initialiser les variables qui seront utilis‚es en mode reel : Init_es_di Adresse 32bits Init_ds_dx Adresse 32bits Exemple : Vesa_Buffer db 256 dup (0) Init_es_di Vesa_Buffer mov ax,4f00h ; Teste le pr‚sence d'un DosInt 10h ; Driver VESA cmp dword ptr Vesa_Buffer,'ASEV' jne no_vesa ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Le linker ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ L'E.O.S dispose d'un utilitaire (LLINK32.EXE) qui permet de creer un seul fichier executable … partir de plusieurs fichiers de donn‚es. prg.exe image.pcx ----> final.exe musique.mod Une fois link‚, les fichiers de donn‚es sont accesibles trŠs fa‡ilement … l'aide de la fonction Load_internal_File. Exemple de l'utilisation de Load_Internal_File et Load_External_File : Fichier_Linker db 'IMAGE.PIC',0 Fichier_Externe db 'PRG.CFG',0 mov ah,Load_Internal_File ; Charge un fichier qui peut mov edx,O Fichier_Linker ; ˆtre linker Int_EOS ; Pas d'erreur possible ; elle sont ger‚es pas l'E.O.S mov ah,Load_External_File ; Charge un fichier externe mov edx,O Fichier_Externe Int_EOS jc Error_Loading ; erreur de lecture Pour indiquer … LLINK32 la liste des fichiers … linker il suffit cr‚er un fichier de lien comme ci-dessous. Contenu d'un fichier de lien (prg.eos) : FINAL.EXE ; Nom de l'executable qui sera ; creer PRG.EXE ; Nom de l'executable qui sera ; linker IMAGE.PCX ; Fichier Data qui sera linker MUSIQUE.MOD ; Fichier Data qui sera linker :END ; Fin du fichier Linkage : LLINK32 prg.ros Attention ! Les fichiers link‚s doivent ˆtre compress‚s avec Diet. Afin de faciliter la programmation, il est possible d'utiliser la fonction Load_Internal_File avec des fichiers externes. Ce qui permet de linker un programme lorsqu'il est entierement termin‚ (Voir Example4). ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Les Interruptions avec l'E.O.S ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ L'E.O.S permet de modifier les interruptions grace au fonction Get_Int et Set_Int. Exemple : D‚tourner l'interruption 70h : mov ah,Get_Int ; Lit L'ancien vecteur mov bx,70h Int_EOS mov [Old_Selector_Int_70h],cx mov [Old_Offset_Int_70h],edx mov ah,Set_Int mov bx,70h mov cx,[Code32_Sel] ; Selecteur mov edx,O New_Int_70h ; Offset de la nouvelle routine Int_EOS L'E.O.S met aussi … la disposition du programmeur toutes une serie de fonction accessible via l'interruption 21h. Les fonctions sont : Display String 9h Make Directory 39h Remove_Directory 3ah Change_Directory 3bh Create_File 3ch Open_File 3dh Close_File 3eh Read_File 3fh Write_File 40h Delete_File 41h Seek_File 42h File_Attributes 43h Get_Directory 47h Load_and_Execute 4bh Terminate_Program 4ch Find_First 4eh Find_Next 4fh Rename_File 56h Create_Temporary_File 5ah Create_New_File 5bh Exemple : Afficher un message : Msg db 'Hello Word',13,10,36 mov ah,9 ; Fonction Display String mov edx,Offset Msg int 21h mov ax,4c00h int 21h Attention ! Pour terminer un programme il faut IMPERATIVEMENT appeler la fonction 4ch de l'interruption 21h La fonction Direct_Send de l'E.O.S vous permet d'‚crire directement en Ram vid‚o et d'employer des couleurs : lea edx,Message mov ah,Direct_Send Int_EOS ... Message db " ",0,1,"þ Color Blue ",0,4,"Red ",13,10,0,0 ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Les IRQ ou interruptions materielle avec l'E.O.S ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Toutes les IRQ sont accessible dans votre programme. Par contre L'E.O.S a reprogamm‚ ses interruptions pour eviter des conflits avec les exceptions du mode prot‚g‚. Pour utiliser une IRQ l'E.O.S met a la disposition du programmeur deux fonctions : Get_IRQ : Fonction qui renvoie l'adresse d'une IRQ. Set_IRQ : Fonction qui detourne une IRQ. Exemple d'utilisation : Old_IRQ0 Label Fword Old_Offset_IRQ0 dd 0 Old_Selector_IRQ0 dw 0 mov ah,Get_IRQ mov bl,0 ; IRQ timer Int_EOS mov [Old_Selector_IRQ0],cx mov [Old_Offset_IRQ0],edx mov ah,Set_IRQ mov bl,0 ; IRQ timer mov cx,cs mov edx,Offset New_IRQ0 Int_EOS ... New_IRQ0: ... jmp fword ptr cs:[Old_IRQ0] ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Les Exceptions avec l'E.O.S ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Toutes les exceptions sont ger‚es par l'E.O.S. Lorsque l'une d'elle se d‚clenche, l'E.O.S arrˆte votre programme et restitue automatiquement la memoire allou‚e et le mode video de depart. ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Compatibilit‚ avec Windows (tm) ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ L'E.O.S est compatible avec Windows 3.x (tm) et Windows 95 (tm). Cependant du fait du niveau de privilege que Windows laisse a votre programme (le plus mauvais), il est conseill‚ de ne pas utliser les fonctions Use_Int_08 et le player DIAMOND si vous voulez que votre programme fonctionne correctement . Sous windows 95 seul des ralentissements se feront sentir, mais sous windows 3.x vous risquez de planter votre systŠme. L'E.O.S met donc a votre disposition une fonction qui detecte la presence de windows 3.x et windows 95 et vous laisse le choix d'arreter le programme ou non. Detect_Windows : Fonction renvoir si Windows est present Exemple d'utilisation : mov ah,Detect_Windows Int_EOS test al,al je No_Windows cmp al,3 je Find_Windows_3 cmp al,4 je Find_Windows_95 Find_Windows_96: Un conseil : Si votre programme utilise des resources hardware ne le faites pas marcher sous windows. ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Le debugger ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Le debugger est un fichier objet externe qu'il vous suffit d'include au moment du linkage et d'appeler dans votre programme : CALL DEBUG (voir exemple 6). Les fonctions du debugger sont identiques … Turbo Debug 2.01 de borland. Un utilitaire est aussi fourni pour configurer le debugger : EDCONFIG.EXE. Note : Pour plus d'infos taper EDCONFIG -h