
Lors d'un int 13h, si le système tourne sous Windows ou sous EMM386, le firmware du contrôleur AHCI se sert de int 4Bh pour traduire les adresses virtuelles. Mais malheureusement, il fait systématiquement des appels invalides à int 4Bh AX=8104h, où la structure DDS se trouve à DS:DI au lieu de ES:DI. Sous EMM386, ceci ne pose pas de problème, pour n'importe quelle raison, mais sous Windows 3.1 en Mode Étendue 386, ça provoque un crash du système.
Heureusement, je suis en train d'écrire un petit VxD, qui intercepte int 4Bh, et détecte et règle ces appels invalides. En ce moment, ce VxD ne fonctionne qu'avec un DOS démarré avec EMM386, et pour quelque raison la souris ne fonctionne pas avec.


Et comment j'ai trouvé tout ça ? J'ai utilisé le débugueur WDEB386, qui vient avec le DDK Win16. Je ne sais pas si c'est déjà connu, mais pour faire fonctionner ce débugueur j'ai dû faire un petit patch :
Code: Select all Comparing files WIN16DDK\386\TOOLS\WDEB386.EXE and C:\WINDOWS\WDEB386.EXE 000063D8: 0F 66 000063D9: 24 33 000063DA: F0 C0 000063DF: 0F 66 000063E0: 24 33 000063E1: F8 C0 |
