26

Odp: Krótki tutorial w Turbo Basicu XL do gier (pseudo)paragrafowych

Hej,

Fajny się czyta i jeszcze więcej rozumie..  mam tylko takie pytanko:

Sikor napisał/a:

150 IF PEEK(53279)<>6 THEN 150

nie łatwiej i konsekwentniej  było by używać wartości HEX? Wiem że to nie assembler ale te szesnastkowe jakoś bardziej do mnie przemawiają... :-)

https://systemembedded.eu/
"...Mówił mi to jeden facet, który znał się na atari i takich różnych rzeczach. On mówił, że procesor 6502 to był początkowo procesor wojskowy. On ma tajne funkcje, nie wiadomo w ogóle, co one mogą robić..."
ABBUC Member #319. Preferowana forma kontaktu: email

27

Odp: Krótki tutorial w Turbo Basicu XL do gier (pseudo)paragrafowych

Dzięki za za kontynuację. Zapowiada się super tutorial.
Jak na razie nie mam pytań bo tylko przeczytałem, jutro usiądę do komputerka, to może coś przyjdzie smile

28

Odp: Krótki tutorial w Turbo Basicu XL do gier (pseudo)paragrafowych

@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.

Sikor umarł...

29

Odp: Krótki tutorial w Turbo Basicu XL do gier (pseudo)paragrafowych

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? Oczywiście mówię tylko o interpreterze, bo wiadomo, że kompilator na pewno i tak to ujednolici.

30

Odp: Krótki tutorial w Turbo Basicu XL do gier (pseudo)paragrafowych

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 edytowany przez Sikor (2019-03-09 21:27:37)

Sikor umarł...

31

Odp: Krótki tutorial w Turbo Basicu XL do gier (pseudo)paragrafowych

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...

Ostatnio edytowany przez Sikor (2019-03-10 22:45:27)

Sikor umarł...

32

Odp: Krótki tutorial w Turbo Basicu XL do gier (pseudo)paragrafowych

Bawię się twoim drugim odcinkiem i tak:

1) oczywiście należy przed uruchomieniem programu zawsze wykonać

BLOAD "D:DANE.DAT"

2) może dopisze co robi linia 150, bo nie każdy wszystko wie, ja musiałem poszukać wink

150 IF PEEK(53279)<>6 THEN 150

PEEK odczytuje wartość spod adresu.

Pod adresem 53279 zapisany jest stan klawiszy funkcyjnych START, SELECT, OPTION.

zwracane wartości:

0 – OPTION SELECT, START
1 – OPTION, SELECT
2 – OPTION, START
3 – OPTION
4 – SELECT, START
5 – SELECT
6 – START
7 – żaden

czyli w lini 150 czekamy, aż wciśniemy START.

Wiem, że da większości z was to banał, wiec jak coś napiszecie to nie będę się więcej wtrącał z banałami smile

33

Odp: Krótki tutorial w Turbo Basicu XL do gier (pseudo)paragrafowych

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 wink 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.

Ostatnio edytowany przez Sikor (2019-03-10 09:22:43)

Sikor umarł...

34

Odp: Krótki tutorial w Turbo Basicu XL do gier (pseudo)paragrafowych

Hej,

Myślę, że warto zrobić obiema metodami - tu i teraz kadłubek działający z pod DOS-a pozwoli innym rozwinąć skrzydła z innymi pomysłami a znajomość tego "jak to się robi z DOS-em" powinna być podstawą. A na końcu projektu zrobisz to jeszcze raz celem utrwalenia :-)

Pozdrawiam i czekam na resztę materiałów.

https://systemembedded.eu/
"...Mówił mi to jeden facet, który znał się na atari i takich różnych rzeczach. On mówił, że procesor 6502 to był początkowo procesor wojskowy. On ma tajne funkcje, nie wiadomo w ogóle, co one mogą robić..."
ABBUC Member #319. Preferowana forma kontaktu: email

35

Odp: Krótki tutorial w Turbo Basicu XL do gier (pseudo)paragrafowych

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.

Sikor umarł...

36

Odp: Krótki tutorial w Turbo Basicu XL do gier (pseudo)paragrafowych

Czekam z niecierpiętliwością :)

37

Odp: Krótki tutorial w Turbo Basicu XL do gier (pseudo)paragrafowych

Ja też obserwuję wink
I może od czasu do czasu coś się odezwę... jeśli Sikor pozwoli tongue

Jak już piszemy program w Turbo Basicu XL, to uważam, że szkoda byłoby nie korzystać z jego dobrodziejstw.
Kod:

150 IF PEEK(53279)<>6 THEN 150

można zastąpić:

150 WHILE PEEK(53279)<>6:WEND

Efekt działania taki sam, ale ten wygląd! wink

W celach edukacyjnych należy wyjaśnić: pętla WHILE - WEND będzie się wykonywać dopóki warunek będzie spełniony. Oczywiście instrukcje WHILE i WEND nie muszą być w jednej linii, mogą być rozdzielone blokiem innego kodu, wówczas cały ten blok będzie wykonywany dopóki warunek będzie spełniony. Warunek jest sprawdzany na początku, więc może dojść do sytuacji, że instrukcje w bloku nigdy nie zostaną wykonane.

I jeszcze taka uwaga - brak obniżenia RAMTOP i ochrony przez to danych w programie może się zemścić, gdy stworzymy naprawdę długi program. Do nauki programowania jest to faktycznie zbyteczne i może wprowadzić tylko zamieszanie w głowach młodych programistów, ale jak już zaczniecie bawić się w tworzenie bardzo obszernych programów, to przypomnijcie sobie o czymś takim, jak RAMTOP.

Ostatnio edytowany przez larek (2019-03-10 13:17:53)

http://atari.pl/hsc/ad.php?i=3.100 http://atari.pl/hsc/ad.php?i=3.

38

Odp: Krótki tutorial w Turbo Basicu XL do gier (pseudo)paragrafowych

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.

Sikor umarł...

39

Odp: Krótki tutorial w Turbo Basicu XL do gier (pseudo)paragrafowych

A czy można zapisać tą samą linię w postaci:

150 WHILE NOT (PEEK(53279)=6):WEND

?

Nie znam Turbo BASIC-a XL, więc może coś poznam. Lubię poznawać nowe rzeczy, oczywiste.

Ostatnio edytowany przez Smaku (2019-03-11 19:40:40)

40

Odp: Krótki tutorial w Turbo Basicu XL do gier (pseudo)paragrafowych

Oczywiście, negacja tu nic nie zmienia.

Sikor umarł...

41

Odp: Krótki tutorial w Turbo Basicu XL do gier (pseudo)paragrafowych

Zmienia czas wykonania operacji

Nie wstydzę się: 65XEN/1MB/4OS/AKI/1084ST/inne fajne zabawki

42

Odp: Krótki tutorial w Turbo Basicu XL do gier (pseudo)paragrafowych

BartoszP, ale w którą stronę ten czas się nam zmieni? Jeśli myślisz, że dodanie negacji to dodatkowa operacja, to ja Ci powiem, że myślę, że może czasem być dokładnie odwrotnie, bo operacja porównania z kolei na pewno jest dużo szybsza jeśli porównujemy liczbę 6 za pomocą znaku = niż gdy robimy porównanie <> gdzie tak na prawdę sprawdzane są dwa warunki, przy czym chyba porównanie ze znakiem równości nawet od jednego warunku ze znakiem większości będzie szybsze.
Sikor drugie zagadnienie do tego Twojego osobnego wątku z testami poleceń TBXL:-)

43

Odp: Krótki tutorial w Turbo Basicu XL do gier (pseudo)paragrafowych

BartoszP napisał/a:

Zmienia czas wykonania operacji

Też o tym myślałem trochę. Nie znając TB XL, ciekawi mnie, czy taki zapis działa w tym języku programowania.

Jeśli działa, to teraz można się zastanowić, jak procesor wykona instrukcję z <> i tę drugą z NOT.

Jeśli <> procesor robi tylko jednym CMP, to wyjdzie szybciej chyba.

Jeśli procesor robi <> na dwóch CMP, to wyjdzie dużo wolniej, niż z NOT, oczywiste.

Instrukcja z NOT to tylko porównanie komórki pamięci z liczbą (=), a potem negacja - dwie proste instrukcje CPU.

Natomiast <> może być być może robione aż na dwóch CMP, bardzo długo wykonujących się. Hmm... ciekawe bardzo dość.

Trzeba by uczciwie zapisać obie instrukcje w asemblerze i będzie widać.

Ostatnio edytowany przez Smaku (2019-03-11 21:10:13)

44

Odp: Krótki tutorial w Turbo Basicu XL do gier (pseudo)paragrafowych

Mq napisał/a:

bo operacja porównania z kolei na pewno jest dużo szybsza jeśli porównujemy liczbę 6 za pomocą znaku = niż gdy robimy porównanie <> gdzie tak na prawdę sprawdzane są dwa warunki,

Otoz nie. <> jest rownowazne z !=

I jedno i drugie to jedna i ta sama operacja w assemblerze.


cmp #6
bne nierowne:
Dalsza czesc gdy rowne

lub

cmp #6
beq rowne
Dalsza czesc gdy nierowne

"tatusiu zobacz, narysowałam tobie takie same coś jak na twojej koszulce" 
jmp $e477

45

Odp: Krótki tutorial w Turbo Basicu XL do gier (pseudo)paragrafowych

to do kolekcji:

150 REPEAT:UNTIL PEEK(53279)=6

Bez negacji, tylko znak równości

150 ON PEEK(53279)<>6 GOTO 150

Mamy goto, ale działanie dokładnie takie samo

150 #START:ON PEEK(53279)<>6 GO# START

Podobnie
Panowie, mówimy o grze paragrafowej. Ułamki sekund tu nic nie znaczą. Ciekawe za to, jak z zajętością kodu w wynikowym programie. To było jako przykłąd, abyśmy wykorzystali klawisze konsoli. Każdy przykład można przepisać z negacją lub bez, można zaoszczędzić na kilku cyklach, ale nie o to tu chodzi. Nie gmatwajmy kodu. Przykładów robiących to samo można by pewnie podać jeszcze z dziesięć, tylko po co? Nie mnóżmy niepotrzebnie bytów, jak poznamy zasadę działania - każdy sobie znajdzie najlepszą dla niego metodę, jak myślę. Póki co zatrzymała nas obsługa klawiszy konsoli.

Sikor umarł...

46

Odp: Krótki tutorial w Turbo Basicu XL do gier (pseudo)paragrafowych

Sikor napisał/a:

to do kolekcji:

150 REPEAT:UNTIL PEEK(53279)=6

Bez negacji, tylko znak równości

150 ON PEEK(53279)<>6 GOTO 150

Mamy goto, ale działanie dokładnie takie samo

150 #START:ON PEEK(53279)<>6 GO# START

Z tych przykładów wyżej w asemblerze wnioskuję, że negacja znika po kompilacji w kodzie maszynowym, więc czy z NOT, czy  bez, realizuje to porównanie logiczne odpowiedni rozkaz CPU. Czyli kod wynikowy dla <>, lub NOT = powinien być tożsamy (w sensie "obciążenia", dopisuję, bo ktoś by się czepiał może), tak mi się myśli. Czyli zależy pewnie od jakości kompilatora, który robi kod wynikowy dobrze, lub zależy, oczywiste.

Natomiast te przykłady z goto - znowu trzeba wiedzieć, jak to kompiluje kompilator, możliwe, że te same kody wynikowe by były (w sensie "obciążenia"), co dla WHILE i REPEAT z NOT lub bez, ale nie koniecznie - ciężka robota badać takie drobiazgi, a w grach, które nie wymagają takich oszczędności cykli, chyba nie miałoby to większego sensu, jak w wypowiedzi "Sikor", wyżej.

Ciekawi mnie od początku tego wątku o tej pętli POKE, w jaki sposób komórka pamięci 53279 może kiedykolwiek i jakkolwiek zmienić swoją wartość? To nie jest przypadkiem obszar ROM-u?

Ostatnio edytowany przez Smaku (2019-03-11 23:24:23)

47

Odp: Krótki tutorial w Turbo Basicu XL do gier (pseudo)paragrafowych

Jasne, że nie ma sensu porównywać takich ułamków sekund dla gry paragrafowej. Wspomniałem o tym i zapytałem dlatego, że wybiegam trochę w przyszłość i już myślę do czego by można użyć TBXL następnym razem. Dlatego zainteresował mnie temat takich drobiazgów w sensie jak robi to kompilator. Bardzo dziękuję Willy za rzeczowe wyjaśnienie - właśnie konkretnie chodziło mi o interpretację <> vs !=, którego w Basicu bardzo mi brakuje, bo jestem przyzwyczajony do używania != od lat w pracy zawodowej w językach znienawidzonych komputerów pece. Sikor, nie rozwijaj takich wątków - krótkie pytanie, krótka odpowiedź, w międzyczasie, w oczekiwaniu na kolejny odcinek tutoriala.

Ostatnio edytowany przez Mq (2019-03-11 21:45:16)

48

Odp: Krótki tutorial w Turbo Basicu XL do gier (pseudo)paragrafowych

A ja się długo nie mogłem przyzwyczaić do !=, bo przecież wszyscy wiedzą, że tam powinno być <>.

49

Odp: Krótki tutorial w Turbo Basicu XL do gier (pseudo)paragrafowych

No, jak się z Atari Basic przesiadałem na pecety dawno temu, to też mi jakoś brakowało tego <>, a != było dziwnym tworem:-) Teraz mam odwrotnie:-)

50

Odp: Krótki tutorial w Turbo Basicu XL do gier (pseudo)paragrafowych

A jeszcze dziwniejszym tworem jest =\= tongue

hex, code and ror'n'rol!
"mężczyzna wydoił wielbłąda żoną"
"wcześniej miał na imię Heidi i był niemiecką kulomiotką"