Nie jestem specem od muzy ani bebechów ale z tego co czytałem to w CPC procek nie ma bezpośredniego połączenia z AY a jedynie za pośrednictwem scalaka zwanego PPI (a czasem PIO). Gdzieś czytałem że Basic w CPC ma wszelkie komendy jakie potrzeba do pełnej obsługi dźwięku z wyjątkiem digitalizowanych sampli, bo to wymaga tak częstych modyfikacji portów że Basic nie daje rady. Z tego co gdzieś czytałem komenda OUT to jedyna furtka by się dobrać do rejestrów AYa z tej tabelki
http://cpcwiki.eu/index.php/Default_I/O_Port_Summary wynika że do PSG (tak zwą tam układ dźwiękowy) obsługuje się przez porty:
#F4XX %xxxx0x00 xxxxxxxx 8255 PIO Port A (PSG Data) Read Write
#F5XX %xxxx0x01 xxxxxxxx 8255 PIO Port B (Vsync,PrnBusy,Tape,etc.) Read -
#F6XX %xxxx0x10 xxxxxxxx 8255 PIO Port C (KeybRow,Tape,PSG Control) - Write
#F7XX %xxxx0x11 xxxxxxxx 8255 PIO Control-Register - Write
Czyli w Basicu to by było OUT &F600,parametr:OUT &F400,parametr problem w tym że nie wiem jakie parametry a pewnie każdy bit ma jakieś znaczenie, bo tylko przez te dwa porty w PPI czyli port A i C ma się dostęp do 16 rejestrów w AYu. Tyle że zdaje się że port &F7 decyduje o tym czym sterują te porty A i C bo mogą też klawiaturą drukarką lub magnetofonem. A może raczej konkretne bity w tym parametrze wpływają na konkretne z tych urządzeń. Co sugeruje ta tabelka
http://cpcwiki.eu/index.php/8255#PPI_Port_C Tak szczerze nigdy wcześniej się tym nie interesowałem i nie mam cierpliwości by się wczytywać głębiej.
Tu jest o tym coś więcej
http://cpcwiki.eu/index.php/How_to_access_the_PSG_via_PPI a w podanym przykładzie w assemblerze też używają OUT &F4 / &F6 i &F7 ale jestem za cienki by to pojąć.
Gdzieś tu przed chwilą czytałem że emulatory PLUSa nie w pełni obsługują te porty jak powinny bo nie ma pełnej dokumentacji do ich bebechów.
Nie wiem co tam kombinujesz, ale jeśli muza gra na przerwaniach to wpisywanie czegoś w te rejestry zatrzyma tylko aktualny dźwięk a za chwile program włączy kolejny. A program z przerwania może być w innym miejscu niż ten główny. Zarówno Basic jak i Assembler mają komendę DI do pauzowania przerwań. Jeśli to jej nie zatrzyma to ja już nie wiem.
Tu też jest coś o programowaniu AYa
http://cpcwiki.eu/index.php/AY-3-8912 ale póki się nie zna właściwych parametrów do tego powyżej to się nie przyda.
A może zamiast pisać własny kod wystarczy skorzystać z gotowych procedur w ROMie. Coś o tych procedurach dotyczących dźwięku jest też w opisie kernela w Bajtku 10-87 s14, oraz w 11/12-90 s26. By z nich skorzystać w Basicu piszemy CALL adres_w_tablicy_skoków i ewentualnie po przecinku podajemy parametry jak w opisie procedury, a w kodzie parametry wrzucamy do podanych w opisie rejestrów a potem CALL. Te adresy w tablicy zwykle się zaczynają od &BC...

Mam nadzieję że nie namieszałem tylko podsunąłem ci jakiś trop. Jak coś złego to nie ja.
