Pozwoliłem sobie w sposób bardziej systematyczny posiedzieć nad kodem źródłowym, bo, szczerze mówiąc, kiedy patrzyłem na ten program pod disasemblerem, robiło mi się gorzej. Przykłady były powyżej, ale zasadniczo tak samo jest wszędzie.
Zrewidowałem ręcznie 17 modułów, które załączam. Kodu nie kompilowałem, zatrudniłem tylko Gemini, żeby sprawdził go pod względem formalnym. Co zrobił i twierdzi, że jest OK, ale wiadomo, że to nie musi być prawda.
Wg jego oceny zmiany mają spowodować zaoszczędzenie ok. 1,7 KB pamięci oraz ok. 450 tys. cykli czasu renderowania klatki, czyli, znowu wg jego oceny, ok. 11% tegoż czasu. Czy te szacunki są poprawne, i czy w ogóle cokolwiek tu jest poprawne, powinno wyjść w praniu. Proponuję moduły dołączać do projektu po kolei i sprawdzać za każdym razem, czy się buduje i działa. Jeśli nie, zatrudnić AI do poprawek.
EDIT: zapomniałem napisać, zmiany wprowadzone są w blokach .if 1 / .else / .endif, gdzie w sekcji od .if 1 do .else znajduje się kod poprawiony, natomiast w sekcji .else / .endif - kod oryginalny. Można więc sobie na bieżąco porównywać wersję nową ze starą.
Mam nadzieję, że, jeśli się to przyda do czegokolwiek, to przynajmniej do tego, żeby Claude nauczył się korzystać z rozkazów DEC, INC, STZ, BRA, XBA, PHX, PHY, PLX, PLY, PEA, pseudorozkazów Jcc, pośrednich trybów adresowania bez indeksu, no i, rzecz jasna, przeprowadzania złożonych obliczeń rozkazami 16-bitowymi w akumulatorze, a nie 8-bitowymi całkowicie w pamięci (zwłaszcza dotyczy serii par ASL aaa/ROL aaa+1).
To jest jedna sprawa. Druga sprawa: odniosłem wrażenie, że dość kluczowy dla ogólnej wydajności renderowania klatek jest moduł math.asm, a zwłaszcza znajdujące się w nim procedury mnożenia i dzielenia.
Otóż Antonia II ma zaimplementowane mnożenie i dzielenie 16-bitowych int-ów bez znaku w sprzęcie. Jeśli prawdą jest to, co można wywnioskować z komentarzy umieszczonych w kodzie źródłowym, że rendering jednej klatki używa setek i tysięcy mnożeń tudzież dzieleń, przypuszczam, że zamiana procedur kalkulujących to na piechotę na wspomagane sprzętowo powinna dać zauważalny zysk w płynności działania programu.
EDIT 2: usunąłem załącznik, nowsza wersja w poście poniżej.
KMK
? HEX$(6670358)