# Integrantes

Nome|Matrícula|
-|-|
Nilvan Peres Costa | 170122468| 
João Vítor Motta Souto Maior | 200020927
Gabriel de Souza Fonseca Ribeiro | 190087439 |

# Sumário

[Introdução](#introdução)

[Detalhamento das características](#detalhamento-das-características)
- [Unidade de processamento](#unidade-de-processamento)
- [Memória](#memória)
- [Sistema Operacional](#sistema-operacional)
- [Interfaces de Comunicação com fio](#interface-de-comunicação-com-fio)
- [Unidades de Entrada/Saída (I/O)](#unidades-de-entradasaída-io)
- [Fonte de Energia e Sistema de Alimentação](#fonte-de-energia-e-sistema-de-alimentação)
- [Firmware e Atualizações](#firmware-e-atualizações)
- [Armazenamento Externo](#armazenamento-externo)
- [Unidade de Proteção e Segurança](#unidade-de-proteção-e-seguranca)
- [Interface com o usuário](#interface-com-o-usuário)

[Artigos Acadêmicos Relacionados](#artigos-acadêmicos-relacionados)

[Produtos relacionados](#produtos-relacionados)
  - [ZX Spectrum](#zx-spectrum)
  - [T1-81](#ti-81)
  - [Osborne 1](#osborne-1)
  - [TRS-80 Model 100](#trs-80-model-100)
  - [Intel SDK-80](#intel-sdk-80)

[Prrincipais rivais](#principais-rivais)
  - [Sega Game Gear](#sega-game-gear)
  - [Atari Lynx](#atari-lynx)
  - [NEC TurboExpress](#nec-turboexpress)
  - [Atari Lynx 2](#atari-lynx-2)
  - [Watara Supervision](#watara-supervision)

[Conclusão](#conclusão)

[Referências](#referências)


# Introdução

<p align="justify">&emsp;&emsp;
    O Game Boy é um console portátil desenvolvido e fabricado pela Nintendo, lançado em 1989. Seu grande diferencial foi a capacidade de aceitar jogos variados através da troca de cartuchos, o que possibilitou uma vasta biblioteca de títulos <sup><a href="#ref1">[1]</a></sup>. Este console de 8 bits foi o segundo desenvolvido pela Nintendo, apresentando uma tela de matriz de pontos verdes com contraste ajustável, cinco botões de controle, dois botões de ação e um único alto-falante com volume ajustável <sup><a href="#ref2">[2]</a></sup>. Além disso, o Game Boy oferecia uma longa duração de bateria e portabilidade, tornando-o extremamente popular entre os jogadores de todas as idades.
</p>

<p align="justify">&emsp;&emsp;
    O console obteve mais de cem milhões de unidades vendidas (contando com toda suas versões), destacando-se no mercado devido à sua autonomia de bateria, que durava entre dez a quinze horas com apenas quatro pilhas AA. Seu custo-benefício e vasta biblioteca de jogos foram superiores em comparação aos concorrentes da época, como o Atari Lynx e o Sega Game Gear <a href="#jain2004">(JAIN; GADRE, 2004)</a>. Na <a href="#fig1">Figura 1</a>, podemos ver as dimensões e o peso do dispositivo, que possuía uma resolução de 160 x 144 pixels.
</p>

<div style="text-align: center;">
  <img src="./assets/GameBoySpecs.png" alt="GameBoy Specifications">
  <figcaption>Figura 1: Dimensões e peso do Game Boy. Fonte: <a href="https://www.dimensions.com/element/game-boy">Dimensions.com</a></figcaption>
</div>

<p align="justify">&emsp;&emsp; Além disso, é essencial destacar as principais características do Game Boy: </p> 

<ul> 
    <li align="justify">Portabilidade: Como mostrado na Figura 1, o Game Boy foi projetado para ser compacto e leve, permitindo que os usuários o levassem facilmente para qualquer lugar.</li> 
    <li align="justify">Jogabilidade: Oferece a possibilidade de jogar uma variedade de jogos de diferentes gêneros, desde quebra-cabeças até aventuras, proporcionando uma experiência diversificada.</li> 
    <li align="justify">Interação Social: Os jogadores podiam se conectar e jogar com outros consoles Game Boy (até quatro jogadores) por meio do cabo "Game Boy Link", que permitia a funcionalidade multiplayer em alguns jogos, utilizando comunicação serial <sup><a href="#ref3">[3]</a></sup>.
    </li> 
</ul>


<div style="text-align: center;">
  <img src="./assets/Gameboy1.png" alt="GameBoy imamge" width="500px">
  <figcaption>Figura 1.1: Imagem do Game Boy. Fonte: <a href="https://upload.wikimedia.org/wikipedia/commons/thumb/f/f4/Game-Boy-FL.jpg/1200px-Game-Boy-FL.jpg">wikimedia.com</a></figcaption>
</div>


# Detalhamento das características

## Unidade de processamento

<p align="justify">&emsp;&emsp; O Game Boy utiliza um sistema em um chip (System on a Chip - SoC), no qual componentes como CPU, GPU, memória, controladores de entrada e saída, entre outros, são integrados em um único chip, em vez de serem distribuídos em uma placa-mãe. Essa abordagem é uma estratégia eficaz para reduzir o consumo de energia e otimizar o desempenho do hardware. O SoC do Game Boy também conta com 8 KB de memória RAM principal e 8 KB de memória RAM dedicada para vídeo.
</p>

<div style="text-align: center;">
  <img src="./assets/SoC.png" alt="GameBoy Mainboard" width="650px">
  <figcaption>Figura 2: Mainboard do GameBoy. Fonte: <a href="https://gbhwdb.gekkio.fi/static/dmg/G01009132_03_mainboard_front.jpg">gekkio</a></figcaption>
</div>

### Clock do Sistema

<p align="justify">&emsp;&emsp; O clock do sistema do Game Boy é gerado por um oscilador baseado em um cristal de quartzo externo. Esse oscilador utiliza dois pinos, XI (entrada) e XO (saída), que, em conjunto com alguns componentes externos, formam um <a href="https://en.wikipedia.org/wiki/Pierce_oscillator">oscilador de Pierce</a>. Essa configuração é eficiente e comum em sistemas embarcados devido à sua estabilidade e precisão.
</p>

> No DMG-CPU, o circuito oscilador do sistema utiliza um cristal de 
> quartzo externo com uma frequência nominal de **4,194304 MHz** para 
> formar um circuito oscilador de Pierce. Essa frequência é considerada a 
> frequência padrão de um Game Boy.

(JAVANAINEN, 2024, p. 13)

### Nucelo do CPU

<p align="justify">&emsp;&emsp; O núcleo do SoC do Game Boy possui um processador customizado desenvolvido pela Sharp, sem um nome oficial específico. No entanto, com base em antigas documentações da Sharp, é possível identificar esse processador é  SM83 ou algo semelhante. O SM83 é um núcleo de CPU customizado também criado pela Sharp e utilizado em diversos Circuitos Integrados de Aplicação Específica (ASICs) nas décadas de 1980 e 1990.<sup><a href="#Joonas">[5]</a></sup>
</p>

<p align="justify">&emsp;&emsp;
O SM83 é um núcleo de CPU de 8 bits com um barramento de endereços de 16 bits. A Arquitetura do Conjunto de Instruções (ISA) do SM83 é baseada tanto no <a href="https://en.wikipedia.org/wiki/Zilog_Z80">Zilog Z80</a> quanto no <a href="https://en.wikipedia.org/wiki/Intel_8080">Intel 8080</a> que são processadores de 8 bits populares da época.
</p>

<p align="justify">&emsp;&emsp;
A figura 3 mostra como o nucleo de CPU interage com o resto do SoC, utilizando sinais de interreupção, um barramento (bus) de dados bidirecional e um barramento de endereço de 16 bits controlado pelo nucleo.
</p>

<div style="text-align: center;">
  <img src="./assets/SM83Arquitetura.png" alt="Arquitetura do SM83" width="400px">
  <figcaption>Figura 3: Arquitetura simplificada do nucleo de CPU SM83. Fonte: <a href="https://gekkio.fi/files/gb-docs/gbctr.pdf">gekkio</a></figcaption>
</div>

<p align="justify">&emsp;&emsp;
A seguir estão os pincipais subsistemas do nucleo descritas por <a href="#Joonas">(Joonas, 2024)</a>:
</p>

### Unidade de Controle

<p align="justify">&emsp;&emsp; A unidade de controle decodifica as instruções executadas e gera sinais de controle para o restante do núcleo da CPU. Ela também é responsável por verificar e despachar interrupções.
</p>

### Banco de Registradores

<p align="justify">&emsp;&emsp; O banco de registradores mantém a maior parte do estado da CPU dentro dos registradores. Ele contém: O Contador de Programa (Program Counter - PC) de 16 bits, O Ponteiro de Pilha (Stack Pointer - SP) de 16 bits, O Acumulador (Accumulator - A) de 8 bits, O registrador de Flags (F), Pares de registradores de uso geral consistindo em duas metades de 8 bits, como BC, DE, HL e os registradores de propósito especial de 8 bits como o Registrador de Instruções (Instruction Register - IR) e o Enable de Interrupção (Interrupt Enable - IE).
</p>

### ALU

<p align="justify">&emsp;&emsp; A Unidade Lógica e Aritmética (Arithmetic Logic Unit - ALU) de 8 bits possui duas portas de entrada de 8 bits e é capaz de realizar vários cálculos matematicos. A ALU envia seu resultado para o banco de registradores ou para o barramento de dados da CPU.
</p>

### IDU

<p align="justify">&emsp;&emsp; Uma Unidade de Incremento/Decremento (Increment/Decrement Unit - IDU) dedicada de 16 bits é capaz de realizar apenas operações simples de incremento/decremento no valor do barramento de endereços de 16 bits, mas essas operações podem ser realizadas de forma independente da ALU, melhorando o desempenho máximo do núcleo da CPU. O IDU sempre envia seu resultado de volta ao banco de registradores, onde ele pode ser gravado em um par de registradores ou em um registrador de 16 bits.
</p>

## Memória

<p align="justify">&emsp;&emsp; O GameBoy classic possui cerca de 8KB de RAM e 8KB de VRAM, além de 127 bytes de HIGH RAM <sup><a href="#ref3">[3]</a></sup>.  De acordo com <a href="#bartolomeu2020">BARTOLOMEU, 2020</a> a memória RAM de um GameBoy é dividido em várias regiões:</p>

<ul>
    <li><b>Cartdrige ROM:</b> Memória de leitura do cartucho é a parte do cartucho onde o programa principal do jogo está armazenado. Essa região é dividida em várias sub-regiões, organizadas para facilitar o acesso aos dados pelo CPU. Alguns cartuchos possuem um chip especial que permite realizar o chamado "bank switching" (troca de bancos de memória). Esse mecanismo possibilita acessar diferentes partes da memória do cartucho, expandindo a quantidade de dados que o cartucho pode conter, mesmo com um espaço físico limitado. É uma técnica usada para armazenar jogos maiores ou mais complexos.</li>
    <li><b>Cartdrie Header:</b> Cabeçalho do cartucho é uma seção da memória do jogo que armazena informações importantes sobre ele. Nesse cabeçalho, são incluídos dados como o nome do jogo, o nome do criador ou desenvolvedor, e outras informações úteis, como o formato do jogo, versão, e, em alguns casos, detalhes técnicos necessários para que o console ou sistema reconheça e carregue o jogo corretamente.</li>
    <li><b>Graphics RAM:</b> Também chamada de <b>VRAM</b> (Video RAM), é um tipo de memória usada para armazenar os dados necessários para criar as imagens que aparecem na tela. Esses dados são processados pelo <b>PPU</b> (Picture Processing Unit), que é responsável por organizar e exibir as diferentes camadas de gráficos no monitor.</li>
    <li><b>ERAM:</b> É uma pequena quantidade de memória que pode ser escrita e está presente em alguns cartuchos de jogo. Essa memória é acessada por meio de controladores chamados <b>Memory Bank Controllers</b> (controladores de bancos de memória do cartucho). A ERAM é usada para armazenar dados temporários, como progresso do jogo ou informações necessárias para o funcionamento do jogo.</li>
    <li><b>Memory-mapped I/O:</b> Refere-se a um conjunto de valores de controle que permitem que os programas do jogo interajam com o hardware do console. Por exemplo, esses valores são usados para acessar funções de gráficos, som e controle de entrada, como botões e comandos do jogador.</li>
    <li><b>Working RAM:</b> É a memória interna de 8KB disponível dentro do console, que o CPU utiliza para executar cálculos, armazenar dados temporários e processar tarefas necessárias ao funcionamento do jogo.</li>
    <li><b>Zero-page RAM:</b> É uma área de velocidade com apenas 128 bytes de memória. A mesma é usada para comunicação direta e prioriatária entre o CPU e o hardware do Gameboy, permitindo que certas operações sejam realizadas com maior eficiência.</li>
</ul>

<p align="justify">&emsp;&emsp; Na <a href="#fig4">Figura 4</a>, mostra as características da arquitetura GameBoy extendida:
</p>


<div style="text-align: center;">
  <img src="./assets/GameBoyClassicRamArchitecture.png" alt="GameBoy Specifications">
  <figcaption>Figura 4: Arquitetura de memória do DMG (Game Boy original). Fonte: <a href="https://www.copetti.org/writings/consoles/game-boy/#bib:cpu-nintendo">Copetti.org</a></figcaption>
</div>

<p align="justify">&emsp;&emsp; É importante ressaltar que, nos dias atuais, os computadores de 32 bits podem endereçar até 4GB de memória. No entanto, na década de 90, a arquitetura do NES conseguia endereçar apenas 64 KB de espaço, grande parte consumida pelo mapeamento do hardware na memória. Isso levantava uma questão: como desenvolver jogos que ultrapassassem esse limite demasiadamente restrito ?
</p>

<p align="justify">&emsp;&emsp;A solução para esse desafio veio com o uso de um recurso chamado mapper. Esse componente, integrado ao cartucho, ampliava as possibilidades da memória do console por meio de uma técnica conhecida como <b>bank switching</b>. Com esse "hack", a memória era dividida em blocos (banks), e o mapper controlava a troca entre esses blocos, permitindo que jogos maiores fossem carregados de forma eficiente. Embora tenha sido originalmente projetada para o NES, essa abordagem foi mantida no Game Boy, demonstrando sua eficácia em gerenciar recursos limitados. A <a href="#fig5">Figura 5</a> mostra o mapeamento de memória do CPU no NES.</p>

<div style="text-align: center;">
  <img id="fig5" src="./assets/MemoryMAP.jpg" alt="CPU Memory Map" width="400px">
  <figcaption>Figura 5: Mapeamento de memória do CPU do NES. Fonte: <a href="https://archive.nesdev.org/NESDoc.pdf">NesDEV.org</a></figcaption>
</div>

## Sistema Operacional

<p align="justify">&emsp;&emsp; O GameBoy não tem um sistema operacional como conhecemos de computadores modernos, ao inves disso ele tem um pequeno boot ROM de inicialização antes de ceder o controle para o cartucho.
</p>

### Boot ROM

<p align="justify">&emsp;&emsp; De acordo com <a href="#Joonas">(Joonas, 2024)</a> o SoC do GameBoy inclui um boot ROM,  que pode ser mapeada para uma área de memória específica. Enquanto está mapeada, todas as leituras dessa área são tratadas pela ROM de inicialização em vez do cartucho externo, e todas as escritas nessa área são ignoradas e não podem ser vistas pelo hardware externo (por exemplo, o MBC do cartucho). O boot ROM é responsavel por mostrar a logo incial e verificar se há um cartucho valido inserido, depois ele se desmapeia antes da inicialização do ROM do cartucho<sup><a href="#Joonas">[5]</a></sup>
</p>


><b>O que é um ROM?</b><br/>
> ROM significa Read Only Memory, é uma parte da memória não volatil do computador utilizado apenas para leitura de dados. Os dados na ROM são gravados durante a fabricação e não podem ser alterados. É usada para armazenar informações que não devem ser alteradas ou apagadas, como firmware e instruções básicas de inicialização.


## Interface de Comunicação com fio

<p align="justify">&emsp;&emsp; O Link Cable do Game Boy é um acessório que permite a conexão física entre dois ou mais consoles Game Boy para jogos multiplayer ou troca de dados.
</p>

### Comunicação via Link Cable do Game Boy  

<p align="justify">&emsp;&emsp; O <b>link cable</b> do Game Boy utiliza um sinal de <b>clock</b> para determinar a taxa de transferência dos 8 bits armazenados no registro <b>SB</b> (FF01). A comunicação requer que um dos dispositivos forneça o clock interno, enquanto o outro utiliza o clock externo.  
</p>

---

#### **Clock Interno**  

<p align="justify">&emsp;&emsp; No modo padrão (não-CGB), o Game Boy fornece um clock interno de <b>8192Hz</b>, permitindo a transferência de aproximadamente <b>1 KB/s</b>. No <b>modo CGB</b>, a taxa de clock depende do <b>bit 1 do registro SC</b> e do uso do <b>modo de velocidade dupla (Double Speed Mode)</b>:  
</p>

| Frequência   | Taxa de Transferência | Configuração                 |
|--------------|------------------------|-----------------------------|
| **8192Hz**   | 1 KB/s                | Bit 1 limpo, Velocidade Normal |
| **16384Hz**  | 2 KB/s                | Bit 1 limpo, Velocidade Dupla |
| **262144Hz** | 32 KB/s               | Bit 1 ativo, Velocidade Normal |
| **524288Hz** | 64 KB/s               | Bit 1 ativo, Velocidade Dupla |

---

#### **Clock Externo**  
<p align="justify">&emsp;&emsp; O clock externo é normalmente fornecido por outro Game Boy, mas pode ser gerado por um computador (ex.: porta paralela de um PC).  
</p>

- O Game Boy reconhece clocks externos de até **500 KHz**.  
- Não há limite mínimo de frequência; o console pode esperar indefinidamente pela chegada do próximo bit.  
- O intervalo entre os pulsos não precisa ser regular.  

---

#### **Timeouts**  
<p align="justify">&emsp;&emsp; Se o clock externo não for recebido (por exemplo, se o outro Game Boy estiver desligado ou desconectado), a transferência não será concluída.
</p>
  
- É recomendado implementar um **contador de timeout** para cancelar a comunicação caso não haja resposta dentro de um intervalo definido.  

---

#### **Atrasos e Sincronização**  
- O Game Boy que usa clock interno deve adicionar pequenos **atrasos entre transferências** para garantir que o outro dispositivo esteja preparado para a próxima operação.  
- Alternativamente, os dois Game Boys podem alternar entre **clock interno e externo** a cada byte transferido para garantir a sincronização.  

---

#### **Início e Conclusão da Transferência**  
- A transferência é iniciada ativando o **Transfer Start Flag**. Esse bit é automaticamente zerado quando a transferência é concluída.  
- É possível verificar se a transferência está ativa lendo este bit.  

---

#### **Interrupção Serial (INT 58)**  
- Quando a transferência é concluída (após enviar/receber 8 bits), uma interrupção é acionada ao definir o **bit 3 do registro IF (FF0F)**.  
- Se a interrupção estiver habilitada, o vetor de interrupção **0058** será executado.  

---

<p align="justify">&emsp;&emsp; Essa explicação detalha como o Game Boy gerencia a comunicação via link cable, garantindo sincronização e flexibilidade para diferentes aplicações(<a href="#linkCable"> Pan Docs). 
</a>

## Unidades de Entrada/Saída (I/O):
<p align="justify">&emsp;&emsp; Entradas e Saídas do Game Boy. Nesta seção, são descritas as entradas e saídas do Game Boy, principalmente o teclado e o link cable. O gameboy por se tratar de um hardware considera um pouco "antigo", não possui GPIOs dedicados como os microcontroladores modernos, mas é possível simular funcionalidades semelhantes através de técnicas de programação e do uso de pinos de comunicação, como usados no link cable.

&emsp;&emsp; <b>Teclado</b>. O teclado consiste em 8 botões, sendo quatro deles os cursores de direção (gamepad ou cruz direcional). À primeira vista, pode-se pensar que, por haver oito botões, seriam necessários 8 bits (um byte) para representar o estado do teclado. Contudo, a Nintendo alcança o mesmo resultado utilizando apenas 6 bits.

&emsp;&emsp; As informações sobre o estado desses botões são armazenadas no endereço de memória FF00. Para ler o estado do direcional, os bits 5 e 4 desse byte devem ter o valor 01 em binário (respectivamente).
Dessa forma, os quatro bits menos significativos indicam o estado das teclas baixo, cima, esquerda e direita, nessa ordem. Uma peculiaridade é que o valor 1 representa que a tecla não está pressionada, enquanto o 0 indica que a tecla está pressionada <a href="#arquitetura-gameboy">(Arquitectura de la Nintendo Game Boy, 2023)</a>..
</p>

<div style="text-align: center;">
<img id="fig11" src="./assets/botoes-gameboy.png" alt="Botoes gameboy" width="400px">
  <figcaption>Figura 6: Botões do Gamepad: </figcaption>
</div>
<a href="#fig11">

</a>

<p align="justify">&emsp;&emsp; De maneira semelhante, para acessar as teclas Start, Select, A e B, os bits de seleção precisam estar configurados como 10.
</p>

<div style="text-align: center;">
<img id="fig12" src="./assets/resto-botoes-gameboy.png" alt="Resto dos Botoes gameboy" width="400px">
  <figcaption>Figura 7: Resto dos botões do Gamepad: </figcaption>
</div>
<a href="#fig12">

</a>



<p align="justify">&emsp;&emsp;  Esse design se deve à circuitaria interna do chip de leitura do teclado, que é estruturada como uma grade de duas colunas e quatro linhas. Assim, quando o bit 4 está ativado e o bit 5 desativado, a coluna da direita é ignorada, e ao ler os bits de 0 a 3, obtém-se o estado da coluna da esquerda (que corresponde às setas do direcional) <a href="#Hardware-Overview">(BARD, 2023)</a>..
</p>

&emsp;&emsp; Da mesma forma, se os estados dos bits 4 e 5 forem invertidos, será possível ler o estado da coluna da direita pelo mesmo motivo.

## Fonte de Energia e Sistema de Alimentação

### Seção de Fonte de Alimentação

O GameBoy consome entre 70 a 80 mAh/h e usa 4 pilhas AA de 1,5V.<sup><a href="#ref11">[11]</a></sup> A seguir uma imagem do manual do GameBoy que mostra a forma correta de inserir as pilhas no console.

<div style="text-align: center;">
<img id="fig" src="./assets/bateria.png" alt="Bateria" width="600px">
  <figcaption>Figura 8: inserindo Bateria. Fonte: <a href="https://www.flickr.com/photos/30348074@N00/5439992276/in/album-72157626034398554/">flickr.com</a> </figcaption>
</div>

## Firmware e Atualizações

&emsp;&emsp; O firmware do Gameboy é o proprio boot loader que ja foi explicado [nesta secção](#boot-rom) , de acordo com Joonas Javanainen, as versões iniciais do Gameboy tinham um boot loader diferente dos modelos mais novos.<sup><a href="#ref10">[10]</a></sup> Essa atualização não chegava aos modelos mais antigos, pois a Nintendo não tinha um sistema de atualização de firmware sobre a internet.

<br>

## Armazenamento Externo:

<p align="justify">&emsp;&emsp; Conforme descrito na <a href="#memória">seção de memória</a>, os recursos internos do console eram limitadissímos no hardware do GameBoy, a maior parte do jogo estava armzenada na ROM do própria cartucho (Cartdrige ROM). Por exemplo, o jogo que é quase como sinônimo do console, o tetris, possuia 32KB - já o maior possuia 1mb, lembrando novamente que tudo isso graças ao 'hack' do mapper ou MBC (Memory Bank Controller). Além disso, alguns cartuchos incluíam componentes adicionais, como relógios em tempo real e baterias externas para alimentar SRAM, possibilitando salvar o progresso do jogo. Esses recursos, embora opcionais, tornaram-se comuns em títulos mais avançados, como os jogos da série Pokémon. A imagem a seguir demonstra como era o cartucho do jogo Tetris <sup><a href="#ref10">[3]</a></sup>.
</p>

<div style="text-align: center;">
<img id="fig9" src="./assets/TetrisCartdrige.webp" alt="Cartucho Tetris" width="400px">
  <figcaption>Figura 9: Cartucho Tetris. Fonte: <a href="https://thecuriouspicker.com/shop/product/tetris-cartridge-game-boy-1989/">thecuriouspicker.com</a> </figcaption>
</div>

## Unidade de Proteção e Segurança

<p align="justify">&emsp;&emsp; A Nintendo não implementou nenhuma criptografia, mas tinha um 'sistema de segurança' para evitar a pirataria dos jogos. O console executava uma série de verificações iniciais para impedir a execução de cartuchos não autorizados e garantir que o cartucho estivesse corretamente inserido. Para passar nessas verificações, os jogos precisavam incluir uma cópia do logotipo da Nintendo em seu cabeçalho ROM, o que permitia à Nintendo usar leis de direitos autorais e marcas registradas para controlar a distribuição. Além disso, medidas adicionais anti-pirataria podiam ser implementadas dentro dos jogos, como a verificação do tamanho da SRAM e a realização de checksums do ROM em pontos aleatórios do jogo <sup><a href="#ref10">[3]</a></sup>. 
</p>

## Interface com o usuário

### Displays

<p align="justify">&emsp;&emsp; De acordo com  <a href="#ernberg2011">(ERNBERG, 2004)</a>., a PPU (Picture Processing Unit) e o LCD estão altamente integrados, podendo ser considerados como uma única unidade funcional. O LCD opera com uma frequência de 60 Hz e possui uma resolução de 160x144 pixels. Por sua vez, a PPU utiliza um mapa interno de 256x256 pixels, o que significa que o mapa completo não pode ser exibido na tela de uma só vez. Por isso que para resolver essa limitação, dois registradores externos são utilizados para indicar a posição no mapa correspondente ao canto superior esquerdo da tela. Esses mesmos registradores permitem ajustar a posição da tela no mapa, possibilitando que diferentes partes do mapa sejam exibidas conforme necessário.
</p>

<p align="justify">&emsp;&emsp; Como mencionado na seção anterior, a PPU está conectada a 8 KB de memória VRAM, onde a maior parte dos dados necessários para a renderização dos gráficos é armazenada. A PPU fornece acesso gerenciado à CPU, permitindo que ambas compartilhem a VRAM para leitura e escrita de dados. Esse mecanismo de arbitragem garante que tanto a PPU quanto a CPU possam acessar os dados sem conflitos. A organização dos dados para a renderização das imagens, todavia, é de responsabilidade dos jogos, que precisam preencher corretamente as diferentes áreas da VRAM para garantir a exibição adequada dos gráficos, além da DMA (Direct Memory Access) que permite transferência de dados paidamento entre a memória principal para outra memória, sem a intervenção contínua do processador <sup><a href="#ref3">[3]</a></sup>. Para a construção desses frames há cinco 'fundamentos':
</p>

<ul>
  <li><b>Blocos de Imagens (Tiles):</b> Os tiles são bitmaps de 8x8 pixels armazenados na VRAM em uma área conhecida como <b>Tile Set</b> ou <b>Tile Pattern Table</b>. Cada pixel pode exibir um dos quatro tons de cinza disponíveis, definidos por uma paleta de cores. No Game Boy monocromático, registros específicos configuram essas paletas, oferecendo três paletas programáveis, embora com uso limitado.
  Os tiles são organizados em dois conjuntos principais (Pattern Tables) e referenciados por um Tile Map, que instrui a PPU sobre como posicionar os tiles na tela. Dois mapas distintos podem ser usados simultaneamente, permitindo a criação de diferentes camadas no quadro.</li>
  <li><b>Camada de fundo (Background layer):</b> A camada de fundo é constituida por um mapa de 256x256 pixels, composto por 32x32 tiles estáticos. Todavia, apenas uma área de 160x144 pixels é exibida na tela, e o jogo define qual parte do mapa será visível. Esse mecanismo possibilita o movimento da área visível durante o gameplay, criando o chamado efeito de rolagem (Scrolling Effect). Para construir a camada de fundo, pode-se utilizar um dos dois Tile Maps disponíveis, mas há uma limitação: apenas uma paleta de cores pode ser usada nessa camada.
  </li>
  <li><b>Janela (Window):</b> A janela é uma camada de 160x144 pixels composta por tiles, exibida sobre o fundo (Background) e os sprites. Sem suporte a rolagem, ela compartilha o Tile Map e a paleta de cores com o fundo. Embora não tenha transparência e oculte o fundo, é ideal para exibir informações fixas, como menus ou dados. Diferentemente do NES, que exigia operações complexas, o PPU do Game Boy gerencia automaticamente o uso simultâneo da janela e do fundo.
  </li>
  <li><b>Elementos gráficos móveis (Sprites):</b> Os sprites são tiles móveis que podem se sobrepor ou aparecer atrás do fundo, com exibição controlada por prioridade. Eles possuem transparência, exibindo três tons de cinza, e contam com duas paletas dedicadas.Definidos na Object Attribute Memory (OAM), suas informações, como posição, paleta e flip flags, são transferidas via OAM DMA, período em que o CPU perde acesso à memória externa. O PPU suporta até 10 sprites por linha (scan-line) e 40 por quadro, ignorando excedentes.
  </li>
  <li><b>Resultado final(Frames):</b> Quando o quadro/frame é finalizado, a CPU deve aguardar o momento certo para modificar as tabelas de gráfico, como as de tiles, paletas ou sprites, pois a PPU ainda está acessando a VRAM. Para isso, o sistema utiliza interrupções ativadas quando a PPU está ociosa, algo semelhante ao funcionamento do NES. Assim que uma linha de varredura é concluída, inicia-se o período conhecido como Horizontal Blank, durante o qual é possível manipular a parte do quadro que ainda não foi desenhada. Quando todas as linhas de varredura são finalizadas, começa o Vertical Blank, um período em que uma interrupção dedicada permite ao jogo atualizar os gráficos para o próximo quadro.
  </li>
</ul>

<p align="justify">&emsp;&emsp; Na <a href="#fig10">Figura 10</a> há a representação da arquitetura PPU do GameBoy, com alguns elementos que foram explicados no texto acima.
</p>

<div style="text-align: center;">
  <img id="fig9" src="./assets/GamePPUArchitecture.png" alt="Game Boy PPU Architecture.png" width="400px">
  <figcaption>Figura 10: Arquitetura PPU. Fonte: <a href="https://www.copetti.org/writings/consoles/game-boy/">Copetti.org</a></figcaption>
</div>

### Botões e sensores de toque

<p align="justify">&emsp;&emsp; A versão inicial do Game Boy foi projetada com um layout simples, destacando-se pelo conjunto básico de controles. O console possui um direcional em forma de cruz (<i>D-pad</i>) para movimentação, além dos botões <i>A</i> e <i>B</i> destinados às ações no jogo, além de botões funcionais, como <i>Start</i> e <i>Select</i>, para pausar ou navegar em menus. E claro que o console também possuía um botão de <i>Power</i>, para ligar e desligar o aparelho. Ademais, o Game Boy incorporava dois potenciômetros rotativos, encarregados pelo ajuste de volume e contraste da tela, possibilitando uma experiência personalizada de áudio e visual. Essa combinação de controles simples e funcionalidades ajustáveis fazia dele um dispositivo acessível e inovador para sua época <sup><a href="#ref1">[1]</a></sup>. Na <a href="#fig11">Figura 11</a>, é apresentada uma ilustração na qual é possível visualizar a maior parte dos botões descritos.
</p>

<div style="text-align: center;">
  <img id="fig11" src="./assets/GameBoyInsideVision.png" alt="GameBoy Play it Loud Architecture.png" width="400px">
  <figcaption>Figura 11: GameBoy Play it Loud. Fonte: <a href="https://commons.wikimedia.org/w/index.php?curid=45716406">lloyd</a></figcaption>
</div>

### Audio

No GameBoy existem dois canais de som conectados aos terminais de saída SO1 e SO2. Há também um terminal de entrada Vin conectado ao cartucho, que pode ser roteado para qualquer um dos dois terminais de saída. O circuito do Game Boy permite a produção de som de quatro maneiras diferentes:<sup><a href="#ref14">[14]</a></sup>

- Padrões de onda quadrangular com funções de varredura (sweep) e envoltória (envelope).
- Padrões de onda quadrangular com funções de envoltória (envelope).
- Padrões de onda personalizados da RAM de onda (wave RAM).
- Ruído branco com função de envoltória (envelope).

Esses quatro sons podem ser controlados de forma independente e, em seguida, misturados separadamente para cada um dos terminais de saída.<sup><a href="#ref14">[14]</a></sup>

Os registradores de som podem ser configurados a qualquer momento enquanto os sons estão sendo produzidos.<sup><a href="#ref14">[14]</a></sup>

# Artigos Acadêmicos relacionados

<p align="justify">&emsp;&emsp; O Game Boy utiliza a CPU SM83 (também conhecido por Sharp LR35902), uma combinação personalizada do Zilog Z80 e do Intel 8080. O Zilog Z80, considerado uma evolução do 8080, é mais poderoso e moderno, oferecendo compatibilidade retroativa com todas as instruções do 8080. Além disso, o Z80 introduziu um conjunto de instruções aprimorado, incluindo endereçamento de um único bit, deslocamentos/rotações na memória, novos registradores (IX e IY), instruções de E/S em bloco, saltos relativos e um sistema de interrupção mais eficiente. O Sharp LR35902, por sua vez, herda a compatibilidade com quase todas as instruções do 8080 e incorpora algumas melhorias do Z80, ao mesmo tempo em que adiciona instruções próprias. Esse processador combina aspectos fundamentais de ambas as arquiteturas, criando uma CPU personalizada para atender às necessidades específicas do console <a href="#dihn2023">(DIHN, 2023)</a>.
</p>

<p align="justify">&emsp;&emsp; Conforme descorrido acima a arquitetura do GameBoy utilizava a combinação dos dois microprocessadores citados, primeiramente será abordado o Intel 8080. Conforme discutido por <a href="#mazor2007">MAZOR 2007</a>, em um artigo publicado pela renomada IEEE (Institute of Electrical and Electronics Engineers), este processador desempenhou um papel crucial no surgimento da indústria de microcomputadores pessoais. Contudo, também apresentava limitações que geraram insatisfações, como a falta de simetria entre os registradores e a ausência de um registrador de índice, aspectos que serão explorados a seguir.
</p>

<p align="justify">&emsp;&emsp; A Intel estabeleceu como objetivo corporativo tornar-se "a empresa de semicondutores mais lucrativa de todos os tempos". Para isso, priorizou o desenvolvimento de chips de memória, de maior valor agregado, em detrimento de componentes mais baratos, como portas TTL. Inicialmente, a empresa concentrou-se exclusivamente na produção de chips de memória para poucos clientes, mas em grandes volumes, o que permitiu operar com uma estrutura enxuta. Os chips de memória utilizavam pacotes de circuitos integrados com poucos pinos (16 a 18) e alta densidade de transistores, garantindo certa efieciência e redução de custos. Contudo, a limitação no número de pinos impactava outros produtos, como o processador 8008, reduzindo os sinais de entrada e saída disponíveis.
</p>

<p align="justify">&emsp;&emsp; Embora pioneira no mercado de memória RAM, a Intel enfrentou desafios devido à lenta adoção dessa tecnologia como substituta das memórias de núcleo. Para diversificar, aceitou projetos personalizados, como o chip de CPU 8008 desenvolvido para a Datapoint Corp. Apesar da rejeição pela Datapoint, o 8008 foi lançado como produto padrão em 1972. A empresa percebeu que as CPUs aumentavam a demanda por memória, já que cada CPU de 8 bits exigia ao menos oito chips de RAM, enquanto o crescimento das aplicações de software intensificava a necessidade de memória principal. A Intel aprimorou o desempenho do processador 8008 utilizando o processo semicondutor NMOS, o que exigiu o redesenho das máscaras de design, e uma reengenharia. A administração da empresa autorizou ajustes modestos, incluindo revisões no conjunto de instruções e nas especificações do processador.
</p>

<p align="justify">&emsp;&emsp; Essas melhorias e revisões buscavam melhorar algumas limitações do 8080, como: o pacote de 18 pinos do 8008, compartilhado com o DRAM 1103, limitava o número de conexões disponíveis, exigindo a multiplexação de sinais para acomodar os barramentos de endereços e dados, o que comprometia a eficiência e a velocidade do processador. Essa limitação também aumentava os custos e o espaço necessário em placas de circuito, já que eram necessários chips adicionais para interagir com a memória. O processador oferecia apenas um modo de endereçamento indireto, utilizando o par de registradores HL, o que era lento e restringia a flexibilidade devido à ausência de registradores de índice e suporte para aritmética de endereços de 16 bits. 
</p>

<p align="justify">&emsp;&emsp; Alguns desses problemas foram resolvidos com melhorias no processador, incluindo suporte para cálculos decimais, operações de 16 bits, pilhas mais profundas e eficientes, novos modos de endereçamento e interfaces aprimoradas para comunicação com o hardware. Essas inovações impulsionaram sua adoção no mercado de microcomputadores pessoais, e atraindo a atenção de grandes empresas, como a Motorola.
</p>


<p align="justify">&emsp;&emsp; Já o ZigLOG80 foi desenvolvido por Federico Faggin, o Z80 foi projetado para ser compatível com a CPU 8080 da Intel, beneficiando-se da experiência de Faggin no desenvolvimento dos microprocessadores 4004, 8008 e 8080. Essa compatibilidade, aliada à sua capacidade técnica superior, destacou o Z80 como uma solução amplamente adotada em sistemas diversos. Ele foi utilizado em computadores domésticos, na plataforma MSX e em clones não licenciados no Bloco Oriental, demonstrando seu impacto global mesmo antes dos avanços em redes na década de 1990. </p>

<p align="justify">&emsp;&emsp; Complementando essa ampla adoção, a arquitetura do Z80 marcou um avanço na infraestrutura computacional, oferecendo gerenciamento de memória mais eficiente em relação a seus antecessores. Com velocidades entre 6 e 20 MHz, o Z80 trouxe flexibilidade para aplicações variadas, facilitando a migração e execução de software em diferentes contextos e consolidando sua relevância na computação durante as décadas de 1970 e 1980 <a href="#ziglog2016">(ZIGLOG, 2016)</a>. </p>


<p align="justify">&emsp;&emsp; As principais características desse processador são: 208 bits de memória interna acessível ao programador, incluindo dois conjuntos de seis registradores de uso geral, que podem ser usados como registradores de 8 bits ou pares de 16 bits, além de dois conjuntos de acumuladores e flags. Conta também com um ponteiro de pilha, contador de programa, dois registradores de índice, e registradores de atualização e interrupção. Funciona com uma fonte de +5V e oferece sinais de saída totalmente decodificados e temporizados, facilitando a integração com memória e periféricos, suportados por uma ampla gama de controladores dedicados. Na <a href="#fig11">Figura 11</a>, é apresentada uma imagem que representa a arquitetura e os principais elementos do Z80.
</p>

<div style="text-align: center;">
  <img id="fig11" src="./assets/Z80Architecture.jpg" alt="Arquitetura Zilog z80" width="600px">
  <figcaption>Figura 11: Arquitetura Zilog z80. Fonte: <a href="http://www.andysarcade.de/data/electronics/components/z80.pdf">Z80 CPU User's Manual</a></figcaption>
</div>


## Implementação de um simulador parcial de um gameboy 
<p align="justify">&emsp;&emsp;  O SM83 é, claro, apenas uma parte do Game Boy. O sistema completo inclui mais do que esse único componente. Há também a PPU (Picture Processing Unit), ou Unidade de Processamento de Imagem, que é o processador responsável pela saída de vídeo e compartilha a responsabilidade pela VRAM (memória de vídeo). Além disso, há a APU (Audio Processing Unit), ou Unidade de Processamento de Áudio, que, como esperado, é o processador que gerencia a saída de áudio.

&emsp;&emsp; Esses três componentes estão integrados em um único chip na placa-mãe do Game Boy, chamado (de forma um pouco confusa) DMG-CPU. Outros componentes incluem:

<ul>
  <li>
  Portas de I/O para dispositivos de entrada do jogador
  </li>
  <li>
  Portas de conexão para periféricos do Game Boy (como a impressora e o cabo de link),
  </li>
  <li>
  Barramentos de dados que interligam os diversos chips
  </li>
</ul>

<a href="#bardCollege">(BARD, 2023)</a>.
</p>


<div style="text-align: center;">
  <img id="simuladorSM83  " src="./assets/simulador-SM83.png" alt="" width="600px">
  <figcaption>Figura 12: Simulador Sm83: Arquitetura Simulador. Fonte: <a href="https://digitalcommons.bard.edu/cgi/viewcontent.cgi?article=1029&context=senproj_s2023">Diagram os gameboy system simulator</a></figcaption>
</div>

## Overview
<p align="justify">&emsp;&emsp; O emulador é composto por três classes mais o ficheiro principal. Estas classes são “memory”, “cpu_instr” e “file_reader”.
“cpu_instr” e ‘file_reader’. A Figura mostrada abaixo, demonstra as três classes, suas
variáveis membro e funções notáveis. As setas entre as classes significam uma relação de propriedade
propriedade. Por exemplo, a classe
classe “memory” possui uma cópia da classe
da classe “file_reader”, pelo que esta última tem uma
seta a apontar para a primeira. Para
espaço e para evitar confusão,
a maioria das funções foram omitidas
deste diagrama. A única exceção explícita
exceção explícita a isto é a classe “file_reader”
que não tem variáveis membro e tem exatamente uma função. Neste caso, essa função é
listada. A classe “cpu_instr” tem todas as suas funções condensadas numa linha para evitar listar perto de
de uma centena de funções individuais.

</p>

<div style="text-align: center;">
  <img id="emuladorSM83  " src="./assets/emulador-SM83.png" alt="" width="600px">
  <figcaption>Figura 13: Emulador Sm83: Arquitetura Simulador. Fonte: <a href="https://digitalcommons.bard.edu/cgi/viewcontent.cgi?article=1029&context=senproj_s2023">Diagram of gameboy system emulator</a></figcaption>
</div>

# Produtos relacionados

## ZX Spectrum

O ZX Spectrum foi um computador doméstico lançado pela Sinclair Research em 1982. O dispositivo apresentava um design compacto e integrado, com um teclado embutido e uma tela de 32x24 caracteres. O ZX Spectrum era alimentado por um processador Zilog Z80 e executava o sistema operacional Sinclair BASIC. O computador incluía uma interface de teclado para inserção de dados e operações, bem como uma porta de expansão para conexão de periféricos. O ZX Spectrum foi um sucesso de vendas e estabeleceu a Sinclair Research como uma das principais fabricantes de computadores domésticos. A Figura a seguir mostra como é o computador.

<div style="text-align: center;">
  <img id="fig" src="./assets/ZX-Spectrum.png" alt="ZX Spectrum" width="600px">
  <figcaption>Figura 14: ZX Spectrum. Fonte: <a href="https://upload.wikimedia.org/wikipedia/commons/1/1b/ZX_Spectrum128K.jpg">Wikipedia</a></figcaption>
</div>
<br>

## TI-81

<p align="justify">&emsp;&emsp; TI-81 foi a primeira calculadora gráfica da Texas Instruments, lançada em 1990. O dispositivo foi projetado para estudantes do ensino médio e universitários, oferecendo recursos avançados para cálculos matemáticos e gráficos. A TI-81 apresentava uma tela de 96x64 pixels, capaz de exibir gráficos de funções matemáticas e tabelas de dados. Além disso, o dispositivo incluía uma interface de teclado para inserção de dados e operações, bem como uma porta de comunicação para transferência de dados entre calculadoras. A TI-81 foi um sucesso de vendas e estabeleceu a Texas Instruments como uma das principais fabricantes de calculadoras gráficas. A <a>Figura</a> </b> mostra como é a calculadora.
</p>

<div style="text-align: center;">
  <img id="fig" src="./assets/TI-81.png" alt="TI-81" width="200px">
  <figcaption>Figura 15: TI-81. Fonte: <a href="https://en.wikipedia.org/wiki/TI-81">Wikipedia</a></figcaption>
</div>
<br>


## Osborne 1

<p align="justify">&emsp;&emsp; O Osborne 1 foi o primeiro computador portátil comercialmente disponível, lançado em 1981. O dispositivo apresentava um design compacto e integrado, com uma tela de 5 polegadas e um teclado embutido. O Osborne 1 era alimentado por um processador Zilog Z80 e executava o sistema operacional CP/M. O computador incluía um drive de disquete de 5,25 polegadas, permitindo a instalação de software e armazenamento de dados. O Osborne 1 foi um sucesso de vendas e estabeleceu o padrão para futuros computadores portáteis. A Figura mostra como é o computador.
</p>

<div style="text-align: center;">
  <img id="fig" src="./assets/Osborn-1.png" alt="Osborne 1" width="300px">
  <figcaption>Figura 16: Osborne 1. Fonte: <a href="https://en.wikipedia.org/wiki/Osborne_1">Wikipedia</a></figcaption>
</div>
<br>

## TRS-80 Model 100

<p align="justify">&emsp;&emsp; O TRS-80 Model 100 foi um computador portátil lançado em 1983, foi resultado da colaboração entre Tandy, Microsoft, and Japanese electronics manufacturer Kyocera. Foi um dos primeiros computadores portateis em forma de notebook, com um teclado, display liquido cristal, e uma bateria. Foi comercialmente um sucesso vendendo mais de 6 milhões de unidades ao redor do mundo.<sup><a href="#ref12">[12]</a></sup> A Figura mostra como é o computador.
</p>

<div style="text-align: center;">
  <img id="fig" src="./assets/TRS-80Model100.png" alt="TRS-80 Modelo 100"">
  <figcaption>Figura 17: TRS-80 Model 100. Fonte: <a href="https://cybernews.com/editorial/the-tiny-pcs-of-the-90s-seven-iconic-devices/">cybernews.com</a></figcaption>
</div>
<br>

## Intel SDK-80

Cada vez que a Intel lançava um novo microprocessador, ela disponibilizava simultaneamente um System Development Kit (SDK), permitindo que engenheiros de empresas de informática, bem como estudantes universitários, se familiarizassem com os conceitos e as características do novo processador.<sup><a href="#ref13">[13]</a></sup>

O 8080 System Design Kit (SDK-80) é um sistema completo de microcomputador em forma de kit. Ele é simples de montar e oferece uma excelente plataforma de treinamento e prototipagem para a avaliação do sistema de microcomputador 8080.<sup><a href="#ref13">[13]</a></sup>


<div style="text-align: center;">
  <img id="fig" src="./assets/SDK-80.png" alt="SDK-80" width="600px">
  <figcaption>Figura 18: SDK-80. Fonte: <a href="https://www.retrotechnology.com/restore/sdk80_nochips.jpg">retrotechnology</a></figcaption>
</div>
<br>



# Principais Rivais

## Sega Game Gear

<p align="justify">&emsp;&emsp; O Sega Game Gear, lançado em 1990, destacou-se como um forte concorrente do Game Boy, oferecendo uma tela colorida retroiluminada que superava a monocromática do rival em qualidade visual. Com gráficos vibrantes e títulos marcantes como Sonic the Hedgehog e Mortal Kombat, sua biblioteca de jogos atraiu muitos fãs, mas comparando a Nitendo possuia uma biblioteca de jogos com uma variade bem menor. Mesmo que o console da Sega era tecnicamente avançado e visualmente superior, o Game Gear enfrentava desafios, como alto consumo de bateria(necessidade de seis baterias AA para funcionamento) e um preço um pouco mais salgado, fatores que impactaram sua popularidade frente ao Game Boy, também vale ressaltar que ele não possuia uma portabilidade boa que nem seu rival GameBoy, por conta de ter um formato <i>volumoso</i>, fato este que atrapalha usuários que guardavam esses consoles no bolso<sup><a href="#ref5">[5]</a></sup> <sup><a href="#ref6">[6]</a></sup>. A <a href="#fig17">Figura 19</a> é mostrado como era esse console.</p>

<div style="text-align: center;">
  <img id="fig17" src="./assets/Gamegear.jpg" alt="Game Gear Sega.jph" width="400px">
  <figcaption>Figura 19: Game Gear. Fonte: <a href="https://segaretro.org/File:Gamegear.jpg">Segaretro.org</a></figcaption>
</div>

## Atari Lynx

<p align="justify">&emsp;&emsp; Lançado em 1989, o Atari Lynx foi um console portátil inovador, também equipado com uma tela colorida retroiluminada e recursos avançados, como suporte para multijogador e um design ambidestro que atendia tanto destros quanto canhotos. Seu catálogo diversificado de jogos e tecnologia de ponta marcaram sua proposta ambiciosa para o mercado de portáteis. Todavia, desafios como preço elevado, alto consumo de energia e suporte limitado de desenvolvedores dificultaram sua adoção em larga escala, comprometendo seu sucesso no competitivo cenário dos consoles portáteis. O hardware também se destacava pela capacidade de zoom, distorção de sprites e desenho de polígonos preenchidos, possibilitando jogos inovadores com elementos 3D <sup><a href="#ref5">[5]</a></sup> <sup><a href="#ref7">[7]</a></sup>. A <a href="#fig20">Figura 20</a> mostra como é o console.
</p>

<div style="text-align: center;">
  <img id="fig18" src="./assets/Atari-Lynx-I-Handheld.jpg" alt="Atari Lynx" width="400px">
  <figcaption>Figura 20: Atari Lynx. Fonte: <a href="https://en.wikipedia.org/wiki/Atari_Lynx#/media/File:Atari-Lynx-I-Handheld.jpg">en.wikipedia.org</a></figcaption>
</div>

## NEC TurboExpress

<p align="justify">&emsp;&emsp; O NEC TurboExpress, lançado em 1990, era uma versão portátil do console TurboGrafx-16, projetada para entregar uma experiência de jogo de alta qualidade em um formato compacto. Equipado com uma tela colorida de alta resolução, gráficos avançados e compatibilidade total com os jogos em formato HuCard do TurboGrafx-16, o TurboExpress oferecia aos jogadores a possibilidade de desfrutar da biblioteca do console de mesa em qualquer lugar. Do mesmo modo, o console incluía recursos inovadores, como suporte para acessórios como o TurboVision, que permitia assistir TV em sua tela. No entando, seu preço elevado, problemas com o consumo de energia e uma disponibilidade limitada impactaram sua competitividade no mercado de portáteis <sup><a href="#ref5">[5]</a></sup> <sup><a href="#ref8">[8]</a></sup>. A <a href="#fig21">Figura 21</a>mostra como é o console.
</p>

<div style="text-align: center;">
  <img id="fig21" src="./assets/Turboexpress.jpg" alt="NEC TurboExpress" width="400px">
  <figcaption>Figura 21: NEC TurboExpress. Fonte: <a href="https://www.vgdb.com.br/consoles/turboexpress/">vgdb.com.br</a></figcaption>
</div>

## Watara Supervision
 
<p align="justify">&emsp;&emsp; O Watara Supervision foi lançado com o jogo Crystball, similar ao Breakout. Um diferencial do console era a possibilidade de conectá-lo à televisão por meio de um acessório oficial (algo similar ao NEC TurboExpress), permitindo que os jogos fossem exibidos em até quatro cores, de forma semelhante ao Super Game Boy da Nintendo para o SNES. Apesar de atrair atenção inicial pelo preço acessível do console e de seus jogos, o Supervision não conseguiu competir com o Game Boy, líder absoluto no mercado de portáteis. Suas principais falhas incluíam uma tela de baixa qualidade, com borrões que dificultavam o acompanhamento da ação, e um catálogo limitado e pouco atraente de jogos <sup><a href="#ref9">[9]</a></sup>. A <a href="#fig22">Figura 22</a> mostra como é o console.
</p>

<div style="text-align: center;">
  <img id="fig20" src="./assets/Watara-Supervision.jpg" alt="Watara Supervision" width="400px">
  <figcaption>Figura 22: Fonte: <a href="https://en.wikipedia.org/wiki/Watara_Supervision#/media/File:Watara-Supervision-Tilted.jpg">en.wikipedia.org</a></figcaption>
</div>

## Atari Lynx 2

<p align="justify">&emsp;&emsp; Em 1991, a Atari relançou o Lynx com uma nova embalagem, hardware ligeiramente melhorado e um novo design elegante, que permitia uma "pegada" mais aderente ao console. O novo "Lynx II" apresentava pegadores de borracha na parte traseira e uma tela colorida retroiluminada, com a opção de desligar a retroiluminação para economizar energia preciosa da bateria. Também substituiu o conector de fone de ouvido mono do Lynx original por um para som estéreo, além disso esse console teve um preço mais acessível em comparação a sua versão anterior  <sup><a href="#ref7">[7]</a></sup>. A <a href="#f21">Figura 23</a> mostra como é o console.
</p>

<div style="text-align: center;">
  <img id="fig21" src="./assets/Atari-Lynx-II.jpg" alt="Atari Lynx 2" width="400px">
  <figcaption>Figura 23: Fonte: <a href="https://en.wikipedia.org/wiki/Atari_Lynx#/media/File:Atari-Lynx-II-Handheld-Angled.jpg">en.wikipedia.org</a></figcaption>
</div>

# Conclusão 

<p align="justify">&emsp;&emsp; O Game Boy da Nintendo destacou-se como o console portátil mais bem-sucedido de sua geração devido à combinação de fatores técnicos, design eficiente e estratégia de mercado inteligente. Enquanto concorrentes como o Sega Game Gear, o Atari Lynx e o NEC TurboExpress ofereciam gráficos coloridos e visualmente superiores, esses dispositivos tinham alto consumo de energia, resultando em menor autonomia de bateria.

<p align="justify">&emsp;&emsp; Em contraste, o Game Boy priorizava a eficiência energética, com gráficos simples, mas funcionais, e uma jogabilidade envolvente. Além disso, seu preço acessível e uma biblioteca diversificada de jogos tornaram-no extremamente atraente para o público. Entre os títulos mais icônicos estavam Tetris, que se tornou um sucesso instantâneo e quase sinônimo do console, Pokémon Red e Blue, que deram início a uma das franquias mais populares do mundo, e The Legend of Zelda: Link’s Awakening, outro jogo que foi marcante para os jogadoes dessa época, entre outros...
</p>

<p align="justify">&emsp;&emsp; O suporte robusto de desenvolvedores e o marketing estratégico da Nintendo consolidaram a posição do Game Boy no mercado, e esse sucesso pode ser comprovado na <a href="#fig22">Figura 24</a>, todos os números referenciados foram retirados da mesma fonte, a Wikipédia, e claro levando em consideração apenas a versão clássica do GameBoy.
</p>

<div style="text-align: center;">
  <img id="fig24" src="./assets/UnitsSolds.jpg" alt="Unidades Vendidas por consoles" width="700px">
  <figcaption>Figura 24: Fonte: <a href="https://www.canva.com/design/DAGYGKYL4yI/bFSChvFSB9NHC8a7rUJcOg/edit?utm_content=DAGYGKYL4yI&utm_campaign=designshare&utm_medium=link2&utm_source=sharebutton">Autores</a></figcaption>
</div>


# Referências

<p align="justify" id="ref1">[1] - Disponível em: <a href="https://pt.wikipedia.org/wiki/Game_Boy">https://pt.wikipedia.org/wiki/Game_Boy</a>. Acesso em: 10 de nov. de 2024.</p>

<p align="justify" id="ref2">[2] - Disponível em: <a href="https://www.dimensions.com/element/game-boy">https://www.dimensions.com/element/game-boy</a>. Acesso em: 10 de nov. de 2024.</p>

<p  align="justify" id="ref3">[3] - Disponível em: <a href="https://www.copetti.org/writings/consoles/game-boy">https://www.copetti.org/writings/consoles/game-boy</a>. Acesso em: 10 de nov. de 2024.</p>

<p align="justify" id="ref4">[4] - Disponível em: <a href="https://www.copetti.org/writings/consoles/nes/#going-beyond-existing-capabilities">https://www.copetti.org/writings/consoles/nes/#going-beyond-existing-capabilities</a>. Acesso em: 17 de nov. de 2024.</p>

<p align="justify" id="ref5">[5] - Disponível em: <a href="https://retrovgames.com/gameboy-vs-competitors-a-comprehensive-comparison-of-portable-consoles/">https://retrovgames.com/gameboy-vs-competitors-a-comprehensive-comparison-of-portable-consoles/</a>. Acesso em: 1 de dez. de 2024.</p>

<p align="justify" id="ref6">[6] - Disponível em: <a href="https://segaretro.org/Sega_Game_Gear">https://segaretro.org/Sega_Game_Gear</a>. Acesso em: 1 de dez. de 2024.</p>

<p align="justify" id="ref7">[7] - Disponível em: <a href="https://atarigamer.com/pages/brief-history-of-atari-lynx">https://atarigamer.com/pages/brief-history-of-atari-lynx</a>. Acesso em: 1 de dez. de 2024.</p>

<p align="justify" id="ref8">[8] - Disponível em: <a href="https://www.vgdb.com.br/consoles/turboexpress/">https://www.vgdb.com.br/consoles/turboexpress/</a>. Acesso em: 1 de dez. de 2024.</p>

<p align="justify" id="ref9">[9] - Disponível em: <a href="https://en.wikipedia.org/wiki/Watara_Supervision">https://en.wikipedia.org/wiki/Watara_Supervision</a>. Acesso em: 1 de dez. de 2024.</p>

<p align="justify" id="ref10">[10] - Disponível em: <a href="https://gekkio.fi/blog/2016/game-boy-research-status/">https://gekkio.fi/blog/2016/game-boy-research-status/</a>. Acesso em: 4 de dez. de 2024.</p>

<p align="justify" id="ref11">[11] - Disponível em: <a href="https://www.nintendo.com/en-gb/Support/Game-Boy-Pocket-Color/Product-information/Technical-data/Technical-data-619585.html">https://www.nintendo.com/en-gb/Support/Game-Boy-Pocket-Color/Product-information/Technical-data/Technical-data-619585.html</a>. Acesso em: 5 de dez. de 2024.</p>

<p align="justify" id="ref12">[12] - Disponível em: <a href="https://cybernews.com/editorial/the-tiny-pcs-of-the-90s-seven-iconic-devices/">https://cybernews.com/editorial/the-tiny-pcs-of-the-90s-seven-iconic-devices/</a>. Acesso em: 5 de dez. de 2024.</p>

<p align="justify" id="ref13">[13] - Disponível em: <a href="https://context.oldcomputermuseum.com/intel_sdk80.html">https://context.oldcomputermuseum.com/intel_sdk80.html</a>. Acesso em: 5 de dez. de 2024.</p>

<p align="justify" id="ref14">[14] - Disponível em: <a href="http://bgb.bircd.org/pandocs.htm#soundoverview">http://bgb.bircd.org/pandocs.htm#soundoverview</a>. Acesso em: 5 de dez. de 2024.</p>

<p align="justify" id="mazor2007">MAZOR, Stanley. Intel 8080 CPU Chip Development. Institute of Electrical and Electronics Engineers, v. 29, n. 2, 2007. DOI: 10.1109/mahc.2007.25. Disponível em <a href="https://ieeexplore-ieee-org.ez54.periodicos.capes.gov.br/stamp/stamp.jsp?tp=&arnumber=4287219">https://ieeexplore-ieee-org.ez54.periodicos.capes.gov.br/stamp/stamp.jsp?tp=&arnumber=4287219</a>. Acesso em: 2 de dez. de 2024.</p>

<p align="justify" id="Joonas">JAVANAINEN, Joonas. Game Boy: Complete Technical Reference, 2024. Disponível em <a href="https://gekkio.fi/files/gb-docs/gbctr.pdf">https://gekkio.fi/files/gb-docs/gbctr.pdf</a>. Acesso em: 17 de nov. de 2024.</p>

<p align="justify" id="ziglog2016">ZIGLOG, Inc. Z80 Microprocessors Z80 CPU User Manual, 2016. Disponível em <a href="https://www.zilog.com/docs/z80/um0080.pdf">https://www.zilog.com/docs/z80/um0080.pdf</a>. Acesso em: 18 de nov. de 2024.</p>

<p align="justify" id="jain2004">JAIN, Aarul; GADRE, Dhananjay V. Gameboy Advance for nongaming applications. Proceedings of the 10th International Conference on Embedded Systems, 2005. Disponível em: <a href="https://reinerziegler.de.mirrors.gg8.se/GBA/gameboy_advance_for_nongaming_applications.pdf">https://reinerziegler.de.mirrors.gg8.se/GBA/gameboy_advance_for_nongaming_applications.pdf</a>. Acesso em: 10 de nov. de 2024.</p>

<p align="justify" id="bartolomeu2020">BARTOMEU, David Soler. DraconicGB: Creating a Game Boy emulator. 06/2020. Trabalho de Conclusão de Curso (Graduação em Engenharia Informática) – Universitat Oberta de Catalunya, área de jogos digitais. Disponível em: <a href="https://openaccess.uoc.edu/bitstream/10609/115466/6/dsbartomeuTFG0620mem%c3%b2ria.pdf">https://openaccess.uoc.edu/bitstream/10609/115466/6/dsbartomeuTFG0620mem%c3%b2ria.pdf</a>. Acesso em: 17 de nov. de 2024.</p>

<p align="justify" id="dihn2023">DIHN, Thi. Game Boy emulator written in Rust, 2023. Disponível em <a href="https://www.theseus.fi/bitstream/handle/10024/799917/Thi_Dinh.pdf?sequence=2&isAllowed=y">https://www.theseus.fi/bitstream/handle/10024/799917/Thi_Dinh.pdf?sequence=2&isAllowed=y</a>. Acesso em: 2 de dez. de 2024.</p>

<p align="justify" id="diskin2004">DISKIN, Patrick. Nintendo Entertainment System Documentation. Tokyo: Nin-tendo, 2004. Disponível em: <a href="https://archive.nesdev.org/NESDoc.pdf">https://archive.nesdev.org/NESDoc.pdf</a>. Acesso em: 17 de nov. de 2024.</p> 

<p align="justify" id="ernberg2011"> ERNBERG, John. The internal workings of video game consoles: The GameBoy, 2011. Disponível em: <a href="https://www.diva-portal.org/smash/get/diva2:433485/FULLTEXT01.pdf">https://www.diva-portal.org/smash/get/diva2:433485/FULLTEXT01.pdf</a>. Acesso em: 25 de nov. de 2024.
</p> 

<p align="justify" id="Hardware-Overview"> Disponível em: <a href="https://pt.ifixit.com/Document/33319/gameboy_color_service_manual.pdf">https://pt.ifixit.com/Document/33319/gameboy_color_service_manual.pdf</a>. Acesso em: 3 de dez. de 2024.
</p> 

<p align="justify" id="arquitetura-gameboy"> Disponível em: <a href="https://www.researchgate.net/profile/Jose_Miguel_Moreno/publication/320272701_Arquitectura_de_la_Nintendo_Game_Boy/links/59da265ba6fdcc2aad129dbf/Arquitectura-de-la-Nintendo-Game-Boy.pdf?__cf_chl_tk=ZLnLzWYFtYV84dnD1TUGOx7HOr1vA62cE3Hyyk_5g_M-1733248111-1.0.1.1-kYfa9aJumsSh4YKMhci9Cl64f4jLqCUhCa2QtvE608I
">https://www.researchgate.net/profile/Jose_Miguel_Moreno/publication/320272701_Arquitectura_de_la_Nintendo_Game_Boy/links/59da265ba6fdcc2aad129dbf/Arquitectura-de-la-Nintendo-Game-Boy.pdf?__cf_chl_tk=ZLnLzWYFtYV84dnD1TUGOx7HOr1vA62cE3Hyyk_5g_M-1733248111-1.0.1.1-kYfa9aJumsSh4YKMhci9Cl64f4jLqCUhCa2QtvE608I
</a>. Acesso em: 3 de dez. de 2024.
</p>


<p align="justify" id="bardCollege"> Disponível em: <a href="https://digitalcommons.bard.edu/cgi/viewcontent.cgi?article=1029&context=senproj_s2023">https://digitalcommons.bard.edu/cgi/viewcontent.cgi?article=1029&context=senproj_s2023</a>. Acesso em: 3 de dez. de 2024.
</p> 

<p align="justify" id="gameboyInfo"> Disponível em: <a href="http://computer-literature.teknologi-indonesia.web.id/IT/en/2565-2446/Game-Boy_8870_computer-literature-teknologi-indonesia.html#cite_note-Dimensions-35">http://computer-literature.teknologi-indonesia.web.id/IT/en/2565-2446/Game-Boy_8870_computer-literature-teknologi-indonesia.html#cite_note-Dimensions-35</a>. Acesso em: 4 de dez. de 2024.
</p> 

<p align="justify" id="gameboy-color"> Disponível em: <a href="https://wikirby.com/wiki/Game_Boy_Color">https://wikirby.com/wiki/Game_Boy_Color</a>. Acesso em: 3 de dez. de 2024.

</p><p align="justify" id="linkCable"> Disponível em: <a href="http://bgb.bircd.org/pandocs.htm#serialdatatransferlinkcable">http://bgb.bircd.org/pandocs.htm#serialdatatransferlinkcable</a>. Acesso em: 4 de dez. de 2024.
</p> 