CPU do Zero

De Garoa Hacker Clube
Revisão de 21h47min de 28 de maio de 2018 por Juca (discussão | contribs) (→‎Venha construir uma CPU discreta, do zero!)
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)
Ir para navegação Ir para pesquisar

CPU do Zero.svg

Venha construir uma CPU discreta, do zero!

Este evento não está mais acontecendo no Garoa.
Quem sabe um dia a gente volte a fazer essas atividades...
Se alguém tiver interesse nesses temas, entre em contato com o Juca!

2016-AGO-16

Está confirmado!
Tema principal a ser discutido:
Geração de sinal de vídeo

Vamos conversar sobre o estágio final do circuito de geração de sinalização de vídeo. Ou seja, o Color-DAC (conversor digital-analógico dos sinais RGB), o registrado seletor de paleta de cores, as ROMs de paletas, a VRAM (memória RAM de vídeo), o oscilador que gera o sinal de pixel clock, os contadores de varredura X e Y e as portas lógicas que controlam o timing da sinalização de sincronismo vertical e horizontal (HSync e VSync).

Será abordado também o conector JAMMA e as estratégias para a fabricação de um primeiro protótipo da placa de vídeo, assim como um brainstorming geral sobre quais os próximos passos no projeto dos outros blocos de circuitos da placa de vídeo.

Resumo

Durante a atividade surgiram algumas dúvidas sobre o circuito:

  • gostaríamos de entender com mais precisão qual é o mecanismo de incremento dos contatores. Em particular ficamos em dúvida sobre o cascateamento com trickle-carry. Isso está descrito no datasheet do contador, então é mera questão de dedicar alguns minutos para a leitura atenta do datasheet.
  • Não ficou claro por que a varredura horizontal usa contadores 74LS161 enquanto a varredura vertical usa o 74LS93
  • Percebemos que o nono bit da varredura vertical pode ser implementado com um flip-flop JK, da mesma forma que é feito com o horizontal. E de quebra ainda ganhamos economia no númeto total de CIs pois em uma única pastilha temos 2 flip-flops JK :-)
  • consertamos o sinal de output enable das PaletteROMs para levar em consideração a região de blanking vertical também.
  • Ficamos na dúvida sobre como é gerado o sync composto
  • E também sobre quais os níveis de tensão do sinal de sync (composto)
  • Qual é a diferença entre a sinalização elétrica dos pinos de RGB-Sync do conector JAMMA e estes mesmos sinais numa saída de vídeo VGA ?
  • Ficamos em dúvida também sobre como funciona a sinalização em um display com doublescan
  • E ficamos curiosos pra saber por que foi inventado o souble-scan (qual era a necessidade que levou a essa solução?)

Próximos Passos

  • desenhar o oscilador de pixel clock
  • desenhar PCB, corroer, montar e testar uma placa protótipo deste circuito de vídeo.
  • deixar sinais de controle disponíveis em um conector que possa ser usado para ligar um arduino
  • desenhar uma "placa de testes" que já contenha ROM de vídeo (com screenshots do jogo) e que possa ser conectara ao protótipo
  • Talvez incluir chaveamento de páginas dessa ROM de imagens (e das ROMs de palestas) por meio de contadores ligados aos sinais vindos do joystick (pra permitir que o usuário troque as imagens ou paletas manualmente)

2016-AGO-09

Tivemos uma conversa longa sobre o início do projeto discreto da CPU. Juca mostrou os circuitos do sequenciador de micro-código (gerador de sinais de controle), barramento de dados, ULA, etc... Também foi apresentado o script em python para descrição dos algorítmos de micro-instruções, para implementação do instruction set desejado.

2016-AGO-02

No nosso primeiro encontro foi apresentada a proposta do desafio de se construir uma CPU discreta capaz de executar bytecode da máquina vitrual do jogo Another World. Para contextualizar, assistimos o vídeo completo da abertura do jogo no youtube e depois foi dada uma visão geral sobre o objetivo a ser alcaçado (construir uma placa JAMMA para o jogo Another World) e os subsistemas que precisarão ser projetados. Foram também apresentadas as pranchas de esquemático da CPU do computador Patinho Feio que servem de referência para técnicas de projeto lógico digital para a implementação das diversas partes de uma CPU (como unidades de controle, fluxo de dados, registradores, etc).

Nosso próximo encontro está agendado para 3a feira, 09 de Agosto e decidimos focar no estudo do subsistema de som, lendo o datasheet do chip MSM6295 e avaliando se ele é suficiente para as necessidades do jogo em questão.

Recursos Relevantes

  • Página wiki do projeto da placa AnotherWorld JAMMA
  • livro TOCCI - Disponível na biblioteca do Garoa
  • livro do Edson Fregni (contém esquemas do Patinho Feio) "Projeto de Computadores Digitais 2a edição": PDF
  • tese de mestrado de Edson Fregni "Projeto Logico da Unidade de Controle de um Minicomputador" : PDF
  • Blogpost sobre disasm do bytecode do jogo Another World: blogpost
  • Página do autor do jogo descrevendo a máquina virtual: website
  • Reimplementação livre da máquina virtual do jogo: Another-World-Bytecode-Interpreter
  • Port da VM para rodar no MAME: AnotherWorld-MAME
  • Datasheet do MSM6295 (chip de som usado em máquinas arcade): datasheet
  • Pinagem do conector JAMMA