Compilando Microsoft Word 1989





Coletando Opus



Opus é o codinome dado pelos desenvolvedores da Microsoft ao Microsoft Word para Windows v1.1a. Vamos compilá-lo a partir do código-fonte e ver se podemos executá-lo!



1. Introdução



Este artigo documenta o processo de obtenção do código-fonte e de transformá-lo em um aplicativo funcional do Windows. O compilador e as ferramentas de desenvolvimento rodam no sistema operacional MS-DOS porque em 1989 não havia ferramentas de desenvolvimento que funcionassem no Windows.



Nota: Vou me referir ao DOS com freqüência ao longo deste artigo. Essa designação se refere ao Microsoft MS-DOS, embora a maioria das informações também se aplique ao IBM PC-DOS e à maioria dos outros tipos de DOS.



Se você é novo no uso do sistema operacional DOS, recomendo repetir minhas etapas em uma cópia do Microsoft MS-DOS v6.22, a versão de junho de 1994 do DOS (a última versão lançada), que contém todas as ferramentas de que precisamos (discutirei a única exceção abaixo).



2. Antecedentes



O desenvolvimento de um processador de texto chamado Microsoft Word para DOS foi iniciado por Richard Brodie e outros em 1982. Richard foi contratado da Xerox Parc porque estava familiarizado com o então futurista processador de texto Bravo.



Word for DOS foi lançado pela primeira vez em 1983 e empacotado com uma das primeiras versões do MS-DOS. Ele usava gráficos (primitivos) e suportava a operação do mouse, mas o próprio programa recebeu análises conflitantes.



Word v2.0 para DOS foi lançado em 1985, era compatível com gráficos EGA e tinha um corretor ortográfico.



Word v3.0 para DOS foi lançado em 1986 e oferecia suporte a gráficos Hercules e conjunto estendido de impressora.



Word v4.0 para DOS foi lançado em 1987, ele suportava gráficos VGA e tinha modos de texto e gráficos.



O Word v5.0 para DOS e OS / 2 tornou-se um aplicativo de 16 bits.



A atualização de 1989 para o Word v5.5 introduziu janelas e menus no estilo Windows / Mac e foi o predecessor do Word para Windows, que foi lançado no mesmo ano.



O desenvolvimento do primeiro processador de texto WYSIWYG * para Microsoft Windows foi concluído por volta de 1988-1989, e esta versão está agora disponível no site do Computer History Museum (CHM).



* WYSIWYG = O que você vê é o que você obtém



Leia mais sobre a história e baixe o código-fonte do Museum of Computer History aqui:



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



3. Posso compilar este código?



Sim! Mas como? Você pode usar um PC antigo ou relativamente moderno que pode inicializar no modo BIOS legado, ou pode configurar um hipervisor para executar um PC virtual. Todas as ferramentas necessárias estão no despejo do código-fonte no link acima. Todos eles funcionam no DOS, então vamos descobrir como isso deve funcionar.



Para a demonstração, estarei usando VMware Fusion em um Mac, mas você pode usar qualquer hardware legado adequado ou hipervisor que possa executar o MS-DOS. Depois de instalar o DOS, você precisa verificar a quantidade de memória livre que possui. Por esta

você precisa entender em termos gerais como o DOS "vê" o hardware. Como o compilador parece exigir memória expandida, explicarei como esse tipo de memória é acessado e como configurar o DOS para disponibilizar essa memória para o compilador.



Além disso, o conjunto de arquivos é muito grande (para um aplicativo DOS), portanto, recomendo tornar sua vida mais fácil criando uma imagem de CD-ROM com os arquivos de origem para que possam ser copiados para uma máquina DOS de uma vez. No entanto, para que o CD-ROM funcione no DOS, os drivers de dispositivo também são necessários, portanto, também abordarei isso a seguir.



O código-fonte é interessante porque o compilador proprietário requer um computador com processador de pelo menos 386 e 4 MB de RAM. Isso ultrapassa as características de muitos PCs da época e definitivamente seria considerado "high end", porque então a maioria dos computadores tinha no máximo 1 MB de RAM e apenas 640 KB disso estavam disponíveis para aplicativos DOS típicos. O próprio DOS ocupa uma boa parte desse volume e os aplicativos usam o que resta. Então, quanta memória nosso carro tem? Como adicionar mais memória a ela? Mais sobre isso abaixo.



4. História dos processadores Intel



O motivo pelo qual o DOS requer gerenciamento de memória está intimamente relacionado ao histórico do processador em que o sistema operacional deveria ser executado. Uma vez que muitos dos primeiros programas foram escritos em linguagem assembly, o sistema operacional DOS era integrado com o processador no qual era executado. Como resultado, ele herdou as limitações desses processadores, e eles impuseram requisitos estranhos, porque cada nova geração de processadores tinha que suportar a base de código de todas as anteriores.



Em 1979, os processadores Intel 8086/8088 de 8 bits podiam endereçar 1.024 KB, ou 1 MB de RAM (barramento de dados de 8 bits, registros de memória de 16 bits).



Em 1982, um processador Intel 80286 de 16 bits podia endereçar até 16 MB de RAM (barramento de dados de 16 bits, espaço de endereço de 24 bits *).



Em 1985, o Intel 80386 de 32 bits (e posterior 486) poderia (teoricamente) endereçar até 4096 MB ou 4 GB de RAM **



Os processadores modernos de 64 bits têm arquiteturas de memória endereçáveis ​​de 40, 52 e 64 bits. para que possam suportar 1 TB a 4 PB de RAM!



Nota *: Um espaço de endereço de 24 bits é equivalente a 2 à potência de 24 × 1 byte = 16.777.216 bytes ou 16 MB.



Nota **: o espaço de endereço de 32 bits é 2 elevado a 32 x 1 byte = 4 294 967 296 bytes, ou 4 GB, mas em PCs com 386 processadores, devido às limitações das placas-mãe e ao enorme custo de RAM na época, geralmente era definido muito menos do que 1 GB.



A história do DOS e do Windows está repleta de problemas criados por compatibilidade com versões anteriores e limitações de gerenciamento de memória que foram influenciadas pela arquitetura dos primeiros processadores da Intel.



5. Tipos de memória DOS



Existem cinco áreas de memória tratadas pelo sistema operacional DOS. Cada um deles é endereçado usando um ou dois drivers de dispositivo chamados no CONFIG.SYS no momento da inicialização. O HIMEM.SYS fornece acesso à memória estendida e o EMM386.EXE fornece acesso à memória expandida. Aqui está uma breve descrição desses tipos de memória.



Memória convencional : memória de 0 a 640 KB (ou 651.264 bytes), também chamada de área de memória inferior (LMA)



Área de memória superior : UMA tem 640 KB a 1024 KB (1 MB) de memória também chamado de



especificação de memória estendida de blocos de memória superior (UMB) : XMS são endereços de memória de 1 MB a 64 MB, mas esta especificação também descreve UMA porque o DOS não tem acesso a UMA sem suporte de HIMEM.SYS



Especificação de memória expandida : o EMS usa o quadro de página de 64 KB definido na memória superior para fornecer acesso à memória acima de 1 MB. O DOS pode usar XMS e EMS quando o parâmetro AUTO é especificado ou desabilitá-lo se o EMM386.EXE for carregado com o parâmetro NOEMS. O EMM386 e outros gerenciadores de memória emulam a memória expandida na área de memória estendida - tudo é completamente claro e nada confuso!



Área de memória alta : O HMA tem 64 KB, logo acima de 1 MB, no qual o DOS pode carregar-se no momento da inicialização usando o parâmetro DOS = HIGH do arquivo CONFIG.SYS.



A memória convencional contém aplicativos DOS da velha guarda. Eles podem usar apenas 0-640 KB de memória e, como o DOS em si ocupa parte desse espaço, eles podem acessar menos de 500 KB de RAM em tempo de execução. Isso geralmente limita os aplicativos que são executados no chamado "modo real", em outras palavras, aplicativos de 16 bits que são limitados à memória convencional. O modo real é chamado assim porque o aplicativo de memória endereçável mapeia para endereços de memória real.



Isso só foi normal por alguns anos e, mais tarde, 640 KB se tornou o fator limitante para aplicativos mais complexos, ou seja, jogos! Mais memória era necessária para novos aplicativos do Windows, então a Extended Memory Specification (XMS) foi introduzida. Memória acima de 1 MB tornou-se endereçável por programas de 16 bits. Essa especificação apareceu em 286 processadores, que implementaram o modo protegido para acessar a memória acima desses limites do DOS, mas também suportaram o acesso à memória principal em modo real, alternando entre os modos conforme necessário.



6. Instalando o DOS



Podemos usar disquetes reais e unidades de disquete USB, criar imagens de disquete a partir de disquetes físicos ou baixar imagens de disquetes de sites como o WinWorld.



Uma máquina física ou virtual deve ter no mínimo 4 MB e no máximo 32 MB de RAM e um disco rígido de no máximo 512 MB com uma única partição FAT16. Se o disco rígido for fisicamente maior que 512 MB, limite a primeira partição ao tamanho máximo que sua versão do DOS pode resolver. Por motivos de compatibilidade, limite esta primeira partição a 512 MB ou menos.



Se a máquina tiver as especificações mínimas descritas acima, inicialize a partir do primeiro disquete DOS. Nas versões superiores a 5.0, o instalador será iniciado. Siga suas instruções e selecione todos os padrões por enquanto. No próximo artigo, vamos experimentar as opções de instalação. Se você não viu a caixa de diálogo com a proposta de instalação, então no primeiro disquete você pode frequentemente encontrar o arquivo INSTALL.EXE ou configurar tudo sozinho particionando manualmente o disco rígido. Consulte a seção Como tornar o disco rígido inicializável abaixo.



7. Tornar o disco rígido inicializável



Se na etapa anterior você inicializou a partir de um disquete, mas ainda não tem um disco rígido acessível ou a cópia do DOS não contém um instalador, você pode instalá-lo manualmente.



Execute FDISK a partir do disquete e visualize a estrutura de partição existente selecionando o item 4 e pressionando Enter.



Se a partição existir, deve-se escrever que o sistema de arquivos FAT16 tem até 511 MB e a coluna de status deve indicar que a partição está ativa (o símbolo "A" na coluna Status).



Se este não for o caso, crie uma seção; volte ao menu principal pressionando Escape.



Selecione o item 1 e pressione Enter. Digite 1 e pressione Enter novamente para criar uma nova partição primária. O programa vai reclamar que já tem uma seção existente. Se você for corajoso o suficiente, você pode excluí-lo e criar um novo ou apenas usar o existente.



Depois disso, volte ao menu principal, selecione o item 2 e ative a nova partição e saia do FDISK. No prompt do DOS, precisamos formatar o disco para tornar essa nova partição legível e também trouxemos o sistema de inicialização do DOS para o disco com a opção "/ s" do formatcomando de comando. A opção "/ v" solicitará o nome do novo volume.



format c: /s /v


Siga as instruções e dê ao volume um nome válido de 11 caracteres. Isso criará um disco de inicialização, mas criará uma pasta DOS antes de reinicializar



md C:\DOS


... e então copie todos os arquivos do disquete para C: \ DOS ...



copy A:. C:\DOS\.


Crie CONFIG.SYS e AUTOEXEC.BAT padrão antes de reiniciar. Não tem um editor de arquivos? Sem problemas, digite os seguintes comandos para copiar o texto do console em um arquivo chamado config.sys:



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


Em seguida, pressione Ctrl-Z para sair e salvar a saída. Esses comandos copiarão o conteúdo do console (CON) para o disco. Agora temos um arquivo CONFIG.SYS localizado no diretório raiz da unidade C :.



Vamos fazer o mesmo para criar o arquivo AUTOEXEC.BAT:



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


E pressione Ctrl-Z. Ótimo, agora você pode reiniciar.



8. Configurando o DOS



Normalmente o MS-DOS é configurado com dois arquivos lidos pelo DOS no momento da inicialização (além do próprio COMMAND.COM). Eles são os seguintes arquivos (na ordem em que são acessados):



CONFIG.SYS contém uma lista de drivers de dispositivos e opções de configuração carregadas no momento da inicialização; ele está localizado no diretório raiz do disco de inicialização.



O AUTOEXEC.BAT é iniciado após inicializar a máquina e carregar os drivers de dispositivo no CONFIG.SYS. Ambos os arquivos de configuração devem estar localizados no diretório raiz do disco de inicialização; A: quando o sistema inicializa a partir de um disquete, ou C: para sistemas com um disco rígido.



O DOS pode muito bem inicializar sem esses arquivos, mas a maioria dos aplicativos adiciona opções de configuração para fazê-los funcionar ou otimizar sua execução. As versões recentes do DOS também tentam se configurar fazendo alterações nesses arquivos durante o processo de instalação.



Executar o HIMEM.SYS no momento da inicialização não é suficiente, precisamos configurar o EMM386.EXE ou um gerenciador de memória expandida de terceiros. Mais sobre isso mais tarde. A história das arquiteturas de processadores Intel tem a ver com gerenciamento de memória, então precisamos descobrir isso.



Para configurar o acesso à memória estendida, editaremos C: \ CONFIG.SYS usando o editor DOS:



\DOS\EDIT \CONFIG.SYS


Se o arquivo não for encontrado, basta salvar um novo arquivo com o nome C: \ CONFIG.SYS. Adicione o

seguinte texto à primeira linha:



DEVICE=C:\DOS\HIMEM.SYS


Pode haver outras entradas no CONFIG.SYS, mas adicione-as à primeira linha. Quando terminar, pressione Alt-F para ir ao menu Arquivo e pressione S para salvar, então pressione Alt-F e X novamente para sair. Reinicie, você verá um teste de memória e a linha de comando do DOS: "C>".



Digite o comando MEM na linha de comando para ver quanta memória está agora disponível para aplicativos DOS:





Como você pode ver, o DOS tem apenas 571 KB de memória convencional para aplicativos, mas quase 30 MB de memória estendida (XMS) e nenhuma memória expandida (EMS).



O motivo é que aloquei 32 MB de RAM para esta VM e a situação pode ser diferente no seu hardware / VM.



Parece que precisamos de acesso à Memória Expandida (EMS) para executar o compilador, mas como o implementamos? É aqui que o EMM386.EXE é útil; este driver de memória é fornecido com versões posteriores do DOS para suportar o Microsoft Windows e outros aplicativos DOS que requerem muita memória, incluindo alguns jogos do DOS.



9. Gerenciamento de memória em DOS



Se carregarmos o driver de gerenciamento de memória via CONFIG.SYS, podemos ver quanta RAM ele aloca. O arquivo config.sys possui as duas linhas a seguir no início. Pode haver outras entradas, mas essas duas primeiras linhas devem estar no início do arquivo e nesta ordem.



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


Reinicie e execute o MEM novamente.





Comparando esta imagem com a anterior, podemos ver que a mesma memória principal foi encontrada, mas o tamanho máximo do programa que podemos rodar agora é 612 KB (mais de 571 KB), porque carregamos o DOS na memória superior com o comando DOS = ALTO. Também emulamos memória expandida (EMS) na faixa de memória estendida (XMS).



Se executarmos o comando DOS MSD, obteremos o seguinte esquema de alocação de memória:





Mostra a área contígua de memória ocupada pela Memória Expandida. Cada um dos caracteres P representa 1 kilobyte, então cada linha representa 16 KB de espaço que pode ser alocado. As bordas que não são de 16 KB não precisam ser distribuídas porque não são contíguas.



Para compilar o Word, a memória convencional e o EMS foram suficientes para mim, mas seus números de memória livre podem ser diferentes dependendo da versão do DOS utilizada e sua configuração.



Se você precisar de mais memória principal e / ou estendida, tente usar gerenciadores de memória estendida de terceiros, como QEMM, JEMM ou UMBPCI, que usam menos memória principal e ainda fornecem memória estendida compatível.



Terminando a configuração



Alguns aplicativos requerem espaço temporário para armazenamento de arquivos, despejo de memória, etc., portanto, vamos criar um diretório para arquivos temporários com o comando MD (criar diretório) e usar o comando SET para apontar para a variável de ambiente TEMP.



MD C:\TEMP


Em seguida, faremos isso no momento da inicialização, adicionando-o ao autoexec.bat. Entrar:



\DOS\EDIT \AUTOEXEC.BAT


E adicione o seguinte ao final do arquivo:



SET TEMP=C:\TEMP


Pressione Alt-F, S para salvar e Alt-F, X para sair do editor.



10. Compilar OPUS



OPUS é o codinome do Microsoft Word para Windows v1.1a. O código-fonte fornecido contém C e código assembly, um compilador proprietário, linker, ferramentas de patch proprietárias, notas de desenvolvedor e documentação. Esses arquivos contêm tudo que você precisa para criar um arquivo executável de 16 bits que pode ser executado no Windows v2.x, Windows v3.x e OS / 2 v2.x sem modificação.



Precisamos de pelo menos 612 KB de memória principal para compilar este software, bem como pelo menos 4 MB de memória expandida, portanto, você pode precisar estudar o Guia de configuração do DOS para configurar o DOS para essas condições.



Criei um convidado no VMware Fusion com MS-DOS v6.22 como sistema operacional convidado e também configurei um DOS VDM no Windows XP; tudo funcionou em ambos os ambientes.



Etapa 1: download



O código-fonte está disponível no site do Computer History Museum:



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



Ele permitirá que você compile o Microsoft Word v1.1a, mas o linker acontece com frequência trava a menos que você execute op1.bat separadamente da pasta de construção. Ainda não descobri por que isso acontece no DOS ... no entanto, no Windows XP podemos emular não apenas a linha de comando do DOS, mas também a memória estendida e adicional, e tudo funciona! Mas como fazer isso?



Etapa 2: descompactar arquivos zip



A máquina host pode executar Windows, Linux ou MacOS. Usei um Mac, mas não importa. Descompacte os arquivos zip e crie um arquivo de imagem ISO em CD-ROM contendo todos os arquivos.



Veja o guia de criação de ISO.



Etapa 3: copiar arquivos



Transferimos o código-fonte, o compilador, o vinculador e a documentação para a máquina DOS / VM via CD-ROM.



O compilador deve ser executado a partir do disco de inicialização, então vamos colocar tudo em C: \ SRC. Como a quantidade de dados é muito maior do que um ou dois disquetes, criei uma imagem de CD-ROM que montei na VM. Se você tiver hardware físico, poderá fazer o mesmo ou consultar o Guia de configuração do DOS para saber como acessar o CD-ROM pelo DOS, ou por meio de um disco físico, ou por meio de um arquivo de imagem ISO.



Etapa 4: criando a pasta BUILD



Nota: algumas dessas etapas foram retiradas dos comentários nos fóruns do Beta Archive ( https://www.betaarchive.com/forum/ ).



Vamos criar uma nova pasta BUILD para cada montagem e alterar fast.ini para apontar para esta nova montagem.



MD \SRC\OPUS\BUILD1


Etapa 5: mudanças na configuração do compilador



Antes da compilação do aplicativo, há dois arquivos que precisam ser modificados para se adequar ao seu ambiente. Peguei a maioria desses parâmetros de uma postagem no fórum betaarchive . Vá para a pasta de ferramentas:



CD \SRC\OPUS\TOOLS


Backup fast.ini



COPY FAST.INI FASTOLD.INI


Abra FAST.INI da seguinte forma:



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


Em seguida, altere o conteúdo para ficar assim:



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=


Salve o arquivo com Alt-F, S e saia com Alt-F, X.



Abra mo1.bat para que aponte para sua estrutura de pastas, não para as unidades de rede que foram listadas no código-fonte:



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


E altere as seguintes linhas para corresponder aos caminhos do arquivo:



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


Altere todos os outros caminhos para corresponder ao seu caminho, eles podem ter nomes de unidade diferentes de C:; então altere-os para começar com = C: \ SRC \ OPUS \



Etapa 6: compilar!



Altere a pasta de ferramentas se ainda não o fez:



CD \SRC\OPUS\TOOLS


Compile BUILD1 usando o arquivo de configuração INI modificado:



MAKEOPUS @FAST.INI


Sem erros!? Os arquivos objeto serão colocados em C: \ SRC \ OPUS \ BUILD1 e, se a vinculação for bem-sucedida, os arquivos EXE estarão localizados em C: \ SRC \ OPUS \ PROGRAM.

Se você estava compilando usando DOS, então tudo deve ser parecido com este:





Compilador CSL - Compilação e correção de código bem-sucedidas



Se você usou XP (as instruções de configuração estarão na próxima postagem), a conclusão bem-sucedida será semelhante a esta:





Se ocorrerem erros de memória, é possível que não haja memória principal ou estendida suficiente, você ignorou a etapa de atribuição TEMP = no AUTOEXEC.BAT ou FILES = etapa de atribuição no CONFIG.SYS, ou existem erros de sintaxe no FAST2.INI. Verifique esses parâmetros novamente.



Se você não conseguir resolver os erros de memória, existem duas soluções.



  1. Tente executar mo1.bat da pasta BUILD. Se funcionar, o problema pode ser memória principal suficiente, mas não memória estendida contígua suficiente.
  2. Tente o mesmo processo de construção no DOS VDM no Windows XP - parece que a RAM está alocada corretamente para cada tipo de memória, no entanto, o EXE resultante não pode ser executado no Windows XP; ele será executado em uma máquina Windows v2 ou v3. Consulte o Guia de configuração do Windows XP.


Observação: após a compilação, o arquivo mo1.bat redefinirá a variável de ambiente PATH e não incluirá mais a pasta DOS. Isso significa que alguns comandos do DOS não funcionarão mais se você não fornecer o caminho completo para a pasta DOS de cada comando. Adicione C: \ DOS à variável PATH no arquivo mo1.bat ou simplesmente reinicie para restaurar as configurações anteriores.



11. Inicie o Opus



Resumindo, apenas copie todos os arquivos de C: \ SRC \ OPUS \ PROGRAM para uma máquina Windows v2.x ou v3.x e execute WINWORD.EXE. Isso é tudo!



No futuro, irei juntar um conjunto de disquetes que farão a instalação correta baseado neste código, mas por enquanto isso é o suficiente para teste.



No Windows 2.x, o programa deve ser semelhante a este





... e o mesmo código em execução no Windows 3.x:







Publicidade



Nossa empresa oferece servidores com Windows pré-instalado . Nós não economizar em hardware - única equipamento de marca e alguns dos melhores centros de dados na Rússia e na UE. Apresse-se para verificar.






All Articles