Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Memórias #2

Open
keizerzilla opened this issue Feb 1, 2019 · 1 comment
Open

Memórias #2

keizerzilla opened this issue Feb 1, 2019 · 1 comment

Comments

@keizerzilla
Copy link

Sabendo que o Arduino Uno possúi:

  • 32KB de flash
  • 2KB de RAM
  • 1KB de EEPROM

Por que das seguintes escolhas de tamanho?

extern uint8_t chip328MemSys[80];
extern uint8_t chip328MemStack[16];
extern uint8_t chip328Memory[300];

Outra: segundo a documentação, a stack é um pilha de valores de 16bit, e não 8bit. Isso tem a ver com o atmega328 também?

@jeffbzrr
Copy link
Owner

jeffbzrr commented Feb 2, 2019

O chip8 endereça 4096 bytes, então de cara não seria possível alocar tudo na pequena ram do atmega328.

A solução foi observar o que partes seriam constantes em uma execução, para estas ficarem na flash e quais partes não eram usadas em uma determinada ROM.

As ROMs são carregadas em 0x200 (512) e o esses 512 bytes inicias são reservados para o sistema. Talvez onde partes do emulador ficariam em antigas implementações de hardware (?).
Os primeiros 80 bytes desses 512 bytes é onde estão as sprites de hexa decimal do sistema. Esta parte é importante e deve ir para a flash.

Foi escolhida para testes a ROM BRIX. Ela tem 280 bytes e não utiliza mais que 20 bytes de ram, então aquele vetor de 300 bytes foi alocado na ram do atmega328. Quando é necessário testar outra ROM esse vetor era aumentado. No entatanto a parte que corresponde a ROM nesse vetor, poderia ir para flash do atmega328, liberando assim uma boa ram. Tal otimização ainda não era prioridade e nem necessária.

Também é necessário alocar a pilha na RAM, por isso o outro vetor. Porém ele deveria ter o dobro de tamanho já que são 16 de 16 bit. Lá está errado, não havia percebido. Valeu.

Desta maneira não é necessário alocar todo o resto da memória para execução da BRIX, de outras ROMs e da maioria do chip8, acredito.

A principal dificuldade do projeto não foi a limitação do atmega328 e sim a velocidade de comunição do display que eu tenho disponível.

E claro, roda Crysis.

@jeffbzrr jeffbzrr closed this as completed Feb 2, 2019
@jeffbzrr jeffbzrr reopened this Feb 2, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants