czwartek, 22 kwietnia 2021

Przełomowe Atarowe odkrycie w Action!;)

Wczoraj dokonałem przełomowego odkrycia, coś czego się kompletnie nikt nie spodziewał.

Odkrycie dotyczy rewelacyjnego języka programowania Action! z 1983 roku(!) ACS, który był prawdopodobnie pierwszym językiem, który był stworzony z myślą o tworzeniu profesjonalnych gier i dem. Do dziś nie poznałem języka szybszego i lepiej przemyślanego - naprawdę niezwykłe!

Wrato zaznaczyć, że do dziś wszyscy pamiętają, że Action! to znaczy szybkość i że nie ma możliwości odnalezienia innego języka, który byłby prawie tak szybki jak asembler.

Wyjaśnię czego dotyczy odkrycie: gdy pracowałem kiedyś w Mirage Software z Jaśkiem, to rozgryźliśmy w tym języku bardzo ciekawą rzecz, mianowicie język zezwala na to, aby utworzyć tablicę o adresie 0. Kiedyś na party podszedł do mnie koder z innego komputera, czyli Sqward i zapytał co to za potworek? Tablica bez wartości tylko z jakimś zerem??
Genialność tego rozwiązania jest niesamowita, bo skraca i upraszcza dostęp do pamięci. We wszystkich innych językach programowania mamy dwa rozkazy (+ inne wariacje tak jak w Action!), czyli POKE i PEEK. Natomiast ta tablica powoduje, że nie potrzeba już żadnych procedur, a dostęp do tablicy posiada funkcjonalność ich obu!;)
Dodatkowo każdy kompilator wykonuje skok do procedury, a następnie powrót - czym traci masę czasu CPU. Jednak przy dostępie do tablicy nie ma żadnego skoku (szczególnie czasochłonny jest na pecetach x86) i nie ma żadnego powrotu!;)

Korzystaliśmy z tego rozwiązania latami, będąc przekonanymi, że nie ma w żadnym języku czegoś szybszego i bardziej sprytnego;)

No i tak było do wczoraj:P

Odkryłem coś co powoduje, że przenosimy się o kilka poziomów wyżej w programowaniu zaawansowanych animacji (w grach/demach) na Atari w Action!
Trudno w to uwierzyć, no ale po dziesięcioleciach od 1983 roku - dziś udało mi się coś w tak stareńkim języku odkryć!;)

Udało mi się opracować bardzo podobny mechanizm tablicy, z którego korzysta się w prawie identyczny sposób, jednak jego wydajność jest naprawdę imponująca!

W przykładzie:
    ; Zapisanie 21 bajtów w graphics 15 za pomocą tablicy P:
    [173 $D40B 201 40 208 249]
    GG=6
    QQ=$9000
    FOR Q=0 TO 20 DO
    P(QQ)=255 QQ==+1
    OD
    GG=0
trwa 22 linie rastra...
Do wczoraj każdy by powiedział, że jest to bardzo szybko jak na język tak stary i język który nie jest asemblerem, ale kompilatorem.

Jednak jak wykorzystamy mój nowy pomysł np. tak:
    [173 $D40B 201 80 208 249]
    GG=6
    FOR Q=0 TO 20 DO
    FastP(Q)=255
    OD
    GG=0
Zajmuje to 10 linii rastra!
Czyli ponad dwukrotnie szybciej!;)


Widzimy wykresy wydajności rastra, dla zaprezentowanych tu przykładów kodu wykorzystujących oba rozwiązania.

(oczywiście obie wersje programu da się napisać wydajniej - ale to takie proste obrazowe przykłady)

Rewolucyjne jest również to, że o kilka poziomów zmniejsza to też rozmiar kodu!;)

Do tej pory w moich grach były liczne procedury, które animowały przeciwników w najszybszy możliwy sposób, czyli za pomocą tablicy P. Niestety procedury te były bardzo duże, zajmowały wiele kilobajtów, więc nie byłem z tego zadowolony.

Więc co daje nowe rozwiązanie?

W zależności od sytuacji mamy tu: od ~2,9 do 4,2 razy krótszy kod! Oczywiście względem zwykłej tablicy P!

To naprawdę duża oszczędność.
Naprawdę zawadzały mi te procedury, gdy będą mogły być 3 - 4 krotnie krótsze to jest coś!;)

Okazało się, że myk jaki wymyśliłem - Action! kompiluje do 5 bajtów kodu dla stałej i do 8 bajtów przy zmiennym adresie (animacji). Jest to najmniejszy rozmiar kodu jaki da się wygenerować, więc krócej i szybciej na Atari się już nie da;))

Coś niesamowitego, naprawdę sądziłem przez kilkadziesiąt lat, że szybciej się już nie da... A jednak!;)

Tu zaprezentowany jest najszybszy powszechnie znany sposób, dzięki któremu można najszybciej zmodyfikować w Action! komórkę pamięci - wydajność 100% asemblera (tu modyfikacja adresu $9000 w trybie 15). Niżej znajduje się mój nowo odkryty trick FastP, który nie dotyczy tylko jednego adresu jak w pierwszym przypadku, ale nadaje się do robienia animacji - jednak jak widać czas wykonania obydwu jest ten sam!

Ten zaawansowany i niebezpieczny trick jaki zastosowałem spowoduje, że moje gry, które do tej pory grały na nosie wszystkim np. strzelankom, ze wszystkich możliwych komputerów 8-bitowych, teraz będą od 70% do 80% szybsze!;) a miejscami i 100% szybsze;)
...i to bez grama asemblera! Bo trzeba podkreślić, że na innych komputerach nie było tak zaawansowanego i profesjonalnego języka programowania, więc nie dało się zrobić profesjonalnej strzelanki w żadnym kompilatorze - takie gry robiło się wyłącznie w asemblerach.

W mojej ocenie Atari i Action! pokazały tutaj pazur!;)


A wszystko dzięki temu, że właśnie pracuję nad grą na konkurs Sikora tzw. 16 Kb Cart 2021;) Natomiast to odkrycie Sikor! pewnie nie zostałoby odkryte, gdyby nie Twój konkurs;)
Dzięki Sikor!;)

Jakbym komuś powiedział w latach 80. że uda mi się dziś coś podobnego odkryć - to pewnie nikt by mi nie uwierzył!:))) Ja wtedy bym zareagował: to daj mi maszynę czasu bo chcę wiedzieć jak to zrobić!;)


Update: 9 VI 2022:
Tak... mój blog przeszedł kolejny najazd rządnych krwi trolli (26 komentarzy! nie licząc licznych wątków na forach - obłęd!), jednak leci obecnie już 14 miesiąc od czasu tego postu i nikt (ABSOLUTNIE NIKT!) nie wpadł na to co konkretnie odkryłem.

(w czasie najazdu obleśnych szyderców to posiłkowano się kodem, który został kiedyś opublikowany, jednak gdy wyjaśniłem że nie o to mi chodzi, to jakoś wszyscy zamilkli - nawet nikt nie próbował dojść o co chodzi...
Choć jak mniemam, podstawy obsługi wyszukiwarek internetowych mają wszyscy w małym palcu, więc założyć można że w internecie rozwiązana znaleźć nie można...)

Przypominam, że umiejętność znalezienia cudzego kodu w internecie, nie jest przesłanką do tego żeby siebie uważać za wielkiego programistę, bo jak mniemam wszyscy trolle w komentarzach pod tym postem - za takich siebie mają...


Update:
Ciekawe! Dziś jest już 1 IX 2022 a ja nadal nie otrzymałem ŻADNEGO rozwiązania tego zadania! Jak pokrzyczeć w komentarzach i na forach to jest wielu chętnych, ale jak napisać parę linijek kodu samodzielnie (a nie wkleić z google'a) to jakoś nikogo nie ma...

To bardzo ciekawe, że jak można dowalić mi to w ciągu kilku minut, pojawiają się komentarze, ale jak trzeba coś napisać z sensem - to nikogo nie ma... ABSOLUTNIE NIKOGO!

To istotne, bo ktoś mógłby napisać, że nie ma ze mną kontaktu, a próbował się ze mną skontaktować i podesłać rozwiązanie - ale jak tu w coś takiego wierzyć, gdy zestawia się ze sobą tollowanie w szybkim czasie (jakoś znaleźć mnie wszyscy mogą?!?) z tym jak upłynęło blisko 1,5 roku!!!

Naprawdę znaleźć mnie nie możecie? A może paluszki się połamały lub klawiatura gdzieś się zapodziała??

Jesteście mali i żałośni!


Jeśli nie jest zaznaczone inaczej (lub nie jest zaznaczone wcale) zamieszczone ilustracje pochodzą z Wikimedia Commons lub są mojego autorstwa.


Ta strona używa cookies oraz innych technologii Google (i innych firm w specjalnych dodatkach po prawej stronie) w celu prawidłowego działania tej stronki (jej elementów jak np. ankiety, reklamy itp.) oraz zbierania statystyk. Korzystanie z tego bloga powoduje zapisywanie typowych plików na Twoje urządzenie (np. komputer, tablet itp.) o ile w ustawieniach przeglądarki nie zmienisz tego.

W UE się ludziom w głowach przewraca, więc dla świętego spokoju zamieściłem to absurdalne ostrzeżenie...