«

»

nov 04 2012

Script pronto para emular um C64 no Raspberry Pi

Hoje acordei de bom humor e resolvi hospedar algumas coisinhas interessantes e criar um script para tornar mais fácil a vida dos amantes do Commodore 64 que já possuem um Raspberry Pi.

E se você ainda não tem um Raspberry Pi mas gosta da plataforma C64, acho que está na hora de rever seus conceitos.

 

Por trás dos bastidores

O Raspberry Pi é perfeitamente capaz de rodar uma série de emuladores,  conforme já mostrei antes, mas infelizmente nem todos estão disponíveis nos repositórios, com isso precisam ser compilados para serem executados, o que pode afastar os usuários menos experientes. Obs.: Falando em repositórios, neste post irei tratar unicamente do Raspbian, que é a distribuição Linux que costumo usar no dia a dia em meu Raspi.

Para quem não entendeu uma palavra do que escrevi, vou passar um pequeno vocabulário técnico:

  • Raspbian: Distribuição Linux otimizada para o hardware do Raspberry Pi, baseada no Debian.
  • Repositórios: Ondem ficam disponíveis programas para uma determinada distribuição Linux.
  • Compilação: Resumindo superficialmente, é o ato de transformar um código fonte (humanamente compreensível, ou nem tanto), em algo que uma máquina possa executar.

Pronto, agora imagine que se um programa estiver disponível no repositório, basta digitar alguns comandos que ele é baixado e configurado automaticamente, não é lindo? Porém, se o programa que deseja não estiver nos repositórios, você terá que baixar o código fonte e se aventurar no mundo da compilação, o que infelizmente às vezes dá algumas dores de cabeça.

Certo, e onde entra o nosso querido Raspberry Pi e o Commodore 64? Simples, o emulador VICE, usado para rodar o C64, não está disponível nos repositórios do Raspbian (ao menos até o momento em que eu escrevia este texto).

E como disse no começo no post, de repente me deu um belo bom humor e resolvi não apenas prover o pacote, bem como  otimizar a configuração e mandar alguns “brindes” a mais.

 

Ajustando o Raspberry Pi

Antes de começar a brincadeira, vou fazer uma recomendação importante.

Se você utiliza a saída HDMI por padrão, recomendo que diminua  a resolução para que o emulador rode com o máximo de performance. Para isso vá no diretório /boot e edite o arquivo chamado config.txt.

Neste arquivo você deverá adicionar as seguintes linhas:

hdmi_group=1
hdmi_mode=1

Feito isso, basta salvar o arquivo e reiniciar a máquina, ao qual passará a utilizar a resolução de 640×480 apenas.

Se você não souber editar este arquivo diretamente no Raspberry Pi, basta inserir o cartão SD em uma máquina, que na primeira partição é possível encontrar o arquivo config.txt e você poderá editá-lo usando um programa de sua preferência, que pode ser até mesmo o bom e velho “bloco de notas” do Windows.

Outro ponto importante é habilitar o overclock de nível médio, não precisa ir além disso. A vantagem deste overclock de potência intermediária é que ele é seguro e irá rodar o emulador em plena velocidade, salvo algumas raríssimas exceções que explicarei adiante.

 

Instalando a coisa toda em duas linhas

Agora vem a parte fácil…

Primeiramente, tenha certeza de que seu Raspberry Pi está com conexão à internet estabelecida, então basta entrar no terminal de textos como usuário “pi” e digite as seguintes linhas (pode copiar e colar!):

wget http://www.casadosnerds.com.br/retrofiles/raspi/c64_cdn.sh
sh c64_cdn.sh

Agora você terá que sentar e esperar, pois pode demorar um pouco.

O script atualizará o Raspbian e também irá baixar, mover e descompactar alguns pacotes e configurações.

Se alguém que aprecia algo mais técnico estiver curioso, os processos que o script executa são:

  • Atualiza os repositórios
  • Atualiza o sistema (mas não dá upgrade geral)
  • Instala a biblioteca SDL necessária
  • Corrige as permissões de acesso ao SDL para o usuário “pi”
  • Cria um diretório temporário chamado “c64.temp” dentro do home do usuário “pi”
  • Baixa o script de execução e configuração geral do VICE em modo C64
  • Baixa um pack de jogos clássicos (aee!)
  • Baixa as ROMs do emulador VICE
  • Instala o emulador
  • Cria o diretório “RetroComputers” dentro do home do usuário “pi”, e depois cria os diretórios “C64/Games”
  • Coloca o script “c64” para chamar o emulador e apontar para o caminho correto
  • Ajusta e move o restante das configurações, scripts, ROMs e tudo mais

Então ao concluir todo o processo, basta digitar o seguinte comando em um terminal de textos puro (não use o servidor X):

c64

E maravilha! Deverá abrir uma tela com o emulador funcionando bonitinho:

E se por acaso você tiver o azar desta tela não aparecer depois de 3 segundos, recomendo que reinicie o seu Raspberry Pi e tende executar o comando “c64” novamente.

Observação: Os pixels pontilhados da imagem acima ocorreram porque estou usando um conversor RCA para VGA. Sem dúvida esta não é a melhor opção para exibir imagens de qualidade vindas do Raspberry Pi.

 

Opa, mas está tudo aí?

Não! Posso dizer que está presente apenas “o suficiente”.

Sei que alguns vão apontar o dedo na minha cara dizendo “ei, mas tem as ROMs do C64 aí” ou “tem alguns jogos que você colocou junto”… E então eu pergunto: – “E daí?”

Oras, não estou fazendo nada disso para ganhar dinheiro, só empacotei o básico e facilitei as coisas, sendo que é possível encontrar o conteúdo dos arquivos com uma breve pesquisa em qualquer buscador de internet, basta baixar e pegar. Só juntei as coisas e configurei corretamente, nada além disso.

Este procedimento pode até ser tecnicamente duvidoso, mas não vejo por este lado, pois são arquivos antigos demais e não estão deixando mais ninguém rico por aí.

 

Como funciona?

Mais simples, impossível.

Já deixei tudo configurado, basta pressionar F12 para entrar na tela de opções. Nesta tela pressione “enter” na primeira linha, que está escrito “Autostart image“, e assim irá aparecer uma outra tela para procurar por imagens de jogos a serem executados e carregados automaticamente, semelhante a este imagem:

Basta então pressionar “enter” em cima da imagem desejada e pronto, o micro emulado irá reiniciar e carregará o jogo.

O emulador sempre irá entrar na pasta de jogos por padrão, mas se por acaso você se perder, os jogos estão no diretório /home/pi/RetroComputers/C64/Games.

 

E o que foi feito na configuração?

Não foram poucas coisas mas também não foi nenhum milagre. Testei diversas opções até atingir a melhor performance possível sem abrir mão da qualidade, entre as opções posso destacar as seguintes:

  • O drive 8 deixei como sendo o 1571 e não 1541. Fiz isso pois a emulação do 1571 é bem mais rápida.
  • Desliguei a velocidade “warp” ao carregar o drive, isso mais atrapalhava do que ajudava por causa da restrição de performance do Raspberry.
  • Deixei o emulador do processador de áudio como o 6581 (ReSID), mas desliguei os filtros para manter a performance,
  • O joystick da porta 2 está sendo executado pelo teclado numérico e tecla 0 (zero) para o botão de tiro.
  • Desliguei o cache de vídeo.
  • Desliguei qualquer filtro de renderização.
  • O driver de som utilizado é o SDL, para evitar problemas ao usar o áudio analógico.
  • A frequência de mixagem está em 48000 Hz, pois me pareceu ser mais rápida que as demais.
  • A sincronização do áudio deixei em modo “flexível”.
  • Desliguei a barra de status.
  • Utilizei as ROMs “Kernal” e “1571” do JiffyDOS para acelerar o carregamento e manter a compatibilidade, sem desligar os recursos de precisão de emulação do drive.

Com tudo isso é possível ter uma emulação do Commodore 64 em tela cheia sem engasgar, e para os saudosistas que usam o vídeo composto, a sensação é fantástica.

 

Ainda tem algum problema?

Posso descrever alguns pequenos problemas que encontrei, mas nada que comprometa a solução:

  • A fluência dos quadros poderá cair se o áudio utilizar técnicas sofisticadas de reprodução digital, como na segunda abertura do jogo “Turbo Out Run”.
  • Se for executado um jogo ou demoscene que carrega informações do drive enquanto uma música é reproduzida, a performance poderá cair a ponto de engasgar o áudio.
  • Depois de muito tempo de uso contínuo, o áudio poderá apresentar chiados. Basta ir no menu de configurações pressionando F12 e na opção “Sound settings” mude a frequência para 44100 e depois volte para 48000 Hz, ou se preferir, reinicie o emulador.

 Enfim, nenhum dos pontos acima chegou a incomodar pra valer, e não consegui solucioná-los por completo até o momento.

 

Conclusão

O emulador VICE roda muito bem no Raspberry Pi, desde que algumas dicas sejam seguidas.

Aqui foi apresentado uma solução pronta e de execução rápida, com o objetivo de facilitar a vida do usuário.

Apesar deste ser o primeiro post  que não segue à risca certas “normas de boa conduta” envolvendo emulação (distribuição de ROMs e afins), não acredito que isso neste caso seja um problema, já que existem inúmeros sites que há anos hospedam praticamente todos os discos existentes desta e de muitas outras plataformas sem que nenhuma reivindicação tenha sido feita.

A intenção foi a melhor possível, em todo caso, fico à disposição para maiores esclarecimentos.

Enfim, boa diversão a todos!

5 comentários

Pular para o formulário de comentário

  1. Douglas Hummel

    Mauro, parabéns e obrigado pelo script. Também estou trabalhando em um projeto de retrocomputação no RPi. Por enquanto, já tenho o emulador Fuse (zx-spectrum) iniciando automaticamente quando o Raspberry é ligado. É óbvio que o tempo de boot não é igual ao de um ZX 😉 , mas alterei o boot para fazer o login automático e rodar o Fuse na sequencia.
    Estou usando o Fuse-SDL para não precisar usar o servidor X. Para facilitar a instalação dos repositórios, instalei o Synaptic no LXDE e procurei por “Fuse-SDL”. Esse recurso permitiu instalar, além do emulador, todas as dependências do mesmo. O Fuse roda em tela cheia e com som! Minha intenção é criar uma instalação com todos os emuladores disponíveis, principalmente de micros, e criar um script (menu) onde posso escolher no boot qual sistema quero executar. Para finalizar, também estou projetando um case no estilo dos micros antigos (CPU+teclado) para usar para esse fim. Assim que tiver algo de concreto, publico na internet e envio o link para você. Abraços.

    1. Mauro Xavier

      Estou fazendo exatamente a mesma coisa, acredita? O menu para os micros é feito em C usando o framebuffer do Raspi, mostrando o logotipo de cada micro, mas só vou publicar quando conseguir compilar decentemente o OpenMSX e um emulador do Amstrad CPC. Por enquanto já está rodando o os emuladores dos micros Amiga 500, Apple //e, ZX Spectrum 128, Atari 8 bits, BBC Micro, Coco, TRS-80 e Tandy 1000. Consegui limpar o boot para 10 segundos, mas tive que abrir mão de algumas funcionalidades do Linux, agora estou tentando enfiar no framebuffer de entrada um logotipo fixo sem correr o texto.

      Mas se quiser um boot de 6 segundos, dá para usar o Arch Linux, basta instalar o Alsa e os módulos de som, mas terá que compilar o FUSE para SDL.

      Já estou quase concluindo um projeto de case mod também, ao qual estou tirando fotos passo a passo para quem quiser replicar.

      No caso dos consoles, vale usar o script já pronto do RetroPie, que dá conta do recado.

      Abraços!

      1. Douglas Hummel

        Então Mauro, eu já havia instalado o RetroPie antes de você publicar o artigo, mas meu foco mesmo são os micros antigos. Como eu disse em uma outra ocasião, meu sonho é colocar o Amiga emulado no RPi. A versão que veio no RetroPie não funcionou como eu esperava. Meus jogos favoritos não rodaram.

        Voltando ao meu projeto: o case que estou projetando será feito em MDF crú cortado a laser e depois pintado com tinta automotiva. Na parte de hardware, além do RPi obviamente, já tenho um mini teclado USB, a fonte e um hub USB com fonte, tudo testado e funcionando. Já estou fazendo orçamentos de corte depois de fechar com um deles e recortar as peças, vou postar todo o processo de montagem do case.

        Meu maior problema é o tempo por causa de meu trabalho, mas vou desenvolvendo aos poucos…

        Abraços,

        Douglas

        1. Mauro Xavier

          Nem me fale em falta de tempo… Se não fosse por isso eu postaria aqui no site pelo menos umas duas vezes por dia.

          O meu case é baseado na carcaça de um ZX Spectrum +2 preto, usando um teclado USB de perfil baixo, igual aos de notebook.

          Talvez eu poste o próximo script com o pacote pronto do Amiga 500, mas sem a ROM do Kickstart porque neste caso pode dar galho. O uae4all rodou a maioria dos jogos em ADF que testei, não é perfeito em todos os sentidos, mas faz o serviço.

          Tenho visto muita gente colocando o Raspi dentro de cases de C64 e Amiga 1200 usando o Keyrah para usar o teclado original e duas portas DB9 para o joystick, fica bem interessante também.

          Este seu esquema com MDF deverá ficar bem legal e personalizado, quando terminar poste os resultados pra galera conferir.

          Abraços!

  2. Fernando

    F A N T A S T I C O !
    Super bem explicado. fácil de entender até para quem não mexe muito com compilação e essas coisas.
    Obrigado !!! \o/

Deixe uma resposta