Compilando Microsoft Word 1989





Coleccionando Opus



Opus es el nombre en clave dado por los desarrolladores de Microsoft a Microsoft Word para Windows v1.1a. ¡Compilemos el código fuente y veamos si podemos ejecutarlo!



1. Introducción



Este artículo documenta el proceso de obtener el código fuente y convertirlo en una aplicación de Windows que funcione. El compilador y las herramientas de desarrollo se ejecutan en el sistema operativo MS-DOS porque en 1989 no había herramientas de desarrollo que funcionaran en Windows.



Nota: Me referiré a DOS con frecuencia a lo largo de este artículo. Esta designación se refiere a Microsoft MS-DOS, aunque la mayor parte de la información también se aplica a IBM PC-DOS y la mayoría de las otras versiones de DOS.



Si es nuevo en el uso del sistema operativo DOS, le recomiendo que repita mis pasos en una copia de Microsoft MS-DOS v6.22, la versión de junio de 1994 de DOS (la última versión publicada), que contiene todas las herramientas que necesitamos (analizaré la única excepción a continuación).



2. Fondo



El desarrollo de un procesador de texto llamado Microsoft Word para DOS fue iniciado por Richard Brodie y otros en 1982. Richard fue contratado de Xerox Parc porque estaba familiarizado con el entonces futurista procesador de textos Bravo.



Word para DOS se lanzó por primera vez en 1983 y se incluyó con una de las primeras versiones de MS-DOS. Utilizaba gráficos (primitivos) y admitía la operación del mouse, pero el programa en sí recibió críticas contradictorias.



Word v2.0 para DOS se lanzó en 1985, admitía gráficos EGA y tenía un corrector ortográfico.



Word v3.0 para DOS se lanzó en 1986 y admitía gráficos de Hercules y conjuntos de impresoras extendidas.



Word v4.0 para DOS se lanzó en 1987, admitía gráficos VGA y tenía modos de texto y gráficos.



Word v5.0 para DOS y OS / 2 se convirtió en una aplicación de 16 bits.



La actualización de 1989 a Word v5.5 introdujo ventanas y menús de estilo Windows / Mac y fue el predecesor de Word para Windows, que se lanzó el mismo año.



El desarrollo del primer procesador de texto WYSIWYG * para Microsoft Windows se completó alrededor de 1988-1989, y esta versión ya está disponible en el sitio web del Computer History Museum (CHM).



* WYSIWYG = Lo que ve es lo que obtiene



Lea más sobre la historia y descargue el código fuente del Museo de Historia de la Computación aquí:



https://computerhistory.org/blog/microsoft-word-for-windows-1-1a-source-code/



3. ¿Puedo compilar este código?



¡Si! ¿Pero cómo? Puede usar una PC antigua o una computadora relativamente moderna que pueda arrancar en modo BIOS heredado, o puede configurar un hipervisor para ejecutar una PC virtual. Todas las herramientas necesarias se encuentran en el volcado de código fuente del enlace anterior. Todos funcionan en DOS, así que averigüemos cómo debería funcionar.



Para la demostración, usaré VMware Fusion en una Mac, pero puede usar cualquier hardware heredado o hipervisor adecuado que pueda ejecutar MS-DOS. Después de instalar DOS, debe verificar cuánta memoria libre tiene. Para esto

es necesario comprender en términos generales cómo DOS "ve" el hardware. Dado que el compilador parece requerir memoria expandida, explicaré cómo se accede a este tipo de memoria y cómo configurar DOS para que esta memoria esté disponible para el compilador.



Además, el conjunto de archivos es bastante grande (para una aplicación de DOS), por lo que recomiendo facilitarle la vida creando una imagen de CD-ROM con los archivos de origen para que puedan copiarse en una máquina de DOS a la vez. Sin embargo, para que el CD-ROM funcione en DOS, también se requieren controladores de dispositivo, por lo que también lo cubriré a continuación.



El código fuente es interesante porque el compilador propietario requiere una computadora con un procesador de al menos 386 y 4 MB de RAM. Esto supera las características de muchas PC de la época y definitivamente se consideraría "de gama alta", porque entonces la mayoría de las computadoras tenían un máximo de 1 MB de RAM y solo 640 KB estaban disponibles para aplicaciones típicas de DOS. El propio DOS ocupa una cantidad decente de este volumen, y las aplicaciones usan lo que queda. Entonces, ¿cuánta memoria tiene nuestro coche? ¿Cómo agregarle más memoria? Más sobre esto a continuación.



4. Historia de los procesadores Intel



La razón por la que DOS requiere administración de memoria está estrechamente relacionada con el historial del procesador en el que se suponía que debía ejecutarse el sistema operativo. Dado que muchos de los primeros programas se escribieron en lenguaje ensamblador, el sistema operativo DOS estaba estrechamente integrado con el procesador en el que se ejecutaba. Como resultado, heredó las limitaciones de estos procesadores, e impusieron requisitos extraños, porque cada nueva generación de procesadores tenía que soportar el código base de todos los anteriores.



En 1979, los procesadores Intel 8086/8088 de 8 bits podían abordar 1.024 KB o 1 MB de RAM (bus de datos de 8 bits, registros de memoria de 16 bits).



En 1982, un procesador Intel 80286 de 16 bits podía direccionar hasta 16 MB de RAM (bus de datos de 16 bits, espacio de direcciones de 24 bits *).



En 1985, Intel 80386 de 32 bits (y posterior 486) podía (teóricamente) direccionar hasta 4096 MB, o 4 GB de RAM **



Los procesadores modernos de 64 bits tienen arquitecturas de memoria direccionables de 40, 52 y 64 bits. por lo tanto, puede admitir de 1 TB a 4 PB de RAM.



Nota *: Un espacio de direcciones de 24 bits equivale a 2 elevado a la potencia de 24 × 1 byte = 16.777.216 bytes o 16 MB.



Nota **: el espacio de direcciones de 32 bits es 2 elevado a la potencia de 32 x 1 byte = 4294967296 bytes, o 4 GB, pero en PC con 386 procesadores, debido a las limitaciones de las placas base y al enorme costo de RAM en ese momento, generalmente se establecía mucho menos de 1 GB.



La historia de DOS y Windows está repleta de problemas creados por la compatibilidad con versiones anteriores y las limitaciones de administración de memoria que fueron influenciadas por la arquitectura de los primeros procesadores Intel.



5. Tipos de memoria DOS



Hay cinco áreas de la memoria que son abordadas por el sistema operativo DOS. Cada uno de estos se aborda mediante uno o dos controladores de dispositivo llamados en CONFIG.SYS en el momento del arranque. HIMEM.SYS proporciona acceso a la memoria ampliada y EMM386.EXE proporciona acceso a la memoria ampliada. Aquí hay una breve descripción de estos tipos de memoria.



Memoria convencional : memoria de 0 a 640 KB (o 651,264 bytes), también llamada Área de memoria inferior (LMA)



Área de memoria superior : UMA es de 640 KB a 1024 KB (1 MB) de memoria también llamado Upper Memory Blocks (UMB)



Especificación de memoria extendida : XMS son direcciones de memoria de 1 MB a 64 MB, pero esta especificación también describe UMA porque DOS no tiene acceso a UMA sin el soporte de HIMEM.SYS



Especificación de memoria expandida : EMS utiliza el marco de página de 64 KB definido en la memoria superior para proporcionar acceso a la memoria por encima de 1 MB. DOS puede usar XMS y EMS cuando se especifica AUTO, o deshabilitarlo si EMM386.EXE está cargado con NOEMS. EMM386 y otros administradores de memoria emulan la memoria expandida en el área de memoria extendida: ¡todo es completamente claro y no confuso un poco!



Área de memoria alta : el HMA es de 64 KB, justo por encima de 1 MB, en el que DOS puede cargarse en el momento del arranque utilizando el parámetro DOS = HIGH del archivo CONFIG.SYS.



La memoria convencional contiene aplicaciones DOS de la vieja escuela. Solo pueden usar 0-640 KB de memoria y, dado que el propio DOS ocupa parte de ese espacio, pueden acceder a menos de 500 KB de RAM en tiempo de ejecución. Esto a menudo limita las aplicaciones que se ejecutan en el llamado "modo real", es decir, aplicaciones de 16 bits que se limitan a la memoria convencional. El modo real se denomina así porque la aplicación de memoria direccionable se asigna a direcciones de memoria reales.



Esto fue bastante normal durante unos años, y luego 640KB se convirtió en el factor limitante para aplicaciones más complejas, es decir, juegos. Se requería más memoria para las nuevas aplicaciones de Windows, por lo que se introdujo la Especificación de memoria extendida (XMS). La memoria por encima de 1 MB se volvió direccionable mediante programas de 16 bits. Esta especificación apareció en 286 procesadores, que implementaron el modo protegido para acceder a la memoria por encima de estos límites de DOS, pero también admitieron el acceso a la memoria principal en modo real, cambiando entre modos según fuera necesario.



6. Instalación de DOS



Podemos usar disquetes reales y unidades de disquete USB, crear imágenes de disquete a partir de disquetes físicos o descargar imágenes de disquete de sitios como WinWorld.



Una máquina física o virtual debe tener un mínimo de 4 MB y un máximo de 32 MB de RAM, y un disco duro de no más de 512 MB con una sola partición FAT16. Si el disco duro es físicamente más grande que 512 MB, limite la primera partición al tamaño máximo que su versión de DOS puede abordar. Por razones de compatibilidad, limite esta primera partición a 512 MB o menos.



Si la máquina tiene las especificaciones mínimas descritas anteriormente, arranque desde el primer disquete de DOS. En versiones superiores a 5.0, se iniciará el instalador. Siga sus instrucciones y seleccione todos los valores predeterminados por ahora. En el próximo artículo, experimentaremos con las opciones de instalación. Si no ha visto el cuadro de diálogo con la propuesta de instalación, en el primer disquete a menudo puede encontrar el archivo INSTALL.EXE o configurar todo usted mismo particionando manualmente el disco duro. Consulte la sección Cómo hacer que el disco duro sea de arranque a continuación.



7. Hacer que el disco duro sea de arranque



Si en el paso anterior arrancó desde un disquete, pero aún no tiene un disco duro accesible o la copia de DOS no contiene un instalador, puede instalarlo manualmente.



Ejecute FDISK desde el disquete y vea la estructura de la partición existente seleccionando el elemento 4 y presionando Enter.



Si la partición existe, debe escribirse que el sistema de archivos FAT16 tiene hasta 511 MB y la columna de estado debe indicar que la partición está activa (el símbolo "A" en la columna de estado).



Si este no es el caso, cree una sección; regrese al menú principal presionando Escape.



Seleccione el elemento 1 y presione Entrar. Escriba 1 y presione Entrar nuevamente para crear una nueva partición primaria. El programa se quejará de que ya tiene una sección existente. Si eres lo suficientemente valiente, puedes eliminarlo y crear uno nuevo, o simplemente usar el existente.



Después de eso, regrese al menú principal, seleccione el elemento 2 y active la nueva partición, y luego salga de FDISK. En el indicador de DOS, necesitamos formatear el disco para que esta nueva partición sea legible, y también llevamos el sistema de arranque de DOS al disco con el interruptor "/ s" del formatcomando de comando. El interruptor "/ v" le pedirá el nombre del nuevo volumen.



format c: /s /v


Siga las indicaciones y asigne al volumen un nombre válido de 11 caracteres. Esto creará un disco de arranque, pero creará una carpeta de DOS antes de reiniciar



md C:\DOS


... y luego copie todos los archivos del disquete a C: \ DOS ...



copy A:. C:\DOS\.


Cree CONFIG.SYS y AUTOEXEC.BAT estándar antes de reiniciar. ¿No tienes un editor de archivos? No hay problema, ingrese los siguientes comandos para copiar el texto de la consola en un archivo llamado config.sys:



C:
CD\
copy con CONFIG.SYS
files=30
buffers=10


Luego presione Ctrl-Z para salir y guardar la salida. Estos comandos copiarán el contenido de la consola (CON) al disco. Ahora tenemos un archivo CONFIG.SYS ubicado en el directorio raíz de la unidad C :.



Hagamos lo mismo para crear el archivo AUTOEXEC.BAT:



copy con AUTOEXEC.BAT
@echo off
prompt $p$g
ver


Y presione Ctrl-Z. Genial, ahora puedes reiniciar.



8. Configuración de DOS



Normalmente, MS-DOS se configura con dos archivos leídos por DOS en el momento del arranque (aparte del propio COMMAND.COM). Son los siguientes archivos (en el orden en que se accede a ellos):



CONFIG.SYS contiene una lista de controladores de dispositivo y opciones de configuración cargados en el momento del arranque; se encuentra en el directorio raíz del disco de arranque.



AUTOEXEC.BAT se inicia después de arrancar la máquina y después de cargar los controladores de dispositivo en CONFIG.SYS. Ambos archivos de configuración deben estar ubicados en el directorio raíz del disco de arranque; A: cuando el sistema arranca desde un disquete, o C: para sistemas con disco duro.



DOS puede arrancar sin estos archivos, pero la mayoría de las aplicaciones les agregan opciones de configuración para que funcionen o para optimizar su ejecución. Las versiones recientes de DOS también intentan configurarse haciendo cambios en estos archivos durante el proceso de instalación.



Ejecutar HIMEM.SYS en el momento del arranque no es suficiente, necesitamos configurar EMM386.EXE o un Administrador de memoria expandida de terceros. Hablaremos más sobre esto más tarde. La historia de las arquitecturas de procesadores Intel tiene que ver con la administración de la memoria, por lo que debemos resolverlo.



Para configurar el acceso a memoria extendida, editaremos C: \ CONFIG.SYS usando el editor de DOS:



\DOS\EDIT \CONFIG.SYS


Si no se encuentra el archivo, simplemente guarde un nuevo archivo con el nombre C: \ CONFIG.SYS. Agregue el

siguiente texto a la primera línea:



DEVICE=C:\DOS\HIMEM.SYS


Puede haber otras entradas en CONFIG.SYS, pero agréguelo a la primera línea. Cuando termine, presione Alt-F para ir al menú Archivo y presione S para guardar, luego presione Alt-F y X nuevamente para salir. Reinicie, debería ver una prueba de memoria y luego la línea de comando de DOS: "C>".



Ingrese el comando MEM en la línea de comando para ver cuánta memoria hay ahora disponible para las aplicaciones de DOS:





Como puede ver, DOS tiene sólo 571 KB de memoria convencional para aplicaciones, pero casi 30 MB de memoria extendida (XMS) y sin memoria expandida (EMS).



La razón es que asigné 32 MB de RAM a esta VM y la situación puede ser diferente en su hardware / VM.



Parece que necesitamos acceso a la memoria expandida (EMS) para ejecutar el compilador, pero ¿cómo lo implementamos? Aquí es donde EMM386.EXE resulta útil; este controlador de memoria se envía con versiones posteriores de DOS para admitir Microsoft Windows y otras aplicaciones de DOS que requieren mucha memoria, incluidos algunos juegos de DOS.



9. Gestión de memoria en DOS



Si cargamos el controlador de administración de memoria a través de CONFIG.SYS, podemos ver cuánta RAM asigna. El archivo config.sys tiene las siguientes dos líneas al principio. Puede haber otras entradas, pero estas dos primeras líneas deben estar al principio del archivo y en ese orden.



DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE
DOS=HIGH
FILES=30


Reinicie y ejecute MEM nuevamente.





Comparando esta captura de pantalla con la anterior, podemos ver que se encontró la misma memoria principal, pero el tamaño máximo del programa que podemos ejecutar ahora es de 612 KB (más de 571 KB), porque cargamos DOS en la memoria superior con el comando DOS. = ALTO. También emulamos la memoria expandida (EMS) en el rango de memoria extendida (XMS).



Si ejecutamos el comando MSD de DOS, obtenemos el siguiente esquema de asignación de memoria:





Muestra el área contigua de memoria ocupada por la memoria expandida. Cada uno de los caracteres P representa 1 KB, por lo que cada línea representa 16 KB de espacio que se puede asignar. Los límites que no son de 16 KB no necesitan distribuirse porque no son contiguos.



Para compilar Word, me bastaron la memoria convencional y EMS, pero sus cifras de memoria libre pueden ser diferentes según la versión de DOS utilizada y su configuración.



Si necesita más memoria principal y / o extendida, intente usar administradores de memoria extendida de terceros como QEMM, JEMM o UMBPCI, que usan menos memoria principal y, al mismo tiempo, brindan memoria extendida compatible.



Terminando la configuración



Algunas aplicaciones requieren espacio temporal para almacenar archivos, volcar memoria, etc., así que creemos un directorio para archivos temporales con el comando MD (crear directorio) y luego usemos el comando SET para apuntar a la variable de entorno TEMP.



MD C:\TEMP


Luego lo configuraremos en el momento del arranque agregándolo a autoexec.bat. Entrar:



\DOS\EDIT \AUTOEXEC.BAT


Y agregue lo siguiente al final del archivo:



SET TEMP=C:\TEMP


Presione Alt-F, S para guardar y Alt-F, X para salir del editor.



10. Compile OPUS



OPUS es el nombre en clave de Microsoft Word para Windows v1.1a. El código fuente proporcionado contiene C y código ensamblador, un compilador propietario, un enlazador, herramientas de parcheo patentadas, notas para desarrolladores y documentación. Estos archivos contienen todo lo que necesita para crear un archivo ejecutable de 16 bits que pueda ejecutarse en Windows v2.x, Windows v3.x y OS / 2 v2.x sin modificaciones.



Necesitamos al menos 612 KB de memoria principal para compilar este software, así como al menos 4 MB de memoria expandida, por lo que es posible que deba estudiar la Guía de configuración de DOS para configurar DOS para estas condiciones.



Creé un invitado en VMware Fusion con MS-DOS v6.22 como sistema operativo invitado y también configuré un VDM de DOS en Windows XP; todo funcionó en ambos entornos.



Etapa 1: descarga



El código fuente está disponible en el sitio web del Computer History Museum:



https://computerhistory.org/blog/microsoft-word-for-windows-1-1a-source-code/



Le permitirá compilar Microsoft Word v1.1a, pero el vinculador ocurre con frecuencia se bloquea a menos que ejecute op1.bat por separado de la carpeta de compilación. Todavía no he descubierto por qué sucede esto en DOS ... sin embargo, en Windows XP podemos emular no solo la línea de comandos de DOS, sino también la memoria extendida y adicional, ¡y todo funciona! ¿Pero cómo hacer eso?



Etapa 2: descomprimir archivos zip



La máquina host puede ejecutar Windows, Linux o MacOS. Usé una Mac, pero no importa. Desempaquete los archivos zip y cree un archivo de imagen ISO en CD-ROM que contenga todos los archivos.



Consulte la guía de creación de ISO.



Etapa 3: copiar archivos



Transferimos código fuente, compilador, enlazador y documentación a máquina DOS / VM a través de CD-ROM.



El compilador debe ejecutarse desde el disco de arranque, así que pongámoslo todo en C: \ SRC. Dado que la cantidad de datos es mucho mayor que uno o dos disquetes, creé una imagen de CD-ROM que monté en la VM. Si tiene hardware físico, puede hacer lo mismo o consultar la Guía de configuración de DOS para saber cómo acceder al CD-ROM desde DOS, a través de un disco físico o mediante un archivo de imagen ISO.



Etapa 4: creación de la carpeta BUILD



Nota: algunos de estos pasos se toman de los comentarios en los foros del Archivo Beta ( https://www.betaarchive.com/forum/ ).



Creemos una nueva carpeta BUILD para cada ensamblaje y cambiemos fast.ini para que apunte a este nuevo ensamblaje.



MD \SRC\OPUS\BUILD1


Etapa 5: cambios en la configuración del compilador



Antes de que la aplicación se compile, es necesario modificar dos archivos para adaptarlos a su entorno. Tomé la mayoría de estos parámetros de una publicación en el foro de betaarchive . Vaya a la carpeta de herramientas:



CD \SRC\OPUS\TOOLS


Copia de seguridad fast.ini



COPY FAST.INI FASTOLD.INI


Abra FAST.INI de la siguiente manera:



\DOS\EDIT \SRC\OPUS\TOOLS\FAST.INI


Luego, cambie el contenido para que se vea así:



OPFL=+ls
NAM=WINWORD
EXE_DIR=C:\SRC\OPUS\PROGRAM
BUILD=C:\SRC\OPUS\BUILD1
OPUS=C:\SRC\OPUS
WORDTECH=C:\SRC\OPUS\WORDTECH
USER=Richard Lewis or Your Name
MMEM=
NOAPPLOADER=


Guarde el archivo con Alt-F, S y salga con Alt-F, X.



Abra mo1.bat para que apunte a la estructura de su carpeta, no a las unidades de red que se enumeran en el código fuente:



\DOS\EDIT \SRC\OPUS\TOOLS\MO1.BAT


Y cambie las siguientes líneas para que coincidan con las rutas del archivo:



set PATH=C:\SRC\OPUS\TOOLS\tools\dos;C:\SRC\OPUS\TOOLS\tools
set LIB=C:\SRC\OPUS\TOOLS\lib
set INCLUDE=C:\SRC\OPUS\TOOLS;=C:\SRC\OPUS\TOOLS\wordtech;=C:\SRC\OPUS\TOOLS\lib;=C:\SRC\OPUS\TOOLS\asm


Cambie todas las demás rutas para que coincidan con su ruta, pueden tener nombres de unidad distintos de C: así que cámbielos para que comiencen con = C: \ SRC \ OPUS \



Etapa 6: ¡compila!



Cambie la carpeta de herramientas si aún no lo ha hecho:



CD \SRC\OPUS\TOOLS


Compile BUILD1 usando el archivo de configuración INI modificado:



MAKEOPUS @FAST.INI


¿¡Sin errores!? Los archivos objeto se colocarán en C: \ SRC \ OPUS \ BUILD1 y, si se vinculan correctamente, los archivos EXE se ubicarán en C: \ SRC \ OPUS \ PROGRAM.

Si estaba compilando usando DOS, entonces todo debería verse así:





Compilador CSL: compilación de código y parcheo exitosos



Si usó XP (las instrucciones de configuración estarán en la próxima publicación), la finalización exitosa se verá así:





Si se producen errores de memoria, es posible que no haya suficiente memoria principal o extendida, omitió el paso TEMP = asignación en AUTOEXEC.BAT, o el paso FILES = asignación en CONFIG.SYS, o hay errores de sintaxis en FAST2.INI. Compruebe estos parámetros de nuevo.



Si no puede resolver los errores de memoria, existen dos soluciones.



  1. Intente ejecutar mo1.bat desde la carpeta BUILD. Si eso funciona, entonces el problema podría ser suficiente memoria principal pero no suficiente memoria extendida contigua.
  2. Pruebe el mismo proceso de compilación en DOS VDM en Windows XP; parece que la RAM está asignada correctamente para cada tipo de memoria, sin embargo, el EXE resultante no se puede ejecutar en Windows XP; se ejecutará en una máquina con Windows v2 o v3. Consulte la Guía de configuración de Windows XP.


Nota: después de la compilación, el archivo mo1.bat restablecerá la variable de entorno PATH y ya no incluirá la carpeta DOS. Esto significa que algunos comandos de DOS dejarán de funcionar si no proporciona la ruta completa a la carpeta de DOS para cada comando. Agregue C: \ DOS a la variable PATH en el archivo mo1.bat, o simplemente reinicie para restaurar la configuración anterior.



11. Lanzar Opus



En resumen, simplemente copie todos los archivos de C: \ SRC \ OPUS \ PROGRAM a una máquina con Windows v2.xo v3.x y luego ejecute WINWORD.EXE. ¡Eso es todo!



En el futuro, construiré un conjunto de disquetes que harán la instalación correcta en base a este código, pero por ahora esto es suficiente para probar.



En Windows 2.x, el programa debería verse así





... y el mismo código que se ejecuta en Windows 3.x:







Publicidad



Nuestra empresa ofrece servidores con Windows preinstalado . No ahorramos en hardware, solo en equipos de marca y en algunos de los mejores centros de datos de Rusia y la UE. Date prisa para comprobarlo.






All Articles