Piszemy grę na C64. Część #1 Poznajemy Kick C

Jak lepiej poznać nowe narzędzie, niż wykorzystać je do jakiegoś konkretnego zadania? A co, jeśli by spróbować napisać mini gierkę, ucząc się nowego języka programowania? Myślę, że z Waszą pomocą może nam się udać.

screen

Od jakiegoś czasu marzy mi się napisanie gierki na C64. Nawet coś tam dłubię w assemblerze od kilku lat, ale efekty, na razie, nie są godne pokazania. Idzie wolno, głównie dlatego, że nie jestem koderem i wielu rzeczy się uczę. Także dla tego, że w assemblerze pisze mi się raczej wolno. Myślałem, aby sprawdzić jakiś język wyższego poziomu, ale wyboru na C64 za dużego nie było. Aż niedawno odkryłem język Kick C. Jest to implementacja języka C (jego podzbioru) i kompilator na Win, MacOS i Linux, który zainteresował i zmotywował mnie tym, że jest niejako nakładką na popularny Kick Assembler. Kolejną motywacją był ciekawy wątek na, uwaga…. AtariOnLine.pl, gdzie odbywa się dyskusja na temat języków wyższego poziomu niż assembler, jak np. C czy Pascal i ich zastosowania na 8-bitowych maszynach. Ostatecznym motywatorem okazał się kolega Jelcynek, który prowadzi na Youtube kanał Jaskinia Prawiczka (link poniżej). Pisze on mini grę na Atari i pokazuje to na live stream’ach i filmach. Gra którą pisze jest prosta, ale pokazuje z jakimi zagadnieniami trzeba się zmierzyć pisząc nawet coś tak prostego.

Tym wstępem zapraszam na mini serię filmów i artykułów, gdzie spróbujemy zrobić to co Jelcynek, ale na Ccommodore 64. Spróbujemy poznać KickC i narzędzia wspomagające tworzenie programów na C64 – np. C64 Debugger. Mam nadzieję że czegoś się wspólnie nauczymy i będziemy się przy tym dobrze bawić.

Uwaga. Nie jest moim zamiarem zrobić tutaj kurs programowania w C czy nauki assemblera. Postaram się, aby material był przystępny dla wszystkich odbiorców, ale jak mi się wkradnie jakiś skrót myślowy, to wybaczcie i piszcie w komentarzach na co mam zwracać uwagę. Chcę pokazać narzędzia, poznać przy Was i z Wami Kick C. Tyle! Może ktoś zechce rozwinąć dalej to, co uda się tutaj stworzyć.

Gra?

Ok… Słowo gra jest może tutaj nadużyciem, ale spróbujemy napisać coś, co przedstawia screen poniżej. To jest obrazek z Atari pokazujący jak to wygląda u Jelcynka. Ekran w trybie znakowym + ruchomy sprajt. Zbieranie kluczyków, unikanie przeszkadzajek. Ot cała „mechanika” gry.

Zrzut ekranu 2020-04-15 o 21.06.33.png

Kick Assembler

Zanim napiszę parę słów o Kick C, trzeba wspomnieć o Kick Assemblerze. Jest to nowoczesny assembler 6502, stworzony przez Slammera z commodorowskiej grupy Camelot już kilka lat temu. Dynamicznie rozwijany i wzbogacany nowymi funkcjonalnościami, używany przez wielu koderów na scenie. Jego główną cechą jest rozbudowany język makr (od angielskiego Macro), zbliżony składnią do C/Javy. Pozwala on m.in na:

  • swobodne generowanie danych jak np. tablice
  • zarządzanie segmentami kodu i linkowanie ich
  • dodaje namespace, aby łatwiej zarządzać przejrzystością kodu – np. powtarzalne etykiety
  • ma wbudowane funkcje matematyczne
  • itp. itd.

Tyle wiem… ale jako nie-koderowi wystarcza mi to aby stwierdzić, że dostajemy bardzo potężne narzędzie. Link do strony KickAss poniżej. Znajdziecie tam również szczegółową dokumentację. Kick Assembler poznałem (i nadal poznaję), bo piszę w nim małe intra czy wspomnianą kiedyś grę (od 3 lat 😛 ). Przypadł mi bardzo do gustu. A potrzeby które mam, czy też oczekiwania względem asemblera, spełnia on wyśmienicie.

KickC

Od razu napiszę to, co dla mnie wydało się najważniejszą cechą tego kompilatora C. KickC jest jakby nakładką (pluginem) na Kick Assemblera. Kod napisany w „naszym” C nie jest kompilowany do plików binarnych (obiektów .o), tylko do kodu assemblera w składni Kick Assemblera właśnie. Co ciekawe, niektóre rozbudowane konstrukcje makr przenoszą się z Kick C, bezpośrednio do Kick Ass’a. Dopiero tutaj są asemblowane do kodu wykonywalnego. Bardzo sprytne rozwiązanie.

Warto wspomnieć, że Kick C pisze niejaki Rex, także z Camelotu. Narzędzie jest w fazie beta. Ostatnia wersja z 14.04.2020, ma numer 0.80. Ja, w filmie, zacząłem używać poprzedniej 0.7.11 i na razie nie będę tego zmieniał.

Sama składnia pisanych w Kick C programów, jest bardzo zbliżona, ale nie identyczna z klasycznym C. Jest w nim parę „ułatwień” sprawiających, że pisanie jest proste i przyjemne. Pokazuję to w filmie. W kolejnych pewnie nie raz wspomnę. Nie jestem purystą C i te dodatki, np. deklaracja zmiennych od razu z inicjacją, jest dla mnie fajnym przyspieszaczem kodowania. Z tego co pamiętam to tego w klasycznym C nie ma, a jest chyba w Javie – poprawcie mnie jeśli się mylę. Pamiętajcie! Piszę z pozycji osoby, która nie uważa się za kodera, tylko od czasu do czasu, lubi sobie coś tam zakodować. 😉

W trakcie tej zabawy będą badał czy  do mojego większego projektu może logikę gry da się napisać w C – kto wie? Film jest dość długi i takie będą też kolejne filmy. Robię to bez pośpiechu i postaram się tłumaczyć co robię a jak coś będzie nie jasne to piszcie w komentarzach.

Pod filmem linki do wszystkich wspomnianych zasobów. Zapraszam

Carrion

Linki

 

 

 



Kategorie:Artykuły, Film, Gry

Tagi: , , , , , , , , ,

2 replies

  1. Ten kod asm wygenerowany przez KickC (pętla przepisująca ekran) nie wyglądała na optymalną. Niemniej jednak jestem za 🙂
    Dzięki KickC większa rzesza programistów może cieszyć się z kodowania na C64.
    Świetny pomysł!

  2. Dzięki DKT a dobre słowo. Ta pętla faktycznie wygląda na dość złożoną, ale zauważ że tam jest 16 bitowy indeks w tablicy. Zakładam że da się to zrobić inaczej (np 4 kopiowania po 256 bajtów). Ale i tak jestem zadowolony z KickC. Zgadzam się, że może kogoś to zainspiruje do rozpoczęcia zabawy w programowania na C64. Inna sprawa… na forum AOL koledzy testowali różne języki wysokiego poziomu do skompilowania kodu (przykład struktury tablic) i IMO KickC wypadł chyba najlepiej.