Na zachętę okładka i naklejka na kasetę autorstwa Nowego80Retro, wersję "low budget" może sobie każdy nagrać. W wersji kolekcjonerskiej chciałbym co nieco dodać ;)

Dziękuję Panie Profesorze Larku. Tak, to dobra konstrukcja, jednak potem będę ją modyfikował, ale na potrzeby testów póki co jest jak jest. A dobre słowo i świadomość, że "ktoś to czyta" jest dla piszącego artykuł naprawdę budująca.

Na koniec niewątpliwie. Dobra, trzecia część będzie głównie o robieniu wersji file - w międzyczasie przed czwartą częścią będę miał chwilkę na scenariusz i poszukanie grafik do konwersji.

Wcale nie banał, dobrze, że zwróciłeś uwagę na coś, czego nie opisałem - pewne rzeczy z czasem sają się tak oczywiste, że człowiekowi się wydaje, że każdy wie... Co do bload - wczytujesz tylko raz, dopóki nie wyłączysz komputera - działa, bo dane są. Ale fakt, trzeba wczytać. Tylko... Te dane potem łatwo dołączymy do wersji plikowej.
Linia 150 - instrukja "jeżeli" (if), czyli instrukcja warunkowa. Tutaj w wersji krótkiej (stąd słowo kluczowe THEN), która nam mówi: jeżeli jest spełniony warunek (u nas nierówność) to coś zrób - w naszym przypadku oczywiście są to klawisze konsoli, więc czekamy na jakieś działanie odpowiedniego klawisza.
Dzięki lopez za uwagi, bo chociaż wiem, że ktoś coś z tym robi ;) Jak dam radę - to do przyszłej niedzieli część trzecia.
==================
Jeszcze pytanie - w części trzeciej zrobić (ubogą jeszcze, niefunkcjonalną) wersję file (czyli działającą spod DOSa), aby pokazać jak to się robi - czy to zostawić na koniec? Bo może ktoś chce zrobić inną grę, a zasada jest ogólna. Proszę o uwagi w komentarzach.

3,855

(15 odpowiedzi, napisanych Programowanie - 8 bit)

@VAsko, prawie - kopiowałem pod altirrą. Ale każdy wie o co chodzi, wyniki ważne są ;)

Mq napisał/a:

A czy interpreterowi robi różnicę czy podaje się liczby dziesiętne czy w heksie? Czy on to musi przeliczać i ma to jakiś wpływ na szybkość działania kodu?

Nigdy tego nie testowałem, ale tu adekwatny wynik 10000 pustych powtórzeń...
http://www.atari.org.pl/forum/viewtopic.php?id=15894 - edycja, nie dodałem wcześniej linku...

3,857

(15 odpowiedzi, napisanych Programowanie - 8 bit)

Zainspirowany wątkiem http://www.atari.org.pl/forum/viewtopic … 54#p248754  popełniłem krótki test I tak - interpretując, jeśli podajemy dane szesnastkowo zamulamy program - wyniki poniżej:

10 DPOKE 18,0:POKE 20,0
11 FOR I=0 TO 10000:NEXT I
12 ? TIME,"DANE DZIESIETNE"
14 DPOKE 18,0:POKE 20,0
15 FOR I=%0 TO 10000:NEXT I
18 ? TIME,"DANE SZESNASTKOWE"
17 FOR I=$00 TO $2710:NEXT I
RUN
351       DANE DZIESIETNE
352       DANE DZIESIETNE ZE STALA
707       DANE SZESNASTKOWE

po kompilacji:

TBTEST.COM
240       DANE DZIESIETNE
240       DANE DZIESIETNE ZE STALA
482       DANE SZESNASTKOWE

Czyli - poza podawaniem adresów nie jest dobrze... Warto wiedzieć - adresy ok, działania nie bardzo...
Btw - może jeszcze sprawdzę kiedyś czytanie (peek) po pamięci...

Z tego co wiem, to nie, ale zainteresowałeś mnie. Pomyślę nad adekwatnym testem w krótkim kodzie, bo szczerze mówiąc - zawsze staram się kompilować moje programy, a tam jest to już bez znaczenia. ale do tego założę oddzielny wątek.
Może jeszcze sprawdzę na włązonym i wyłączonym ekranie... Dla pewności.

Ostatnio zostałem tym zaskoczony, więc... Czy chciałbyś/chciałabyś zakupić taką fizyczną wersję gry? Gra jest stara, ogólniedostępna - wersja kolekcjonerska pewnie by zawierała jakieś piersołki. Dostałem deklarację wykonania dla mnie nagrania 25 do 50 sztuk, więcej nie przewidję (na kasecie, dyskietki bym nagrywał sam, ale też w małej ilości). Żadnych zmian w stosunku do wersji dostępnej by nie było, ale pewnie pomyślałbym nad jakimś gadżetem. Tylko... Czy byliby chętni?
Powiem szczerze, że zostałem tym zaskoczony, a wykorzystałbym projekt, który dostałem. Wydanie byłoby dwujęzyczne, jak i sam program (oddzielnie wersja PL i EN) Odpowiedź w ankiecie jest tylko badaniem, nie jest zobowiązaniem do zakupu.
Btw: ja głosuję za NIE, aby widzieć wyniki ankiety, wię jeden wynik jest przekłamany.

@pancio.net - no, tutj wychodzi wieloletnie przyzwyczajenie z Atari Basica, a mapy pamięci w głowie nie mam, ale celna uwaga. Z punktu widzenia Atari to i tak jest bez znaczenia.

Dziś króciutka część druga - zróbmy sobie szkielet programu.
Skoro powiedziało się A, trzeba powiedzieć B. Póki co tylko cztery osoby sprawdziły dyskietki, ale dla tych czterech już warto. Zastanowimy się dzisiaj, jak powinien wyglądać sam szkielet programu, aby spełniał wymogi gry.Przewrotnie dziś nie dołącze działającej dyskietki, ale napiszę co i jak robimy (sprytni przekleją kod w emulatorze, ale polecam samodzielne pisanie, aby coś zostało).
Dobre zasady programowania na Atari mówią, że należy obniżyć tak zwany RAMTOP pamięci, czyli maksymalne miejsce, gdzie może znaleźć się program (komórka pamięci 106). Muszę się Wam przyznać, że... Ja tego nie robię ;) Póki co nie zawiodłem się na mojej metodzie, więc będę ją promował - ale jakby ktoś chciał skorzystać z niej, nic nie stoi na przeszkodzie. Trzeba tylko pamiętać - że  po obniżeniu RAMTOPu zmienia nam się diametralnie adres ekranu, lądując odpowiednio niżej. A dobre umiejscowienie danych w programie to połowa sukcesu. Ja po prostu umieszczam dane w odpowiednich adresach - przy tym posługuję się pewną specyfiką TBXL, a mianowicie - podaję adresy danych w kodzie szesnastkowym (po prostu liczbę w kodzie szesnastkowym traktujemy prefixem, czyli przedrostkiem, w formie znaku "$"). Dzięki temu łatwiej jest mi korzystać z dobrodziejstw większości programów użytkowych na Atari. Dlaczego - przekonacie się sami w dalszych częściach tutoriala.
Z autopsji i wielu prób wiem (nie zdarzyło mi się wywalić programu), że bezpiecznym maksymalnym adresem, do jakiego należy wrzucać dane - to $A035. Od lat właściwie wrzucam fonty pod adres $9C00, po dodaniu wartości 1024 bajtów łatwo się zorientować, że są to tak zwane cztery strony pamięci - font kończy się pod adresem $9fff. Tu jedna uwaga - fonty zawsze należy wrzucać na granicy strony (256 bajtów), aby łatwiej go potem wyświetlić bez kombinowania - czyli zawsze zachowujmy schemat $xx00, gdzie xx jest numerem strony. Łatwo to potem wykorzystamy, co zaraz pokażę. Proszę o wczytanie TBXL.
Uważny czytelnik powie: "zaraz, zaraz, a te kilka pozostałych bajtów między $9fff a $A035?". Czasem tam wciskam drobne dane, czasem pozostaje nieruszane...
Dobrze, przejdźmy do konkretów. Ustalamy, że nasze fonty będą siedziały pod adresem $9c00 - moje przyzwyczajenie. Jak je wczytać pod TBXL? Pokażę trzy metody, wraz z krótkim komentarzem do nich. Za każdym razem korzystamy z krótkiego kodu. Załóżmy, że nasze fonty nazywają się "POLSKIE.FNT" i są w stacji identyfikującej się jako "D:". Możemy je wczytać następująco:
1. Metoda podstawowa, według mnie najgorsza, za każdym razem przed wczytaniem programu lub po nim wpisujemy kod:

O.#1,4,0,"D:POLSKIE.FNT":BGET#1,$9C00,1024:CL.

Pokrótce opiszę, co się dzieje:
- otwieram kanał nr 1 do odczytu i ustawiam na plik z fontem
- używam instrukcji TBXL BGET, która pobiera odpowiednią ilość bajtów pod wskazany adres. Za broszurą Blukiego "Turbo Basic XL 1.5 Nowe Polecenia z przykładami" podaje składnię (Uwaga! Jeśli będę podawał skłądnię jakiegoś polecenia - będę się podpierał tą pozycją, nie dlatego, że nie znam zastosowania, tylko dlatego, że jestem leniwy i mogę coś przekleić, a tu jest po polsku):

Turbo Basic XL 1.5 Nowe Polecenia z przykładami napisał/a:


BGET #n,adres,ilość
– pobiera z kanału (o numerze n) ciąg bajtów i zapisuje go w pamięci od wskazanego adresu. Ilość określa liczbę bajtów jaka ma być pobrana i zapisana. Przed użyciem BGET należy pamiętać o otwarciu do odczytu jednego z bloków IOCB.

- na koniec zamykam otwarty kanał (dobra praktyka)
Według mnie jest to najgorsza metoda, wymaga każdorazowego wpisywania po każdym uruchomieniu TBXL.
2. Nieco "poprawiona" poprzednia metoda. Zamykamy wszystko w procedurze - ponieważ tam możemy jednorazowo wczytywać różne dane, nazwijmy ją po prostu WCZYTYWANIE. Procedury zaczynają się od słowa PROC i kończą słowem ENDPROC, dodatkowo każda ma swoją unikalną nazwę (nie mogącą być słowem kluczowym TBXL) i można ją wywołać bezpośrednio z programu lub edytora. Proszę o przepisanie kodu:

1000 PROC WCZYTYWANIE
1001 O.#1,4,0,"D:POLSKIE.FNT":BGET#1,$
9C00,1024:CL.
1002 ENDPROC

Tak zapisaną procedurę należy jednokrotnie wywołać poprzez polecenie EXEC nazwa_procedury, bądź bezpośrednio z edytora, bądź z programu. Proponuję tą drugą metodę, dopiszmy linijkę (na początku programu):

1 EXEC WCZYTYWANIE

Teraz uruchamiamy program (RUN) i co? Otrzymujemy błąd! (takie było moje zamierzenie). Przypominam, że każdy program BASICowy (w tym program w TBXL) działa sekwencyjnie, linia po linii - o ile nie sterujemy przebiegiem programu - i kończy się kluczowym słowem end. Dopiszmy sobie linię kodu:

10 end

Uruchamiamy i nie mamy błędu. Ale nic się nie dzieje. Tak ma być - proponuję zapisać program jako TESTFNT.TB. Teraz wpisujemy POKE 756,$9C - zmieniając tym samym zestaw znaków. Musimy go wskazać zawsze po zmianie trybu graficznego - sprawdźmy, czy działa (polskie litery z control, przecinek zamieniony z średnikiem). Jest ok? To teraz gr.0 i ponownie polskie znaki. Nie ma? Nie ma... Poke 756,$9c.
Mały test - napiszmy w edytorze:

?$9C

Co uzyskaliśmy? Liczbę 156 - czyli nasze znaki znajdują się na 156 stronie pamięci. Gr.0 i poke 756,156 - są polskie znaki? Są. Zapis poprzedni jest tożsamy, tylko dana podana dziesiętnie. A teraz zwróćcie uwagę na jedno - jak wczytywaliśmy nasz font? Przypomnę:

GET#1,$9C00,1024.

Łatwe do zapamiętania? Łatwe. A teraz: jeśli zamiast $9C00 zapiszemy 39936 - co łatwiej zapamiętać? Dlatego ja używam adresów zapisanych szesnastkowo.
3. Ostatnia metoda, preferowana przeze mnie - to wykonanie osobnego pliku binarnego z danymi (różnymi). Na początek musimy taki plik wykonać - póki co z samymi fontami. Ja wykorzystuję do tego Super Packera, teraz po kolei:
- wychodzimy do DOS
- z dyskietki z narzędziami wczytujemy Super Packera (SP**)
- wczytujemy nasz font (opja F - load data file)=>POLSKIE.FNT
- podświetla nam się adres - wpisujemy 9C00
- zapisujemy jako DANE.DAT: S=>DANE.DAT
- wychodzimy do DOS
- wczytujemy TBXL i wpisujemy w edytorze:

BLOAD"D:DANE.DAT

POKE 756,$9c i cieszymy się wgranymi danymi (póki co fonty, ale będzie tam tego więcej z czasem). Co zrobiliśmy? Przygotowalićmy sobie plik binarny z danymi, do dalszego wykorzystania - który potem będzie idealny także do zrobienia wersji file naszego programu. W tym wypadku zacznijmy sobie tworzyć plik/notatki z danymi naszego programu, aby wiedzieć - co gdzie będzie. Dołączę do tutorialu plik tekstowy z notatnika - DANE.TXT. Będziemy go sukcesywnie uzupełniać.
Na zakończenie tej części tutoriala zastanówmy się, co nasza gra powinna mieć? Póki co zaproponuję bardzo uproszczony szkielet, który będziemy potem modyfikować/uzupełniać. Ponieważ tutorial jest pisany na bieżąco - pewne elementy mogą się zmieniać, byc modyfikowane w trakcie. Proszę o ewentualne uwagi na bieżąco.
Osobiście lubię, jak gra ma jakiś początek i koniec. Musi też być obsługa gry, najprostszy szkielet gry, który możemy stworzyć, mógłby wyglądać tak (proszę go wpisać):

50 EXEC INTRO:.WYWOLANIE INTRA
51 EXEC START:.WYWOLANIE GRY
90 END
99 --
100 PROC INTRO
101 GR.24:POKE710,0:POKE709,15:poke756
,$9c
102 COLOR %1:TEXT 10,10,"Tu będzie intro"
150 IF PEEK(53279)<>6 THEN 150
190 ENDPROC
199 --
200 PROC START
201 .TU ZEROWANIE DANYCH
202 EXEC PARAGRAFY
290 ENDPROC
299 --
300 PROC PARAGRAFY
340 ENDPROC

Zapiszmy całość jako GRA0.TB - osobiście przy większych poprawkach zmieniam numer, mogąc w razie czego wrócić do dalzego działania w przypadku namotania w kodzie. Spróbujcie sami przeanalizować ten szablon, w razie problemów - postaram się odpowiedzieć na pytania w postach.
======================================
Jak zwykle proszę o komentarze i pytania. Jednocześnie mam pytanie - znajdzie się litościwy grafik (może być na PC) i muzyk (CMC pilnie poszuiwany)?

A podobno już tego lata także w naszych kinach... https://www.youtube.com/watch?v=DXrQiN0ei5s - ciekawe kiedy kolejny z Toho, choć Shin Gojira deko mnie zawiódł...

3,863

(118 odpowiedzi, napisanych Sprzęt - 8bit)

Się mi podoba... Czekam niecierpliwie w takim razie.

3,864

(23 odpowiedzi, napisanych Emulacja - 8bit)

@pin, na szczęście w tą, co to ją korniki wpi* dodaj, więc niewielka strata... ;P

3,865

(28 odpowiedzi, napisanych Fabryka - 8bit)

@pin, looknij na fotki.

3,866

(28 odpowiedzi, napisanych Fabryka - 8bit)

Poprosimy plik do testów ;P

3,867

(44 odpowiedzi, napisanych Sprzęt - 16/32bit)

Mi się wydaje, że zależy to też od fabryki, z której wyszedł sprzęt. Jak wiemy wszyscy - Icek ciął koszty na całego, pierwsze egzemplarze nie były robione w Chinach (XE to głównie Taiwan), potem fabryki przeniesiono/uruchomiono u myfriendów i jakoś(ć) zaczęła spadać... Wadliwe GTIA, jakość płyt, itp. Ostatnie egzemplarze statystycznie rzecz biorąc są słabszej jakości niż te wczesne. A krótkie ST było na samym początku, więc...
Btw: Mq, a Twój gdzie został wyprodukowany?
Hmmm, tak się zastanawiam nad wątkiem: wybielanie a kraj pochodzenia - wątek dla XE i ST?

3,868

(28 odpowiedzi, napisanych Fabryka - 8bit)

nr 10/88 bajtka - poprawki Simiusa z opisem (listing)

3,869

(28 odpowiedzi, napisanych Fabryka - 8bit)

http://www.atari.org.pl/forum/viewtopic.php?id=11017 - dzięki Mikerowi i naszemu forum odnalezione. Dzięki, Miker!

3,870

(28 odpowiedzi, napisanych Fabryka - 8bit)

Simius nie ma, więc... Liczę na Ciebie ;)

3,871

(28 odpowiedzi, napisanych Fabryka - 8bit)

http://www.tmeyer.de/atari/hc_turbo-basic_compiler.pdf - oryginalny kompilator i runtime, listing chyba można znaleźć na atariwiki, ale... Nawet jeśli, jest to listing runtime-u przed poprawkami.
Btw: piszę PW do Simiusa, może ma jeszcze swój listing...

3,872

(118 odpowiedzi, napisanych Sprzęt - 8bit)

Tak z ciekawostek: http://atariage.com/forums/topic/288652 … 90-degree/

3,873

(364 odpowiedzi, napisanych Fabryka - 8bit)

Wyceń proszę z wysyłką do Warszawy, jak możesz.

3,874

(364 odpowiedzi, napisanych Fabryka - 8bit)

Ooo, to ja obudowę poproszę. Jak da radę ;)

3,875

(152 odpowiedzi, napisanych Sprzęt - 16/32bit)

Heh, chciałbym powalczyć, ale elektronikiem nie jestem. Jak uda się ogarnąć - dajcie znać proszę.