Hello!
Aqui no acervo do projeto Paidéia (LASSU-USP) onde trabalho, temos um computador clone de PC-XT da Scopus, Nexus 2600, em perfeito estado (exceto duas teclas faltando do teclado ), cujo HD ainda funciona e contém alguns dados interessantes (por exemplo o código fonte de um software que SÓ funciona no Nexus 2600, que talvez nos ajude a entender as diferenças de hardware entre o Nexus e o XT que impedem ele de funcionar no emulador de XT do MAME), no entanto, como o HD já tem uma idade avançada (Estamos falando de um computador dos anos 80 afinal), ele pode morrer a qualquer minuto, já é possível escutar alguns sons estranhos saindo do HD de vez em quando.
Scopus Nexus 2600
Portanto surgiu o desejo de ter uma imagem deste HD num computador moderno, para que seja arquivado e manipulado sem risco ao hardware original.
Softwares de imageamento para IBM-PC já existem, mas eu não encontrei nenhum que tinha as opções que eu queria.
Eu queria algo que tirasse cada bit do HD e mandasse para a porta serial, onde eu ligaria um null-modem e um cabo Serial-USB e receberia os dados num computador rodando linux moderno.
Pesquisei um pouco sobre softwares que fizesssem mais ou menos isso mas não encontrei (Minha busca não foi muito extensa, eu queria escrever o código mesmo :), mas se alguem souber de algo assim, me envie)
Então escrevi meu próprio código pra fazer isso, o Nexus tem uma cópia de Turbo C da Borland já instalado, então era simples escrever um código em C, compilar no próprio Nexus e rodar.
O código que eu escrevi está disponivel em: GitHub - affonsoamendola/xt-hd-imager: Project for a hard drive imaging software for the IBM-XT and compatibles (mainly the Brazillian Nexus 2600)
Divirtam-se.
Eu poderia ter escrito o código bem mais low-level, usando interrupção de software, int 14h e essas parada toda pra ler o hd e enviar pra porta serial, mas eu decidi por usar as funções de bios disponiveis com o compilador que eu usei (bios.h), eu não sei se outros compiladores da época tem essas funções, talvez esse código só compile em Turbo C, mas eu n tenho certeza, uma ideia pro futuro é implementar essas funções de leitura de HD e envio de dados pela COM, manualmente, para não ficar dependendo de software comercial de 30 anos atrás.
Para usar o programa é preciso informar algumas coisas, como o tipo do HD (Em Heads,Cylinders/Head,Sectors/Cylinders,SectorSize), e o lugar onde deve começar a leitura e o lugar onde deve parar a leitura (Em CHS tbem).
Ao informar tudo, o programa começa a enviar na hora que a ultima informação é inserida.
Para receber os dados a intenção é escrever um programa próprio, mas é meio desnescessário, qualquer programa de terminal serial com capacidade de log puro funciona, para o imageamento própriamente dito, estou usando no momento o software Kermit, disponivel nos repositorios do Ubuntu.
Os testes preliminares indicam que tudo esta funcionando perfeitamente, ainda falta rodar o programa no HD inteiro, e enviar todos os bytes, mas isso demora.
O programa tem tempo de operação teórica de umas 2h 30 (4306175128/9600 s) para o HD de 10 MB no Nexus, mas medindo o tempo de leitura de cada setor com um cronometro, obtive um tempo estimado de 4h (Espero nunca ter que imagear um HD de mais de 15 MB com esse software).
Talvez seja possível melhorar o tempo usando comunicação paralela ao invés de serial, mas eu não sei.
Estou rodando o programa no HD inteiro agora, com sorte em 4 h terei uma boa imagem dele.