Si bien existieron muchos productos capaces de solucionar las limitaciones de memoria de DOS, sobresalen dos compañías en particular, en una mancomunidad ganadora. La unión virtuosa del compilador de C de
#Watcom International Corporation y el "Extensor de DOS"
#DOS/4GW de Rational Systems permitía correr programas en Modo PROTEGIDO, a la vez que retenían en acceso a las funciones en Modo REAL de 16 bits del DOS.
Las aplicaciones se la pasaban conmutando entre modo real y protegido. Esto constituía un problema en las CPUs 286 porque Intel nunca imaginó que un programa podría querer conmutar ida y vuelta entre MODO REAL y MODO PROTEGIDO.
Extensor
#DOS/4GW
Si bien el problema era volver, en los Intel pasar de MODO REAL a MODO PROTEGIDO era simple. Solo tenías que usar 6 instrucciones mnemónicas oara colocar el Registro de Control del bit 0 al 1 y activarlo.
La manera normal para realizar una "llamada de sistema" en DOS era usar una instrucción de interrupción de software con el parámetro 21H. En programación C, esto constituía una abstracción del encabezado DOS.H - encargado de llevar a cabo todo el trabajo de bajo nivel del sistema operativo.
El extensor permitía hacer esto de manera más simple y transparente para el programa.
Ambos mundos tenían que estar "puenteados" para permitir que un programa corriese en uno de los Modos de procesador y el sistema operativo lo hiciera en el otro. Para ello se instituía una capa intermedia denominada "Extensor DOS" - la cual era capaz de correr en ambos modos, biejecutble - y se la insertaba entre el programa y el sistema operativo.
Cuando inicializabas el Extensor DOS, este colocaba llamadas en la Tabla de Vector de Interrupción del Sistema Operativo, y allí metía sus propias rutinas. Desde el punto de vista de la aplicación todo resultaba transparente, y no tenías que alterar ningún código. Para disparar las llamadas de sistema que no estaban enlazadas al Extensor (por ejemplo, si querías usar la INT33H para leer el registro del mouse), el Extensor te ofrecía la interfaz especial llamada DPMI, en la cual el interruptor 31H que se encargaba de traducir los pedidos de registros de 32 bits a 16 bits, tal que las rutinas de la Tabla de Vector de Interrupción las entendiesen.
Cuando el extensor interceptaba una llamada de sistema operativo, traducía las llamadas, conmutaba la CPU al modo real y reenviaba la llamada al DOS, y recogía el resultado, y pasaba al modo protegido de nuevo, para continuar.
Watcom
El Extensor DOS era mágico, pero bastante difícil de presentar como producto integrado real.
Lo que realmente se necesitaba era disponer de un ambiente integrado en el cual el compilador y en enlazador se encargasen de embutir tanto al extensor y como a la aplicación en sí dentro de un fichero ejecutable.
La solución vendría del extremo norte.
En 1979 en la Universidad de Waterloo en Ontario, Canadá comenzaron a desarrollar un compilador multiuso llamado
#Watcom. Para 1987 integró el primer compilador C de DOS para la 386. Para 1993 habían alcanzado mejoras considerables: el Watcom C/386 daba código al menos el doble de velocidad que los compiladores de Borland o Microsoft, (usualmente mas).
El combo Watcom/Extensor tornaba simple la programación y también resultaba en soft veloz, pero lo mas importante fue permitir la portabilidad del
#código C extendido. No sólo podía programarse en C en modo real en DOS, sino portar a otras plataformas.