| Win3x.Org http://www.win3x.org/win3board/ |
|
| Documentation ASM http://www.win3x.org/win3board/viewtopic.php?f=2&t=6199 |
Page 1 sur 2 |
| Auteur : | gm86 [ 27 août 2011 21:02 ] |
| Sujet du message : | Re: Documentation ASM |
| UTILISER L'INTERPRÈTE BASIC MICROSOFT STANDARD SOUS DR DOS 6 Première chose, cet interprète BASIC Microsoft pour MS/DOS est un programme au format COM issu de la version disque 5.2x pour le système d'exploitation 8 bits CP/M. Il imite donc l'appel aux fonctions 0 à 24h de la BDOS en mettant le numéro de fonction dans le registre CL avant de procéder à un appel proche à la routine débutant à l'offset 5 (CALL 5). Sous DOS, il s'y trouve un appel lointain dont l'offset de l'adresse indique la mémoire disponible dans le segment du programme (CALL Fxxx:FEF0h le plus souvent). Sous CP/M, cet offset était le point d'entrée du système chargé en haut de la mémoire. Or cette adresse boucle sur le segment 0 dans le cas d'un processeur 8086 ou 80186 mais continue sur la mémoire étendue (> 1 Mio) dans la cas d'un 80286 ou supérieur avec la ligne d'adressage A20 activée. Dans ce dernier cas, il est impératif que DOS soit chargé en HMA, la zone de mémoire haute qui représente les 64 premiers Kio de mémoire étendue. Cela signifie que FFFFh:10h représente dorénavant le début de cette mémoire et non celui de la mémoire conventionnelle (1er Mio). Cf. http://blogs.msdn.microsoft.com/larryosterman/2004/11/08/how-did-we-make-the-dos-redirector-take-up-only-256-bytes-of-memory Seconde chose, je remarque que l'interprète est mal renseigné sur la ligne de commande par DR DOS. Ainsi, si on le lance, il a grande chance de se terminer aussitôt en spécifiant que le programme BASIC — même non spécifié — n'a pu être trouvé :
Sachant que les paramètres de la ligne de commande DOS sont inscrits dans la DTA du logiciel BASIC, il reste à savoir si ce dernier examine bien celle se situant dans son PSP. Pour information, le PSP d'un programme va de l'offset 0 à FFh (255) à partir du segment de code initial et sa DTA débute à l'offset 80h. Il est créé par DOS pour remplir le rôle de la page zéro sous CP/M. En désassemblant le programme, l'appel à la fonction 26h doit nous mettre la puce à l'oreille. Elle crée un nouveau PSP. Une lecture de la liste de Ralf Brown nous renseigne que DR DOS 6 copie le PSP depuis un mauvais segment :
Remédions à ce problème par un petit programme résident sans prétention, FCT26H.ASM :
Une meilleure solution est de corriger l'erreur toute bête directement dans la BDOS. Revenant à l'interprète en question, du fait qu'il s'agit d'un logiciel pour DOS 1, il gère les fichiers du répertoire courant via les FCB comme à l'époque du CP/M, et de ce fait, est compatible avec la FAT32 dans une fenêtre DOS de Windows 9x mais pas en mode MS/DOS. Une version est facilement disponible sur Internet mais semble rechigner à utiliser les fonctions USR : Microsoft BASIC Version 5.28. Préférez donc la première : http://poisk-pc.narod.ru/basic-86.rar Je pense que ces outils mériteraient leur propre sujet. P.S. : une courte notice en anglais de MBASIC se trouve aux liens suivants. http://www.pldos.pl/bogus/hardware/komputery/mits/docs/msbasic.htm http://gopherproxy.meulie.net/gopher.fl ... MBASIC.HLP Une méthode pour pouvoir lister un programme protégé (SAVE"...",P) est présentée ici : http://maben.homeip.net/static/S100/victor/software/technical%20reference%20in%20ascii/APQ.txt Le guide du BASIC-80 version 5.x vaut pour le BASIC-86, mis à part l'interface avec les routines en code machine qui fonctionne comme celle du BASIC IBM et du GW/BASIC (du moins, sous CP/M-86 et MS/DOS, Xenix étant un cas plus complexe) : http://www.classiccmp.org/cini/pdf/Microsoft/mbasic.pdf (quelques chapitres sont manquants) ftp://bitsavers.informatik.uni-stuttgar ... r_1980.pdf http://www.bitsavers.org/pdf/microsoft/ ... e_1979.pdf Ainsi, l'architecture du microprocesseur 8086 ou 8088 impose au BASIC-86 l'emploi de l'instruction DEF SEG pour définir le segment de données aux instructions CALL, PEEK et POKE : DEF SEG [=segment] 'Par défaut, le segment de données du BASIC D'ailleurs, le BASIC-86 pour MS/DOS apporte quelques extensions : - les instructions BSAVE et BLOAD qui servent respectivement à enregistrer dans un fichier le contenu d'une zone de mémoire située dans le segment défini par DEF SEG et à effectuer l'opération inverse (en-tête de ce fichier binaire : FDh, segment, offset, longueur) : BSAVE fichier.ext$, adresse, longueur BLOAD fichier.ext$[, adresse] - l'instruction CALLS qui, à la différence de CALL, transmet l'adresse complète des paramètres aux routines en code machine destinés à un autre langage (FORTRAN, par ex.) en déposant le segment après chaque offset sur la pile ; - le mode ajout (append) aux fichiers séquentiels (chose non permise, de tout façon, sur bande) ; OPEN "A", [#]tampon, filename.ext$ - une syntaxe alternative de l'instruction OPEN avec l'accès direct comme mode par défaut (random) ; OPEN filename.ext$ AS [#]tampon [LEN=longueur_enregistrement] (accès direct) OPEN filename.ext$ FOR {OUTPUT|INPUT|APPEND} AS [#]tampon (accès séquentiel) - les fonctions DATE (jour de l'année) et TIME (nombre de secondes écoulées depuis minuit) qui ne sont pas reconnues par le compilateur*, ainsi que DATE$ (date au format américain, m/j/a) et TIME$ (heure au format 24h) qui sont aussi des variables : ? TIME$ 13:40:06 Ok ? DATE$ 01-01-1980 Ok DATE$="6/26/11" Ok ? "C'est le"; STR$(DATE); "ième jour de l'année." C'est le 117ième jour de l'année. Ok 10 REM Initialise la liste des nombres pseudo-aléatoires 20 RANDOMIZE TIME * 512 / 675 - 32768 - l'usage des caractères codés sur 8 bits (ASCII étendu IBM sur PC) qui évite l'emploi d'un des dérivés codés sur 7 bits de l'ISO/IEC 646 pour représenter les caractères nationaux. De plus, la fonction LOF(tampon) ne renvoie plus la taille d'un fichier en enregistrements de 128 octets mais en octets seuls. Cependant, l'écriture de blocs de 128 octets perdurent vu que MS-DOS 1 hérite des FCB du CP/M. Ainsi, les fichiers séquentiels comporte obligatoirement le caractère 26 (EOF, End Of File) après le dernier enregistrement. Cf. http://support.microsoft.com/kb/25996 Les fichiers créés par BSAVE l'ont aussi, bien qu'il faut se fier à la taille donnée dans l'en-tête (mot situé au sixième octet). Voici deux aides utiles :
Une autre solution, à utiliser conjointement à WIDTH 80, est de supprimer le retour à la ligne automatique du DOS. Cela est possible depuis DOS 2, en installant le gestionnaire ANSI et en émettant la séquence ESC[7l (contraire de ESC[7h)via la commande PROMPT ou l'instruction PRINT du BASIC : C:\BASIC>prompt $p$g$e[7l PRINT CHR$(27);"[7l"; * Cf. http://maben.homeip.net/static/S100/victor/software/technical%20reference%20in%20ascii/CH5.txt |
| Auteur : | gm86 [ 31 oct. 2011 00:35 ] |
| Sujet du message : | Re: Documentation ASM |
| ÉCRIRE EN ESPÉRANTO AVEC UNE CONFIGURATION DE CLAVIER CLASSIQUE La langue internationale Espéranto comporte six lettres accentuées qui ne figurent pas sur les configurations classiques de clavier : Ĉ, Ĝ, Ĥ , Ĵ, Ŝ et Ŭ (U bref). La solution qui permettra leur entrée ne devra ni dépendre de la nationalité de la disposition du clavier ni interférer avec. Dans un premier temps, je vais vous présenter un TSR remplissant son rôle au strict minimum. Je me suis inspiré pour cela du programme EKLAVO de Byrial Jensen. Il exploite le service 4Fh de l'interruption 15h et le service 5 de l'interruption 16h. Il s'agit d'obtenir les lettres accentuées avec l'appui simultanée de la touche AltGr (Alt gauche) ou la combinaison Ctrl+Alt (gauche) et de la touche correspondante. Ainsi, ĝ est introduit soit par AltGr (Alt droite)+g soit par Ctrl+Alt (gauche)+g. Le programme requiert la page de codes 853. Je suis parti de deux constats. La touche Maj sert de préfixe. Elle indique toujours le contraire de l'état du verrouillage majuscule — sur le clavier français, elle le désactive aussi. Ensuite, la touche AltGr de la plupart des claviers correspond à l'Alt droite du clavier américain. Normalement, elle peut indiquer qu'une touche Alt est enfoncée via l'octet 17h du segment de données du BIOS (40h). Cependant, le gestionnaire KEYB de DR DOS n'agit pas ainsi (ce que le programme EKLAVO ne prévoit pas). Or, c'est sous DR DOS que la page de codes 853 est disponible (bien que non supportée officiellement). La version suivante met en lumière ce problème accompagné d'un autre : le service 12h de l'interruption 16h du clavier ne permet plus d'indiquer l'actionnement de la touche Alt droite du clavier étendu.
- pour savoir si la touche Maj gauche ou droite était enfoncée, j'ai appliqué un masque sur l'octet d'état du clavier avec seulement les deux bits correspondant positionnés puis vérifier si le résultat était non nul ; - pour savoir si la combinaison Ctrl et Alt était pressée, j'ai d'abord inversé les bits de l'octet recueilli avant d'appliquer le masque afin de vérifier si le résultat était nul. Description des services clavier utilisés :
_____________________ Version fonctionnelle En testant le programme précédent sans charger KEYB de DR DOS, on remarque qu'il est plutôt aisé d'entrer les caractères accentués des touches C, G et S avec AltGr ou la combinaison Maj+AltGr. En revanche, si on souhaite garder la main droite pour les touches G, H et U, l'autre main appuyera sur Ctrl+Alt voire Maj+Ctrl+Alt ; ce qui représente trois doigts en action. En s'inspirant d'autres claviers proposant quatre caractères par touche, il devient envisageable d'adopter la combinaison Maj+Alt. On suppose que le verrouillage majuscule est inactif (ce qui est normalement le cas sur le clavier français lorsque la touche Maj est pressée), on obtient :
http://www.minuszerodegrees.net/bios/BI ... 0JAN86.zip En bref, les machines IBM qui supportent cette interception du clavier sont les suivantes : - les AT mais pas l'original ; - le XT/2 ; - le XT-286 ; - le PC Convertible ; - les PS/2. Tout est bon pour créer un TSR qui se donne la peine de reconnaître le matériel. Toutefois, il faut empêcher son chargement multiple. Ainsi, lors d'un appel au service 4Fh de l'interruption 15h avec le code de touche inexistant FFh, le TSR renvoie AL nul (AX=5000h) pour indiquer sa présence. Voici le programme obtenu :
La tête du tampon peut rattraper la taille mais pas l'inverse (tampon plein). Dans le même segment, se trouvent les octets d'état du clavier (cf. : viewtopic.php?f=24&t=5047&start=67) :
|
| Auteur : | gm86 [ 01 août 2012 13:58 ] |
| Sujet du message : | Documentation ASM (liens) |
| Je conseille chaudement la consultation de cette page de liens : http://www.oopweb.com/Assembly/Files/Assembly.html |
| Auteur : | gm86 [ 03 févr. 2018 13:34 ] |
| Sujet du message : | Re: Documentation ASM |
Quatre routines différentes pour afficher un quartet au format hexadécimal sous DOS.
|
| Auteur : | Deksor [ 03 févr. 2018 13:46 ] |
| Sujet du message : | Re: Documentation ASM |
| Tiens j'avais jamais vu ce sujet, c'est très intéressant |
| Auteur : | gm86 [ 01 févr. 2019 12:40 ] |
| Sujet du message : | Re: Documentation ASM |
| En souvenir du bon temps, un tutoriel en français : http://web.archive.org/web/200205291526 ... asm.fr.fm/ Il s'agit de cours pour DOS et Win32, le tout accompagné d'une documentation. Comme fréquent à l'époque, les écrits de l'auteur peuvent être téléchargés. J'ai retrouvé l'adresse du site dans une boîte à chaussures ! |
| Auteur : | Deksor [ 01 févr. 2019 16:46 ] |
| Sujet du message : | Re: Documentation ASM |
| Quelque-chose qui pourrait être intéressant à documenter : toutes les interruptions du BIOS et aussi DOS ^^ Après vu la quantité y'en a pour un moment ... D'ailleurs pour le BIOS ce qui pourrait être encore plus intéressant c'est de voir le code source qui est exécuté pour chacune des interruptions. J'ai déjà trouvé un code source de bios de 286 donc on pourrait partir de ça ! Évidemment certaines choses sont liées au matériel (chipset, etc), mais d'autres non (communiquer avec le lecteur de disquettes ça doit être standard puisque le contrôleur est toujours le même (ou bien un clone compatible) En tout cas le site que tu as retrouvé est très intéressant |
| Auteur : | gm86 [ 06 févr. 2019 18:54 ] |
| Sujet du message : | Re: Documentation ASM |
| Pour le code source des vieux BIOS IBM, voir ce sujet : viewtopic.php?t=13353 |
| Page 1 sur 2 | Fuseau horaire sur UTC+02:00 |
| Développé par phpBB® Forum Software © phpBB Limited Traduction française officielle © Qiaeru |
|