Требуется озвучить игру простыми звуками сопроцессора. В связи с этим вопрос к гуру: как вызвать из машинного кода оператор 128к-бейсика PLAY ? Вопрос посложнее: как сделать это на машине с сопроцессором, но без 128кб-ПЗУ? Второй вопрос - чистое пижонство или "очень хочется сделать чтобы работало на 48к-машинках с AY - правда, никогда не встречал таких машинок, даже не уверен, что где-то наберётся хоть пара штук". Так что первый вопрос всё-таки важнее. Но давайте и к нему отнесёмся критично. Может я чего-то недопонимаю. Первым помыслом было желание взять плеер из WHAM+AY. Вторым - некоторое исследование в области "а какие вообще плееры и (более или менее) стандартные форматы музыки для них используются?" Первым, что я нашёл, был плеер PT3x0A в журнале 3BIT. Его-то и думаю использовать, если не найду что-то поинтереснее (может даже покомпактнее).
На Обероне работа с данным плеером выглядит так. Очень плохой стиль, очень. Непереносимый. Ну а шо делать.
Код:
MODULE TestPT3;
IMPORT Asm, B := Basic, PT3x0A;
VAR
ace: PT3x0A.Melody;
BEGIN (*$MAIN*)
B.Init;
IF PT3x0A.TabAdr() MOD 256 # 0 THEN
B.PRSTR("Start address of module must be aligned to ");
B.PRINT(PT3x0A.TabAdr() MOD 256); B.PRSTR(" bytes"); B.PAUSE(0);
END;
(* Player & melodies are from http://zxpress.ru/article.php?id=9508 *)
B.DEFDATA(ace, 2137); (* ace.m *)
B.DATA(...); (* Данные мелодии поскипаны *)
PT3x0A.Install(ace);
Asm.Code("play_l$: LD IY,#0x5C3A");
Asm.Code(" EI ");
Asm.Code(" HALT ");
PT3x0A.Play;
Asm.Code(" LD A,#0x7F ");
Asm.Code(" IN A,(-2) ");
Asm.Code(" RRA ");
Asm.Code(" JR C,play_l$ ");
PT3x0A.Stop;
B.Quit;
END TestPT3.
Хочется работать со звуками где-то так:
Basic.PLAY("строка...");
Ну и чтобы сам плеер был как можно компактнее. И фиг с ним, пусть вызывается из ПЗУ 128.
Перерыл кучу материалов, но не нашёл как это сделать из машкода.