# Integrantes

| Nome                            | Matrícula |
| ------------------------------- | --------- |
| Charles Manrique Serafim Morais | 190113596 | 
| Rodrigo de Andrade Lima Orlandi | 202017129 |

# Sumário

[1. Introdução](#1-introdução)

[2. Descrição do produto](#2-descrição-do-produto)

[3. Análise técnica do funcionamento](#3-análise-técnica-do-funcionamento)

[4. Proposta de reprodução com ESP32](#4-proposta-de-reprodução-com-esp32)

[5. Pesquisa bibliográfica e tecnológica](#5-pesquisa-bibliográfica-e-tecnológica)

[6. Comparativo com produtos similares](#6-comparativo-com-produtos-similares)

[Referências bibliográficas](#referências-bibliográficas)

# 1. Introdução

<p align="justify">&emsp;&emsp;
  O presente trabalho tem como objetivo apresentar um estudo teórico-exploratório sobre o console de games portátil Game Boy, produzido pela Nintendo. Foi feito um estudo sobre algumas versões do Game Boy, porém procurou-se focar na versão específica de lançamento em 1989. Neste documento, além de detalhar o produto investigado, apresentamos uma proposta de implementação de um emulador de Game Boy utilizando o ecossitema ESP32.
</p>

# 2. Descrição do produto

<p align="justify">&emsp;&emsp;
O Nintendo Game Boy é um console portátil desenvolvido pela Nintendo e lançado em 1989. Tem como público-alvo crianças, adolescentes, jogadores casuais e consumidores do mercado de entretenimento portátil. Seu objetivo principal é a execução de jogos eletrônicos em qualquer local, utilizando uma plataforma embarcada compacta alimentada por baterias.
</p>
<p align="justify">&emsp;&emsp;
Dentre suas principais funções podemos listar: execução de jogos armazenados em cartuchos, reprodução de áudio, exibição gráfica em tela LCD e a leitura de comandos do usuário através de botões.
</p>
<p align="justify">&emsp;&emsp;
O modelo que vamos focar é o DMG, o primeiro da linha, lançado em 1989. Ele possui as seguintes especificações:
</p>

<div align="center">
  <img src="./assets/figura1.png" alt="Especificações técnicas do Gameboy modelo DMG" width="50%">
  <figcaption>Tabela 1: Especificações técnicas do Gameboy modelo DMG. Fonte: How I made my own Game Boy with an ESP-32. Publicado pelo canal Omer Hasanov. 2025. 1 vídeo (11 min). Disponível em: <a href="https://www.youtube.com/watch?v=KWsbca9rGX0">https://www.youtube.com/watch?v=KWsbca9rGX0</a>. Acesso em: 9 jun. 2026.</figcaption>
</div><br/>

# 3. Análise técnica do funcionamento

<p align="justify">&emsp;&emsp;
Abaixo, na Tabela 1, apresentamos uma lista com os componentes do Game Boy.
</p>

<div style="justify-content: center; text-align: center">
  <div style="justify-content: center; display: flex">
    <table border="1" cellpadding="8" cellspacing="0" style="border-collapse: collapse; text-align: center;">
      <thead>
        <tr>
          <th>Elemento</th>
          <th>Tamanho (Virtual)</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>Memória - LH5264 WRAM</td>
          <td>8KB (8192B)</td>
        </tr>
        <tr>
          <td>Memória de Vídeo LH5264 VRAM</td>
          <td>8KB (8192B)</td>
        </tr>
        <tr>
          <td>Display e PPU - Picture Processing Unit 160×144, 60 Hz</td>
          <td>PPU - Processador</td>
        </tr>
        <tr>
          <td>Áudio - APU - Audio Processing Unit - 4 canais</td>
          <td>APU - Processador</td>
        </tr>
        <tr>
          <td>Amplificador de Áudio</td>
          <td>-</td>
        </tr>
        <tr>
          <td>Placa filha para entrada de fone de ouvido</td>
          <td>-</td>
        </tr>
        <tr>
          <td>Cartucho de Jogo - ROM</td>
          <td>32KB - 128KB (ou mais)</td>
        </tr>
        <tr>
          <td>Processador Sharp SM83 CPU (similar a um Z80)</td>
          <td>64KB (Espaço estendido quando lê cartucho)</td>
        </tr>
        <tr>
          <td>Port para conexão externa</td>
          <td>-</td>
        </tr>
        <tr>
          <td>Matriz do Joypad Botões Direcionais, A, B, Start, Select</td>
          <td>-</td>
        </tr>
      </tbody>
    </table>
  </div>
  <figcaption>Figura 1: Especificações técnicas do Gameboy modelo DMG. Fonte: How I made my own Game Boy with an ESP-32. Publicado pelo canal Omer Hasanov. 2025. 1 vídeo (11 min). Disponível em: <a href="https://www.youtube.com/watch?v=KWsbca9rGX0">https://www.youtube.com/watch?v=KWsbca9rGX0</a>. Acesso em: 9 jun. 2026.</figcaption>
</div>
<br>

<p align="justify">&emsp;&emsp;
Neste trabalho, apresentamos primeiramente a memória e depois os demais componentes individuais, visto que o mapeamento da memória interage com o controle de todos os componentes, sendo ela responsável por carregar tiles, objetos, conter a “bios” do console pela Boot ROM, carregar todos os dados do cartucho, controlar quais botões foram apertados e a saída de áudio, entre outros.
</p>

## Memória - LH5264 WRAM

<p align="justify">&emsp;&emsp;
A memória principal do Game Boy, como comentado anteriormente, é responsável por carregar dados para todas as partes do sistema. O mapeamento de memória em alto nível, como detalhado por Rylev [3], segue a seguinte estrutura:
</p>

- 0x0000 - 0x00FF: Boot Rom. Seção de código com a tela de Gameboy e para bootar o cartucho. Depois de bootar, ele se apaga para dar espaço ao código do jogo. Mais informações: Gameboy Bootstrap ROM [4]. 
- 0x0000 - 0x3FFF: Game ROM Bank 0. Aqui injeta o código do cartucho.
- 0x4000 - 0x7FFF: Game ROM Bank N. Outro chunk da ROM (código do jogo) se ela for grande. É trocada com o Bank 0 durante a execução.
- 0x8000 - 0x97FF: Tile RAM. Seção da memória dedicada para tiles, que vão ser os gráficos que serão mostrados na tela. Esses gráficos em específico são usados para as fases e os planos de fundo.
- 0x9800 - 0x9FFF: Background Map. Essa é a seção que efetivamente mapeia os tiles pra tela)
- 0xA000 - 0xBFFF: Cartridge RAM. Alguns cartuchos têm memória extra; se tiver, o sistema mapeia pra cá
- 0xC000 - 0xDFFF: Working RAM. Memória alocada que o Game Boy permite o jogo a usar
- 0xE000 - 0xFDFF: Echo RAM. Parte da memória que é exatamente igual a Working RAM, ecoando os dados. Uso desincentivado.
- 0xFE00 - 0xFE9F: OAM (Object Atribute Memory). Parte dos gráficos atribuída pra personagens, inimigos ou objetos, que têm capacidades a mais do que tiles.
- 0xFEA0 - 0xFEFF: Não utilizada
- 0xFF00 - 0xFF7F: Registradores I/O. Seção muita densa, utilizada pela tela e pelo sistema sonoro.
- 0xFF80 - 0xFFFE: High RAM Area. Usada normalmente por instruções LD, que apontam para esta parte da memória, e de vez em quando usado como stack, como o topo da Working RAM.
- 0xFFFF: Interrupt Enabled Register. O último byte da memória é usado como um handler de interrupções.

## Memória de Vídeo - LH5264 VRAM

<p align="justify">&emsp;&emsp;
A memória de vídeo é o mesmo modelo de chip que a memória. Ela é responsável principalmente por controlar o desenho das linhas que vão compor o display LCD. Os dados então são enviados para a Picture Processing Unit (PPU) do processador, que os envia para o display.
</p>

<p align="justify">&emsp;&emsp;
Para os tiles de plano de fundo e mesmo plano, ela carrega um bitmap de 256x256 pixels, os quais apenas serão demonstrados 160x144 no display. Para os objetos carregados a partir da memória, seu controle é definido pela VRAM para ser enviado à PPU.
</p>

<div align="center">
  <img src="./assets/figura2.jpg" alt="Esquemática do chip de memória de vídeo" width="30%">
  <figcaption>Figura 2: Esquemática do chip de memória de vídeo do Game Boy. Fonte: Gameboy Development Wiki: DMG Schematics. Disponível em: <a href="https://gbdev.gg8.se/wiki/articles/DMG_Schematics">https://gbdev.gg8.se/wiki/articles/DMG_Schematics</a>. Acesso em: 11 jun. 2026. Adaptado por Charles Serafim.</figcaption>
</div><br/>

## Display e PPU

<p align="justify">&emsp;&emsp;
A Picture Processing Unit (PPU) é um controlador LCD construído dentro do processador do Game Boy [3]. Ela trabalha em conjunto com o display LCD para fazer a interface entre o display e os dados carregados na VRAM, com o controle determinado pela memória principal.
</p>

<p align="justify">&emsp;&emsp;
O Display LCD é composto de uma tela de cristal líquido de 160x144 pixels com rolamento horizontal e vertical, podendo exibir até 4 tons de cinza no modelo DMG, que tem 40 x 32 bits de RAM embarcada para display de objetos na tela. Dados de tiles são carregados em um bitmap de 256x256 pixels, com a seção na memória principal de Background Map responsável por mapear os que estão atualmente aparecendo na tela [5].
</p>

<div align="center">
  <img src="./assets/figura4.png" alt="Esquemática do display do Game Boy" width="60%">
  <figcaption>Figura 4: Esquemática do display do Game Boy. Fonte: Gameboy Development Wiki: DMG Schematics. Disponível em: <a href="https://gbdev.gg8.se/wiki/articles/DMG_Schematics">https://gbdev.gg8.se/wiki/articles/DMG_Schematics</a>. Acesso em: 11 jun. 2026.</figcaption>
</div><br/>

## Sistema de Áudio - APU, Amplificador e Entrada para Fone de Ouvido

<p align="justify">&emsp;&emsp;
O sistema de áudio do Game Boy é controlado por 4 canais de som, responsáveis por realizar o output de sons com as seguintes características [5]:
</p>

- Som 1: Gera uma forma de onda retangular, com funções de varrer e envelopar; 
- Som 2: Gera uma forma de onda retangular, com função de envelopar;
- Som 3: Gera qualquer forma de onda da RAM de formas de onda; 
- Som 4: Gera ruído branco com função de envelopar.

<p align="justify">&emsp;&emsp;
Dentro da estrutura de áudio, ainda há um amplificador sonoro com controle de som variável, e entrada para fones de ouvido.
</p>

<div align="center">
  <img src="./assets/figura5.png" alt="Esquemática da APU, amplificador e entrada pra fone de ouvido do Game Boy" width="70%">
  <figcaption>Figura 5: Esquemática da APU, amplificador e entrada pra fone de ouvido do Game Boy. Fonte: Gameboy Development Wiki: DMG Schematics. Disponível em: <a href="https://gbdev.gg8.se/wiki/articles/DMG_Schematics">https://gbdev.gg8.se/wiki/articles/DMG_Schematics</a>. Acesso em: 11 jun. 2026. Adaptado por Rodrigo Orlandi.</figcaption>
</div><br/>

## Entrada para leitura de cartucho

<p align="justify">&emsp;&emsp;
Cartuchos de Game Boy contém 32 conexões eletrônicas para conectar aos pinos do socket de leitura do cartucho. As informações do jogo - texto, tiles, objetos, dados e parâmetros - são transferidas para a memória principal (WRAM).
</p>

<div align="center">
  <img src="./assets/figura6.jpg" alt="Exemplo de cartucho de Game Boy" width="50%">
  <figcaption>Figura 6: Exemplo de cartucho de Game Boy, ilustrando a conexão com os 32 pinos. Fonte: Rodrigo Orlandi.</figcaption>
</div><br/>

<div align="center">
  <img src="./assets/figura7.png" alt="Esquemática do socket de leitura de cartucho e conexão com CPU do Game Boy" width="70%">
  <figcaption>Figura 7: Esquemática do socket de leitura de cartucho e conexão com CPU do Game Boy. Fonte: Gameboy Development Wiki: DMG Schematics. Disponível em: <a href="https://gbdev.gg8.se/wiki/articles/DMG_Schematics">https://gbdev.gg8.se/wiki/articles/DMG_Schematics</a>. Acesso em: 11 jun. 2026. Adaptado por Rodrigo Orlandi.</figcaption>
</div><br/>

## Port para conexão externa

<p align="justify">&emsp;&emsp;
Uma das principais funcionalidades do Game Boy é conectar-se com outros consoles Game Boy através do Cabo Link. A partir desse cabo, jogadores poderiam transferir dados entre os consoles, permitindo jogar ao mesmo tempo, trocar itens, entre outros.
</p>

<p align="justify">&emsp;&emsp;
Ao detectar a presença de um cabo link, o Game Boy passa a funcionar em um esquema Master/Slave, que não será detalhado aqui pelo escopo do projeto. Para mais informações, acesse o manual de desenvolvimento do Game Boy [5].
</p>

<div align="center">
  <img src="./assets/figura8.png" alt="Esquemática do port para conexão externa" width="30%">
  <figcaption>Figura 8: Esquemática do port para conexão externa. Fonte: Gameboy Development Wiki: DMG Schematics. Disponível em: <a href="https://gbdev.gg8.se/wiki/articles/DMG_Schematics">https://gbdev.gg8.se/wiki/articles/DMG_Schematics</a>. Acesso em: 11 jun. 2026. Adaptado por Rodrigo Orlandi.</figcaption>
</div><br/>

## Dispositivos de Entrada - Matriz do Joypad

<p align="justify">&emsp;&emsp;
Os botões do console, A, B, Start, Select e quatro botões direcionais funcionam numa base pull-down; quando apertados, o sistema registra e envia para a CPU o botão apertado.
</p>

<div align="center">
  <img src="./assets/figura9.png" alt="Esquemática da matriz de botões e sua leitura no processador" width="60%">
  <figcaption>Figura 9: Esquemática da matriz de botões e sua leitura no processador. Fonte: Gameboy Development Wiki: DMG Schematics. Disponível em: <a href="https://gbdev.gg8.se/wiki/articles/DMG_Schematics">https://gbdev.gg8.se/wiki/articles/DMG_Schematics</a>. Acesso em: 11 jun. 2026. Adaptado por Rodrigo Orlandi.</figcaption>
</div><br/>

## Processador - Sharp SM83 CPU

<p align="justify">&emsp;&emsp;
Como vimos, o processador do Game Boy contém diversas funções. Além de conter a memória, a PPU, APU, leitura de cartucho, leitura de dados de conexão externa e interpretação da matriz de botões, ela também contém o funcionamento de um Clock, entre outros.
</p>

<p align="justify">&emsp;&emsp;
Essa arquitetura, descrita como System On a Chip (SOC), é um sistema integrado que inclui quase toda a funcionalidade do console [6].
</p>

<div align="center">
  <img src="./assets/figura10.png" alt="Esquemática do processador do Game Boy" width="40%">
  <figcaption>Figura 10: Esquemática do processador do Game Boy. Fonte: Gameboy Development Wiki: DMG Schematics. Disponível em: <a href="https://gbdev.gg8.se/wiki/articles/DMG_Schematics">https://gbdev.gg8.se/wiki/articles/DMG_Schematics</a>. Acesso em: 11 jun. 2026.</figcaption>
</div><br/>

<div align="center">
  <img src="./assets/figura11.png" alt="Esquemática simplificada do Core da CPU SM83" width="40%">
  <figcaption>Figura 11: Esquemática simplificada do Core da CPU SM83. Fonte: GB: Complete Technical Reference, Revisão 185. 2026. PDF online. Disponível em: <a href="https://gekkio.fi/files/gb-docs/gbctr.pdf">https://gekkio.fi/files/gb-docs/gbctr.pdf</a>. Acesso em: 11 jun. 2026.</figcaption>
</div><br/>

# 4. Proposta de reprodução com ESP32

<p align="justify">&emsp;&emsp;
A proposta consiste na reprodução das principais funcionalidades do Nintendo Game Boy utilizando a placa ESP32 e o framework ESP-IDF (Espressif IoT Development Framework).
</p>

<p align="justify">&emsp;&emsp;
O ESP32 possui um processador dual-core de até 240 MHz, memória SRAM interna e permite a implementação de sistemas embarcados relativamente complexos. Embora apresente esses recursos superiores ao processador Sharp utilizado pelo Game Boy original, a emulação exige a reprodução simultânea da CPU, do sistema gráfico, do gerenciamento de memória e dos dispositivos de entrada.
</p>

<p align="justify">&emsp;&emsp;
A principal limitação observada durante o estudo está relacionada à memória disponível no ESP32.
</p>

<p align="justify">&emsp;&emsp;
Durante a pesquisa, foi verificado algo interessante: a memória interna do chip ESP32 possui aproximadamente 512 KB. Dentro deste total, apenas aproximadamente 300 KB de memória permanecem disponíveis para uso, devido à inicialização do sistema e a reserva de memória para serviços internos. Entretanto, a maioria dos emuladores de Game Boy encontrados na pesquisa e em projetos de código aberto ocupam uma memória que varia entre 300 e 400 KB, o que representa um desafio significativo à proposta de implementação.
</p>

<div align="center">
  <img src="./assets/figura12.png" alt="Features" width="50%">
  <figcaption>Figura 12: Especificações técnicas da CPU de uma ESP32 Wroom 32. Fonte: <a href="https://documentation.espressif.com/esp32-wroom-32_datasheet_en.pdf">https://documentation.espressif.com/esp32-wroom-32_datasheet_en.pdf</a> [7].</figcaption>
</div><br/>

<div align="center">
  <img src="./assets/figura13.png" alt="Features" width="90%">
  <figcaption>Figura 13: Tamanhos aproximados dos emuladores de Game Boy cinoop[8], playkid[9] e picogb[10].</figcaption>
</div><br/>

<p align="justify">&emsp;&emsp;
Como solução para este desafio, surgiu a ideia de investigar as possibilidades de comprimir o Game Boy para rodar dentro de apenas 300 KB de memória, desenvolvendo uma versão otimizada e realizando alguns trade-offs, removendo alguns módulos do sistema.
</p>

<p align="justify">&emsp;&emsp;
Antes de tudo, é passível de reconhecer que os emuladores são escritos em linguagens diferentes que carregam implementações de bibliotecas diferentes, assim como suporte a várias versões, como no caso do Cinoop. É necessária uma otimização de manter apenas os arquivos estritamente necessários para a execução na ESP32.
</p>

<p align="justify">&emsp;&emsp;
O primeiro corte pensado é no processamento de áudio, que exige uso de recursos que aumentam o consumo de memória e processamento. Como o áudio não é essencial para a execução dos jogos para este projeto, sua remoção pode representar uma economia significativa de recursos.
</p>

<p align="justify">&emsp;&emsp;
Se o processamento de áudio e conexão ao speaker forem cortados, os dados de áudio que o jogo vier a produzir serão apenas colocados no espaço alocado na memória, na parte de controle I/O, sem os dados serem processados ou transferidos, cortando parte do processamento.
</p>

<p align="justify">&emsp;&emsp;
Outro possível corte seria a eliminação do suporte à leitura dinâmica de cartuchos. A ideia é eliminar a conexão a dispositivos externos para a leitura dos cartuchos, carregando as ROMs armazenadas na memória flash do do ESP32 e/ou carregando-as diretamente durante a inicialização do sistema.
</p>

<p align="justify">&emsp;&emsp;
Além disso, outra estratégia pode ser considerada: como o Game Boy original opera em aproximadamente 60 FPS (quadros por segundo), podemos fazer com que os dados enviados e manipulados pela memória de vídeo sejam modificados de tal forma que o máximo que o Game Boy rode seja algo em torno de 30 FPS. Ou seja, a velocidade do desenho da tela seria cortada pela metade, para que se possa ter mais folga no processamento e poupar espaço na memória. Essa redução na taxa de atualização gráfica não significa necessariamente uma alteração na velocidade de execução do jogo, apenas diminuiria a taxa de atualização do display, permitinho a liberação de recursos para a execução do emulador.
</p>

<p align="justify">&emsp;&emsp;
Com estes cortes, acreditamos ser possível rodar o restante do sistema completamente dentro da ESP32.
</p>

<p align="justify">&emsp;&emsp;
Desta forma, os principais desafios técnicos esperados são o gerenciamento eficiente da memória limitada do ESP32 e a otimização do sistema. Outros desafios podem ser também a sincronização entre os módulos e a manutenção de desempenho para execução em tempo real.
</p>

<p align="justify">&emsp;&emsp;
Apesar dessas limitações, os recursos computacionais do ESP32 indicam que a implementação desta versão de Game Boy é tecnicamente viável, constituindo um interessante estudo de sistemas embarcados.
</p>

# 5. Pesquisa bibliográfica e tecnológica

<p align="justify">&emsp;&emsp;
Para investigação da viabilidade do projeto, foram utilizadas referências nas documentações de especificações do Game Boy, bem como vídeos e artigos científicos, que podem ser consultados nas referências bibliográficas.
</p>

<p align="justify">&emsp;&emsp;
O console do Game Boy foi escolhido para o projeto por algumas características interessantes, conforme discutido por FINLAYSON (2017) [12]. Em seu artigo, onde o mesmo utiliza o console para o ensino de computação e sistemas embarcados, o autor destaca que, diferentemente de sistemas computacionais modernos, o desenvolvimento de programas para o Game Boy requer uma interação com o hardware mais direta. Como o console não possui sistema operacional, os programas interagem com o hardware diretamente e têm controle total sobre a memória do sistema.
</p>

<p align="justify">&emsp;&emsp;
Compreender esse nível baixo de abstração e o comportamento físico do console original foi o primeiro passo para subsidiar a escolha e a posterior modificação do software de emulação que será adotado. Para analisar a viabilidade de portar uma solução de emulação existente para a ESP32, o trabalho de Soler (2020) [13] auxiliará na compreensão prévia da arquitetura interna de um emulador, detalhando como o laço principal de execução gerencia o ciclo de instruções e o sincronismo em tempo real. Essa base teórica será crucial para a análise do código-fonte do emulador base que será escolhido para este projeto, permitindo identificar em quais pontos as rotinas de software originais precisarão ser alteradas para interagir com os periféricos físicos.
</p>

<p align="justify">&emsp;&emsp;
Complementarmente, a pesquisa desenvolvida por Axelzon et al. (2021) [14], que destrincha a emulação dividindo o sistema em componentes lógicos isolados, permitirá compreender o funcionamento fino do mapa de memória e dos registradores mapeados em I/O. Essa compreensão guiará as decisões técnicas do projeto, especialmente no que diz respeito ao redirecionamento dos sinais de entrada e saída. A meta é modificar o emulador existente para que ele deixe de operar apenas em ambiente virtual e passe a se comunicar diretamente com os dispositivos e componentes físicos originais do Game Boy que serão conectados à ESP32.
</p>

<p align="justify">&emsp;&emsp;
O cruzamento dessas pesquisas acadêmicas com os manuais técnicos do console permitiram prever alguns dos desafios de hardware impostos pela plataforma alvo. Embora a ESP32 possua uma frequência de clock elevada, portar um emulador exigirá gerenciar restrições severas de memória RAM em relação ao barramento de dados original e ao gerenciamento de paginação de memória (Memory Bank Controllers - MBC). Além disso, a adaptação do código para realizar a leitura dos botões físicos e enviar a varredura gráfica para os componentes do console exigirá uma otimização. Assim, as referências bibliográficas consultadas servirão como guias de engenharia reversa de software, fundamentando metodologicamente a proposta de adaptar com sucesso uma solução de emulação consolidada para o ambiente prático de sistemas embarcados.
</p>

# 6. Comparativo com produtos similares

## Sega Game Gear

<p align="justify">&emsp;&emsp;
O Sega Game Gear foi um console portátil de 8-bits lançado pela Sega em 1990 para competir diretamente com o Game Boy da Nintendo. Apresentava um design horizontal, teclado direcional e botões integrados nas laterais de uma tela LCD retroiluminada e colorida com resolução de 160x144 pixels. O Game Gear tinha um processador Zilog Z80, de 3,58 MHz, com arquitetura baseada no Master System, facilitando o porte de jogos. Apesar de sua superioridade técnica com tela colorida e iluminada, o Game Gear enfrentou forte concorrência devido ao seu alto consumo de energia (exigindo 6 pilhas AA para poucas horas de autonomia) e preço elevado em comparação ao Game Boy. A Figura a seguir mostra como é o console:
</p>

<div align="center">
  <img src="./assets/figura14.png" alt="Features" width="40%">
  <figcaption>Figura 14: Console portátil Sega Game Gear. Fonte: Wikipedia (2026).</figcaption>
</div><br/>

## Atari Lynx

<p align="justify">&emsp;&emsp;
O Atari Lynx foi um console portátil de 16-bits lançado pela Atari Computer em 1989, tornando-se o primeiro portátil do mundo a apresentar uma tela LCD colorida com retroiluminação. Apresentava um design robusto e ambidestro, emoldurando uma tela de 160x102 pixels. Era alimentado por um processador CMOS personalizado de 8-bits baseado no MOS 6502 de 4 MHz, em conjunto com um coprocessador de codinome "Suzy" de 16-bits responsável por gráficos e aceleração de sprites. Incluía uma interface de botões de ação duplicados para versatilidade de comandos, além de suporte para rede local (ComLynx) para conectar múltiplos aparelhos. Embora o Lynx ostentasse recursos avançados como distorção de sprites e zoom por hardware muito superiores ao processador do Game Boy, seu tamanho avantajado, alto custo de fabricação e baixa autonomia de bateria limitaram seu sucesso comercial. A Figura a seguir mostra como é o console:
</p>

<div align="center">
  <img src="./assets/figura15.png" alt="Features" width="60%">
  <figcaption>Figura 15: Console portátil Atari Lynx. Fonte: Wikipedia (2026).</figcaption>
</div><br/>

## Bandai Wonderswan

<p align="justify">&emsp;&emsp;
O Bandai WonderSwan foi um console portátil de 16-bits lançado pela Bandai em 1999 no mercado japonês, projetado por Gunpei Yokoi, o próprio criador do Game Boy original após sua saída da Nintendo. Apresentava um design compacto e assimétrico inovador, com múltiplos conjuntos de botões direcionais dispostos de forma a permitir que o console fosse jogado tanto na orientação horizontal quanto na vertical, dependendo do estilo do jogo, exibindo uma tela FSTN refletiva monocromática de 224x144 pixels. O WonderSwan era alimentado por um processador de 16-bits NEC V30MZ operando a 3,072 MHz, compatível com a arquitetura Intel 80186. O console incluía uma interface de botões modular para controle e uma porta de expansão lateral para cartuchos e acessórios. Lançado para rivalizar tardiamente com o Game Boy, o WonderSwan se destacou pela extrema eficiência energética, funcionando por até 40 horas com apenas uma única pilha AA, embora sua distribuição tenha ficado restrita predominantemente ao Japão. A Figura a seguir mostra como é o console portátil:
</p>

<div align="center">
  <img src="./assets/figura16.png" alt="Features" width="40%">
  <figcaption>Figura 16: Console portátil Bandai Wonderswan. Fonte: Wikipedia (2026).</figcaption>
</div><br/>

## NEC TurboExpress

<p align="justify">&emsp;&emsp;
O TurboExpress foi um console portátil de 16-bits lançado pela NEC em 1990 com o objetivo de oferecer a tecnologia de um console de mesa na palma da mão. O dispositivo apresentava um design vertical robusto, com um direcional e botões dispostos abaixo de uma avançada tela de LCD colorida de matriz ativa com resolução de 400x270 pixels, uma especificação técnica impressionante para a época. O TurboExpress era alimentado por um processador Hudson Soft HuC6280 de 8-bits operando a 7,16 MHz, auxiliado por um chip gráfico duplo de 16-bits, o que permitia rodar exatamente os mesmos cartuchos (HuCards) do console de mesa TurboGrafx-16. O portátil incluía uma interface de botões tradicionais e interruptores de fogo rápido para comandos, além de uma porta de expansão para sintonizador de TV e cabo de ligação para dois jogadores. Apesar de ser um colosso técnico infinitamente superior ao Game Boy monocromático, o TurboExpress falhou em ganhar tração no mercado devido ao seu preço extremamente proibitivo, problemas crônicos de confiabilidade em seus capacitores de áudio e vídeo, e um consumo de energia que esgotava 6 pilhas AA em menos de três horas. A Figura a seguir mostra como é o console portátil.
</p>

<div align="center">
  <img src="./assets/figura17.png" alt="Features" width="40%">
  <figcaption>Figura 17: Console portátil NEC TurboExpress. Fonte: Wikipedia (2026).</figcaption>
</div><br/>

## SNK Neo Geo Pocket

<p align="justify">&emsp;&emsp;
O Neo Geo Pocket foi um console portátil de 16-bits lançado pela SNK em 1998 para competir com a hegemonia da Nintendo no mercado de sistemas de bolso. O dispositivo apresentava um design horizontal compacto e ergonômico, destacando-se pela inclusão de um joystick analógico do tipo microswitch altamente preciso no lugar do tradicional direcional em cruz, além de uma tela LCD reflexiva monocromática com resolução de 256x256 pixels. O Neo Geo Pocket era alimentado por um processador principal Toshiba TLCS-900H de 16-bits operando a 6,14 MHz, acompanhado por um coprocessador de áudio Zilog Z80 de 8-bits. O console incluía uma interface de botões de comandos otimizada para jogos de luta, bem como uma porta de expansão para conexão com o console de mesa Sega Dreamcast e cabos de link. Concebido para atacar diretamente o Game Boy, o portátil oferecia uma excelente autonomia de até 14 horas com apenas duas pilhas AAA, mas sua vida útil no mercado de telas monocromáticas foi encurtada drasticamente, forçando a SNK a lançar uma versão colorida apenas um ano depois para tentar conter o estrondoso fenômeno do Game Boy Color. A Figura a seguir mostra como é o console:
</p>

<div align="center">
  <img src="./assets/figura18.png" alt="Features" width="40%">
  <figcaption>Figura 18: Console portátil SNK Neo Geo Pocket. Fonte: Wikipedia (2026).</figcaption>
</div><br/>

## Comparação das especificações técnicas

<p align="justify">&emsp;&emsp;
Abaixo, na Tabela 2, pode-se conferir as especificações dos diferentes consoles alternativos e concorrentes ao Nintendo Game Boy em comparação com as especificações do mesmo.
</p>

<div align="center">
  <img src="./assets/tabela2.png" alt="Features" width="80%">
  <figcaption>Tabela 2: Comparativo de especificações técnicas de consoles portáteis.</figcaption>
</div><br/>

# Referências bibliográficas


[1] HASANOV, Omer. **How I made my own Game Boy with an ESP-32**. YouTube, 24 abr. 2025. Disponível em: <https://youtu.be/KWsbca9rGX0?si=TGv2_tlT_JtDaQAt>. Acesso em: 11 jun. 2026.

[2] GBDEV. **DMG Schematics**. Disponível em: <https://gbdev.gg8.se/wiki/articles/DMG_Schematics>. Acesso em: 11 jun. 2026.

[3] Rylev. **DMG-01: How to Emulate a Game Boy**. Disponível em: <https://rylev.github.io/DMG-01/public/book/>. Acesso em: 11 jun. 2026.

[4] GBDEV. **Gameboy Bootstrap ROM**. Disponível em: <https://gbdev.gg8.se/wiki/articles/Gameboy_Bootstrap_ROM>. Acesso em: 11 jun. 2026.

[5] NINTENDO. **Gameboy Development Manual**. Versão 1.1. [S. l.]: Nintendo, 3 dez. 1999. Disponível em: <https://archive.org/details/GameBoyProgManVer1.1/page/n7/mode/2up>. Acesso em: 11 jun. 2026.

[6] GEKKIO. **GB: Complete Technical Reference**. Rev. 185. [S. l.]: gekkio, 10 jun. 2026. Disponível em: <https://gekkio.fi/files/gb-docs/gbctr.pdf>. Acesso em: 11 jun. 2026.

[7] ESPRESSIF SYSTEMS. **ESP32-WROOM-32 Datasheet**. Disponível em: <https://documentation.espressif.com/esp32-wroom-32_datasheet_en.pdf>. Acesso em: 11 jun. 2026.

[8] CTURT. **Cinoop**. GitHub, 2015. Disponível em: <https://github.com/CTurt/Cinoop/>. Acesso em: 11 jun. 2026.

[9] LANGURMONKEY. **playkid**. Codeberg, 2026. Disponível em: <https://codeberg.org/langurmonkey/playkid/src/>. Acesso em: 11 jun. 2026.

[10] SONOSOOS. **PicoGB**. GitHub, 2026. Disponível em: <https://github.com/SonoSooS/PicoGB>. Acesso em: 11 jun. 2026.

[11] Electronoobs. **ESP32 Gaming Console - Homemade Emulator Less Than 20$**. YouTube, 15 jan. 2023. Disponível em: <https://youtu.be/oT2H8a1SB2k?si=I2nWjhzYmwg5gxZS>. Acesso em: 11 jun. 2026.

[12] FINLAYSON, Ian. Using the Game Boy Advance to teach computer systems and architecture. In: MEINKE, John (ed.). **Journal of Computing Sciences in Colleges**, [S. l.], v. 32, n. 3, p. 78-84, 1 jan. 2017. Disponível em: <https://dl.acm.org/doi/abs/10.5555/3015220.3015244>. Acesso em: 11 jun. 2026.

[13] SOLER, David. **DraconicGB**: Creating a Game Boy Emulator. Orientadores: Bartomeu Grau, Gisela Vaquero Juanola, Joan Arnedo Moreno. 2020. Trabalho de Conclusão de Curso (Grau d'Enginyeria Informàtica) – Àrea de Videojocs, [S. l.], 2020. Disponível em: <https://openaccess.uoc.edu/server/api/core/bitstreams/0c7f22b3-c2a9-4d61-a19e-22400df35020/content>. Acesso em: 11 jun. 2026.

[14] AXELZON, Algot et al. **Game Boy Emulation**. 2021. Bacharelado (Kandidatuppsatser) – Göteborgs universitet, Gotemburgo, 2021. Disponível em: <http://hdl.handle.net/2077/69341>. Acesso em: 11 jun. 2026.