Uno2IEC a pá de cal que faltava no 1541

Commodore 64 LogotipoEsse post é em agradecimento especial ao meu amigo Alexandre Pereira, vulgo “PACMAN”… Graças à ele ter levado “EMPRESTABANDEADO” o meu C128 junto com minha SD2IEC, é que surgiu esse projeto. Como? Simples! Chegou um C64 Série C pra ser devidamente reparado, e eu não estava com a mínima paciência de tirar a poeira do meu 1541, e torcer para os discos ainda estarem funcionais, sendo assim parti para uma solução mais à altura de uma máquina tão legal como o C64, e aproveitei para facilitar a vida de quem quer brincar um pouco sem sofrer com as mazelas de usar floppy! Obrigado “PACMAN” maledito meu amigo… a comunidade agradece.

Um pouco de história para quem não teve o desprazer de conhecer o drive de disquete serial da Commodore, conhecido pelo seu número, o “1541”…

O CBM-1541 foi concebido para ser companheiro do maior BEST SELLER da história da Commodore, quiçá da computação mundial, ele era basicamente um FDD de face simples, com armazenamento de 170Kb em discos de 5 ¼“. Até aí, nada muito diferente do que tínhamos na época; O problema é que não tinha uma interface, era ligado pela porta serial (IEC) do Commodore, que usava um controlador de I/O ( 6522 ) que era rápido o bastante, se ele não fosse “BICHADO” nas linhas de alta velocidade, e pra piorar como o projeto estava atrasado, o temido lord das trevas Jack Tremiel e seu departamento de marketing, decidiram que o 1541 deveria ser retro-compatível com o Commodore VIC-20! O que obrigou ao pobre Russell ( projetista do drive ), a reduzir ainda mais a velocidade do que já era lento em 4x!!!! O que poderia ter sido o mais rápido drive da época, virou uma piada eterno no mundo retrocomputacional…

E a história não termina aí, o 1541 é um computador completo sem memória e chip de vídeo, pois possuí um 6502 dedicado só para ele. Existem loucos que chegaram a usar o drive como um co-processador para determinadas tarefas em seus programas!!! Se você quiser saber mais da história dessa “MAGAVILHOSA” peça de hardware, tem um post excelente no Retrocomputaria Plus sobre o assunto, dê uma passadinha por lá e deixe seu comentário :).

Vamos ao que interessa… A ideia aqui é interligar um Arduino no C64 via IEC para simular um 1541. Para tal descobri o projeto do Lars Wadefalk que apesar de promissor e bem feito, deixa à desejar em documentação e em como executá-lo.

Dividido em 3 partes, o projeto precisa da montagem do cabo, da compilação de um programa que será o servidor das imagens de disco, e da preparação do Arduino como HOST entre o programa e o Commodore. Alias, o mesmo projeto funciona em C16/Plus4, VIC-20, C64 e C128, podendo até ser usado com um FileBrowser que aceite os comandos da SD2IEC, porém ainda sem nenhuma compatibilidade com FASTLOADERs ou com a JiffyDOS.

Lista de item necessários para montar o projeto:

  • Um pedaço de cabo com 4 fios
  • 1 Conector DIN 6 pinos macho ( Pode ser adquirido na RetroMall )
  • 1 Arduino UNO
  • Barra de pinos ( Opcional, mas fica mais bonito 😀 )

O Hardware

A montagem é a mais simples o possível, o conector IEC tem 3 sinais que precisamos e um opcional ( CLK, ATN, DATA e RESET ), podendo estes serem ligados a qualquer pino digital do Arduino, e alterado na interface do programa. Eu optei por soldar a ponta que irá no Arduino a uma pequena barra com 4 pinos, e liga-la nos pinos digital 6,5,4 e 3, ficando assim bem linear e fácil de entender.

Vamos a montagem do cabo… essa é a pinagem e as cores dos fios que usei no DIN e na barra de pinos, o resultado final, pode ser visto na galeria de fotos que está lá no final do POST:

DIN 6 (IEC) Pinagem

DIN 6 (IEC) Pinagem

IEC SINAL COR ARDUINO
5 DATA Roxo 3
3 ATN Azul 4
4 CLK Verde 5
6 RESET Cinza 6

O Software

A porção software da solução está desenvolvida em C e com interface em QT, além de possuir uma versão para ser usada no RaspeberryPI. Todos os códigos fontes estão na seção de DOWNLOAD desse post, além claro de todas as referências e links relevantes estarem devidamente localizados na seção de LINKs.

A compilação não é complicada em nenhuma plataforma, mas para facilitar ainda mais a vida de todos, tem o BINÁRIO já pronto com a biblioteca QT estática para quem estiver com preguiça lá em baixo, porém somente para Linux 32-bits e OSX. Quem quiser contribuir compilando e enviando as versão do Windows e do RPi, serei muito agradecido, e receberá os devidos créditos nesse post.

Compilação no MAC OSX

Para quem não sabe, o núcleo do OSX é baseado em BSD, mas precisamente em um kernel  nomeado Darwin, ele é livre, e inclusive é atualizado e modificado pela comunidade. Por ser um BSD quase padrão, um grupo de programadores portou/criou o gerenciador de pacotes do BSD para ele; o projeto chama-se MACPorts e utiliza-se tal como um APT/YUM da vida. Vamos precisar dele, para instalar a QT5 afim de compilar o projeto…

Não vou ensinar isso, dá uma olhada na página do projeto que é muito MONKEY de ser instalado e preparado… Só pra adiantar, o MACPorts requer o XCode instalado no micro com as ferramentas de console, usa a Mac App Store para isso.

Depois de tudo devidamente preparado, baixe na seção de DOWNLOADS o pacote “uno2iec_src.zip”, descompacte o conteúdo desse arquivo, e será criada uma pasta “uno2iec_src”. Abra um terminal, acesse a pasta criada e digite os comandos abaixo:

$ sudo port install qt5-mac
$ qmake "CONFIG+=release staticlib"
$ make

Depois de alguns momentos, e se nada der errado, o prompt retorna, e você terá uma nova pasta chamada “release”. Dentro dessa pasta estará o executável do UNO2IEC, basta copiá-lo para a pasta Application do OSX e executá-lo.

Compilação no Linux

Aqui a coisa é mais simples! Focando em distribuições baseadas em Debian que usem APT ( Mas pode usar qualquer distro, desde que você saiba o que fazer 😀 ), tudo o que precisamos é instalar o QT5 e partir para o abraço. Aqui usei um Ubuntu 14.04 e um linux Mint que não recordo a versão.

Baixe na seção de DOWNLOADS o pacote “uno2iec_src.zip”, descompacte o conteúdo desse arquivo, e será criada uma pasta “uno2iec_src”. Abra um terminal, acesse a pasta criada e digite os comandos abaixo:

$ sudo apt-get install qt5-default
$ qmake "CONFIG+=release staticlib"
$ make

Tal como no OSX, será criada uma nova pasta chamada “release”. Dentro dessa pasta estará o executável do UNO2IEC, basta copiá-lo para onde você quiser no seu Linux ( aconselho ~/bin ), e você terá o programa servidor pronto.

Compilação no Windows e no RPi

Como citei lá no início, não executei a compilação nessas plataformas, por tanto quem quiser colaborar, será devidamente referenciado nesse post.

O Arduino

Ambiente de compilação do Arduino.

Ambiente de compilação do Arduino.

Antes de mais nada, você tem que ter seu ambiente de compilação do Arduino pronto e funcional, não vou ensinar como fazer, lá no Arduino.cc tem o excelente Getting Started, comece por lá se precisar, e só depois retorne :).

Aqui é bem simples… dentro da pasta que foi descompactada, tem uma pasta homônima ( uno2iec ) que contem os sources para o upload no Arduino. Abra a pasta, e dê duplo clique no arquivo “uno2iec.ino”; ele será aberto no ambiente de compilação do Arduino como na figura abaixo. Pressione CTRL+U ( CMD+U no OSX ), que o sketch será compilado e automaticamente será feito o upload para a placa.

Se você fez a barra de pinos soldada, só conecte ela no Arduino começando no pino 6 ( RESET ) e terminando no pino 3 ( DATA ). Feito isso, basta configurar os pinos na interface do programa servidor.

Abra o programa, clique no menu “rpi2iec -> preferences”, a tela abaixo será exibida. Selecione a porta COM onde seu Arduino está conectado ( no meu OSX ficou como tty.usbmodem131 ), selecione Device Number = 8, Reset Pin = 6, Clock Pin = 5, ATN Pin = 4 e Data Pin = 3. Clique no botão BROWSE e selecione a pasta onde suas imagens de disco estão, clique em OK e conecte o DIN 6 na porta IEC do seu Commodore.

Tela de configuração do Uno2IEC Host Server

Tela de configuração do Uno2IEC Host Server

Vamos aos testes!

Se tudo estiver certo até aqui, estamos pronto para o primeiro teste. No canto esquerdo do programa, apareceu a lista de suas imagens de disco; selecione uma e clique em Mount Selected Image; note que na tela que simula um C64, será listado o conteúdo dessa imagem.

Agora, ligue seu Commodore, e digite os comandos à seguir:

LOAD"$",8,1 ( Bizarro... mas é assim que se dá um DIR )
LIST

Se funcionou, o mesmo conteúdo que apareceu no programa, aparecerá no seu Commodore ( aqui você pode comemorar ). Basta agora carregarmos o programa e executá-lo com os comandos abaixo:

LOAD"NOME_DO_ARQUIVO",8,1
RUN

Acompanhe no programa, que uma barra de progresso mostrará o percentual de carga do programa; quando a barra chegar ao fim, seu Commodore está apto é executar o programa com o comando “RUN”. Se algo deu errado, ou o Commodore não apresentou carga, no programa pressione o botão Reset Arduino e comece novamente montando a imagem de disco.

Be Happy!

Se você chegou até aqui, meus parabéns!!! já pode guardar de uma vez por todas o seu CBM-1541… Na seção de downloads tem um pack com alguns jogos de arcade que gosto de executar no C64, todos devidamente testados. Juntamente com os jogos, também estão algumas aplicações úteis na raiz, como CBM FileBrowser ( FB ), WEGDE DOS e o SJLOAD  ( um Fastload que ainda vou testar e ajustar para essa solução ). Aconselho muito a utilização do FB, é rápido, simples e prático…

No mais espero que todos possam divertir-se um pouco com essa série de micros que fizeram a história de uma geração. Abaixo tem algumas fotos de como ficou o meu protótipo e um vídeo do funcionamento.

  • Commodore C64
  • Commodore C64
  • DIN 6 ( IEC )
  • DIN 6 ( IEC )
  • Barra de Pinos
  • Aplicação HOST
  • Tela do C64
css slider by WOWSlider.com v5.4m

Abraços, e até a próxima!

Downloads

Código fonte Uno2IEC e Bibliotecas necessárias.
Binário para MacOSX ( Testado no Maverick )
Binário para Linux 32-Bits
Pack de Jogos e Utilitários para C64

Links relevantes

GitHUB do Projeto
Página do Retrocomputaria sobre o CBM-1541
Wikipedia sobre o CBM-1541
Pinagem dos conectores do Commodore 64
Dicas e Truques para usar a SD2IEC ( Leia! Vale à pena )
RetroMall

Arduino, Commodore, Periféricos, Retro Computação

1 response to Uno2IEC a pá de cal que faltava no 1541


  1. marcepan

    Hi,
    Great job! Is it possible to use SD shield like in sio2arduino project? It will be great to avoid using file server.

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>