/AppleII_Esp32

Simulador de Apple II em ESP32 (VGA, Som e Teclado)

Primary LanguageCGNU General Public License v2.0GPL-2.0

AppleII no ESP32 (saida de video VGA e som)


Apple II


É realmente incrivel o quanto o setor de embarcados evoluiu (e evolui), eu que entrei nessa area na época do surgimento do Apple II, que tive que aprender a programar o 6502 na unha e programava Z80 digitando o hex do código de maquina em um programador de eprom (somente quem é dessa época sabe do que to falando) acho impressionante como hoje podemos emular um 6502 e toda a engine de video de um Apple II dentro de um microcontrolador ESP32. Cheguei a duvidar quando, na época, me falaram que era possivel colocar todo o hardware de um Apple II dentro de um unico chip. (ainda não conhecia os FPGA´s na época)

Pois bem, eu, como amante nostalgico de Apple II e como programador, achei que seria interessante descobrir se já daria pra fazer isso em um ESP32. E acredito que tive sucesso nisso.

Ainda faltam alguns pormenores para resolver mas o principal foi feito, talvez com uma falha na paleta de cores e faltando alguns itens mas já é suficientemente ´jogável´.

Hoje como me falta tempo para dar continuidade e resolver esses pormenores resolvi disponibilizar o código fonte na sua totalidade para que outros continuem a labuta (ou usem o código como ferramenta de aprendizado).

Dentre esses pormenores, cito alguns:

  • Está emulando somente o Apple II (não emula seus 'descendentes').
  • Só funciona com o disco 1 (não reconhece disco 2 mas é razoavelmente facil resolver isso).
  • Só trabalha com a pagina 1 (Texto, baixa e alta resolução). Foi feito uma gambiarra para alguns jogos escreverem na pagina 1 como se fosse a pagina 2. (notei no jogo Rescue Raiders uma deficiencia nisso porque o sincronismo entre a varredura da memória e o video não estão corretos)
  • Não emula um joystick (somente Teclado).
  • Não acessa arquivos no SD Card (Esse Kit de ESP32 em especial aceita um SD Card, onde caberiam muitos discos de 1.44Mb).

Provavelmente faltem alguns outros 'pormenores' que eu não me atentei mas que não acredito que faça falta para quem quer apenas matar saudade do Apple II

Deixei no pacote alguns jogos clássicos, já com a ROMs convertidas (arquivo xxx.DSK) para um array de bytes (estilo C). (Nem sei se ainda existem direitos autorais sobre os jogos que deixei como exemplo mas como não estou vendendo nada e existem inumeros sites em que é possivel baixar essa ROMS, acredito que não tenha maior problema)

Para testa-las, basta retirar o comentário '//' ao lado dos #define do nome do jogo, no arquivo Esp32AppleII.ino (não esquecendo de deixar apenas um arquivo disponivel por compilação)


Alguns video funcionando:

Para testar outras ROMS é preciso converter o arquivo hex deles em array de constantes na sintaxe da linguagem C, existem inumeras formas de se fazer essa conversão, basta procurar no google mas usei essa esse site em especial, que converte já deixando praticamente no jeito certo:

https://notisrac.github.io/FileToCArray

Digamos então, por exemplo, que queremos converter o jogo Galaxian, cujo arquivo de disco eu baixei com o nome Galaxian(1980)(Starcraft).dsk

Depois bastaria clicar no botão 'save as file', nomear com extensão .h, adicionar ao projetos (como nos exemplos adicionados) e colocar o tamanho do array no código, como exemplificado abaixo:

de: const unsigned char Galaxian_1980_Starcraft_[] PROGMEM

para: const unsigned char Galaxian_1980_Starcraft_[143360] PROGMEM

Deixei como desafio descobrirem porque o jogo LodeRunner não funcionou, não lembro se ele precisa acessar um disco 2 ou se acessa algum banco de memória que não implementei no projeto, mas fica ai o desafio.

Os arquivos CPU.INO e DISK.INO reaproveitei de projetos de outros autores e adaptei para o ESP32, assim que identifica-los colocarei aqui os devidos créditos.


ESP32


Vamos falar um pouco do poderoso ESP32, lançado em 2016 sendo um sucessor do famoso ESP8266, é um microcontrolador com dois 'cores' que pode rodar a incriveis 240Mhz (incriveis mesmo, comparado com o 1Mhz do saudoso 6502), usei um core para emular o 6502 e o outro core para emular a parte de video e tratamento de teclado.

Esse device também tem Wifi e bluetooth embutidos (já imaginaram um AppleII acessando a internet?)

Usei nesse projeto um kit facilmente encontrado no mercado (com muita variação no preço) que já vem com o ESP32 e conexão para entrada de teclado e mouse PS2, conector para saida de som, conector para SD Card, conector para saida VGA e conector USB (para programação e debug serial, entre outros) (vide imagem abaixo)

Para a parte gráfica, usei a ótima biblioteca open-source FabGL(http://www.fabglib.org) para ESP32.

Arduino IDE

Para quem é amante da linha AppleII mas não tem familiaridade com dispositivos embarcados (microcontroladores), em especial a linha Expressif (ESP32), deixo abaixo a configuração básica para programação utilizando a gratuita Arduino IDE (https://www.arduino.cc/en/software).

Obs: Não vou me estender aqui como programar o ESP32 porque já existe muita informação na internet sobre como fazer isso.

Espero que esse Readme já seja suficiente para quem tenha um certo conhecimento ou desperte a curiosidade em muitos sobre programação do ESP32, sei que este é apenas 'mais um emulador' de Apple II e que, para windows, temos varios e de ótima qualidade e facilidade de uso, meu intuito foi mais estimular a prática e o conhecimento, espero que tenham gostado. boa sorte para todos.


Colaboração

Sou desenvolvedor autonomo então dependo dos meus trabalhos para tocar a vida (e as contas).

Se alguém achar que mereço uma cerveja (ou um cafezinho), meu pix e meu paypal é o email: fj_souza@hotmail.com

Se não achar ou não puder também não tem problema, usufrua e distribua conhecimentos.