você pode usar os recursos de depuração da máquina virtual (ou gdb / outra coisa) para ler a memória diretamente. O ms-dos não possui proteção de memória nem é um sistema de várias tarefas; portanto, você pode ler a memória da máquina virtual, pode ler a máquina virtual vga para entrada.
documentação diz que existe um comando
info vgatext -- print the contents of the VGA framebuffer formatted as standard text mode
a sintaxe correta para obter a saída é: execute VirtualBox --debug --startvm msdos1.25
, então, no console do depurador:
info vgatext
saída copiada e colada:
The COMPAQ Personal Computer DOS
Version 1.11
(C) Copyright COMPAQ Computer Corp. 1982
(C) Copyright Microsoft 1981, 82
A>
--------------------------------------------------------------------------------
VBoxDbg>
Portanto, você pode escrever um script de depurador que conecte um valor de memória na memória do programa e despeja a tela vga quando um programa produz / ou você pode escrever um script que pausa a CPU, salva o conteúdo de maneira consistente, se a saída for alterada, salva o conteúdo atualizado, continua cpu run
Algumas opções para investigar são:
descubra como escrever um script de depuração para despejar o conteúdo da memória do seu aplicativo
encontre alguma solução de depuração de driver vga / porta serial / despejo de memória para quemu / dosbox / virtualbox
encontre algum programa utilitário ANTIGO dos anos 80 que talvez alguém tenha escrito lá para esse fim
adicione a tag freedos aqui (ou até mova / repita sua pergunta no grande stackoverflow, suponho que alguns gurus devam saber algo sobre problemas como este
Atualizarei mais tarde se encontrar algo interessante, mas você pode revelar alguns detalhes sobre por que está usando a versão 1.25. Este programa funciona em versões mais recentes do msdos? Aposto que você pode encontrar algum jovem hacker de montagem ansioso para corrigir esse programa para uma versão mais recente (ou adicionar saída de arquivo com asm) por uma pequena taxa