PMOS486 s’appelait initialement PRO286 ( PRO pour PROtected, 286 car il ciblait un processeur Intel i80286).
C’est un programme écrit en 1989, 100% en assembleur, dont le but initial est de basculer un processeur 80286 en mode protégé afin de gérer toute la mémoire puis de le faire revenir en mode réel (le DOS) sans rebooter. Pour l’anecdote, je l’ai développé et testé sur mon premier PC un Amstrad PC 2286 avec 2 lecteurs de disquette 3.5’ de 1.44Mo, et 1Mo de RAM ! Imaginez le nombre de reboot … sur disquette 😉 (Le modèle avec disque dur était trop cher pour mon budget)
Il met en œuvre tout les concepts de base de la programmation en mode protégé (protected mode … d’où le nom du programme) des processeurs Intel x286 et suivant ( table d’interruption IDT, table d’adressage locale LDT, table d’adressage globale GDT, ring 0 et 3, …),déplacement des interruptions hardwares (clavier/horloge entre autres).
Le processeur 80286 (une fois en mode protégé) ne peut pas revenir en mode réel sans reset. La version 286 utilisait la feinte des bios d’IBM (généralisée par la suite sur tout les PC-AT) pour revenir en mode réel sans reboot du DOS :
- positionnement dans la RAM non volative d’une adresse de retour en mode réel,
- reset du 80286 vers le mode réel par une triple erreur d’adressage mémoire,
- le BIOS prend la main puis bascule directement l’exécution à l’adresse stocké dans la ram non volatile,
- restauration du contexte DOS
- on rend la main au DOS.
Les interruptions hardwares sont décalées en mode protégé car elles chevauchent les gestionnaires d’exception du mode protégé.
Les interruptions hardwares provenant du clavier et de l’horloge sont gérées par un minidriver (clignotement du CLK en bas à gauche de l’écran) et transformation des scancodes provenant du clavier en caractères affichés à l’écran. Un mini pilote d’affichage gère les retours à la ligne automatique et le scrolling vertical automatique.
la touche Echappe (ESC) déclenche le retour au DOS.
Ce programme correspond aux taches élémentaires réalisés par un système d’exploitation bootant sur un PC (Que ce soit Linux, Vista, XP, BSD, …. ).
En 1994 dans le cadre d’une présentation de projet étudiant (IUT A Informatique, Lyon 1), le code source à été remanié pour supporter les processeurs 80386/486 et supérieurs (détection des processeurs, retour au mode réel géré proprement).
Les applications PRO486/PRO282 et leurs codes sources sont fournis sans aucune garanties. Ils sont libre de droits. Faites moi juste un coucou si vous elles vous ont servies à quelque chose 🙂
A basic operating system bootstrapper for Intel x86 Protected Mode
A raw 'operating system' bootstraper created before (and updated while) my university cursus (start of 90s). The goal was to understand and implement a switch from Intel i80286 Real Mode (MSDOS environment) to Protected mode (modern OS process isolation), the very first steps of a modern OS boot.
The first version target i80286 (named PRO286), and was able to restore Real Mode when the program terminate (thanks to IMB Bios workaround of the 80286 bug). It was written circa 1989 (i was 17year old) on my new Amstrad PC2286 (with double Floppy Disk and no hard drive)
PMOIS486 is the evolution targeting Intel i386 or i486 processors (and with 'clean' return to real mode feature).
PMOS486 move hardware interrupt to remove overlapping interrupt number between cpu and hardware interrupts when running in Protected Mode. The standard position is restored when back to real mode. It implement a keyboard driver (with a french 'mapping'), a text display 'drivers' (autoscroll of typed chars), a timer interrupt (2char blinking on screen :) )
PMOS486 is fully written in Intel x86 assembler (real and protected mode). It 'was' compilable with masm. A version was compatible with tasm (Borland Turbo Assembler).
The source is provided 'as is'. I'm not sure it compile with modern assembler :) (the older you compiler/linker is, luckier you will be ;) )
A binary build is available for testing (downloadable as is, no warranty of any kinds).