Lendo dados de disquetes de um disco ZX Spectrum Swift

Jan 15 2021

No passado, tínhamos um disco rápido de seis palavras e estávamos à frente do jogo em nossas especificações, permitindo-nos disquetes de 3,5 polegadas. Ver:

  • https://www.worthpoint.com/worthopedia/swift-disc-interface-zx-spectrum-540379389
  • http://www.crashonline.org.uk/44/swiftdisk.htm
  • https://spectrumcomputing.co.uk/index.php?cat=96&id=1000412
  • https://hardware.speccy.org/hardware/Swift_Disc-Sixword-i.html

Vejo as especificações completas do hardware e até mesmo a rom está disponível online no link hardware.speccy.org acima, o que é incrível.

Alguém tem uma ideia de qual formato de disco foi usado (era um instantâneo de toda a memória) e como nossos velhos disquetes podem ser digitalizados para o mundo retro moderno. Possivelmente poderíamos convertê-los para o formato FDI ?

Motivação:

Seria legal tentar fazer o upload do nosso jogo Galactic Patrol, que nunca foi lançado, como fizemos com o StarBlade . Desculpas por tornar as ondas inimigas muito más lá! Poderia ter feito mais alguns testes, mas nós dois ainda estávamos na escola.

Isso foi executado em cores 'full' usando o esquema de troca rápida de tela que meu irmão inventou, que é mencionado aqui na falha .

Respostas

3 Tommy Jan 16 2021 at 04:11

Não consegui encontrar informações técnicas ou um emulador existente, mas através de seus links encontrei esta imagem em alta resolução da placa de interface .

A partir daí, noto as seguintes coisas:

  • o controlador de disco é um WD1770, que é o grande à esquerda;
  • os dois grandes chips na metade direita abaixo do conector de borda são uma RAM de 8kb e uma EPROM; e
  • tudo o mais que é visível é a lógica da série 74.

É uma aposta segura com base na arquitetura do Spectrum que o botão de interrupção muda na ROM on-board e aciona um NMI.

As imagens ROM vinculadas têm 32kb e 16kb de tamanho, mas a primeira parece ter apenas 16kb de dados copiados duas vezes, você também pode aduzir que a EPROM tem 16kb, caso em que pode haver algumas suposições para descobrir quando e onde esses 8kb de RAM aparecem .

Encontrei menções antigas em comp.sys.sinclair de que a emulação Microdrive adicionada a uma versão posterior era parcialmente baseada em hardware, mas parece ter vindo com uma revisão da placa. Portanto, um autor de emulador provavelmente começaria com a EPROM mais antiga na esperança de que o hardware extra ainda não estivesse presente.

Caso contrário, a boa notícia é que o controlador de disco é uma parte extremamente padrão que apenas faz a codificação simples da IBM, e com base na capacidade de disquete anunciada de "treze jogos de 48kb por disco", você pode assumir que o formato físico dos dados no disco é MFM (isto é, PC normal de 'densidade dupla').

Então: você pode ser capaz de criar a imagem do seu disco usando uma unidade de disco USB simples (a menos que encontre uma que suporte disquetes de alta densidade apenas), pois MFM é essencialmente a única coisa que eles suportam - mas eles são frequentemente restritos a setores de 512 bytes com numeração fixa, então isso não é garantido. Pode valer a pena tentar antes de procurar uma solução menos comum. Esta página relacionada ao MSX fornece um guia para Linux e macOS, embora a seção do Windows esteja vazia. Um pouco mais de pesquisa pode ser necessária lá.

Caso contrário, procure soluções que podem criar disquetes para uma máquina como o Amstrad CPC, visto que esses devem lidar com diferentes tamanhos de setor e endereçamento, e os formatos de arquivo comuns relacionados ao CPC podem reter todas essas informações. Se você tiver um PC antigo o suficiente para ter um controlador e unidade de disquete pré-USB e um sistema operacional como o DOS, que dá ao software acesso irrestrito ao controlador, isso deve resolver o problema. Ou agora existem controladores de disco de baixo nível exatamente para esse problema, como o Greaseweazle mencionado por scruss, o Kryoflux e outros.

Começando com um emulador Spectrum funcional, então não deve ser muito difícil adicionar a interface de disco Swift e ler seu disquete.

O software que deve gravar em um WD1770 é muito conhecido, então você pode isolar esses endereços facilmente, e praticamente a primeira coisa que a rotina NMI precisará fazer é fazer backup da tela atual para que você provavelmente seja capaz de descobrir o Questão RAM sem muito dilema. Nesse ponto, pode ser tão fácil quanto conectar a imagem do disco.

Muitas vezes, quando essas interfaces um pouco mais obscuras não são emuladas, é apenas porque nenhum dado de teste está disponível; é muito possível que você consiga atrair o interesse de um autor existente apenas por ter uma imagem de disco. Caso contrário, um emulador Spectrum é fácil de criar, então alguém como eu, que tem o tipo de código correto em geral, deve ser capaz de ajudar.

Como alternativa, como minha pesquisa não foi especialmente completa, você pode descobrir que a coisa já está emulada - nesse caso, por favor, me avise para que eu possa alterar 90% dessa resposta.

2 Spektre Jan 16 2021 at 16:25

Parece que ele usa WD1770 Não estou familiarizado com ele, mas primeiro verifique se WD1770 é compatível com o formato IBM. Se sim, então você pode ler os discos diretamente no PC ... Caso contrário, você precisa de um HW capaz de ler o disco .

Portanto, no caso de compatível com PC, basta criar uma imagem usando o acesso direto ao setor em C ++ (ou qualquer outra linguagem ou utilitário) em vez do formato de arquivo. Depois de obter a imagem binária do disquete (de uma forma ou de outra), existem duas opções:

  1. emular FDC

    então você precisa ter algum emulador capaz de emular sua interface FDC ou adicionar tal funcionalidade a algum código-fonte aberto.

    Em seu último link estão imagens de ROM e também circuito (mas aquele é ilegível), então pode ser possível emular isso invertendo o circuito ... Eu fiz isso antes para meu emulador e D40 / D80 FDC baseado em WD2797 . No entanto, isso é facilmente realizável apenas para emuladores que são executados em resolução de tempo MC (ciclo de máquina) (como o meu), caso contrário, o FDC deve ser apenas hackeado conectando-se à condição HW e SW, ignorando o código Z80 e injetando código / operações FDC (que é como a maioria dos emuladores fazem isso, no entanto, isso não é 100% compatível e carregadores personalizados e outras coisas podem não funcionar), o que ninguém sem conhecimento profundo sobre o funcionamento do FDC direcionado pode fazer.

  2. extrair arquivos

    ou você ignora o FDC completamente e extrai os arquivos não compactados da imagem em um formato legível por emuladores como *.tap. Caso você compartilhe algumas imagens (melhor com a descrição de quais arquivos e por quanto tempo estão), ficaria feliz em tentar criar um conversor win32 que faria isso por você.

    como os arquivos são apenas instantâneos, essa pode ser sua melhor opção. Idealmente, se você também tiver acesso ao HW, você pode criar um padrão de memória específico e salvá-lo em um disquete para que a inferência do sistema de arquivos seja mais fácil ... por exemplo, preencha os 128K (parte da RAM) com endereços de 32 bits (valor incremental) para que possamos pode reunir os setores na ordem correta e, em seguida, combiná-los com FAT se for usado ...