Pelo terceiro ano, quando Hackaday está realizando a próxima conferência, segue uma boa tradição: distribui crachás aos participantes, que ao mesmo tempo são sistemas de computação bastante poderosos. Os dispositivos estão incluídos no preço do bilhete. Eles são produzidos em pequenas séries industriais, mas são hardware aberto, o que significa que todos os que não podem participar da conferência podem, se tiverem o desejo e a capacidade de se tornarem o mesmo emblema que caseiro faça você mesmo. Desta vez, a equipe de desenvolvimento é bastante grande: são autores sob os apelidos Lutetium, Aleksandar Bradic, Mike Szczys, Sophi Kravitz, Mike Walters, Sprite_tm, Elliot Williams, de∫hipu, Kumar Abhishek, Piotr Esden-Tempski, Voja Antonic, Zapp, Roger, Hyr0n, Sylvain Munaut e Sean Cross. E sim, Voya Antonich é novamente a mesma, a desenvolvedora do agora antigo computador doméstico Galaksija.
Se em épocas anteriores o crachá era feito em um formato semelhante ao Cybiko ou a um telefone com teclado QWERTY como o Nokia Asha 200, e poderia executar o emulador Z80, o sistema operacional CP / M e o interpretador de idiomas básico, agora parece mais um bolso um console de jogos como o Game Boy. E ainda permite conectar cartuchos de 40 pinos. E desta vez foi feito no FPGA Lattice LFE5U-45F.
A repetição do dispositivo deve começar com o hardware. A primeira coisa a fazer é baixar todos os arquivos daqui e instale o software necessário, antes de tudo - KiCad. Abra o diagrama (arquivo hadbadge2019.sch) e adquira todos os componentes incluídos, depois de ler as anotações (arquivo hadbadge2019-bom-notes.txt). Abra o desenho da placa de circuito (arquivo hadbadge2019.kicad_pcb) e exporte para o formato Gerber. Encomende a fabricação de uma placa em uma empresa com o perfil apropriado. Mesmo se você for fluente em LUT, nesse caso, não ajudará. Na oficina de reparo de smartphones, solicite a montagem em uma placa de componentes nos gabinetes BGA. Você mesmo solda todos os outros componentes, concentrando-se na foto abaixo, lembrando que alguns componentes, por exemplo, LEDs, são polares.
No FPGA, você precisa preencher o gerenciador de inicialização com o programador baixando todos os arquivos necessários para isso. daqui. Depois disso, toda a interação do seu PC com a placa ocorrerá via USB. Para “reviver” completamente o FPGA, você precisa baixar o kit de ferramentas daqui, e o código para implementação no FPGA do processador RISC-V e interação com dispositivos periféricos é daqui. Compile e preencha o código.
Depois disso, a placa será definida como uma unidade flash comum e será possível colocar arquivos com os programas destinados a ela. Os cartões de programa armazenados na memória podem ser selecionados usando os botões no menu da tela.
O cartucho é opcional. Esta é uma placa muito simples que pode ser feita pelo LUT, ou mesmo no perfboard. Abaixo está um diagrama do cartucho e uma imagem de sua placa:
Você pode instalar um chip de memória flash no cartucho e, quando estiver instalado, o carregamento será iniciado automaticamente quando estiver ligado. Existem também plataformas para conectar vários periféricos na placa do cartucho. Os arquivos necessários para repetir o cartucho são aquie KiCad, se você repetiu o próprio crachá, já o possui.
Se você não é um programador, está tudo pronto. Você pode dar exemplos aqui e aqui e experimente. Se você decidir escrever qualquer software de crachá, os desenvolvedores apresentarão a todos os métodos para entrar em contato com seus programas de usuário na periferia.
Os nomes dos botões consistem na palavra BOTÃO, um sublinhado e uma das seguintes palavras: ACIMA, ABAIXO, ESQUERDA, DIREITA, A, B, SELECIONAR, INICIAR.
Exemplo de código para pesquisar um botão:
if ((MISC_REG (MISC_BTN_REG) & BUTTON_RIGHT)) {
// Faça alguma coisa quando o botão direito for pressionado.
}
Exemplo de código para leitura de um timer lendo com uma frequência de 60 Hz:
uint32_t counter60hz (vazio) {
retornar GFX_REG (GFX_VBLCTR_REG);
}
Exemplo de código para ler um número de um gerador de números aleatórios de hardware:
MISC_REG (MISC_RNG_REG)
Exemplo de código para controle de LED:
MISC_REG (MISC_LED_REG) = 0xF;
As informações mais completas sobre o mecanismo gráfico do dispositivo são fornecidas neste arquivo. Gráficos - lado a lado e sprite (como no NES). A imagem na tela consiste em quatro camadas (listadas de cima para baixo): uma camada de sprite, uma camada B, uma camada A e uma camada de fundo. Os conjuntos de blocos, cada um com uma resolução total de 256x512 pixels, consistem em blocos quadrados com um lado de 16 pixels. A paleta é de 16 bits.
A camada contém blocos de 64x64, mas uma janela de blocos de 30x20 é visível na tela. Quando uma camada é selecionada, todas as alterações nela ficam visíveis imediatamente. A janela pode ser movida suavemente em relação à camada.
Camadas com blocos podem ser dimensionadas e distorcidas, os exemplos atuais são dados no arquivo main.c. O trabalho com a camada de sprite ainda não foi implementado; será feito mais perto da conferência. Os exemplos serão colocados no mesmo arquivo.
Aqui está uma equipe de desenvolvedores que tem um design interessante. Alguém dirá que em tempos anteriores, com um teclado QWERTY e o BASIC, era mais interessante, mas os retrocomputadores lembram os dois mundos - e casa computadores e consoles. E provavelmente está certo.