Dzieje się wiele dobrego w związku z konkursem. Najbardziej podoba
mi się to, że osoby, którym wcześniej do głowy by nie przyszło
parać się tak antycznym językiem jak Atari Basic czy Turbo Basic
XL, postanowiły spróbować swoich sił w konkursie. Ale przecież to
nie język gra główna rolę, tylko algorytmy gry. Każdy, kto
logicznie myśli, ma pomysł i odrobinę czasu, może zaskoczyć nas
czymś fajnym. Tym osobom jednak trzeba pomóc w przełamaniu
ograniczeń, które narzuca programowanie na 8-bitowej maszynce,
trzeba wskazać tricki, które są charakterystyczne dla sprzętu Atari
i nie mają nic wspólnego z algorytmem gry.
Właśnie w wyniku bariery przyzwyczajeń najnowsza gra Krzysztofa
"xxl" Dudka o nazwie Loops of Zen nie powstała w Turbo
Basicu XL. Nie mogąc szybko przypomnieć sobie i opanować "metody"
programowania w TBXL Krzysiek zdecydował się zrobić swój konkursowy
pomysł w assemblerze, przez co przestał on być konkursowy. Za to
wzbogaciliśmy się o jeszcze jedną ciekawą, tym razem logiczną, grę
z świetną konwersją muzyczną autorstwa Michała "Mikera"
Szpilowskiego. Pliczek w katalogu pod
literą L.
Drugi pozytywny element konkursu to współpraca, której ślady
oglądam w mojej skrzynce pocztowej każdego dnia. Wokół mnie
cyrkulują liczne podpowiedzi, jak pisać grę, jakimi narzędziami się
posługiwać (szczególne podziękowania należą się tu Arkowi
"ArSoft" Lubaszce). Są też zapytania, szczególnie o Turbo Basic
i o to "jak zacząć". Ponieważ z autopsji wiem, że przełamanie
pierwszych niepowodzeń (choćby takiego banału, jak przypomnienie
sobie, jak działa definiowanie procedur w TBXL czy która komórka
służy do zmiany kolorów tła) jest największa przeszkodą, bo potem
to już "samo idzie", prezentowałem nadsyłane porady w komentarzach
oraz w bezpośrednich mailach do pytających.
Dzisiejszego wieczoru pojawia się dłuższy tekst od Pawła
"Sikora" Sikorskiego, który popełnił zarys FAQ - dodatkowe
porady dla początkujących w Atari Basic/Turbo Basic XL:
"Kilka uwag dla osób, które pod wpływem konkursu Kaz-a zaczęły
tworzyć programy w Turbo Basic XL. Od razu zaznaczam, że nie jestem
ekspertem w tej dziedzinie. Na pewno są osoby, które znają ten
język dużo lepiej niż ja, ale to w tym przypadku może być zaletą –
może ktoś pomoże napisać cykl artykułów dotyczących Turbo Basica
XL? Oto lista przykładowych pytań, które moga paść:
1. Czy jest gdzieś opis języka?
Tak, w sieci jest kilka(naście, dziesiąt) stron z opisem języka.
Naprzykład był prowadzony jego kurs w "Tajemnicach Atari" (polecam
elektroniczne archiwum tego magazynu), był opisywany w "Bajtku", a
pełen opis języka, ale bez przykładów, można znaleźć w książce
Wojciecha Zientary „Języki Atari XL/XE cz.1”. (warto zajrzeć też do
materiałów
bibliotecznych - Kaz)
2. Znam tylko Atari Basic, więc co dalej?
To znakomicie. Wszystkie prawidłowo napisane programy w Atari
Basicu działają także w TBXL, jak od tej pory będę skrótowo nazywał
Turbo Basic XL. Osoby znające Atari Basic mają znakomitą podstawę
do programowania w TBXL, który oferuje to wszystko co ten pierwszy
i wiele dodatków. W drugą stronę też to działa, ale z pewnymi
ograniczeniami – prawidłowe konstrukcje Atari Basica da się
odczytać, ale rozszerzenia standardu już nie.
3. Wywołania, procedury i inne takie
W odróżnieniu od standardowego Basica, TBXL jest językiem opartym o
procedury, co ma swoje niezaprzeczalne zalety. Tam, gdzie
programista w Atari Basicu musiał się męczyć z pamiętaniem linii w
przypadku skoków lub sterowania warunkowego (GOTO, GOSUB) – tu
wywołujemy procedurę (EXEC nazwa_procedury). Budowa procedury jest
następująca (numeracja linii przykładowa):
100 proc Przykladowa: REM nazwa procedury
101 … :REM treść procedury
150 ENDPROC :REM koniec procedury
Co ciekawe i co widać w powyższym przykładzie, TBXL nie jest czuły
na wielkość liter przy pisaniu kodu, co jest ważne dla świeżo
upieczonych programistów. Nazewnictwo procedur jest zasadniczo
dowolne, przy założeniu, że nazwa składa się z liter i/lub cyfr i
nie zawiera słów kluczowych języka (bez znaków narodowych!).
Procedurę wywołujemy przez instrukcję EXEC, kilka przykładów
(wywoływanie procedury o nazwie PRZYKLADOWA).
10 EXEC PRZYKLADOWA:REM WYWOŁANIE BEZPOŚREDNIE Z LINII
10 IF A$=”T” THEN EXEC PRZYKLADOWA:REM WYWOŁANIE Z WARUNKU
10 FOR I=0 TO 9
11 IF (IMOD3=0) EXEC PRZYKLADOWA
12 NEXT I: REM WIELOKROTNE WYWOŁANIE Z WARUNKIEM W
PĘTLI
O czym należy pamiętać? Przede wszystkim o tym, że pierwsze
wywołanie procedury (pamiętamy, nasze EXEC NAZWA_PROCEDURY) musi
być przed pierwszą procedurą! Co jeszcze? Każda procedura w
momencie zakończenia (ENDPROC) wraca do pierwszej instrukcji
(uwaga! Przy niektórych warunkowych wywołaniach do pierwszej linii)
po instrukcji wywołania. Każda procedura powinna się kończyć
instrukcją ENDPROC (lub kilkoma takimi instrukcjami – możliwe
wymuszenie warunkowego zakończenia procedury), jednak to nie jest
sprawdzane przez kompilator.
Pamiętamy także, że program w Basicu powinien się kończyć przez END
– a taki najbardziej elegancko jest wstawić przed pierwszą
procedurę (zakończenie procedury zawsze wyskakuje do instrukcji za
jej wywołaniem). Kolejne procedury (a nawet tą samą, na przykład
tytułową) można oczywiście wykonywać z kolejnych procedur.
4. Ułatwienia dla programujących
listing z wcięciami, czytelniejszy kod: L + (wyłączenie – przez
minus zamiast plusa)
programowa obsługa klawisza BREAK (standardowy błąd obsługiwany
przez instrukcję TRAP, a nie systemowe przerwanie działania
programu): B +/-
pusta instrukcja REM w formie dwu myślników (--) – oddziela
„logiczne” części programu, tylko w celu poprawy listingu (krótsza
od standardowego REM)
instrukcja wyświetlająca użyte zmienne i stałe (tak jakby ich
listing): DUMP
renumeracja linii RENUM skąd, gdzie, jaki_skok
dwubajtowy PEEK i POKE: DPEEK, DPOKE. Przykład użycia (tu
przeniesienie obrazka tkwiącego pod adresem $7000 na ekran w
grafice 8-mej BASICA):
10 GR.24: REM tryb HIRES bez okna tekstowego
20 MOVE $7000,DPEEK(88),7680
Przeniesienie instrukcją MOVE z pamięci skąd (tutaj $7000 – tam
przykładowo umieszczona grafika) do pamięci dokąd (tutaj odczytana
dwubajtowa wartość początku ekranu: DPEEK(88)), wartości ile_bajtów
(7680 – tyle ma standardowy obrazek)
instrukcje pobierania i przenoszenia (BGET, BPUT, MOVE,
BLOAD)
Przykładów można mnożyć, jednak te na początek powinny wystarczyć,
a w razie dalszych pytań odsyłam do Zientary i "Tajemnic
Atari".
5. Dlaczego gra wolno działa?
TBXL jest językiem interpretowanym, więc każda instrukcja jest
przetwarzana w trakcie realizacji. Są dwie zasadnicze metody
przyspieszenia programu:
optymalizacja kodu – warto ją zrobić zawsze, nawet gdy chcemy
zastosować drugą metodę przyspieszania.
kompilacja kodu – 95% prawidłowo napisanych programów daje się
skompilować do języka maszynowego, a tam prędkość działania to już
zupełnie inna bajka.
6. Jak skompilować?
Użyć zewnętrznego programu, który taką czynność wykona. Dodatkowo
tak przetworzony kod – jeśli go chcemy uruchomić bez TBXL – wymaga
dołączenia bibliotek. Załatwi to za nas LINKER (narzędzia są na
mojej dyskietce). (te same
narzędzia są też w dziale Użytki oraz na ostatnio prezentowanej
dyskietce dla poczatkujacych - Kaz).
7. Kłopocki, kłopocki?
Trzeba pamiętać, że nie wszystko zechce od razy zadziałać. Należy
wtedy spróbować zoptymalizować kod – to jest przyczyna
najczęstszych błędów. Dodatkowo należy wiedzieć, że program
skompilowany siedzi w innych miejscach pamięci niż nieskompilowany
– może to spowodować na przykład błędy w grafice, muzyce,
zawieszanie się programu. Jeśli program w TBXL działał prawidłowo,
a po kompilacji i zlinkowaniu coś się dzieje – trzeba podejrzeć
adresy pod jakimi obecnie siedzi program (na przykład przy pomocy
Super Packera – jest na dyskietce wymienionej w linku) i skorygować
ewentualną pozycję grafiki, muzyki, fontów… Jest to najczęstszą
(przynajmniej u mnie) przyczyną złych objawów po kompilacji
programów. Na koniec wyrażam cichą nadzieją, że mój mini-artykuł
się komuś przydał i życzę sukcesów w pracy kodera onkursowego i nie
tylko."
pin 2008-11-15 23:25:41
jeśli ktokolwiek ma problemy z programowaniem w TurboBasic XL - zapraszam na PRIV. Chętnie pomogę, w miarę moich możliwości. GG: 3249345 pin 2008-11-15 23:30:03
aha - jeśli ktokolwiek kompiluje kod TB zawierający bodajże instrukcję DIV - koniecznie niech się zgłosi po poprawiony RUNTIME do mnie. Dodatkowo mam linker umożliwiający połączenie w jeden WYKONYWALNY :) plik programu po kompilacji z bibliotekami. Poprawki bibliotek RUNTIME są autorstwa Jacka Żuka - autora hardware'u KMK/JŻ IDE - czyli interfece'u IDE. Kaz 2008-11-15 23:42:49
Jezeli to nie jest scisle tajny soft, to podeslij go Pinek takze do mnie - zalacze do katalogu uzytkow i kazdy chetny bedzie mogl go sobie pobrac w dowolnej chwili. sikor 2008-11-15 23:57:15
@Pin: chyba masz ten sam linker co jest zamieszczony na podesłanym przeze mnie obrazie ;) Jest tam bodajże runtime2 zamiast runtime. Jeżeli masz jeszcze co innego - to dawaj śmiało ;) pin 2008-11-16 00:08:26
jeśli RUNTIME2 - to jest to samo. Yosh 2008-11-16 00:38:03
Każdemu kto pragnie ściągi z mapy pamięci Atari polecam: http://www.atariarchives.org/mmm z dowcipem i o wszystkim (tzn adresy $0000 do $FFFF :P) sikor 2008-11-16 09:54:19
@KAZ: zjadłeś * przy B +/- i L+/- - w tekście oryginalnym były. I jeszcze "Kłopociki, kłopociki" powinno być ;) Adam Mowny 2008-11-16 13:15:10
Mimo że pomysł nie oryginalny, to Loops of Zen i tak jest miodzio. Dzięiki Xxl/Miker Moze sprobuje 2008-11-16 17:27:49
jak zrobic, zeby ekran byl podzielony na pol, gora byl na przyklad GR.15 a dolem tryb tekstowy?
I drugie pytanie - czy da sie obslugiwac DLI w trubobasicu? Pytajnik 2008-11-16 18:50:01
Trubobasic to jakiś basic stworzony przez Truba?:) maly_swd 2008-11-16 19:19:12
Moze sprobuje-> da sie podzielic tu opis: http://atariki.krap.pl/index.php/ANTIC_Display_List
tak w TBXL da sie utworzyc displayliste przez dpoke ataryjek 2008-11-17 13:14:58
Witam wszystkich,
Czy ktos moze przymierza sie do napisania gry w Action! ? Yosh 2008-11-17 19:21:52
@ataryjek: tak, dokładnie - ja przymierzam - jestem na etapie wstępnych prób. Masz może jakieś pytanko ? :) na pewno będzie to dla mnie miłą rozgrzewką.... ataryjek 2008-11-17 20:46:35
tez sie przymierzam :) musze sobie wszystko przypomniec, lacznie ze skrotami klawiszowymi w edytorze, ostatnio pisalem w action kilkanascie lat temu, mam nawet cartridge-podrobke - Action i Basic XE w jednym, kupiony na gieldzie na Grzybowskiej w Wwie :) @Yosh - piszesz na emulatorze? Amun-Ra 2008-11-18 13:43:15
Ja piszę w Action! To moje pierwsze podejście do tego języka. Mam nadzieję, że zdąże. Yosh 2008-11-18 17:43:59
@ataryjek: taa, na emulcu. Jest rozdział w helpie od atari800win plus "H: device handler" bardzo umila prace (pewnie piszącym w basic-u też).
Język fajny, ale chęć poprawienia wygenerowanego kodu pozostaje :P santa's little helper 2008-11-18 20:00:18
Dla piszących/chcących pisać w action!: http://gury.atari8.info/effectus/main.htm
Panowie, chęci się liczą, ale zauwarzcie, że jest coraz mniej aktywnych programistów (oraz ich "płodów") na tzw. scenie małego Atari. "Konkurencja" od dawna nie organizuje dwudziestoczterogodzinnych konkursów (ciekawe czy tylko z jednego powodu? :P), dema wychodzą tylko na zlotach i już raczej nie prą do przodu ; cykl "graphofontowy" choć niezły, to wcale nie przyniósł wysypu nowych juzerów tego softu (nie jest to jakoś widoczne).
Złym znakiem jest, że nawet niejaki Grzybson przeżuca się na "programowanie" Grzyb(k)a. :| To gdzie tu przyszłość i nowe zastępy ataromaniaków?! Konop podobno zaczynał od takich samych lejm-intros jak w/w i zobaczcie co osiągnął... Czyżby brak ambicji i "ognia" u pozostałej "nadziei sceny" ?
Moda na kosssmiczne rozszerzenia obecnie jedynie pokazuje zaburzoną raczej równowagę między tworzeniem hardware i soft-. Zresztą po co komu AKI i sraki, jeśli nie będzie wychodzić nowe wysokogatunkowe "pożywienie" dla naszych ukochanych atarynek?!
OK, Ok, nie piszcie mnie tu, żebym sam cóś zrobił, bo w końcu ktoś musi oglądać te wasze wytwory. Zauwarzam jedynie pewien trend i obawiam się, że za parę lat (ile dajecie - ja ze 3-4 góra) to poza tworzącymi z pasji czy przyzwyczajenia, XXL-em czy TeBe prawie nikt nie będzie robić coś na serio tutaj... Pewnie jednak taka kolej rzeczy i prorokiem był ten, co jeszcze w latach 90. ubiegłego wieku pisał w "Bajtku" że zjednoczy nas... PeCet. To, że ponad połowa ataroscenowów używa m.in. emulca chyba nie warto podważać... ;)
Nooo, ale chwała tym co coś tworzą na poważnie, bo zawsze to bardziej rozwijające zajęcie niż nawalenie się jak świnia w swoim mieście czy na jakimś zlocie...
No to miłego tworzenia i komentowania... Howgh! Immolator 2008-11-19 10:36:25
Po pierwsze primo, twórczość tego typu to w 98% sentyment dorosłych już ludzi. Trudno wymagać od nastolatków aby zaczynali dłubać przy 8-bitowych maszynkach. Naturalne jest, że z biegiem czasu wszystko to przystopuje. Jednak IMHO zawsze będzie istniała jakaś grupa ludzi, którzy nawet w celu zbudowania pewnej niszy, w której będą dominować. Można to nazwać tworzeniem przestrzeni, w której będą najlepsi ;-) Po drugie primo, scena Atari to nie tylko Polska, chociaż u nas to jak na razie nieźle jedzie do przodu. Na tzw. świecie jest wielu maniaków, którzy tworzą różności dla Atari. Nie koniecznie takie wybuchowe jak Tebe, XXL czy Elektron, ale jednak. Po trzecie primo, emulce... Bez zastosowania współczesnej "technologii" nie powstało by nic z tego, co powstało ostatnio. Kodowanie na współczesnym sprzęcie daje znacznie lepsze możliwości warsztatowe. Zwróć uwagę, że już w "tamtych" latach, do pisania kodu, tworzenia grafiki i muzyki do gier dla Atari 8-bit używało się sprzętu 16-bitowego. Czy to było "true" podejście? A jednak finalny soft był dla małego Atari i nikt raczej nie płakał, że to jest be tak na prawdę powstało na obcej kulturowo Amidze. Po czwarte, a zarazem ostatnie primo. Masz rację, tworzenie czegoś jest zawsze wartością samą w sobie. Jak dla mnie, dłubanie przy asemblerze, czy Turbo Basic XL zawsze będzie lepsze niż siedzenie całym popołudniem przy YouTube czy stukaniem we flashowe gierki. A czy to będzie hard Atari, emulator Atari, czy całkiem coś innego, Java i NetBeans czy Groovy, nie ma zasadniczo znaczenia ;-) Ten portal jest jednak atarowski, więc ustawiając odpowiedni kontekst, umówmy się, że tworzenie dla Atari to wyższa forma sztuki.
Aha, jeszcze jedno. Pecet nas nie zjednoczy(ł). To całkiem inna płaszczyzna i wyższa forma abstrakcji. Przypomina mi to stwierdzenie, że wszyscy jesteśmy Polakami. Może to i prawda, tylko czy coś z tego wynika? ;-)
Chwała ludziom, którym udaje się coś stworzyć. Można im tylko pogratulować talentu, umiejętności, samodyscypliny i zapału. Co właśnie uczyniłem. anonymus 2008-11-19 11:39:21
A ja w tej chwili nie używam ani realnego Atari (bo moje kasety szlag trafił i jakoś się nie ładują) ani emulatora (bo to już nie to). Nie stać mnie chwilowo ani na sd2sio czy inne cuda wianki, jednak ciągle z przyjemnością śledzę co na malucha powstaje. Może sam się za coś wezmę, przypomnę sobie Basica albo zacznę tworzyć w Tufoncie. Ale zapewniam was że nawet będąc biernym śledzicielem jestem cały czas mile zaskakiwany prężnością użytkowników Atarynki. Szacun. ataryjek 2008-11-19 22:27:56
co jest w tych atarynkach, ze po tylu latach ludziom chce sie jeszcze cos tworzyc? Chyba to, ze trafily akurat na nasze dziecinstwo, zgaduje, ze srednia wieku jest tu okolo 30.
Ciekawi mnie, czy ktos z Was zastanawia sie, czy wolny czas (ktorego jest niewiele - rodzina, praca itp) poswiecic na tworzenie czegos na atari czy zajac sie czyms na czasie, mi na przyklad chodzi po glowie poznanie Nvidia cuda, symbian czy pocket pc. xeen 2008-11-20 08:59:50
ataryjek - jeżeli chodzi o mnie, to zdecydowanie atari zamiast zabawy z urządzeniami mobilnymi itp zabawkami. To ostatnie mogę robić w pracy (co wypacza obraz - bo inni tak nie mają), niestety brak czasu w domu jest absolutnym blokerem :(( i trafiłeś w sedno - równo 30:)) ostatnio pokazałem ojcu loops of zen na atari - siedzi do dzisiaj, później odpalił wersję we flash'u i.....po chiwli powiedział, że on woli tę na atari i gra na emulcu:)) Też w nim sie wspomnienia odzywają, żeby kupić kompa dla mnie w 1988 musiał wziąśc ogromny jak na owe czasy kredycior i sentyment mu został:))
z ogromną frajdą ukończyłem ostatnio hobgoblina, także sprawdzam się przynajmniej jako odbiorca:)) nosty 2008-11-20 09:19:35
xeen - ukonczyles Hobgoblina bez poke/kodow? To chyba pierwszy jestes! A wszscy stwierdzili, ze gra jest masaktycznie trudna... Dla mnie w 10 stopniowej skali trudnosci dalbym jej gora 6. xeen 2008-11-20 09:26:34
tak, ukonczyłem bez cheatów:))) grałem, grałem - coraz dalej, coraz dalej i skończyłem:) mono 2008-11-20 09:40:51
@xeen: Gratulacje! @ataryjek: Tak - Atari jest po prostu odskocznią od codzienności w pracy. Taka forma rozrywki :) Jedni rozwiązują krzyżówki, inni piszą programy na Atari. xxl 2008-11-20 09:50:12
bedzie druga czesc loops of zen... z lepsza grafika. nosty 2008-11-21 09:57:07
Ale tej grze lepsza grafika moze chyba tylko zaszkodzic? Porstota = przejrzystosc. Kaz 2008-11-22 18:16:21
nosty - napisal, ze grafika bedzie lepsza, a nie ze bedzie skomplikowana i nieprzejrzysta :) larek 2008-11-23 12:36:27
nie będzie skomplikowana, czyli będzie prostsza, tj. gorsza w sensie, że będzie lepsza... co ja gadam? ;-) larek 2009-09-04 08:46:14
Minęło 9 miesięcy (!) i już urodziła się druga wersja ;-)
Jednak lepsza grafika zdecydowanie podniosła atrakcyjność gry!