Skocz do zawartości

Gra VGA - prosta platformówka ze starych Nintendo (na ElbertV2)


Pomocna odpowiedź

Cześć,

zabrałem się tym razem za prze-portowanie bardzo prostej platformówki (w stylu Nintendo) na FPGA ElbertV2.

Chodzi o grę z tego linku:

https://www.circuitben.net/node/24

Było kilka błędów, ale udało się je wyeliminować (były to bardzo proste błędy).

Po syntezie na Spartan3A z Elbert'a gra zajmuje około 486 LUT (34%) i jeden blok pamięci oraz trochę pinów I/O. Znów trzeba było użyć pętli PLL - 25 MHz, dla odmiany źródła tej gry są w VHDL.

Patrz obrazek:

Pozostało do przerobienia sterowanie postacią z NES controller na przyciski na płytce ElbertV2. Gra jest dużo ciekawsza niż PONG 😉

Jak będę miał to działające to umieszczę źródła projektu ISE dla Elberta na tej stronie (spakowany projekt).

BTW: właśnie próbuję podłączyć i obsłużyć "nunchuk" z Nintendo Wii do Elberta - jeśli coś z tego wyjdzie to zrobię dwie wersje tej platformówki:

1) Ruch postaci za pomocą klawiszy Elberta

2) Ruch postaci za pomocą "nunchuk'a" do Nintendo Wii

Pozdrawiam

Link do komentarza
Share on other sites

A już myślałem, że ty robiłeś konwersję z innego języka czy platformy, skoro mówisz "przeportowanie" (bo tak to się u nas inżynierów nawet programistów to pojęcie się rozumie) - no ale nieistotne (po prostu dokonałeś pomyślnej implementacji projektu z podanego linka już tak uściślając).

Sam projekt nawet git - bym powiedział najprościej zrobiony jak się da (właśnie ja tak swoją pracę inżynierską zrobiłem). Niemniej tu ważny niuans, na który warto zwrócić uwagę - otóż tutaj facet stosuje moduły które mają pełnić rolę pamięci ROM, zawierającej obiekty mapy itd. To co zrobił jest oczywiście na logikę poprawne, ale czasem środowiska nie rozpoznają tego, że to chodzi o pamięć ROM i wymuszają na układzie (a właściwie jego tablicach LUT), aby sam się zachowywał jak takowa pamięć (czyli powstaje absurd - masz bloki pamięciowe, a nie są stosowane, bo układ próbuje się zachować jak te bloki). Z czego to wynika? Po prostu z niedoskonałości środowisk i założeń jakie przyjęli jego twórcy (ot wymyślili, że do opisu pamięci ROM starczy taki, a siaki kod i bez namysłu na sztywno go dorzucili do kompilatora, że tak ma być i koniec, bez uwzględniania innych możliwych wariancji - ot taki "tępy" kompilator zrobiony na łatwiznę - szczególnie to widać w Quartusie, który jest "tępy" okropnie w tym względzie i trzeba używać "template-a" który oferuje i dopiero po nim się orientuje, że należy to przekształcić na bloki pamięciowe). To tak na boku - taka dobra wskazówka projektancka, żeby zwracać uwagę na to, że tam gdzie się da to tam należy spychać funkcjonalność na pamięć (u ciebie widzę jednak, że prawdopodobnie tak się stało, bo coś mało LUT-ów użytych zostało - no ale mogę się mylić 🙂)

Link do komentarza
Share on other sites

A już myślałem, że ty robiłeś konwersję z innego języka czy platformy, skoro mówisz "przeportowanie" (bo tak to się u nas inżynierów nawet programistów to pojęcie się rozumie) - no ale nieistotne (po prostu dokonałeś pomyślnej implementacji projektu z podanego linka już tak uściślając).

To tak na boku - taka dobra wskazówka projektancka, żeby zwracać uwagę na to, że tam gdzie się da to tam należy spychać funkcjonalność na pamięć (u ciebie widzę jednak, że prawdopodobnie tak się stało, bo coś mało LUT-ów użytych zostało - no ale mogę się mylić 🙂)

Cześć Jakub,

miło Cię usłyszeć. Raczej został użyty jeden z bloków pamięci. Na razie utknałem z obsługą "Nunchuka" od Nintendo WII - nie dlatego, że nie wiem jak on działa, ale z powodu braku gniazdka takiego jak jest w konsoli Nintendo (mam tylko oryginalne nunchuki od konsoli i nie chcę ich niszczyć - pewnie gdzieś w chińskim sklepie znajdę podróbkę Nunchuka).

Pozdrawiam

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Pewnie na Alibabie czy Aliexpress znajdziesz takowe gniazdko 🙂

Cześć,

właśnie znalazłem "Wii nunchuk" za około 21 PLN w chińskim sklepie i zamówiłem:

https://www.banggood.com/Classic-Nunchuck-Controller-for-Wii-Wii-U-Black-and-White-Color-p-908998.html?rmmds=search&cur_warehouse=CN

, tak, że postaram się go użyć w tej grze (i może jakichś innych w przyszłości - Utnę mu złącze i podlutuję kable do takiego gniazdka, że da się bezpośrednio podłączyć do ElbertaV2) 😉

Pozdrawiam

Link do komentarza
Share on other sites

Cześć,

platformówka VGA poprawnie wyświetla się na monitorze VGA. Zamieszczam cały działający projekt (nie musicie się obawiać przed wgraniem na Elberta plik ucf jest poprawny - wgrałem u siebie grę).

Nie działa jeszcze ruch postaci (w tym wypadku czerwonego klocka), trzeba przerobić kod na obsługę przycisków w Elbercie, lub jakiś inny kontroler. Czekam, aż przyjdzie zamówiony w chińskim sklepi "nunchuk" od Nintendo Wii - jak przyjdzie postaram się dodać jego obsługę w grze. W międzyczasie pewnie dodam też obsługę ruchu postaci za pomocą przycisków Elberta.

Pilk bin do wgrania do FPGA to "ss.bin" (w zamieszczonym projekcie ISE).

A tak gra wygląda na ekranie monitora VGA:

W załączniku spakowany plik projektu gry "ISE" dla Elberta.

Podłączyłem shield firmy Keyestudio z joystickiem i czterema przyciskami do Elberta (bo na przyciskach z Elberta słabo by się grało ). Niestety joystic jest analogowy, więc potrzebny byłby przetwornik analogowo-cyfrowy. Na razie użyję przycisków z tego shieldu do sterowania grą (dopóki nie będę miał nunchuka).

Tak to wygląda:

Biorę się teraz za przeróbkę gry, aby działała z tymi przyciskami.

Pozdrawiam

ARCADE01.zip

  • Lubię! 1
Link do komentarza
Share on other sites

Cześć,

platformówka działa już w pełni (ruch "postaci" za pomocą 4 switchy z Elberta).

Nie jest to ładnie zrobione (przeróbka) - raczej polega na "chamskim" hacku w entity read_pad.vhd. Kod tego entity wygląda teraz tak:

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.all;
USE IEEE.STD_LOGIC_ARITH.all;
USE IEEE.STD_LOGIC_UNSIGNED.all;

ENTITY read_pad IS PORT (
   clock:              IN STD_LOGIC;
   pad_data:           IN STD_LOGIC;
   pad_clock:          OUT STD_LOGIC;
   pad_load:           OUT STD_LOGIC;
   pad_state:          OUT STD_LOGIC_VECTOR(7 downto 0);
 jumpBtn:            IN STD_LOGIC;
   leftBtn:            IN STD_LOGIC; 
 rightBtn:           IN STD_LOGIC; 
 resetBtn:           IN STD_LOGIC 
);
END;

ARCHITECTURE read_pad OF read_pad IS

 component debounce is
      port (  clk    : IN  STD_LOGIC;  --input clock
				button  : IN  STD_LOGIC;  --input signal to be debounced
				result  : OUT STD_LOGIC); --debounced signal
   end component;	

   SIGNAL ser_clock: STD_LOGIC;
   SIGNAL div_count: STD_LOGIC_VECTOR(3 downto 0);
   SIGNAL data: STD_LOGIC_VECTOR(7 downto 0);
   SIGNAL bit_num: STD_LOGIC_VECTOR(2 downto 0);
   SIGNAL done: STD_LOGIC;
 SIGNAL jumpBtnDeb: STD_LOGIC;
 SIGNAL leftBtnDeb: STD_LOGIC;
 SIGNAL rightBtnDeb: STD_LOGIC;
 SIGNAL resetBtnDeb: STD_LOGIC;

BEGIN

D1: debounce port map (clock, jumpBtn, jumpBtnDeb);
D2: debounce port map (clock, leftBtn, leftBtnDeb);
D3: debounce port map (clock, rightBtn, rightBtnDeb);
D4: debounce port map (clock, resetBtn, resetBtnDeb);

   PROCESS (clock)
   BEGIN
     IF clock'Event AND clock = '1' THEN
	   pad_state <= "00000000";

	   if leftBtnDeb = '0' then 
	     pad_state(1) <= '1';
	   end if;
	   if rightBtnDeb = '0' then
	     pad_state(0) <= '1';
	   end if;
	   if jumpBtnDeb = '0' then
          pad_state(7) <= '1';
	     pad_state(6) <= '1';
	   end if;
		if resetBtnDeb = '0' then
          pad_state(4) <= '1';
	     pad_state(5) <= '1';
	   end if;

	END IF;
   END PROCESS;


--    pad_state <= "00000000";
END read_pad;

Ruch jest obsługiwany przez 4-ry switche Elberta (dolny romb):

SW3 - Jump

SW6 - Left

SW4 - Right

SW5 - Reset gry

W załączniku cały projekt ISE działającej w pełni gry (plik do wgrania ss.bin).

Niestey "nunchuk" jeszcze nie przyszedł.

BTW: gra "sama w sobie" jest bardzo prosta i nudna - traktuję jej uruchomienie jako "wprawkę", aby nauczyć się jak generować bardzo prosty "Świat" gry 😉

Pozdrawiam

ARCADE01.zip

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.