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
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
Czyli ponad dwukrotnie szybciej!;)
(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!;)
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!