Na wstępnie powiem że to co tutaj opisuję "odkryłem"(przez przypadek) sam, co nie oznacza że już ta technika nie jest wykorzystywana od lat przez wtajemniczonych, ale ja na ten temat nigdzie informacji nie mogłem znaleźć. Ale technika jest naprawdę prosta więc się zdziwię bardzo że nikt do tego wcześniej nie "odkrył", więc prawdopodobnie i tak wyjdę na "wiejskiego głupka" ale co tam. Przynajmniej (mam nadzieję) że będzie łatwiej informację o "krótkich" sinach znaleźć.
To był wstęp to teraz drugi wstęp:) Jak do tego doszło …. nie wiem…
A więc tak: próbują jakiegoś fajnego sposobu na ruch sprajta w jak najmniejszej ilości bajtów (celowałem w 32b aby wystawić cokolwiek na lovebyte) po paru próbach wyszło mi coś dość ciekawego… no i się udało, intro 32b zrobione, nawet fajnie wyglądało (i chyba innym też się spodobało bo zajęło 3 miejsce: sea_calm). No i zacząłem drążyć co tam się w ogóle zadziałało. No i chyba coś tam się tak fajnego zadziało że wyszedł mi (-)cosinus w amplitudzie 0-$20 i trochę dłuższy w amplitudzie 0-$40, sinusy w pełnym zakresie 0-$ff w 2 wersjach (troszkę różniące się w wartościach, ale nieznacznie, ale kto co lubi) oraz ćwiartki sinusa w okresie 0-$7f. To w sumie tyle.
Technika polega na dodawaniu coraz to większej liczby i badania rejestru procesora (C w przypadku sina i V w przypadku -cosinusa). Proste prawda? no nawet bardzo...
Dodam jeszcze że to oczywiście nie jest sinus, ale coś bardziej opartego na dwóch parabolach połączonych ze sobą. Coś podobnego jak w sinusie którego do tej pory używałem z codebase:
https://codebase64.org/doku.php?id=base … n_assembly
Ten z codebase ma fajnie regulowany okres którego u mnie nie ma ale jest o 3 bajty na ZP lub 5bajtów poza ZP dłuższy. Niby niewiele – ale to czasami robi różnice przy intrach mniejszych 256b. Kto robił wie o czym mówię ;)
W produkcjach na Lovebyte (które później mi się posypały jedno za drugim z tym sinusem) użyłem tego agenda_cos_small_v1, gdyż ma on może małą amplitudę (od 0 do $20) co mi akurat tutaj odpowiadało, a zajmuje relatywnie mniej bo 27b na ZP (albo 31 poza ZP).
Więcej info co gdzie jak działa i ile zajmujesz znajdziesz w plikach ASM (ASX) dołączonych do tego postu lub do ściągnięcia tutaj:
http://www.atari.org.pl/files/parties/l … /sines.zip
Kończąc: więc jakby się okazało jakimś cudem że to co mi do głowy strzeliło i co tutaj piszę jest czymś do tej pory nieodkrytym (w co mi się nie chce wierzyć…) to oczywiście jeżeli tylko chcecie możecie wykorzystywać/modyfikować/kasować dowolnie jak chcecie :)
A jeżeli okazało się że próbuje odkryć koło na nowo to bardzo Was od razu przepraszam, a na swoje usprawiedliwienie mogę jedynie powiedzieć że nie byłem tego świadomy!
I kończąc po raz drugi chciałem podziękować za wsparcie merytoryczne jak i mentalne reszcie Agendziaków!
Ps: do plików asm(a właściwie asx bo tak mi się w edytorze koloruje) dołączyłem malutką wizualizację danej tablicy – ale chyba tego nie muszę tłumaczyć bo każdy koder zobaczy se :)
ps2: Atari Rulez!