A história de um emulador

Não é todo dia que você esbarra em alguém que efetivamente programou um emulador de videogame. Todo retrogamer, colecionador e até aquele nostálgico ocasional que digitou “jogar atari online” no Google pra lembrar da cara de River Raid deve muito a estes verdadeiros herois da programação.
Amigos do Cosmic Effect, gostaria de apresentar o Alan Freitas, 32 anos, residente na capital federal deste país. E, falando em ser brasileiro, este cara não desistiu e… escreveu seu próprio emulador de Master System. Insisto para que acompanhem a história do emulador do Alan, que arregaçou as mangas e saiu da tela preta!
O artigo está genuinamente emocionante. Alan, seja bem-vindo!

Uma breve retrospectiva

Faço parte da geração nascida na década de 80, tendo acompanhado o universo dos jogos eletrônicos desde o estrondoso sucesso do Atari 2600. No início dos anos 90 eu já tinha o console há alguns bons anos.

Certo dia, um vizinho me chamou para ir até a sua casa onde vi algo impressionante: o jogo Choplifter rodando no seu Master System.

Aquilo que presenciava era, de fato, um salto qualitativo muito substancial em relação ao que já estava acostumado a ver no velho Atari. O jogo era muito dinâmico, tinha uma ação ininterrupta, seus gráficos eram espetaculares e a música, empolgante.

Lembro de ter jogado um pouco e o meu desempenho não foi dos melhores. Mas isso não importava, pois o meu objetivo estava claro: eu precisava ter um Master System.

O 8-bit da SEGA.

Chopper Command do Atari 2600.

Choplifter do Master System. A evolução era notável.

Algum tempo depois ganhei o console e, ao longo dos anos seguintes, tive muitos bons momentos com ele.

Minha rotina era semelhante a de muitos jogadores brasileiros: devido ao preço dos cartuchos e a uma certa disciplina parental, o esquema era alugar os jogos no sábado, jogá-los intensamente ao longo do fim de semana e devolvê-los na segunda-feira.

Pude apreciar boa parte do catálogo da plataforma, embora sempre restassem alguns títulos cujos gráficos se mostravam bastante atraentes nos encartes que acompanhavam o console, mas eram impossíveis de se encontrar nas locadores as quais tinha acesso.

Vem à memória o jogo Basketball Nightmare, com uma cena espetacular de um garoto fazendo uma cesta, em close.

Imagem chocante no encarte do Master System…

O ponto alto do Master System foi o jogo Phantasy Star, ao qual dediquei várias horas com amigos. Sei que é chover no molhado, mas a qualidade deste título, sobretudo se levarmos em conta quando e para qual plataforma foi produzido é algo que impressiona até hoje.

Pela primeira vez pude, em um jogo, acompanhar um enredo com um certo grau de desenvolvimento, em uma escala verdadeiramente épica (estamos falando de viagens espaciais entre três planetas), com vários mistérios a solucionar e, claro, gráficos e sons de altíssima qualidade.

Impossível não admirar a fluidez com que os extensos labirintos são percorridos, assim como a bela arte realizada principalmente nas cutscenes (outro aspecto inovador) e nos monstros.

Phantasy Star, um feito maiúsculo.

Como muitos de nós, guardo um certo arrependimento por ter vendido o console com a finalidade de seguir à próxima geração. Naturalmente, precisava do dinheiro para comprar o poderoso Mega Drive, que chegava proporcionando um outro avanço tecnológico espetacular.

O nascimento da idéia

Saltemos para o ano 2003. Após concluir a graduação em Computação, senti vontade de trabalhar em um projeto no qual pudesse exercitar alguns dos conhecimentos mais relevantes estudados na universidade.

Ambicionava explorar um pouco mais a parte de arquitetura de computadores e também computação multimídia, em um contexto de programação orientada a objetos.

Tive a idéia de criar, do zero, um emulador de Master System na linguagem C++. Parecia perfeito: os requisitos técnicos e a paixão pelo tema estavam lá, juntamente com um nível de desafio apreciável. O codinome também estava escolhido: Arisa.

Arisa. Ou Alis Landale.

Definindo o escopo

Certamente que não havia necessidade de, do ponto de vista prático, desenvolver um emulador de Master System. A plataforma já contava com vários emuladores muitíssimo competentes, cada qual com sua vocação: velocidade, acurácia, filtros, ferramentas de debug, etc.

Não se tratava, pois, desde o início, de uma iniciativa para trazer à cena mais um emulador disponível na Internet para download. Como já exposto, tratava-se de uma espécie de exercício particular.

FreezeSMS, Meka, Fusion e SMS Plus.

Conhecendo a arquitetura

Decisão tomada, era necessário entender como funcionava a máquina projetada pela SEGA. Para tal, comecei a buscar informações sobre a plataforma.

Nessa fase o site SMS Power se mostrou de grande valia, reunindo muita documentação com excelente nível de detalhes.

Placa de circuito do Master System. O chip central, no alto, é a CPU Z-80.
Foto: classiccomputer.de

Emulando o Z-80

De importância fundamental em qualquer computador, a CPU é candidata óbvia a ser emulada primeiro. Busquei livros e documentações online sobre o Z-80, o processador central do Master System.

Consideremos que o jogador apertou o botão de pulo no Sonic the Hedgehog. Muita coisa acontece:

  • Entrada: é feita a leitura do estado do botão, ou seja, apertado.
  • Lógica: é feita uma verificação se Sonic encontra-se sobre o solo ou uma plataforma, o que viabiliza o salto.
  • Aritmética: o movimento de salto é calculado, levando em consideração o estado presente do personagem (posição, velocidade, etc) e a simulação física concebida pelo programador (gravidade, inércia, etc).

Como compreender o coração do Master System?

Uma questão de interpretação

Uma técnica apropriada para a emulação de um processador como o Z-80 é a chamada interpretação.

Programar um interpretador basicamente consiste em criar, em uma determinada linguagem de programação, variáveis que guardem o estado de cada estrutura interna do processador, além de reproduzir o comportamento de cada instrução, à medida em que o programa é executado.

É, de fato, análogo ao trabalho de um intérprete: trata-se de um processo de tradução, em tempo real, de uma linguagem para outra.

As coisas não são tão simples…

Fazer uma descrição completa da arquitetura de uma CPU foge do escopo desse artigo, mas podemos dizer que o Z-80 é dotado de complexidade nada desprezível.

O processaodr da Zilog disponibiliza 252 diferentes instruções (opcodes, sendo mais exato) para o seu programador. 

Anúncio do competente Z-80 na revista Electronics em 1976.
(Imagem: domínio público)

Com isso, é evidente que a quantidade de código necessária para implementar o interpretador também é substancial.

Além de relativamente longo, o processo também trazia uma série de dúvidas: será que eu estava indo pelo caminho certo? Será que minha interpretação da documentação estava correta?

E se eu tivesse falhado em compreender algum conceito fundamental e todo aquele código sofresse de algum vício dificilmente sanável? 

Bem, não havia muitas opções a não ser estudar atentamente o material e codificar com cuidado.

Passei algumas semanas programando o interpretador. Implementei o que os programadores chamam de um “ambiente de debug”.

Amigos leitores, finalmente a palavra “jogo” aparece: com este ambiente pronto, eu podia acompanhar as alterações nos valores armazenados nas entranhas do Z-80 e da memória, durante a execução do Alex Kidd in Miracle World.

Apesar de não poder ter certeza, as coisas pareciam ir bem: eu conseguia ver que um jogo carregado parecia estar inicializando o processador e memória RAM emulados, num processo análogo ao de um PC ao ser ligado.

Também via o que parecia ser o carregamento de dados (gráficos, músicas?) na memória, entre outras coisas. 

Porém, era apenas uma visão “binária” naquele momento.

Não havia qualquer imagem do jogo rodando, como quando estamos, er… jogando.

Faltava outra peça-chave: o processador de vídeo (VDP).

Entrando no mundo dos pixels

Hoje temos nos PCs e consoles placas de vídeo com um poder computacional absurdo, que conseguem renderizar imagens com um grau de realismo realmente impressionante.

Na época dos 8-bit, os processadores de vídeo eram relativamente primitivos, e o limitado poder computacional das CPUs de então também deixava as coisas mais complicadas.

Como produzir gráficos atraentes e dinâmicos em uma velocidade aceitável? 

A resolução de 256 x 192 pixels do Master System pode parecer pífia para os padrões atuais, mas estamos falando de quase 50 mil pontos na tela. Era impossível manipular cada um deles de forma individual em tempo real. A solução clássica, simples e genial: Tiles.

Asterix, com os tiles ressaltados…

Como vocês estão carecas de saber, qualquer jogo da época, por mais complexos ou sofisticados que sejam os seus gráficos, é uma espécie de mosaico.

Os artistas desenhavam todos tiles de tal maneira que, arranjados corretamente, eles se integrassem de forma harmoniosa na tela.

…aqui, o conjunto de tiles usado na cena anterior…

Os tiles são formados a partir uma paleta de 16 cores para os sprites e mais 16 cores para o cenário.

Essas cores podem ser escolhidas dentro de um universo de 64 possíveis.

Paleta

…e, por fim, a paleta de cores da mesma cena.


Como estamos lidando com um hardware que possui muito pouca memória, se for possível reutilizar um mesmo tile fazendo seu espelhamento isso pode economizar bytes preciosos.

Assim, tínhamos belos gráficos em tela cheia.

Alguns efeitos colaterais curiosos apareceram. Inconsistência do ponto de vista físico era um dos campeões e hoje pode ser considerado um charme peculiar ao visual dos jogos eletrônicos.

Note a iluminação na cena abaixo.

Espelhamento de tiles em Phantasy Star.
Repare que a cena é perfeitamente simétrica, até nas sombras…

Tamanho não é documento

Após sentir-me seguro com a emulação do Z-80, o processador de vídeo era o próximo desafio. Menos código que o da CPU, porém com muitas particularidades e uma boa dose de complexidade.

É uma forma de conceber a montagem e exibição de imagens bem peculiar; muito diferente do que se faz na computação hoje em dia.

Aqui as inseguranças se intensificaram. No Z-80, eu inspecionava seu estado ao longo da execução. Dava pra ter uma impressão do funcionamento.

No caso do VDP… eu trabalhava às cegas, sem ter por muito tempo uma interpretação da representação binária em debug que me auxiliasse.

Fui em frente, esperando que meu entendimento dos documentos estivesse correto…

Uma grande emoção

Após algumas semanas, terminei a codificação da emulação do VDP. Junto com a emulação do Z-80 e das memórias RAM e ROM, também concluídas, isso deveria ser suficiente para executar um jogo comercial.

Claro que certamente existiam bugs no meu código; Mas, com sorte, talvez um jogo rodasse, ainda que de forma defeituosa.

A hora havia chegado: carreguei a ROM de Alex Kidd in Miracle World e após breves instantes de tensão…

 Nada além de uma tela preta.

Animador…

De certa forma, era esperado. Muito código e, pela própria natureza do problema que ele se propunha a resolver, um pequeno bug em qualquer trecho poderia causar uma falha em exibir qualquer coisa que lembrasse o jogo original.

Tentei outros jogos, com esperança de que algum funcionasse. Nada feito.

Um aspecto cruel de um emulador é que, diferentemente da maioria dos softwares, você muitas vezes não tem idéia de onde pode estar o problema do seu código. Isso porque o programa se comporta como a máquina na qual o jogo executa, mas o desenvolvedor do emulador pouco ou nada sabe sobre o código do jogo em si!

Paradoxalmente, é aí que reside a beleza pouco convencional do conceito da emulação: o jogo executando nada “sabe” sobre estar executando em um emulador, e não na máquina real.

A beleza de dar vida a um cartucho de Master System sem consumir espaço físico…

Por outro lado, o programador do emulador nada sabe sobre o código do jogo em si. Ele “apenas” implementa um software que se comporta como um hardware.

Não é necessário saber programar um jogo para aquela máquina. À medida que eu me embrenhava nas entranhas daquilo tudo, observando internamente a execução dos jogos… foi possível perceber a qualidade excepcional daqueles programadores.

Pude ver, desta vez com olhos de programador, quão impressionante eram seus resultados em plataformas tão limitadas.

Voltando aos bugs do nosso emulador. Foi um processo longo e tedioso. Todo programador sabe que criar código é bacana. Corrigi-lo, quase nunca. 

Após finalizar essa primeira revisão geral (dias depois), carreguei Alex Kidd in Miracle World novamente e… 

Escutou a musiquinha daí?

Funcionou! A tela de apresentação apareceu, mostrando várias cenas do jogo. Logo em seguida começou a demonstração: Alex Kidd percorria a fase em alta velocidade com a sua motocicleta!

Um momento de grande emoção, pois era o resultado de um longo trabalho sem resultados intermediários. Julguei, algumas vezes, que poderia ser, no fim, algo infrutífero de minha parte.

Mas não foi!

Alex Kidd: um cara maneiro.

Inevitável também o sentimento de nostalgia dos tempos da jogatina no Master System real. De alguma forma eu me aproximava um pouco mais daqueles admiráveis engenheiros, programadores, artistas gráficos, músicos, entre outros, que deixaram, com sua inteligência e criatividade, um legado tecnológico e cultural bastante relevante.

Uma mancada

Ao ver o game executando com aparente perfeição, o instinto falou mais alto: meus dedos deslizaram para o teclado, visando efetivamente jogar o jogo.

A demonstração seguiu, inabalada.

Claro: eu não havia implementado o input do joystick!

Ávido por jogar Alex Kidd sendo “empurrado” por Arisa, consultei correndo a documentação sobre o console, para aprender sobre o joystick do Master.

Até que foi rápido — bonus stage? — e pude, então, jogar Alex Kidd in Miracle World.

Mais algumas correções, rumo a uma conclusão 

Depois dessa primeira partida, rapidamente testei outros jogos. A maioria executou sem problemas, mas alguns apresentaram inconsistências, como comportamentos bizarros nas colisões ou nas cores. 

Corrigi mais alguns bugs, o que fez com que mais jogos executassem perfeitamente. Ainda restavam alguns detalhes que poderiam ser melhorados. Nesse período eu também comecei a programar a emulação do som. 

Havia, entretanto, uma nítida queda na motivação. Sentia que o desafio particular que havia proposto a mim mesmo tinha sido superado. Como nunca pensei em disponibilizar Arisa para terceiros, acabei abandonando o projeto aos poucos. 

Hoje não julgo provável retomar o desenvolvimento, mas foi algo no qual gostei muito de trabalhar. Sem dúvida foi um dos softwares mais legais que programei.

Valeu a pena.

“Linguagem de comunicação

Confesso que tive dúvidas sobre a redação desse texto no que diz respeito ao escopo.

Ao mesmo tempo que emuladores têm importância central no universo retrogamer, é muito fácil se aprofundar em questões excessivamente técnicas que podem alienar um leitor que, embora interessado no assunto, não esteja familiarizado com arquitetura de computadores ou programação. Dessa forma, tentei mesclar a tecnologia com os aspectos mais humanos e históricos.

Não sei se fui bem-sucedido, mas estou à disposição para tentar dirimir dúvidas, fornecer algum aprofundamento ou ainda esclarecer algum ponto que não foi devidamente explanado.

Muito obrigado aos leitores do Cosmic Effect!

* * *

29 Respostas

  1. Só digo uma coisa, ver como é o processo, em parte, o processo de criação de um emulador, lendo por aqui, foi algo que me deixou muito entusiasmado.

    Espero um dia não ter mais problemas com programação e, quem sabe, ajudar os grupos que tentam emular o GC ou o Wii com as ferramentas que o autor do post mostrou aqui acima.

    E meus parabéns por ter feito, na mão, um emulador para Master e pena que não disponibilizou um exe para nós, leitores do Cosmic Effect, fazerem um teste! rs

    Curtir

  2. Interessantíssimo. Seu momento “faça-se a luz” pessoal deve ter sido maravilhoso. Acho o máximo a cultura do DIY. O texto ficou muito bacana, dá pra quem não entende muito de programação entender um pouco dos desafios que você passou. Parabéns pela conquista ^^

    (sou mais um dos que ficaram morrendo de curiosidade pra testar o emulador)

    Curtir

  3. Alan tudo bem?
    Seja muito bem-vindo ao Cosmic Effect meu amigo.
    Seu texto ficou ótimo!Eu não conheço programação e mesmo assim em nenhum momento me senti entediado ou perdido,você conseguiu dosar muito bem a parte técnica com a histórica.Se essa era uma preocupação sua em relação ao texto,fique tranquilo,ficou na medida certa.

    Eu também na época fiquei impressionado com o Master e posteriormente com o Genesis,cada fase recheada de descobertas e até mesmo espanto em relação aos gráficos e músicas de cada console.
    Muito interessante MESMO sua experiência com “Arisa”,eu fiquei entusiasmado com cada etapa na tentativa de reproduzir o hardware do Master através de linguagem C++.Você ressaltou o trabalho dos programadores,designers,músicos,engenheiros etc,mas eu também destaco aqui o trabalho notável dessa galera que se dedica a fazer emuladores por amor mesmo.Lendo seu post aprendi que não é fácil encarar a construção de um emulador do ZERO ou mesmo melhorá lo.E por isso mesmo o meu respeito por essa galera que faz emuladores,para PSP PC Android entre outros, aumentou mais ainda.

    Parabéns Alan pelo artigo e espero que apareça mais vezes por aqui!

    Curtir

  4. Eu estou morrendo de vontade de testar esse Arisa. Quando vamos poder baixá-lo?

    Curtir

    • me pergunto a mesma coisa Tristam, só de ter o nome da musa eterna do Phantasy Star, tenho que ter, ou ao menos testar esse emulador. parabéns cara. é de sujeitos assim que fizeram Street of Rage Remake, com uma qualidade excelente. quem sabe um dia, você não faça um game exclusivo para esse emulador do Master? seria incrível

      Curtir

  5. Que texto fantástico. Ele conseguiu me prender a atenção como poucos textos já o fizeram. Para um leigo de programação ele foi a esclarecedor, didático e informativo (num sentido mais educacional da palavra).

    Não vou mentir, ao ler o título fiquei com certo preconceito de conferir seu texto, sorte minha já estar comentando. Parabéns pelo texto. Se possível traga novos.

    Curtir

  6. Achei o texto muito bem escrito e nem um pouco enfadonho. Parabéns pela fantástica clareza de suas palavras, Alan.

    Curtir

  7. Nossa! Maravilha de texto. Deu-nos a total ideia do trabalho ferrenho que muitos programadores devem passar pra conseguir emular os consoles. Parabéns!

    Curtir

  8. Muito bom Alan, essa sensação que você deve sentir jogando um jogo de MS rodando em algo totalmente feito por você deve ser única, deve ser uma sensação maravilhosa.
    Ótimo texto, parabéns e seja bem vindo ao Cosmic!!

    Curtir

    • Olá Julio!

      Exatamente!
      E quem sabe, até comparar com a emoção de, após 40 linhas de código BASIC, ver seu nome na tela mudando de cor e aparecendo em várias partes.

      Lembra? rss
      10 for x=1 to 10
      20 ….

      Valeu!

      Curtir

  9. Trabalho de gigante criar um emulador! Parabéns por não desistir e chegar até este excelente resultado!

    Curtir

  10. Muito bom Alan!

    Parabéns por realizar este sonho.
    Então é por isso que ao iniciarem o arcade PolePosition, as figuras apareciam sempre como um quebra-cabeça desmontado!

    Dúvida retro: Qual a relação entre Sprites e Tiles?

    Parabéns!

    Curtir

    • Grande Andrey,

      Valeu!

      Exatamente, os arcades geralmente possuem rotinas de autoteste que são executadas na sua inicialização. Vários deles de fato mostram os tiles nesse momento, quando provavelmente estão testando sua memória e processador de vídeo.

      A sua dúvida sobre os sprites é boa. Na redação do artigo eu até notei que não estava bem explicado, mas acabei não me estendendo mais sobre o assunto por achar que o texto já estava ficando longo.

      De forma geral os tiles podem ser usados para formar:

      – o background, que pode ter mais de uma camada, dependendo da plataforma;
      – sprites.

      O conceito de sprite é meio “elástico”, variando um pouco de acordo com o autor ou a plataforma. Mas acho que é seguro dizer que os sprites são os gráficos que são sobrepostos ao background do jogo, geralmente possuindo movimentação própria, controlada pelo jogador ou pelo computador.

      Na seguinte imagem você pode ver uma cena de um jogo de Master System _completamente aleatório_. Na metade esquerda temos os sprites habilitados. Na direita eles estão desabilitados:

      Mas ambos, background e sprites são formados a partir dos gráficos definidos pelos tiles.

      Uma curiosidade: acho que todo mundo já percebeu que em alguns jogos que possuem muitos sprites é possível notar que às vezes eles cintilam, piscando muito rápido, em momentos em que há muitos deles na tela.

      Isso porque os sprites são implementados fisicamente em hardware, tendo um limite no seu número simultâneo. Quando o limite é atingido, geralmente o sprite mais antigo deixa de ser exibido rapidamente, depois o segundo mais antigo e assim por diante. O Master System tem um limite de 64 sprites simultâneos na tela e 8 numa mesma linha.

      No próprio Double Dragon é possível ver isso acontecendo, quando muitos inimigos ficam alinhados. Também é bem comum em jogos de nave, onde há muitos tiros e inimigos simultâneos na tela.

      Em um emulador essa limitação pode ser evitada, simplesmente permitindo um número maior de sprites simultâneos, já que eles estão implementados em software. Trata-se de um caso clássico de fidelidade na emulação vs. “melhoria” nas limitações do hardware original. Uma outra melhoria possível é “overclockar” a CPU emulada, fazendo-a funcionar em uma frequência maior do que a do console físico. Isso pode eliminar slowdowns em jogos mais exigentes, por exemplo.

      Abraço!

      Curtir

  11. Oi pessoal.

    Fico muito satisfeito que vocês tenham gostado do artigo. A partir dos comentários foi possível perceber que vocês capturaram bem a essência do que eu quis passar. Realmente foi um processo relativamente longo, trabalhoso e… muito gratificante.

    E que bom que o texto não ficou maçante! :-)

    É muito bacana poder contribuir, ainda que de forma tímida, com o Cosmic Effect. Desde a minha primeira visita gostei muito do conteúdo e aproveito para estender os cumprimentos que já fiz ao Eric para todos os outros colaboradores e também aos leitores do site.

    Sobre disponibilizar o emulador vocês têm minha promessa de que, se algum dia eu terminar e emulação do som, coloco o executável aqui no Cosmic Effect em primeira mão. :-)

    Grande abraço!

    Curtir

    • Oi Turma!

      Sobre emulação eu tentei criar algo mas é bem maçante, vou ver se me animo para voltar a mexer com emulação de novo.
      Ô Eric meu retro amigo: estou curtindo usar o PS2 com pen drive aqui, já ouviu falar nisso?
      Terminei ontem o grandioso Thunder Force VI, sensacional, na minha TV de tubo CRT 29 polegadas, muito bom mesmo.

      Bem sei que não é hora para isso mas a emulação se eu soubesse não teria gastado tanto com games, mas jogar no console original vale cada minuto com seu hardware, sua mídia física vale mesmo.
      Sua materia ficou esplêndida sobre o Arisa, ou a Arisa, bacana mesmo.

      Que a gente sempre possa ser brindado com mais textos e trabalho de quem ama o que faz.

      Abraços amigos e amigas do Cosmic Cast

      Quero a minha camisa do Cosmic Effect Team

      fui

      Ulisses Sixty Eight

      Curtir

      • Fala Ulisses! Puxa, a camisa, hahaha! Já pensou, que honra não seria pra nós alguém usando por aí :D

        Sim sim, PS2 com Thunder Pro dá nisso, ISOs pela USB :)

        Abração!

        Curtir

  12. Cara, parabéns pelo feito hercúleo, muito bom mesmo.

    Acho que todos da área de TI que são gamers um dia sonharam em fazer um emulador. Eu estive lá também, mas meu foco sempre foi software e emular um hardware parecia tarefa um tanto ingrata, principalmente com a quantidade de bons emuladores já existentes. Fico realmente feliz por um emulador com grau tão avançado de sucesso foi feito por um brasileiro.

    Alguém se sentiu assistindo Matrix ao ler o post? Não teve como não fazer comparação quando você descreveu o ambiente de debug. Ver todos aqueles operadores trocarem de valor sem uma tela gráfica para ver o resultado me lembrou a hora que explicam para Neo que a Matrix é muito complexa para os computadores renderizarem o gráfico e eles simplesmente se acostumaram a ler o código.

    Curtir

    • Grande Dancovich,

      Valeu mesmo pelas gentis palavras!

      No meu caso às vezes acho meio frustrante lidar com o hardware fisicamente. Sou uma negação para fazer boas soldas, então já viu: os projetinhos de hardware sempre são sofridos, hehe. Quando fiz um adaptador de cartuchos de Master System para Mega Drive usando um esquemático que vi na internet foi uma confusão… e olha que é um lance simples. X-p

      Cara, a sua referência ao Matrix foi muito precisa, respeitando, é claro, as devidas proporções! :-) A coisa é por aí mesmo, e eu até acho que já sei qual seria a “loira” retratada no filme transladada para o universo de um emulador de Master System…

      A namorada do motorista da Ferrari, em OutRun! :-)

      Abração,

      Alan

      Curtir

  13. Foi disponibilizado o código-fonte ou pelo menos o binário do emulador?

    Curtir

    • Grande Yoz!

      Arriscando responder pelo Alan: pelo artigo, ele ressalta bastante a ideia de que fez o emulador como um desafio pessoal, para desenvolver suas habilidades de programador, acho.

      A gente sempre fica na curiosidade de emular por mais um emulador, mas como ele menciona, quando estava prestes a emular o som, engavetou o projeto pois já era suficiente até ali.

      Com emuladores do calibre de um Fusion por aí, como ele também ressalta no artigo, a comunidade já está bem servida mesmo!

      Claro que eu, assim como você e a turma toda fica na curiosidade de ver como se sairia seu jogo favorito de SMS no Arisa, hehehe…

      De qualquer maneira, como Danilo falou acima: “um feito hercúleo” escrever um emulador! ^_^

      Aproveito pra deixar os parabéns “formais” ao Alan! Ler o artigo foi uma viagem pela Matrix dos emuladores… you are the one :D

      Abração Yoz!

      Curtir

      • Cosmonal,

        Você foi absolutamente preciso na sua resposta, nada a acrescentar! :-)

        Agora, apesar de a analogia com Matrix capturar muito bem a essência da coisa, deixe disso de “the one”! :-) Sou nada mais que um “someone” apaixonado pelo mundo dos games! :-)

        Abração,

        Alan

        Curtir

  14. Alan,

    Que texto maravilhoso! Muito obrigado por compartilhar sua história e trabalhar para emular o videogame que marcou a minha infância (e, consequentemente, minha vida).

    Sua observação sobre a simetria do Phantasy Star foi excelente! Nos meus tenros 8 anos, jamais perceberia essa engenhosidade da programação nipônica.

    Curtir

    • Marcelo,

      Puxa, muito obrigado pelos elogios, que bacana mesmo que você gostou! É muito gratificante e recompensador receber um feedback como esse seu, trata-se de algo que certamente incentiva a gente.

      Quando você fala no fato do videogame ter marcado sua vida, isso ajuda a ilustrar um aspecto muito importante da emulação, que com certeza vale ser explorada com atenção: a preservação do legado histórico.

      Todo hardware tem uma vida útil e um dia falhará, não importando o quão bem ele seja mantido. Estudar soluções para conseguir uma emulação acurada dos mais variados sistemas tem uma importância fundamental: manter esse legado vivo e disponível para as futuras gerações. Algo que marcou a história de tantas pessoas ao redor do mundo (nós inclusos! :-) tem de ser devidamente preservado e acessível, pois trata-se de parte relevante da História (com “H” maiúsculo mesmo :-)

      A questão da simetria é realmente interessante, mas na época em que eu joguei Phantasy Star no console real eu também não cheguei a notar a inconsistência na iluminação não! :-) Isso só aconteceu bem depois, com mais maturidade…

      Um grande abraço,

      Alan

      Curtir

  15. Seu testo é ótimo, adorei ler esse artigo!
    Sou programador auto didata em Java, hoje estou tentando criar um cartucho de mega drive com sram e avr, por hobby, pena não tenho ninguem que more perto de mim para desenvolver junto.

    Curtir

  16. Ótimo texto Alan, meus parabéns!

    Mesmo fazendo parte do público que entenderia uma linguagem um pouco mais técnica sobre programação (sou formado em Ciências da Computação), gostei muito do seu texto. E alguns de seus comentários aqui são tão bons que poderiam ser um plus do texto.

    Acho que você poderia pensar na hipótese de, no futuro, disponibilizar o emulador para que uma comunidade de colaboradores, sob sua supervisão, o desenvolva. Isso, claro, caso pense em não prosseguir com o mesmo.

    Talvez então disponibilizar o código fonte do mesmo ou, melhor ainda, criar uma documentação que sirva de guia para quem quer começar a desenvolver emuladores, como as que foram criadas nos primórdios da tradução de games no Brasil e que possibilitaram, algum tempo depois, o aparecimento de toda uma comunidade de tradutores de ROMs.

    Sempre tive a suspeita, observando o comportamento de vários emuladores, de que a implementação do áudio seria a parte mais difícil do projeto de desenvolvimento de um emulador. Procede?

    Termino dizendo que sempre tive a sensação de que a criação de games seria o estado de arte do uso da programação. Por consequência, saber manipular a programação de um game é poder brincar de Deus neste mundo feito de BITs.

    Curtir

    • Opa mcs, valeu!

      Obrigado pelas sugestões sobre o emulador. Realmente deixar o código aberto pode ajudar de forma mais direta alguém que possa a vir a ter interesse no assunto.

      Entretanto, antes de poder tomar uma atitude como essa eu também teria que fazer uma limpeza no código. Apesar de ter feito um esforço ao longo do desenvolvimento de modo a deixá-lo claro, organizado e comentado, eu confesso que teria que dar uma melhorada em alguns aspectos, fortalecer ainda mais a documentação, remover métodos de teste, otimizar algumas coisas que eu já sei que podem ser otimizadas, etc… quem sabe um dia!

      Sobre a emulação do áudio ser a mais difícil, eu realmente não sei se afirmaria isso categoricamente, mas com certeza essa percepção não é absurda não. Pelo menos de minha parte, sempre tive mais contato e familiaridade com os aspectos gráficos da programação multimídia, o áudio sempre foi um lance mais secundário, tocar uma sample ali, fazer um panning, controlar volume, velocity, etc. Isso é meio fácil e direto, sobretudo usando bibliotecas.

      O lance é que num emulador o programador tem que, de fato, trabalhar com a síntese do áudio propriamente dita, e em tempo real. Estamos lidando com conceitos um tanto mais avançados e a questão da temporização é crucial, para que não haja “engasgos” no som. Outro aspecto interessante é que, pelo menos para mim, o áudio sintetizado a partir de um emulador, criado a partir de algoritmos “perfeitos” do ponto de vista formal, às vezes soa de forma bem diferente do que estava acostumado a ouvir no console real. Claro, tratam-se de circuitos reais com peculiaridades e limitações, creio que sobretudo na sua fase analógica.

      Realmente nos jogos podemos ver exercitadas várias disciplinas (computação gráfica, sônica, algoritmos dos mais variados tipos, inteligência artificial, artes plásticas, música, entre muitos outras), em todas as incursões que eu fiz nessa área, ainda que de forma amadora, pude realmente experimentar grande satisfação ao enfrentar e resolver os problemas que se apresentavam. Acho que no meu caso os jogos tiveram sim uma boa parcela de responsabilidade na escolha de curso superior.

      Muito obrigado pelo feedback, um abraço!

      Curtir

  17. deixa essa belezinha para download e o source também para estudos informação tem que ser compartilhada

    Curtir

  18. Oi Alan Freitas tudo bem!?
    Genial esse artigo que escreveu. Parabéns! Você conseguiu repassar uma informação complexa a pessoas que não detêm conhecimento na área de linguagem de programação.
    Gostaria de saber se posso usar essas informações para fazer um vídeo para um canal que criarei no youtube? Queria citar você o o desenvolvimento de seu emulador? Posso fazer isso? Você me dá essa permissão.
    Meu canal ainda não tem vídeos. Queria estreá-lo contando um pouco de como é desenvolver um emulador de vídeo game.

    Curtir

Deixe um comentário