Przerobiłem player do cmc (na zauważalnie krótszy) wzorując się na wersji playera od Jaskiera, a więc z istotnymi poprawkami dla prawidłowego odtwarzania wszystkich poprawnie złożonych muzyczek (bez nieoczekiwanych niespodzianek).
Postanowiłem zaimplementować ten player do programu kompozera, aby dało się bez konieczności asembacji kodu źródłowego (którego np. może w danym momencie brakować pod ręką) generować player (?.REP) do muzyczki dowolnie ulokowanej w pamięci.
Konieczne było dodatkowo dorobienie bardziej uniwersalnej procedury relokującej adresy wewnątrz playera i podstawienie jej pod starą.
Ostatnią poprawką jaką dokonałem było zaznaczenie w tekście info na dole paska numeru wersji CMC na 2.2 (od numeru wersji playera; wcześniejsze to: player 2.0 Janusza Pelca, 2.1 wersja poprawiona Jaskiera, która nie została, z tego co wiem, zaimplementowana do żadnej z "nieoficjanych" wersji kompozera).
Nic więcej poza tym nie zostało zmienione (poza zmianami adresów odwołań z innych obszarów do tej części którą podmieniłem, czego oczywiśćie dopilnował sam asembler na przerobionym kodzie "źródłowym" pozyskanym dzięki narzędziu DIS6502 - przy okazji podziękowania dla TeBe), nic obcięte.
Odnośnie tej wersji playera w stosunku do wersji 2.1 (Jaskiera), którego jest (tak bym chciał to postrzegać), mam nadzieję, godną następczynią, zachowane zostały następujące zmiany wprowadzone w tamtej wersji:
- usunięcie dwóch zasadniczych błędów playera (w uproszczonym opisie i niepełnym znaczeniu) "odczytu strony $FF"
- $d20f zamiast $d21f
- pełne odtwarzanie zawartości strony zerowej sprzed wywołania procedury (część init oryginalnej procedury jedno z dwóch używanych słów na niej nie odtwarzała)
- wprowadzenie kontroli poprawności przy wywoływaniu z init (rA:=$20+kanał, rY:=instrument, rX:=numer_dźwięku) odgrywania pojedyńczego dźwięku "poza muzyczką"
- identyczne uszeregowanie zmiennych (player + offset : dostęp do tej samej zmiennnej, np. czest)
- procedura podpisana swoją nazwą - etykieta (ten sam offset co w wersji 2.1)
Zmiany i nowe funkcje, których nie zdecydowałem się kontynuować, powracając do właściwości playera 2.0:
- wycofanie się z możliwości podmiany adresu rejestrów pokeya z poziomu wywołania (na np. drugi pokey) : rA:=$3x (x>0), rX\rY:= mł.\st.połówka adresu pokeya (lub dowolnego innego obszaru pamięci), przy zachowaniu tradycyjnego znaczennia jeśli rA:=$30 (x=0), rX:= tempo
- wycofanie się z przestawienia kodu dla basica sprzed tablic (pozostają na końcu jak w wersji 2.0)
Innowacje w stosunku do wersji poprzednich:
- instrumenty slide up/down mogą teraz przekraczać granicę pojemności bajta ($FF<->0) przy zmianach częstotliwości (nie są "sztucznie" wyciszane w takim przypadku)
Przygotowałem Atr na którym znajdują się (poza dosem) przerobiona wersja CMC (CMC22.COM), oryginalna wersja CMC (CMC20.COM) i prawie oryginalna muzyczka Lasermania (LASER.CMC). Dwie ostatnie pozycje są po to, aby zademonstrować złe działanie muzyczki przez zasadnicze błędy procedury odgrywającej, które spostrzegł i poprawił Jaskier.
Muzyczka z Lasermanii ma więc jedną drobną "poprawkę". Na nieużywanym (w dodatku pustym) istrumencie o numerze 21 ma wstawioną wartość $46 w drugą (od góry) daną (to także druga wartość opisująca ten instrument w module) - pozostałe wartości i obwiednie pozostają wyczyszczone jak dla instrumentu pustego.
Tak przerobiona muzyczka będzie źle odtwarzana pod każdą znaną mi wersją kompozera (bo wszystkie działają na oryginalnym playerze Pelca) poza tą, którą właśnie opisuję (za co odpowiadają poprawki Jaskiera), co proponuję przy tej okazji sprawdzić, żeby się przekonać iż błędy nie są li tylko mityczne.
Proponuję także po załadowaniu muzyczki z Lasermanii przewinąć instrumenty do tego o numerze 15 i wywołać dźwięk D-6 (kliwisz O przy ustawionych na klawiaturze oktawach 4|5) i sprzwdzić tą nową specyfikację "poprawionego" działania instumentów z slide up/down. przy oryginalnym playerze dźwięk jest szybko przycinany, przy playerze 2.2 dźwięk wybrzmiewa na pełnej długości.
Możliwe że o czymś zapomniałem napisać (nie mam zwyczaju sporządzać notatek, a pamięć mam wyjątkowo nietrwałą). Nie wiem czy player nie zawiera swoich (ukrytych dla mnie) błędów. Gdyby zaszła potrzeba i ktoś coś zauważył (zakładam na chwilę, że ktoś zechce tegoż poużywać, chociaż wiadomym jest że czas CMC należy już do przeszłości), to oczywiście będę w przyszłości zainteresowany poprawkami takich ewentualnych błędów.
Załączam Atr w zipie.
EDIT:
Podmieniłem załącznik z poprawioną wersją kompozera.