{\rtf1\ansi\ansicpg1251\uc1 \deff0\deflang1033\deflangfe1049{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times New Roman};}{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}{\f134\froman\fcharset0\fprq0{\*\panose 00000000000000000000}Times New Roman Cyr{\*\falt Times New Roman};}{\f135\froman\fcharset238\fprq2 Times New Roman CE{\*\falt Times New Roman};}{\f136\froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times New Roman};}{\f138\froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times New Roman};}{\f139\froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times New Roman};}{\f140\froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times New Roman};}{\f141\fswiss\fcharset238\fprq2 Arial CE;}{\f142\fswiss\fcharset204\fprq2 Arial Cyr;}{\f144\fswiss\fcharset161\fprq2 Arial Greek;}{\f145\fswiss\fcharset162\fprq2 Arial Tur;}{\f146\fswiss\fcharset186\fprq2 Arial Baltic;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\nowidctlpar\widctlpar\adjustright \f134\fs20\lang1049\cgrid \snext0 Обычный;}{\s1\sb240\sa60\keepn\nowidctlpar\widctlpar\adjustright \b\f1\fs28\lang1049\kerning28\cgrid \sbasedon0 \snext0 заголовок 1;}{\*\cs10 \additive Основной шрифт;}}{\*\listtable{\list\listtemplateid1102467452\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'03\'00. ;}{\levelnumbers\'01;}\b0\i0\f134\fs20\ulnone\fbias0 \fi-283\li283 }{\listname ;}\listid1716738721}}{\*\listoverridetable{\listoverride\listid1716738721\listoverridecount0\ls1}}{\info{\title GENERAL SOUND}{\author Зонов С.Ю.}{\operator Зонов С.Ю.}{\creatim\yr1998\mo10\dy6\hr11\min20}{\revtim\yr1998\mo10\dy6\hr11\min20}{\printim\yr1998\mo2\dy19\hr18\min25}{\version2}{\edmins0}{\nofpages6}{\nofwords2783}{\nofchars15868}{\*\company SC}{\nofcharsws19487}{\vern73}}\paperw11906\paperh16838\margl567\margr567\margt454\margb454 \widowctrl\ftnbj\aenddoc\lytprtmet\formshade\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot \fet0\sectd \sbknone\linex0\headery709\footery709\colsx709\endnhere\sectdefaultcl {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \qc\nowidctlpar\widctlpar\adjustright \f134\fs20\lang1049\cgrid {\b\fs36 GENERAL SOUND \par }\pard \qr\nowidctlpar\widctlpar\adjustright {\b (с) STINGER}{ \par }\pard \qc\nowidctlpar\widctlpar\adjustright {\b Руководство по подключению и программированию}{\b\f0\lang1033 }{\b General Sound. \par }\pard \qc\nowidctlpar\widctlpar\adjustright {\b Версия v1.03. Редакция 003. \par }\pard\plain \s1\sb240\sa60\keepn\nowidctlpar\widctlpar\outlinelevel0\adjustright \b\f1\fs28\lang1049\kerning28\cgrid {\f142 1. Краткие технические характеристики GS. \par }\pard\plain \nowidctlpar\widctlpar\adjustright \f134\fs20\lang1049\cgrid {Процессор: Z80, 12MHz, без циклов wait. \par }\pard \nowidctlpar\widctlpar\adjustright {ROM: 32k, - 27256 \par RAM: Static Ram 128k ,из них 112k доступно для модулей и}{\f0\lang1033 }{сэмплов в базовой версии. \par INT : 37.5 KHz \par Каналы: 4 независимых 8-ми битных канала, каждый с 6-и битным контролем громкости. \par }\pard\plain \s1\sb240\sa60\keepn\nowidctlpar\widctlpar\outlinelevel0\adjustright \b\f1\fs28\lang1049\kerning28\cgrid {\lang1033 2.}{\f142 Подключение к компьютеру \par }\pard\plain \sl-200\slmult0\nowidctlpar\widctlpar\adjustright \f134\fs20\lang1049\cgrid {\b\lang1033 GS }{выполнен в виде слота для компьютеров с системной шиной в стандарте }{\f0\lang1033 Scorpion. \par }{\i\ul Внимание!}{ Очень полезно проконтролировать напряжение питания Вашего компьютера. Часто оно очень занижено (вплоть до 4.5 вольт вместо 5.0вольт) Это может сказаться на качестве работы }{\b\f0\lang1033 GS}{\f0\lang1033 }{вплоть до сбоев в работе. Устойчивая работа}{\b }{\b\f0\lang1033 GS}{\f0\lang1033 }{гарантируется при напряжении питания не менее 4.8 вольт. \par }\pard \sl-200\slmult0\nowidctlpar\widctlpar\adjustright {Убедительная просьба, все подключения производить при выключенном питании компьютера. При подключении к системному разъему следить за совпадением контактов, так как системный разъем не имеет ключа от неправильного подключения. \par }{\b\f0\lang1033 GS}{\f0\lang1033 }{вставляется таким образом, что его микросхемы смотрят на микросхемы компьютера. \par Тест правильности подключения}{\f0\lang1033 : \par }\pard \fi851\sl-200\slmult0\nowidctlpar\widctlpar\adjustright {\b 10 }{\b\f0\lang1033 OUT 187,244 \par 15 PAUSE 100 \par 20 PRINT IN 179 \par }\pard \sl-200\slmult0\nowidctlpar\widctlpar\adjustright {На экране должно появится число 3}{\lang1033 \par }\pard\plain \s1\sb240\sa60\keepn\nowidctlpar\widctlpar\outlinelevel0\adjustright \b\f1\fs28\lang1049\kerning28\cgrid {\lang1033 3}{\f142 . Краткое описание GS, или много всякой лабуды. \par }\pard\plain \nowidctlpar\widctlpar\adjustright \f134\fs20\lang1049\cgrid {\b GS}{-музыкальная карточка, предназначенная для проигрывания музыкальных модулей и}{\f0\lang1033 }{отдельных сэмплов(эффектов). \par }\pard \qj\fi284\nowidctlpar\widctlpar\adjustright {Модули для }{\b GS}{ - это стандартные Амижные}{\f0\lang1033 }{и PCшные 4-х канальные MOD файлы, а сэмплы - как Амижные signed sample, так и PCшные unsigned sample. Проигрыватель MOD файлов в GS является}{\f0\lang1033 }{практически полным аналогом ProTracker'а}{\f0\lang1033 }{на Амиге и создавался при интенсивном использовании исходников ProTracker'a. (Исходники были из Protracker'а v2.1A by Lars}{\f0\lang1033 }{"ZAP" Hamre - Amiga Freelancers) \par }\pard \nowidctlpar\widctlpar\adjustright {MOD Player поддерживает все команды Pro}{\f0\lang1033 }{Tracker'а, за исключением двух: \par }{\b Е01 Filter On}{- Амига-специфичная команда, включает фильтр высоких частот. \par }{\b EFX Invert Loop}{ Я еще не видел плейера,}{\f0\lang1033 }{который бы поддерживал эту команду. Возможно, она поддерживается на каких-то старых плейерах. \par }\pard \qj\fi284\nowidctlpar\widctlpar\adjustright {\b GS}{ представляет из себя, по-сути, микропроцессорный комплекс со своим процессором, ПЗУ, ОЗУ и портами, и абсолютно не}{\f0\lang1033 }{зависит от главного процессора Спектрума,}{\f0\lang1033 }{что позволяет, например, загрузить свой}{\f0\lang1033 }{любимый модуль, сбросить Спектрум, загрузить ассемблер и творить под любимую музыку. Soft внутри GS полностью берет на себя}{\f0\lang1033 }{задачи проигрывания звука, интерпретации}{\f0\lang1033 }{модуля и т.д. Программирование GS'а сводится к передаче байт за байтом модуля}{\f0\lang1033 }{и/или сэмплов, а затем требуется только}{\f0\lang1033 }{подавать команды типа: запустить модуль, установить глобальную громкость проигрывания модуля, запустить сэмпл #09 в}{\f0\lang1033 }{канале #02 и т.д. \par }\pard \qj\fi284\nowidctlpar\widctlpar\adjustright {Если предполагается загрузить модуль}{\f0\lang1033 }{вместе с сэмплами, то ОБЯЗАТЕЛЬНО требуется загружать вначале модуль, а затем сэмплы. При загрузке модуля очень рекомендуется}{\f0\lang1033 }{оставить свободными 2к памяти, т.е. загружать модули длиной максимум 110K. Это условие не является необходимым, но его исполнение очень желательно в целях совместимости с последующими версиями. \par Аналогично очень рекомендуется оставлять}{\f0\lang1033 }{по 80 байт для каждого сэмпла, например,}{\f0\lang1033 }{если требуется загрузить 63-х килобайтный}{\f0\lang1033 }{модуль и 18 сэмплов, то имеем: \par }\pard \qj\nowidctlpar\widctlpar\adjustright {Total_Sample_Length=112*1024-63*1024-2*1024-18*80=46688 байт}{\f0\lang1033 }{ \par Это суммарная длина сэмплов, которые при}{\f0\lang1033 }{таком положении вещей могут быть загружены.Если же, например, требуется вычислить,}{\f0\lang1033 }{сколько поместится в память }{\b GS}{ 2-х килобайтных сэмплов, то это вычисляется следующим образом: \par }\pard \nowidctlpar\widctlpar\adjustright {112*1024/(2048+80)=53 сэмпла. \par В GS'е имеются 4 физических канала, которые и проигрывают звук. \par Каналы 0 и 1 - левые, а 2 и 3 - правые.}{\f0\lang1033 }{ \par }\pard\plain \s1\sb240\sa60\keepn\nowidctlpar\widctlpar\outlinelevel0\adjustright \b\f1\fs28\lang1049\kerning28\cgrid {\f142 4. Интерфейс со Спектрумом. \par }\pard\plain \qj\nowidctlpar\widctlpar\adjustright \f134\fs20\lang1049\cgrid {На мир GS смотрит при помощи 4 регистров: \par {\pntext\pard\plain\f134\fs20\cgrid \hich\af134\dbch\af0\loch\f134 1. \tab}}\pard \qj\fi-283\li283\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec\pnb0\pni0\pnf134\pnfs20\pnstart1\pnindent283\pnhang{\pntxta . }}\ls1\adjustright {\b Command register}{ - регистр команд, доступный для записи порт по адресу 187. В}{\f0\lang1033 }{этот регистр записываются команды.}{\f0\lang1033 \par {\pntext\pard\plain\f134\fs20\cgrid \hich\af134\dbch\af0\loch\f134 2. \tab}}\pard \qj\fi-283\li283\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec\pnb0\pni0\pnf134\pnfs20\pnstart1\pnindent283\pnhang{\pntxta . }}\ls1\adjustright {\b Status register }{- регистр состояния,}{\f0\lang1033 }{доступный для чтения порт по адресу 187. \par }\pard \qj\nowidctlpar\widctlpar\adjustright {\ul Биты регистра}{: \par }\pard \qj\fi1701\nowidctlpar\widctlpar\adjustright {7 - }{\b Data bit}{, флаг данных \par 6 - Неопределен \par 5 - Неопределен \par 4 - Неопределен \par 3 - Неопределен \par 2 - Неопределен \par 1 - Неопределен \par 0 - }{\b Command bit}{, флаг команд \par }\pard \qj\nowidctlpar\widctlpar\adjustright {Этот регистр позволяет определить состояние }{\b GS}{, в частности можно ли прочитать}{\f0\lang1033 }{или записать очередной байт данных, или}{\f0\lang1033 }{подать очередную команду, и т.п.}{\f0\lang1033 }{ \par 3.}{\b Data register}{ - регистр данных, доступный для записи порт по адресу 179. В этот}{\f0\lang1033 }{регистр Спектрум записывает данные, например, это могут быть аргументы команд. \par 4.}{\b Output register}{ - регистр вывода, доступный для чтения порт по адресу 179. Из}{\f0\lang1033 }{этого регистра Спектрум читает данные,}{\f0\lang1033 }{идущие от }{\b G}{S. \par }\pard \qj\fi284\nowidctlpar\widctlpar\adjustright {\b Command bit}{ в регистре состояний устанавливается аппаратно после записи команды}{\f0\lang1033 }{в регистр команд. Сбрасываться в 0 он может только из }{\b GS}{, что сигнализирует об определенном этапе исполнения команды.}{\f0\lang1033 }{ \par }{\b Data bit}{ в регистре состояний может быть}{\f0\lang1033 }{установлен или сброшен как по желанию}{\f0\lang1033 }{Спектрума, так и по желанию }{\b GS}{: при записи}{\f0\lang1033 }{Спектрумом в регистр данных он аппаратно}{\f0\lang1033 }{устанавливается в 1, а после чтения }{\b GS}{'ом из этого регистра сбрасывается в 0. При}{\f0\lang1033 }{записи GS в регистр вывода он (все тот же}{\f0\lang1033 }{\b Data bit}{) аппаратно устанавливается в 1, а}{\f0\lang1033 }{после чтения из этого порта Спектрумом}{\f0\lang1033 }{сбрасывается аппаратно в 0. Несмотря на то, что регистр данных и регистр вывода расположены в пространстве}{\f0\lang1033 }{адресов портов по одному и тому же адресу}{\f0\lang1033 }{и воздействуют на один и тот же бит данных, они являются двумя независимыми регистрами. Значение, один раз записанное в}{\f0\lang1033 }{один из этих регистров, остается неизменным в нем до новой записи. \par }\pard \qj\nowidctlpar\widctlpar\adjustright {Состояние бита данных очень часто неопределено, и если в спецификации команд не}{\f0\lang1033 }{определены значения этого бита на определенных этапах исполнения команды, недопустимо делать какие-либо предположения относительно значения этого бита. \par }\pard\plain \s1\sb240\sa60\keepn\nowidctlpar\widctlpar\outlinelevel0\adjustright \b\f1\fs28\lang1049\kerning28\cgrid {\f142 5. Система команд GS. \par }\pard\plain \qj\fi284\nowidctlpar\widctlpar\adjustright \f134\fs20\lang1049\cgrid {В начале позволю себе небольшое отступление от собственно системы команд. GS, как известно, предназначен в основном для проигрывания модулей и сэмплов. В данной версии (1.03) GS ROM допукается загрузка одного модуля и/или до 32 сэмплов. Каждый сэмпл при загрузке его в память получает свой уникальный идентификатор, который однозначно определяет обращение к данному сэмплу в командах, которые требуют номер сэмпла. Самый первый загруженный сэмпл получает номер (handle) = 1, следующий - номер 2, и т.д. \par }\pard \qj\fi284\nowidctlpar\widctlpar\adjustright {То же самое применимо и к модулям, и этот единственный загруженный модуль будет иметь handle=1 после загрузки. Особенностью данной версии является также то, что вначале требуется загружать модуль, а затем уже сэмплы. Особенности описания команд: \par }\pard \nowidctlpar\widctlpar\adjustright {Команды описываются следующим образом: \par 1. Hex код команды \par 2. Название команды \par 3. Выполняемые действия при исполнении команды \par 4. Формат команды \par 5. Комментарии к команде \par Формат команды описывается следующим образом: \par }\pard \qc\nowidctlpar\widctlpar\adjustright {\b \par }\pard \qc\nowidctlpar\widctlpar\box\brdrs\brdrw60\brsp20 \adjustright {\b GSCOM\tab EQU\tab 187 \par GSDAT \tab EQU \tab 179}{\f0\lang1033 \par }\pard \qc\nowidctlpar\widctlpar\adjustright {\f0\lang1033 \par }{\b \sect }\sectd \sbknone\linex0\headery709\footery709\cols2\colsx567\linebetcol\endnhere\sectdefaultcl \pard\plain \nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 \f134\fs20\lang1049\cgrid {\b SC #NN}{\f0\lang1033 - }{Послать код команды в регистр команд \par }\pard \fi1701\nowidctlpar\widctlpar\adjustright {LD A,#NN \par OUT (GSCOM),A}{\f0\lang1033 \par }\pard \fi1701\nowidctlpar\widctlpar\adjustright { \par }\pard \nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b WC}{\f0\lang1033 -}{ Ожидание сброса Command bit \par }\pard \nowidctlpar\widctlpar\adjustright {WCLP}{\f0\lang1033 :\tab }{IN A,(GSCOM) \par }\pard \fi720\nowidctlpar\widctlpar\adjustright {RRCA \par }\pard \fi720\nowidctlpar\widctlpar\adjustright {JR C,WCLP}{\f0\lang1033 \par }\pard \fi2410\nowidctlpar\widctlpar\adjustright { \par }\pard \nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b SD Data}{ }{\f0\lang1033 -}{ Послать данные в регистр данных \par }\pard \fi720\nowidctlpar\widctlpar\adjustright {LD A,Data \par OUT (GSDAT),A}{\f0\lang1033 \par }\pard \fi720\nowidctlpar\widctlpar\adjustright {\f0\lang1033 \par }\pard \nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b WD}{\b\f0\lang1033 -}{Ожидание сброса Data bit, по}{\f0\lang1033 }{сути, ожидание, пока }{\b GS}{\f0\lang1033 }{не примет посланные ему данные}{\f0\lang1033 }{ \par }\pard \nowidctlpar\widctlpar\adjustright {WDLP}{\f0\lang1033 :}{ }{\f0\lang1033 \tab }{IN A,(GSCOM) \par }\pard \fi720\nowidctlpar\widctlpar\adjustright {RLCA \par }\pard \fi720\nowidctlpar\widctlpar\adjustright {JR C,WDLP}{\f0\lang1033 \par }\pard \fi720\nowidctlpar\widctlpar\adjustright { \par }\pard \nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b GD Data}{ }{\f0\lang1033 - }{Принять данные из регистра}{\f0\lang1033 }{данных \par }\pard \fi720\nowidctlpar\widctlpar\adjustright {IN A,(GSDAT)}{\f0\lang1033 \par }\pard \fi720\nowidctlpar\widctlpar\adjustright { \par }\pard \nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {WN}{\f0\lang1033 - }{Ожидание установки Data bit, по}{\f0\lang1033 }{сути, ожидание очередных данных}{\f0\lang1033 }{от }{\b GS}{ \par }\pard \nowidctlpar\widctlpar\adjustright {WNLP}{\f0\lang1033 :}{ }{\f0\lang1033 \tab }{IN A,(GSCOM) \par }\pard \fi720\nowidctlpar\widctlpar\adjustright {RLCA \par }\pard \fi720\nowidctlpar\widctlpar\adjustright {JR NC,WNLP\sect }\sectd \sbknone\linex0\headery709\footery709\colsx709\endnhere\sectdefaultcl \pard\plain \qc\nowidctlpar\widctlpar\box\brdrs\brdrw60\brsp20 \adjustright \f134\fs20\lang1049\cgrid {\b Команды GS}{\b\f0\lang1033 \par }\pard \qc\nowidctlpar\widctlpar\adjustright {\b\f0\lang1033 \par }\pard \nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b \sect }\sectd \sbknone\linex0\headery709\footery709\cols2\colsx340\linebetcol\endnhere\sectdefaultcl \pard\plain \qc\nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 \f134\fs20\lang1049\cgrid {\b #00 Reset flags}{ \par }\pard \nowidctlpar\widctlpar\adjustright {Сбрасывает флаги Data bit и Command}{\f0\lang1033 }{bit. \par }\pard \fi567\nowidctlpar\widctlpar\adjustright {SC #00 \par }\pard \fi567\nowidctlpar\widctlpar\adjustright {WC \par }\pard \nowidctlpar\widctlpar\adjustright {(Data bit=0, Command bit=0) \par }{\f0\lang1033 \par }\pard \qc\nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b #0E Go in Covox mode}{\b\f0\lang1033 }{\b \par }\pard \nowidctlpar\widctlpar\adjustright {Переходит в режим }{\b С}{\b\f0\lang1033 ovox}{, напрямую}{\f0\lang1033 }{копирует регистр данных в ЦАПы двух (правого и левого) каналов.}{\f0\lang1033 }{Выход из этого режима - запись #00}{\f0\lang1033 }{ в регистр команд. \par }\pard \fi567\sl-200\slmult0\nowidctlpar\widctlpar\adjustright {SC #0E \par }\pard \fi567\sl-200\slmult0\nowidctlpar\widctlpar\adjustright {WC \par SD \\ \par SD \\ \par ...}{\f0\lang1033 - }{ / Это вывод в ЦАПы \par SD / \par SC #00 \par WC \par }\pard \nowidctlpar\widctlpar\adjustright { \par }\pard \qc\nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b #F3 Warm restart \par }\pard \nowidctlpar\widctlpar\adjustright {Сбрасывает полностью }{\b GS}{, но пропускает}{\f0\lang1033 }{этапы определения количества страниц}{\f0\lang1033 }{памяти и их проверки, что очень сильно}{\f0\lang1033 }{ ускоряет процесс инициализации.}{\f0\lang1033 }{ \par }\pard \fi567\nowidctlpar\widctlpar\adjustright {SC #F3 \par }\pard \fi567\nowidctlpar\widctlpar\adjustright {WC \par }\pard \nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b #F4 Cold restart \par }\pard \nowidctlpar\widctlpar\adjustright {Полный перезапуск GS со всеми проверками. По сути, JP #0000. \par }\pard \fi567\nowidctlpar\widctlpar\adjustright {SC #F4 \par }\pard \fi567\nowidctlpar\widctlpar\adjustright {WC}{\f0\lang1033 \par }\pard \fi567\nowidctlpar\widctlpar\adjustright { \par }\pard \nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b #20 Get total RAM \par }\pard \nowidctlpar\widctlpar\adjustright {Получить общий объем доступной памяти}{\f0\lang1033 }{на GS. ( В базовой версии это 112к)}{\f0\lang1033 }{ \par }\pard \fi567\sl-200\slmult0\nowidctlpar\widctlpar\adjustright {SC #20 \par }\pard \fi567\sl-200\slmult0\nowidctlpar\widctlpar\adjustright {WC \par GD RAM.L(Младшая часть) \par WN \par GD RAM.M(Средняя часть) \par WN \par GD RAM.H(Старшая часть) \par }\pard \nowidctlpar\widctlpar\adjustright {Total RAM=65536*RAM.H+256*RAM.M+RAM.L \par \par }\pard \nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b #21 Get free RAM \par }\pard \nowidctlpar\widctlpar\adjustright {Получить общий объем свободной памяти}{\f0\lang1033 }{ на GS. \par }\pard \fi567\sl-200\slmult0\nowidctlpar\widctlpar\adjustright {SC #20 \par }\pard \fi567\sl-200\slmult0\nowidctlpar\widctlpar\adjustright {WC \par GD RAM.L(Младшая часть) \par WN \par GD RAM.M(Средняя часть) \par WN \par GD RAM.H(Старшая часть) \par Free_RAM=65536*RAM.H+256*RAM.M+RAM.L \par }\pard \nowidctlpar\widctlpar\adjustright { \par }\pard \nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b #23 Get number of RAM Pages \par }\pard \nowidctlpar\widctlpar\adjustright {Получить число страниц на GS. \par }\pard \nowidctlpar\widctlpar\adjustright {SC #23 \par WC \par GD Number_RAM_Pages \par В базовой версии 3 страницы.}{\f0\lang1033 }{ \par \par }\pard \nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b #2A Set Module Master Volume \par }\pard \nowidctlpar\widctlpar\adjustright {Установить громкость проигрывания}{\f0\lang1033 }{модулей. \par }\pard \nowidctlpar\widctlpar\adjustright {SD Module_Master_Volume [#00..#40]}{\f0\lang1033 \par }\pard \nowidctlpar\widctlpar\adjustright {SC #2A \par }\pard \nowidctlpar\widctlpar\adjustright {WC \par [GD Old_Master_Volume] - Старая громк}{\f0\lang1033 \par }\pard \nowidctlpar\widctlpar\adjustright {Маленький пример использования данной}{\f0\lang1033 }{ команды: \par }\pard \nowidctlpar\widctlpar\adjustright {(Предполагается, что играется модуль)}{\f0\lang1033 }{ \par }\pard \fi720\nowidctlpar\widctlpar\adjustright {LD B,#40 \par }\pard \nowidctlpar\widctlpar\adjustright {LOOP:\tab LD A,B \par }\pard \fi720\nowidctlpar\widctlpar\adjustright {OUT (GSDAT),A \par }\pard \fi720\nowidctlpar\widctlpar\adjustright {LD A,#2A \par OUT (GSCOM),A \par EI \par HALT \par DJNZ LOOP \par }\pard \nowidctlpar\widctlpar\adjustright { \par }\pard \fi720\nowidctlpar\widctlpar\adjustright {LD A,#32 \par }\pard \fi720\nowidctlpar\widctlpar\adjustright {OUT (GSCOM),A \par }\pard \nowidctlpar\widctlpar\adjustright {Вышеописанное плавно снижает громкость}{\f0\lang1033 }{играющего модуля, а затем останавливает}{\f0\lang1033 }{его. \par \par }\pard \nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b #2B Set FX Master Volume \par }\pard \nowidctlpar\widctlpar\adjustright {Установить громкость проигрывания}{\f0\lang1033 }{эффектов. \par }\pard \nowidctlpar\widctlpar\adjustright {SD FX_Master_Volume [#00..#40] \par SC #2B \par WC \par [GD Old_FX_Volume] - Старая громкость \par Аналогично предыдущей команде, но действует на сэмплы.С помощью этих двух команд можно регулировать баланс громкостей модуля и сэмплов,}{\f0\lang1033 }{и т.п. \par \par }\pard \nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b #2E Set Current FX \par }\pard \qj\nowidctlpar\widctlpar\adjustright {Установить текущий эффект. Просто}{\f0\lang1033 }{присваивает переменной CURFX это значение. Если какая-либо команда требует номер сэмпла (sample handle), то}{\f0\lang1033 }{можно вместо этого номера подать ей}{\f0\lang1033 }{#00 и интерпретатор подставит вместо}{\f0\lang1033 }{этого нуля значение переменной CURFX.}{\f0\lang1033 }{(См. команды #38, #39, #40-#4F для}{\f0\lang1033 }{понимания вышеизложенного.) \par }\pard \nowidctlpar\widctlpar\adjustright {SD Cur_FX \par SC #2E \par WC \par \par }\pard \nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b #30 Load Module}{\b\f0\lang1033 }{\b \par }\pard \nowidctlpar\widctlpar\adjustright {Загрузка модуля в память. \par }\pard \nowidctlpar\widctlpar\adjustright {SC #30 \par WC \par [GD Module_Handle]-номер модуля \par (Command bit=0, Data bit=0) \par \par }\pard \nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b SC #D1 Open Stream \par }\pard \nowidctlpar\widctlpar\adjustright {Открыть поток WC \par }\pard \nowidctlpar\widctlpar\adjustright {SD \\ \par WD \\ \par ... Байты модуля \par SD / \par WD / \par \par }\pard \nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b SC #D2 Close Stream \par }\pard \nowidctlpar\widctlpar\adjustright {Закрыть потокWC \par }\pard \nowidctlpar\widctlpar\adjustright {Пример: \par }\pard \fi720\sl-200\slmult0\nowidctlpar\widctlpar\adjustright {LD HL,Mod_adress \par }\pard \fi720\sl-200\slmult0\nowidctlpar\widctlpar\adjustright {LD DE,0-Mod_length \par LD C,GSCOM \par LD A,#30 \par CALL SENDCOM \par LD A,#D1 \par CALL SENDCOM \par LD A,(HL) \par }\pard \sl-200\slmult0\nowidctlpar\widctlpar\adjustright {LOOP:\tab IN B,(C) \par }\pard \fi720\sl-200\slmult0\nowidctlpar\widctlpar\adjustright {JP P,READY \par IN B,(C) \par JP M,LOOP \par }\pard \sl-200\slmult0\nowidctlpar\widctlpar\adjustright {READY:OUT (GSDAT),A \par }\pard \fi720\sl-200\slmult0\nowidctlpar\widctlpar\adjustright {INC HL \par LD A,(HL) \par INC E \par JP NZ,LOOP \par INC D \par JP NZ,LOOP \par WAIT:\tab IN B,(C) ; Ждем принятия \par JP M,WAIT ;последнего байта \par LD A,#D2 \par CALL SENDCOM \par IN A,(GSDAT) ; Номер модуля \par }\pard \fi720\sl-200\slmult0\nowidctlpar\widctlpar\adjustright {OUT (GSDAT),A \par }\pard \fi720\sl-200\slmult0\nowidctlpar\widctlpar\adjustright {LD A,#31 \par }\pard \sl-200\slmult0\nowidctlpar\widctlpar\adjustright {SENDCOM:\tab OUT (GSCOM),A \par WAITCOM:\tab IN A,(GSCOM) \par }\pard \fi720\li720\sl-200\slmult0\nowidctlpar\widctlpar\adjustright {RRCA \par JR C,WAITCOM \par RET \par }\pard \nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b #31 Play module \par }\pard \nowidctlpar\widctlpar\adjustright {Проигрывание модуля. \par }\pard \nowidctlpar\widctlpar\adjustright {SD Module_Handle - номер модуля \par SC #31 \par WC \par \par }\pard \nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b #32 Stop module \par }\pard \nowidctlpar\widctlpar\adjustright {Остановить проигрывание модуля. \par }\pard \nowidctlpar\widctlpar\adjustright {SC #32 \par WC \par \par }\pard \nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b #33 Continue module \par }\pard \nowidctlpar\widctlpar\adjustright {Продолжить проигрывание модуля после остановки. \par }\pard \nowidctlpar\widctlpar\adjustright {SC #33 \par WC \par \par }\pard \nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b #38 Load FX \par }\pard \nowidctlpar\widctlpar\adjustright {Загрузка сэмпла эффекта в память. \par }\pard \nowidctlpar\widctlpar\adjustright {Загружает беззнаковые сэмплы \par (PC type) \par SC #38 \par WC \par [GD FX_Handle]-номер сэмпла \par (Command bit=0, Data bit=0) \par SC #D1 (Open Stream-открыть поток) \par WC \par SD \\ \par WD \\ \par ... Байты сэмпла \par SD / \par WD / \par \par }\pard \nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b SC #D2 Close Stream \par }\pard \nowidctlpar\widctlpar\adjustright {Закрыть поток \par }\pard \nowidctlpar\widctlpar\adjustright {WC \par }\pard \qj\nowidctlpar\widctlpar\adjustright {При загрузке каждого сэмпла, в памяти }{\b GS}{ создается для этого сэмпла заголовок, в котором описываются различные параметры сэмпла. После загрузки эти параметры устанавливаются в определенные значения, как то: }{\b Note}{=60, }{\b Volume}{=#40, }{\b FineTune}{=0, }{\b Seek- First}{=#0F, }{\b SeekLast}{=#0F, }{\b Priority}{=#80, }{\b No Loop}{ и внутренняя переменная }{\b CurFX}{ устанавливается равной }{\b FX_Handle}{. \par }\pard \qj\nowidctlpar\widctlpar\adjustright {Затем командами #40, #41, #42, #45, #46 и #47 можно эти значения по умолчанию сменить на свои. Это требуется потому что команда #39 для инициации проигрывания сэмпла использует значения параметров из заголовка сэмпла. \par В своем естественном виде сэмплы обычно плохо пакуются компрессорами, но сжимаемость обычно можно поднять, если перевести сэмпл в Delta-вид, т.е. хранить не абсолютные значения сэмпла, а относительное смещение относительно предыдущего байта. Примерно вот так можно перевести сэмпл в Delta-вид: \par }\pard \fi720\sl-200\slmult0\nowidctlpar\widctlpar\adjustright {LD HL,Start_of_sample \par LD DE,0-Length_of_sample \par LD C,#00 \par }\pard \sl-200\slmult0\nowidctlpar\widctlpar\adjustright {LOOP:\tab LD A,(HL) \par }\pard \fi720\sl-200\slmult0\nowidctlpar\widctlpar\adjustright {SUB C \par LD C,(HL) \par LD (HL),A \par INC E \par JP NZ,LOOP \par INC D \par JP NZ,LOOP \par }\pard \sl-200\slmult0\nowidctlpar\widctlpar\adjustright {А вот как можно закачать сэмпл: \par }\pard \fi720\sl-200\slmult0\nowidctlpar\widctlpar\adjustright {LD IX,Parameters \par LD HL,Sample_adress \par LD DE,0-Sample_length \par LD C,GSCOM \par }\pard \sl-200\slmult0\nowidctlpar\widctlpar\adjustright { \par }\pard \fi720\sl-200\slmult0\nowidctlpar\widctlpar\adjustright {LD A,#38 \par CALL SENDCOM \par LD A,#D1 \par CALL SENDCOM \par }\pard \sl-200\slmult0\nowidctlpar\widctlpar\adjustright { \par }\pard \fi720\sl-200\slmult0\nowidctlpar\widctlpar\adjustright {LD A,(HL) \par }\pard \sl-200\slmult0\nowidctlpar\widctlpar\adjustright {LOOP:\tab IN B,(C) \par }\pard \fi720\sl-200\slmult0\nowidctlpar\widctlpar\adjustright {JP P,READY \par IN B,(C) \par JP M,LOOP \par }\pard \sl-200\slmult0\nowidctlpar\widctlpar\adjustright {READY:\tab OUT (GSDAT),A \par }\pard \fi720\sl-200\slmult0\nowidctlpar\widctlpar\adjustright {INC HL \par ADD A,(HL) \par INC E \par JP NZ,LOOP \par INC D \par JP NZ,LOOP \par }\pard \sl-200\slmult0\nowidctlpar\widctlpar\adjustright {WAIT:\tab IN B,(C) ; Ждем принатия \par }\pard \li709\sl-200\slmult0\nowidctlpar\widctlpar\adjustright {JP M,WAIT ;последнего байтаLD A,#D2CALL SENDCOM \par }\pard \sl-200\slmult0\nowidctlpar\widctlpar\adjustright {; Теперь переопределяем параметры сэмпла по умолчанию своими значениями \par }\pard \fi720\sl-200\slmult0\nowidctlpar\widctlpar\adjustright {LD A,(IX+#00) \par }\pard \fi720\sl-200\slmult0\nowidctlpar\widctlpar\adjustright {OUT (GSDAT),A ; Нота \par LD A,#40 \par CALL SENDCOM \par LD A,(IX+#01) \par OUT (GSDAT),A ; Громкость \par LD A,#41SENDCOM:\tab OUT (GSCOM), AWAITCOM:\tab IN A,(GSCOM) \par RRCA \par JR C,WAITCOM \par RET \par \par }\pard \nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b #39 Play FX \par }\pard \nowidctlpar\widctlpar\adjustright {Проигрывание эффекта.SD FX_Handle - номер сэмплаSC #39WC \par }\pard \qj\fi284\nowidctlpar\widctlpar\adjustright {При исполнении этой команды происходит следующее: смотрятся каналы, указанные в SeekFirst параметре нашего сэмпла, и если хотя-бы один из них свободен, в нем и проигрывается сэмпл, в противном случае смотрятся каналы, указанные в SeekLast и если один из них свободен, в нем и играется сэмпл, если свободных нет, то просматриваются все каналы, указанные SeekLast, из них выбирается канал с наименьшим приоритетом и сравнивается с приоритетом нашего сэмпла (имеется в виду сэмпл, который мы хотим проиграть), если у этого сэмпла будет больший приоритет, чем у сэмпла, уже играющего в канале, то играющий в канале сэмпл будет остановлен, а наш сэмпл будет запущен в этом канале вместо старого сэмпла. Вот такая вот приоритетная схема. Когда сэмпл запускается в канале, то его нота, громкость и т.п. параметры записываются в область данных канала из заголовка сэмпла.}{\f0\lang1033 }{В общем случае, чтобы проиграть сэмпл с нужными параметрами, вы можете установить эти параметры после загрузки сэмпла и смело использовать команду #39. Если же параметры должны меняться, то можно поступать следующим образом: командой #2E сделать текущим требуемый сэмпл, командами #4x изменить его параметры, а затем уже запускать его командой #39. \par }\pard \qj\fi284\nowidctlpar\widctlpar\adjustright {Альтернативный метод запуска сэмплов предоставляют команды #80..#9F, при исполнении этих команд вы прямо в коде команды указываете, в каком канале требуется запустить сэмпл, и кроме этого, вы можете также указать с какой нотой и/или громкостью требуется запустить сэмпл. \par }\pard \qj\nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b #3A Stop FX in channels \par }\pard \qj\nowidctlpar\widctlpar\adjustright {Остановка проигрывания эффектов в заданных каналах, которые указываются в маске каналов (Channel Mask). \par }\pard \qj\nowidctlpar\widctlpar\adjustright {В ней единица в n-ном бите указывает на то, что эффект в n-ном канале требуется остановить \par }\pard \nowidctlpar\widctlpar\adjustright {SD Channel_MaskSC #3AWCОписанное выше есть идеальный вариант работы данной команды, но к сожалению не все так просто в этом мире, и эта команда действует не так, а именно: единица в бите 7 останавливает сэмпл в нулевом канале, и т.п. В следующих версиях это будет исправлено, а пока я могу порекомендовать останавливать вообще все сэмплы маской #FF. \par }\pard \nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b #3E Load FX (Extended version) \par }\pard \nowidctlpar\widctlpar\adjustright {Загрузка сэмпла эффекта в память. Позволяет загружать сэмплы со знаком.(Amiga type)SD #01 (Signed sample)SC #3EWC[GD FX_Handle]-номер сэмпла(Command bit=0, Data bit=0)SC #D1 (Open Stream-открыть поток)WCSD \\WD \\ ... Байты сэмплаSD /WD / \par }\pard \nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b SC #D2 (Close Stream-закрыть поток) \par }\pard \nowidctlpar\widctlpar\adjustright {WC \par }\pard \nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b #40 Set FX Sample Playing Note \par }\pard \nowidctlpar\widctlpar\adjustright {Установка ноты по умолчанию для текущего эффекта.SD Note [0..95]SC #40}{\f0\lang1033 \par }{WC}{\f0\lang1033 \par }\pard \sl-200\slmult0\nowidctlpar\widctlpar\adjustright {Note=}{\f0\lang1033 \tab }{0 C-0}{\f0\lang1033 \par }\pard \li720\sl-200\slmult0\nowidctlpar\widctlpar\adjustright {1 C#012 C-124 C-236 C-3 (C-1 в Амиге)48 C-4 (C-2 в Амиге)60 C-5 (C-3 в Амиге)72 C-684 C-7}{\f0\lang1033 \par }\pard \nowidctlpar\widctlpar\adjustright {В данной версии Sound Generators Wave 2, 3 могут воспроизвести октавы 3, 4 и 5, поэтому допустимым значением параметра Note является диапазон от 36 до 71. \par }\pard \nowidctlpar\widctlpar\adjustright { \par }\pard \nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b #41 Set FX Sample Volume \par }\pard \nowidctlpar\widctlpar\adjustright {Установка громкости по умолчанию для текущего эффекта.SD FX_Volume [#00..#40]SC #41WC \par }\pard \nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b #45 Set FX Sample Priority \par }\pard \nowidctlpar\widctlpar\adjustright {Установка приоритета для текущего эффекта.(См. команду #39)SD FX_Priority [#01..#fe]SC #45WC \par }\pard \nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b #46 Set FX Sample Seek First parameter \par }\pard \nowidctlpar\widctlpar\adjustright {Установка параметра Seek First для текущего эффекта.(См. команду #39)SD FX_SeekFirstSC #46WC \par }\pard \nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b #47 Set FX Sample Seek Last parameter \par }\pard \nowidctlpar\widctlpar\adjustright {Установка параметра Seek Last для текущего эффекта.(См. команду #39)SD FX_SeekLastSC #47WC \par }\pard \nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b #60 Get Song Position \par }\pard \nowidctlpar\widctlpar\adjustright {Получение значения переменной Song_Position в текущем модуле.SC #60WCGD Song_Position [#00..#FF] \par }\pard \qj\fi284\nowidctlpar\widctlpar\adjustright {Можно интерпретировать как количество проигранных паттернов модуля. После старта модуля принимает значение 0 и увеличивается на единицу после проигрывания очередного паттерна. Эта переменная может использоваться для синхронизирования процессов в Спектруме с проигрыванием модуля. Для этого можно, например, в начале процедуры обработки прерывания сделать SC #60, затем выполнить процедуры различных операций с экраном, скроллинга строчек и т.п. (т.е. чтобы была достаточная для выполнения команды задержка), а затем прочитать значение порта 179 (}{\b GD Song_Position}{), и сравнить его с требуемым и, в случае равенства, перейти на следующую часть демы, т.е.if (Song_Position==My_Position) \par }\pard \qj\nowidctlpar\widctlpar\adjustright { \tab then goto Next_Part_Of_Demo \par }\pard \qj\nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b #61 Get Pattern Position \par }\pard \qj\nowidctlpar\widctlpar\adjustright {Получение значения переменной Pattern_Position в текущем модуле.SC #61WCGD Pattern_Position [#00..#3F]Получить значение смещения в паттерне (текущий ROW), использование - аналогично предыдущей команде, однако требуется заметить, что эта величина изменяется довольно быстро, и поэтому}{\f0\lang1033 :}{ \par }\pard \qj\nowidctlpar\widctlpar\adjustright { if (Pattern_Position>=My_Position) \par }\pard \qj\fi720\nowidctlpar\widctlpar\adjustright { then goto Next_Part_Of_Demo \par }\pard \qj\nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b #62 Get Mixed Position \par }\pard \qj\nowidctlpar\widctlpar\adjustright {Получить значение Pattern_Position, немного смешанной с Song_Position. SC #62WCGD Mixed_PositionMixed_Position: (по битам) \par }\pard \qj\li720\nowidctlpar\widctlpar\adjustright {7-Song_Position.16-Song_Position.05-Pattern_Position.54-Pattern_Position.43-Pattern_Position.32-Pattern_Position.21-Pattern_Position.10-Pattern_Position.0 \par }\pard \qj\fi284\nowidctlpar\widctlpar\adjustright {Т.е. если получить Mixed_Position и сделать с ним AND #3F, то получится вылитый Pattern_Position, а если после получения его немного RLCA, RLCA, AND #02 - то это будут младшие два бита Song_Position. См. примечания к командам #60 и #61. \par }\pard \nowidctlpar\widctlpar\adjustright { \par }\pard \nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b #63 Get Channel Notes \par }\pard \nowidctlpar\widctlpar\adjustright {Получить ноты всех каналов модуля.SC #63WCGD Note_of_channel_0WNGD Note_of_channel_1WNGD Note_of_channel_2WNGD Note_of_channel_3 \par }\pard \qj\fi284\nowidctlpar\widctlpar\adjustright {Если в каком-либо канале значение ноты изменилось с последнего исполнения команды #63, то бит 7 полученного заначения Note_of_channel_N будет в нуле, если же это значение то же самое, что и было раньше, то этот бит будет в единице. Младшие семь битов и есть собственно нота от 0 до 95; если это значение равно 127, то это означает, что никакие сэмплы в канале не играют. Данная команда предназначена в основном для построения на ее основе различных анализаторов. \par }\pard \qj\nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b #64 Get Channel Volumes \par }\pard \qj\nowidctlpar\widctlpar\adjustright {Получить громкости всех каналов модуля.SC #64WCGD Volume_of_channel_0WNGD Volume_of_channel_1WNGD Volume_of_channel_2WNGD Volume_of_channel_3См. описание команды #63 \par }\pard \qj\nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b #80 Direct Play FX Sample (#80..#83) \par }\pard \qj\nowidctlpar\widctlpar\adjustright {Проигрывание сэмпла в заданном канале.SD Sample_NumberSC #80..#83 (Младшие биты определяют непосредственно номер канала, в котором требуется играть сэмпл)WC \par }\pard \qj\nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b #88 Direct Play FX Sample (#88..#8B) \par }\pard \qj\nowidctlpar\widctlpar\adjustright {Проигрывание сэмпла в заданном канале с заданной нотой.SD Sample_NumberSC #88..#8B (Младшие биты определяют непосредственно номер канала, в котором требуется играть сэмпл)WCSD Note [0..95]WD \par }\pard \qj\nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b #90 Direct Play FX Sample (#90..#93) \par }\pard \qj\sl-200\slmult0\nowidctlpar\widctlpar\adjustright {Проигрывание сэмпла в заданном канале с заданной громкостью.SD Sample_NumberSC #90..#93 (Младшие биты определяют непосредствен но номер канала, в котором требуется играть сэмпл)WCSD Volume [#00..#40]WD \par }\pard \qj\nowidctlpar\widctlpar\box\brdrs\brdrw15\brsp20 \adjustright \shading2000 {\b #98 Direct Play FX Sample (#98..#9B) \par }\pard \qj\sl-200\slmult0\nowidctlpar\widctlpar\adjustright {Проигрывание сэмпла в заданном канале с заданной нотой и громкостью.SD Sample_NumberSC #88..#8B (Младшие биты определяют непосредственно номер канала, в котором требуется играть сэмпл)WCSD Note [0..95]WDSD Volume [#00..#40]WD --------------------определяют непосредственно номер канала, в котором требуется играть сэмпл)WC SD Note [0..95]}{\b \sect }\sectd \sbknone\linex0\headery709\footery709\colsx709\endnhere\sectdefaultcl \pard\plain \qj\nowidctlpar\widctlpar\adjustright \f134\fs20\lang1049\cgrid { \par }}