«

»

nov 17 2012

Pacote pronto do OpenMSX para o Raspbian (Raspberry Pi)

Desta vez tenho que dizer que a aventura de criar um pacote pronto para o Raspberry Pi a fim de rodar uma plataforma retrocomputacional foi bastante interessante e me rendeu um bom aprendizado.

Apresento aos interessados e fãs de MSX, um pacote de instalação otimizado, mas só não digo que é um prato cheio porque desta vez não deixei o esquema tão recheado assim.

 

Por trás dos bastidores

Conforme expliquei no post para instalação do emulador do C64, o Raspberry Pi pode rodar diversos tipos de emuladores, mas nem sempre a solução está “pronta e mastigada” ao usuário comum.

No caso do OpenMSX o curioso é que ele está presente nos repositórios do Raspbian, porém, sua versão é antiga e apresenta artefatos nas bordas e problemas com o driver de áudio, o que acarreta no travamento do sistema.

Então decidi compilar a última versão disponível do emulador OpenMSX (0.9.1) até a data da escrita deste post.

Algumas vezes achei que não conseguiria sair do zero, mas fazendo pequenas alterações em algumas chamadas de certas rotinas e diretrizes de compilação, além de aumentar o arquivo de swap (memória virtual) do Raspbian, foi possível compilar o programa através de seu código fonte diretamente no pequeno hardware do Raspberry, levando quase uma hora o processo.

Tentei versões anteriores para ver se havia alguma vantagem, mas não percebi nenhum ganho de velocidade expressivo que compensasse a adoção.

 

Ajustando o Raspberry Pi

Antes de começar, mais uma vez farei a mesma recomendação importante que já fiz ao recomendar a execução do emulador de Commodore 64.

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.

 

Instalação

Novamente eu estava de bom humor e resolvi facilitar as coisas, mas desta vez preferi fazer um pacote .deb diretamente para o Raspbian, sem scripts.

Primeiramente, se você já tem o emulador OpenMSX instalado no sistema, recomendo que remova-o.

Não entre no servidor X para evitar qualquer perda de desempenho.

Agora 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/msx-raspi.deb
sudo dpkg -i msx-raspi.deb

Aguarde o término do download, digite o comando de instalação (segunda linha) e aguarde a descompressão e configuração dos arquivos.

Ao terminar o processo, para executar o emulador basta digitar este comando no terminal:

msx

[important]

Atualização 13/12/2012: Se ocorrer alguma mensagem de erro ou emulador não rodar, instale alguns pacotes adicionais utilizando os seguintes comandos:

sudo su
apt-get update
apt-get install libglew1.5 libtheora0 libao-dev

[/important]

Ao entrar você perceberá um menu com a lista de jogos, ao qual tratei de incluir alguns poucos títulos clássicos de cartucho para MSX1 e MSX2, e algumas imagens de disquete, mas nada muito extravagante.


 

Como funciona?

Para facilitar as coisas, compilei o famoso “Advance Menu“, que faz parte da suíte do Advance Mame. A maior vantagem é que ele é um menu rápido, bastando pressionar ENTER para entrar no jogo ou ESC para sair, além de que se o usuário tiver experiência nele poderá incorporar telas dos jogos e personalizar o menu, porém, estas configurações extras deixarei fora deste post.

Ao entrar no OpenMSX, o sistema irá iniciar e carregará exatamente o que você escolheu através do menu, e para sair e retornar ao menu basta pressionar Ctrl+Pause. O processo de comutar entre o menu e OpenMSX pode levar alguns segundos, isso é normal.

Ao pressionar a tecla TAB é possível alternar entre os modos de exibição, e ao apertar F6 irá alternar entre as classes de emulação (MSX1, MSX2, DSK e Demoscene). Nada do que fizer no menu ficará gravado, basta sair e entrar novamente se quiser retornar ao estado padrão.

Se alguém já conhece o Advance Menu e deseja alterar as configurações, basta editar o arquivo presente em /home/pi/RetroComputers/MSX/config/advmenu.rc

 

Inserindo mais programas

Se você quiser adicionar mais jogos e aplicativos, dentro do diretório /home/pi/RetroComputers/MSX existem outros diretórios com a referência especifica, veja:

  • MSX1 – ROMs de cartucho para jogos específicos para MSX1
  • MSX2 – ROMs de cartucho para jogos específicos para MSX2
  • DSK – Arquivos de imagem de disquetes para qualquer MSX, até a versão 2+
  • Demoscene – Arquivos de imagem de disquetes de “demoscenes” para qualquer MSX, até a versão 2+

A critério de curiosidade, o MSX1 é chamado emulando um HotBit 1.1 (Sharp), e para o restante é utilizado o perfil de um MSX Panasonic WSX com 512 Kb de memory mapper.

 

Como está a performance?

Confesso que em um primeiro momento fiquei decepcionado com a performance, mesmo estando ciente de que o OpenMSX não está ainda rodando no Raspberry Pi usando todo o potencial do hardware, empregando técnicas de software para a renderização das imagens.

Porém, com um pouco de paciência mexi em alguns atributos importantes que foram a chave para alcançar uma performance suficiente. Acompanhe os detalhes:

  • Desliguei o efeito de blur.
  • Desliguei os scanlines.
  • Mantive a proporção de resolução apenas em 2x de escala, usando números inteiros.
  • Deixei a proporção horizontal sem escalonamento, isso gerou uma borda acentuada mas dobrou a velocidade.
  • Coloquei a precisão do VDP para a renderização de linhas, e não pixels. Não percebi nenhuma anomalia em todos os jogos e programas que testei até o momento (foram mais de 300!).
  • Deixei a taxa de quadros travada, sem opção para pular quadros (frameskip). Isso pode causar slowdowns se usar o Raspberry Pi em seu clock normal, mas em overclock médio é essencial para diminuir radicalmente os “trancos” na imagem.
  • Preferi deixar o sistema em velocidade máxima ao ler as imagens de disquetes, já que são raros os softwares que conseguem carregar algo e manter o sistema ativo fazendo outra coisa.
  • Para executar programas de MSX1, dei preferência a emular realmente um MSX1.
  • Para alternar o clock do CPU Z80 do modo padrão para turbo, e vice-versa, basta pressionar F8. Alguns jogos se beneficiam disso e não perdem desempenho.

No geral, a performance oscila entre 50 a 60 FPS, dependendo se o jogo é PAL ou NTSC.

É fato que mesmo com todas as otimizações, podem ocorrer algumas perdas de velocidade aqui ou ali, mas é algo que em relação aos resultados de quando comecei meus testes usando a configuração padrão, o ganho é imenso.

Não é perceptível uma queda de performance nos jogos que utilizam canais de áudio adicionais através de processadores extras (SCC, OPL etc), mas se forçar a execução de uma Moonsound ou um MSX Turbo R, neste caso é notável uma oscilação de desempenho.

 

Ainda tem algum problema?

Sem dúvida há alguns detalhes a serem observados:

  • As bordas laterais são acentuadas devido a otimização na resolução. Se você alterar este aspecto a performance poderá cair severamente.
  • Se o seu Raspbian tiver processos extras rodando, recomendo que interrompa-os a fim de deixar o equipamento livre para a execução do OpenMSX.
  • Para evitar falhas no som e garantir uma boa performance, remova o Pulse Audio com o comando:
    sudo apt-get remove pulseaudio
  • Por mais estável que seja a performance no geral, alguns jogos podem dar breves “soquinhos” nos quadros em certos momentos, mas não chega a atrapalhar a jogabilidade.

Irei continuar a estudar soluções para otimizar ainda mais o OpenMSX, e se algo importante for descoberto, criarei um novo pacote de mesmo nome e irei atualizar este post com notificações adicionais.

 

Conclusão

Creio que para mim a compilação deste emulador foi a mais importante que efetuei até agora, pois me gerou um forte sentimento saudosista ao executar com maestria a emulação de um MSX Hot Bit, sendo o primeiro microcomputador que ganhei quando criança.

Mais uma vez quebrei as “regras de boa conduta” integrando algumas ROMs ao pacote, mas procurei reduzir o conteúdo e deixar sometne as ROMs das máquinas utilizadas, bem como alguns poucos títulos clássicos que considerei importantes para testes.

Conhecendo o entusiasmo dos usuários de MSX, tenho certeza de que rechear o Raspberry Pi com bons programas para esta plataforma não será um problema.

Boa diversão a todos!

31 comentários

1 menção

Pular para o formulário de comentário

  1. marcelo santos

    Obrigado, eu quebrei muito a cabeça tentando fazer rodar o openmsx e o fmsx e não consegui nada.

    1. Mauro Xavier

      Se precisar de alguma ajuda adicional, ou quiser opinar sobre o próximo “pacotão da alegria”, é só avisar 😉

  2. Arkinux

    Obrigado!

    1. Mauro Xavier

      Disponha, SEMPRE!

  3. Mauro Sókrates

    Putz, xará! Essa tela do Hotbit me deu saudades também. O Hotbit foi meu 2º computador que ganhei (o 1º foi um CP-400) e eu ainda o tenho e funcionando. Parabéns pela matéria!

    1. Mauro Xavier

      Todas as vezes que vejo a tela de boot do Hotbit fico emocionado…

  4. Mário Nunes

    Parabéns ficou muito legal, eu estou esperando chegar mais alguns raspberry na farnell (to sem credito internacional).

    Eu estive trabalhando num downloader de ROM que opera em cima da rede TOR para obfuscar a localização dos roms e dsks, vou dar andamento no projeto quem sabe um dia sai 😉 ai podemos colocar um downloader online no projeto.

    Meus parabéns um ótimo projeto.

    1. Mauro Xavier

      Opa, qualquer notícia deste seu projeto, me avise!

      Abraços.

  5. Cícero

    Mauro,

    Mai uma vez parabéns pelo excelente trabalho…a Casa dos Nerds está ficando a casa do RPi no Brasil…

    Valeu cara…teu site esta cada vez melhor!!

    1. Mauro Xavier

      Puxa, obrigado!

  6. Fernando Cunha JR

    Maurao, nem preciso dizer que está de PARABÉNS pelo trabalho que tem feito para o RPI. Queria eu saber fazer alguma coisa do gênero… :)

    CHEERS!!!

    1. Mauro Xavier

      Obrigado, amigo!

      Tem muito mais por aí… É esperar pra ver 😉

  7. Fred

    Parabéns Mauro. Só poderia ter dado o crédito onde era cabido.

    1. Mauro Xavier

      Desculpe, não entendi.

      Compilei o pacote das fontes, modifiquei o que era necessário para rodar a última versão no Raspbian e distribui, coloquei os links referentes a cada programa, tem alguma coisa que esqueci? Me diga que creditarei sem dúvida.

  8. verythrax

    Oi Mauro, só pra ter certeza, vc rodou isso no RPi de 256mb, certo? Seria preciso alguma modificação para tirar proveito dos 512mb, pra quem tem esta versão? Tem idéia se haveria um ganho considerável?

    Obrigado!

    1. Mauro Xavier

      O único ganho considerável na versão de 512Mb a nível de emuladores são em casos como o do MAME, que ao utilizar ROMs grandes (NeoGeo?) pode fazer uso da RAM extra, e principalmente, na compilação do código fonte. Tirando isso, o resto dos emuladores, no que diz respeito a emulação em si de micros antigos, se comportou exatamente da mesma forma.

      Mas vale um aviso, alguns usuários reportaram que o Raspberry Pi de 512Mb esquenta um pouco mais, e mesmo com overclock mediano, em dias de calor os emuladores perdem velocidade pois a temperatura limite quando é atingida o clock retorna a seu estado natural. Portanto, recomendo se possível que coloque dissipadores para obter uma temperatura padrão e ter uma velocidade constante.

  9. Nuno

    O link para o deb dá 404

    1. Mauro Xavier

      Tem certeza? Aqui usei o wget para baixar, e copiei e colei o link no navegador sem problema algum.

  10. Carlos

    Você conhece algum pacote completo para emular o Atari ST no Raspberry Pi? Obrigado e parabéns pelo site.

    1. Mauro Xavier

      Não conheço, mas é uma boa ideia!

      Já estou devendo um pacote do Amiga, vou dar uma olhadinha para compilar algo para o Atari ST também.

      Abraços.

  11. marcelo

    Será que ainda funciona com a versão atual do raspbian ?

    1. Mauro Xavier

      Se o kernel não tiver modificações severas, não vejo problemas em não funcionar. Teste e me diga como foi.

      1. marcelo

        Pelo jeito teve sim, e pra pior, incluindo-se a versão do gcc e o resto da distro da raspbian. Seu pacote não funciona, o pacote pronto do openmsx 0.8.2 também não funciona, não consigo rodar nada nele, e pra completar, compilar o openmsx, seja a versão 0.8.2 ou a 0.9.1 não dá certo.

        Esse é o resultado da 0.8.2:
        Compiling cpu/CPUCore.cc…
        {standard input}: Assembler messages:
        {standard input}:43060: Warning: end of file not at end of a line; newline inserted
        {standard input}:43237: Error: bad instruction `rs’
        g++: internal compiler error: Killed (program cc1plus)

        1. Mauro Xavier

          É curioso mesmo não funcionar, porque compilei estaticamente, deveria rodar. Você não viu nenhuma mensagem de erro ao tentar executar o pacote?

          1. marcelo

            Consegui fazer funcionar, após um update e a instalação de algumas bibliotecas. Eu perdi a imagem algumas vezes, mas ainda não mexi na configuração de vídeo. A compilação estática é aquela opção de standalone ? Você usou cross-compile ?
            Porque compilar no Raspberry está mesmo impossível.

          2. Mauro Xavier

            Compilação estática é quando você pede ao compilador que incorpore todas as rotinas de bibliotecas extras diretamente no executável, e apesar de torná-lo maior, o torna mais compatível com outras distribuições e versões diferentes do kernel e bibliotecas.

            Não usei cross-compile, compilei diretamente no Raspberry e demorou um bocado. No OpenMSX 0.8.2 deu um erro que não me lembro, mas procurei no Google e achei uma forma de contorná-lo, mas no caso da versão 0.9.1, uma das bibliotecas dava erro, então peguei o arquivo dela da versão 0.8.2, inseri no código e compilou corretamente.

  12. luis

    Boa noite,
    Parabéns pelo post !!!
    Executei sem problemas, porem, gostaria de saber se seria possível aproveitar esta compilação para executar pequenos códigos em basic ao invés de ficar dependente apenas do menu? Ou ainda se seria possível, por exemplo eu executar um wav no meu pc e inserir na entrada de áudio do raspberry de modo que no emulador, através de: Bload “pacman.bas”, R
    fosse possível a execução do código?

    1. Mauro Xavier

      Você pode emular disquetes e gravar os arquivos em basic neles.

  13. Marcelo

    Eu tentei usar o openmsx, tanto o seu pacote como o openmsx da distro, no modo de video composto e sumiu o video. O RPI não travou, acessei por ssh e matei o processo, voltando ao normal. Alguma idéia de porque isso acontece ?

  14. Marcelo

    Olá,
    Consegui resolver o problema do video composto, basta limitar o tamanho do frame buffer no /boot/config.txt

  15. Luciano

    Muito, muito obrigado mesmo Mauro!!! Sou neófito mas estou rodando maravilhas no meu Raspberry como se fosse um MSX.

  1. FG1998

    […] que legal, o belo blog casa dos nerds tem um excelente post com um tuto para um emulador de MSX no Raspberry Pi. Chequem lá também os […]

Deixe uma resposta