Już trzeci rok, kiedy Hackaday organizuje kolejną konferencję, kieruje się dobrą tradycją: rozdaje odznaki uczestnikom, którzy są jednocześnie dość potężnymi systemami obliczeniowymi. Urządzenia są wliczone w cenę biletu. Produkowane są w małych seriach przemysłowych, ale są otwartym sprzętem, co oznacza, że każdy, kto nie może dostać się na konferencję, może, jeśli ma na to ochotę i jest w stanie zrobić sobie taką samą odznakę jak domowej roboty zrób to sam. Tym razem zespół programistów jest dość duży: są to autorzy pod pseudonimami 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 i Sean Cross. I tak, Voya Antonich jest znowu tym samym, twórcą rocznika, a raz nowego domowego komputera Galaksija.
Jeśli w przeszłości odznaka była wykonana w formie podobnej do Cybiko lub telefonu z klawiaturą QWERTY, takiego jak Nokia Asha 200, i mogła obsługiwać emulator Z80, system operacyjny CP / M i tłumacz języka podstawowego, teraz wygląda bardziej jak kieszonkowy konsola do gier, taka jak Game Boy. A nawet pozwala na podłączenie 40-pinowych kartridży. I tym razem został wykonany na kratce FPGA LFE5U-45F.
Powtarzanie urządzenia powinno zaczynać się od sprzętu. Pierwszą rzeczą do zrobienia jest pobranie wszystkich plików stąd i zainstaluj niezbędne oprogramowanie, przede wszystkim - KiCad. Otwórz w nim diagram (plik hadbadge2019.sch) i kup wszystkie zawarte w nim komponenty, po uprzednim przeczytaniu notatek (plik hadbadge2019-bom-notes.txt). Otwórz rysunek płytki drukowanej (plik hadbadge2019.kicad_pcb) i wyeksportuj do formatu Gerber. Zamów produkcję deski w firmie o odpowiednim profilu. Nawet jeśli biegle znasz LUT, w tym przypadku to nie pomoże. W warsztacie do naprawy smartfonów zamów montaż na płycie komponentowej w obudowach BGA. Z łatwością lutujesz wszystkie pozostałe elementy, skupiając się na poniższym zdjęciu, pamiętając, że niektóre elementy, na przykład diody LED, są biegunowe.
W FPGA musisz wypełnić program ładujący programatorem, pobierając wszystkie niezbędne do tego pliki stąd. Następnie wszystkie dalsze interakcje komputera z płytą będą odbywać się przez USB. Aby w pełni ożywić układy FPGA, musisz pobrać zestaw narzędzi stąd, a kod do implementacji na FPGA procesora RISC-V i interakcji z urządzeniami peryferyjnymi to stąd. Skompiluj i wypełnij kod.
Następnie tablica zostanie zdefiniowana jako zwykły dysk flash i będzie można na nim umieszczać pliki z przeznaczonymi do tego programami. Karty programów zapisane w pamięci można wybrać za pomocą przycisków w menu ekranowym.
Wkład jest opcjonalny. Jest to bardzo prosta deska, którą LUT, a nawet perfboard może wykonać. Poniżej znajduje się schemat wkładu i zdjęcie jego płyty:
Możesz zainstalować układ pamięci flash na kasecie, a następnie, gdy jest zainstalowany, ładowanie z niego rozpocznie się automatycznie po włączeniu. Istnieją również platformy do podłączania różnych urządzeń peryferyjnych na płycie kasety. Pliki potrzebne do powtórzenia kasety to tutaji KiCad, jeśli powtórzyłeś samą odznakę, już ją masz.
Jeśli nie jesteś programistą, wszystko jest gotowe. Możesz wziąć przykłady tutaj i tutaj i eksperymentuj. Jeśli zdecydujesz się napisać oprogramowanie do odznak samodzielnie, programiści zapoznają wszystkich z metodami kontaktowania się z programami użytkowników na peryferiach.
Nazwy przycisków składają się ze słowa PRZYCISK, podkreślenia i jednego z następujących słów: GÓRA, DÓŁ, LEWO, PRAWO, A, B, WYBIERZ, START.
Przykładowy kod odpytywania przycisku:
jeśli ((MISC_REG (MISC_BTN_REG) i BUTTON_RIGHT)) {
// Zrób coś po naciśnięciu prawego przycisku.
}
Przykładowy kod do odczytu timera z częstotliwością 60 Hz:
uint32_t counter60hz (void) {
zwraca GFX_REG (GFX_VBLCTR_REG);
}
Przykładowy kod do odczytu liczby ze sprzętowego generatora liczb losowych:
MISC_REG (MISC_RNG_REG)
Przykładowy kod do sterowania diodami LED:
MISC_REG (MISC_LED_REG) = 0xF;
Podano najbardziej kompletne informacje na temat silnika graficznego urządzenia w tym pliku. Grafika - kafelki i duszka (jak w NES). Obraz na ekranie składa się z czterech warstw (wymienionych od góry do dołu): warstwy sprite, warstwy B, warstwy A i warstwy tła. Zestawy płytek, z których każdy ma całkowitą rozdzielczość 256 x 512 pikseli, składają się z kwadratowych płytek o boku 16 pikseli. Paleta jest 16-bitowa.
Warstwa zawiera 64x64 kafelki, ale okno 30x20 kafelków jest widoczne na ekranie. Po wybraniu warstwy wszystkie jej zmiany stają się natychmiast widoczne. Okno można płynnie przesuwać względem warstwy.
Warstwy z kafelkami można skalować i zniekształcać, aktualne przykłady podano w pliku main.c. Praca z warstwą duszka nie została jeszcze zaimplementowana, zostanie ona przybliżona do konferencji. Przykłady zostaną następnie umieszczone w tym samym pliku.
Oto zespół programistów dostał ciekawy projekt. Ktoś powie, że w poprzednich czasach z klawiaturą QWERTY i BASIC było to bardziej interesujące, ale retrokomputery pamiętają oba światy - i dom komputery i konsole. I prawdopodobnie tak jest.