Voor het derde jaar, wanneer Hackaday de volgende conferentie organiseert, volgt het een goede traditie: het deelt badges uit aan de deelnemers, wat tegelijkertijd behoorlijk krachtige computersystemen zijn. Apparaten zijn inbegrepen in de ticketprijs. Ze worden geproduceerd in industriële kleine series, maar het zijn open hardware, wat betekent dat iedereen die niet naar de conferentie kan komen, als ze de wens en de mogelijkheid hebben om zichzelf dezelfde badge te maken als zelfgemaakt doe het zelf. Dit keer is het ontwikkelteam vrij groot: dit zijn auteurs onder de bijnamen 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 en Sean Cross. En ja, Voya Antonich is weer dezelfde, de ontwikkelaar van de nu vintage en eens nieuwe Galaksija-thuiscomputer.
Als de badge eerder was gemaakt in een vormfactor die vergelijkbaar was met Cybiko of een QWERTY-toetsenbordtelefoon zoals de Nokia Asha 200, en hij kon de Z80-emulator, het CP / M-besturingssysteem en de basistaalinterpreter gebruiken, lijkt het nu meer op een pocket-tolk een gameconsole zoals Game Boy. En u kunt zelfs 40-pins cartridges aansluiten. En deze keer is het gemaakt op de FPGA Lattice LFE5U-45F.
Het herhalen van het apparaat moet beginnen met de hardware. Het eerste dat u moet doen, is alle bestanden downloaden vanaf hier en installeer eerst de benodigde software - KiCad. Open het diagram erin (bestand hadbadge2019.sch) en koop alle componenten die erin zijn opgenomen, nadat u de opmerkingen eerder had gelezen (bestand hadbadge2019-bom-notes.txt). Open de printplaat tekening (hadbadge2019.kicad_pcb bestand) en exporteer naar Gerber-formaat. Bestel de vervaardiging van een bord in een bedrijf met het juiste profiel. Zelfs als je vloeiend LUT spreekt, zal het in dit geval niet helpen. Bestel in de werkplaats voor het repareren van smartphones de montage op een componentenbord in BGA-koffers. Alle andere componenten soldeer je eenvoudig zelf, waarbij je focust op onderstaande foto, waarbij je bedenkt dat sommige componenten, bijvoorbeeld leds, polair zijn.
In de FPGA moet je de bootloader vullen met de programmeur door alle bestanden te downloaden die hiervoor nodig zijn vanaf hier. Daarna vindt alle verdere interactie van uw pc met het bord plaats via USB. Om FPGA's volledig nieuw leven in te blazen, moet je de toolkit downloaden vanaf hier, en de code voor de implementatie op de FPGA van de RISC-V-processor en interactie met randapparatuur is vanaf hier. Compileer en vul de code in.
Daarna wordt het bord gedefinieerd als een gewone flashdrive en kunnen bestanden met de daarvoor bestemde programma's erop worden geplaatst. De programmakaarten die in het geheugen zijn opgeslagen, kunnen worden geselecteerd met de knoppen in het schermmenu.
De cartridge is optioneel. Dit is een heel eenvoudig bord dat kan worden gedaan door LUT, of zelfs op perfboard. Hieronder ziet u een diagram van de cartridge en een afbeelding van het bord:
U kunt een flashgeheugenchip op de cartridge installeren en wanneer deze is geïnstalleerd, wordt het laden ervan automatisch gestart wanneer deze wordt ingeschakeld. Er zijn ook platforms voor het aansluiten van verschillende randapparatuur op de printplaat. Bestanden die nodig zijn om de cartridge te herhalen zijn hieren KiCad, als je de badge zelf herhaalde, heb je die al.
Als je geen programmeur bent, dan ben je helemaal klaar. Je kunt voorbeelden nemen hier en hier en experimenteren. Als u besluit zelf badgesoftware te schrijven, laten de ontwikkelaars iedereen kennismaken met de methoden om contact te maken met hun gebruikersprogramma's in de periferie.
De knopnamen bestaan uit het woord BUTTON, een onderstrepingsteken en een van de volgende woorden: UP, DOWN, LEFT, RIGHT, A, B, SELECT, START.
Voorbeeldcode voor het pollen van een knop:
if ((MISC_REG (MISC_BTN_REG) & BUTTON_RIGHT)) {
// Doe iets als de rechterknop wordt ingedrukt.
}
Voorbeeldcode voor het lezen van een timeruitlezing met een frequentie van 60 Hz:
uint32_t counter60hz (ongeldig) {
retourneer GFX_REG (GFX_VBLCTR_REG);
}
Voorbeeldcode voor het lezen van een nummer van een hardware-generator voor willekeurige getallen:
MISC_REG (MISC_RNG_REG)
Voorbeeldcode voor LED-besturing:
MISC_REG (MISC_LED_REG) = 0xF;
De meest volledige informatie over de grafische engine van het apparaat wordt gegeven in dit bestand. Afbeeldingen - tegel en sprite (zoals op NES). De afbeelding op het scherm bestaat uit vier lagen (van boven naar beneden opgesomd): een sprite laag, een laag B, een laag A en een achtergrondlaag. Tegelsets, elk met een totale resolutie van 256x512 pixels, bestaat uit vierkante tegels met een zijde van 16 pixels. Het palet is 16-bit.
De laag bevat 64x64 tegels, maar een venster van 30x20 tegels is zichtbaar op het scherm. Wanneer een laag is geselecteerd, worden alle wijzigingen daarin onmiddellijk zichtbaar. Het venster kan soepel worden verplaatst ten opzichte van de laag.
Lagen met tegels kunnen worden geschaald en vervormd, de huidige voorbeelden worden gegeven in het main.c-bestand. Werken met de sprite laag is nog niet geïmplementeerd, het zal dichter bij de conferentie komen. De voorbeelden worden dan in hetzelfde bestand geplaatst.
Hier is een team van ontwikkelaars met een interessant ontwerp. Iemand zal zeggen dat het in eerdere tijden met een QWERTY-toetsenbord en BASIC interessanter was, maar retrocomputers herinneren zich beide werelden - en thuis computers en consoles. En waarschijnlijk is dat juist.