Текст базирован на официальной авторской инструкции, 
опубликованной в журнале Spectrofon.
Авторская редакция 17.01.1994 ASM v.1.12
Редакция доработок 27.08.2024 ASM v.1.13+ TR-DOS
                              
КРАТКАЯ ИНСТРУКЦИЯ К МУЗЫКАЛЬНОМУ РЕДАКТОРУ ASC Sound Master
----------------------------------------------------------------
                                                                                                                                                                                                                                
Основные характеристики (описание терминологии - ниже):

 - хранение нотного текста в системе Position/Pattern/Quant;
 - 100 Позиций (Position);
 - 32 Паттерна (Pattern);
 - 32 Инструмента (Sample);
 - 32 Орнамента (Image);
 - оконный интерфейс;
 - универсальное управление;

КОНЦЕПЦИЯ УПРАВЛЕНИЯ
---------------------

Управление основывается на использовании 8 управляющих функций:

 - движение вверх (up);
 - движение вниз (down);
 - движение влево (left);
 - движение вправо (right);
 - выбор (select);
 - уменьшение (sub);
 - увеличение (add);
 - выход (escape);

   Каждую из них реализует несколько различных клавиш либо их 
сочетаний.

   Как видно, первые 5 - функции джойстика. Естественно, их и 
реализуют джойстики: Sinclair I, Sinclair II, Cursor (+Enter), 
QAOP (+Space). С помощью этих функций производится перемещение 
по меню и выбор опций в меню.

   Уменьшение (TRUE    VIDEO (Caps+3) или R) и увеличение (INV 
VIDEO (Caps+4) или T) используются для изменения параметра 
текущей опции меню.

   Выход (BREAK (Caps+Space) или EDIT (Caps+1)) служит для 
выхода из текущего меню в предыдущее без выбора какой-либо его 
опции.

   Кроме того, для выбора практически всех опций во всех меню 
назначены определенные буквенные клавиши.  Они нигде явно не 
указаны, но, как правило совпадают с первой буквой названия 
соответствующей опции.
При нажатии такой клавиши происходит перемещение курсора к 
соответствующей опции и ее выбор. При этом надо помнить, что 
если какая-либо клавиша, выполняющая   функции джойстика (Q, A, 
O, P), назначена на выбор опции, то в данном меню функцию 
джойстика она выполнять не будет.
                                

   Существует только 2 исключения из схемы:

 - в   режиме     редактирования Pattern при нахождении курсора 
в поле октавы/ноты 2 нижних ряда клавиатуры используются как 
клавиатура фортепиано,  
'I’ - для установки 'PSE',
'K' - для установки 'RLS',
'L' - для установки '___',
'U' для входа в режим редактирования команд;

 -   в   режиме   редактирования Pattern, Sample, Image 
одновременное нажатие 'вверх' и 'вниз' используется для перехода 
на начало Pattern, Sample, Image соответственно.

СТРУКТУРА МУЗЫКАЛЬНЫХ ДАННЫХ
----------------------------
   В этом разделе описывается принятая в ASM система хранения 
музыкальных данных. Предполагается знание целого ряда 
музыкальных терминов.

   Построение музыки базируется на 6 основных понятиях:

 - Quant;
 - Pattern;
 - Position;
 - Sample;
 - Image;
 - Quark.

   Наиболее фундаментальным из этих понятий является Quant: 
наименьшая длительность ноты, используемая в данном музыкальном 
произведении.

В этом случае для того, чтобы указать длительность любой ноты, 
достаточно     будет    указать, сколько Quants она составляет.
Обычно в качестве Quant выбирается   длительность   1/16 либо 
1/32.   Тогда, например, для Quant=1/16 длительности 1/8 будут 
соответствовать 2 Quants, длительности 1/4
с точкой - 6 Quants и т.д.

   Если известно, что данная нота должна длиться определенное 
количество Quants, то для указания этого надо, чтобы в первом 
Quant было указано обозначение ноты, а последующие
должны остаться незанятыми ('___').

   Таким образом, все время звучания композиции оказывается 
поделенным на Quants.

   Для удобства манипулирования отдельными частями музыкального 
произведения Quants группируются в Patterns.  Pattern - 
совокупность из нескольких Quants. Максимальный размер Pattern - 
64 Quants. Тогда для Quant=1/16 ноты   по   длительности 
звучания Pattern     будет     составлять 64*(1/16) =4 целых 
ноты или 4 такта для размера 4/4.

   Размер Pattern можно изменять (минимум=1, максимум=64), но 
всегда удобно, чтобы Pattern по длительности   составлял   целое 
число тактов (для размера 3/4 и Quant=1/16 удобен     размер 
Pattern=48 Quants, что составит 48*(1/16)/ (3/4) =4 такта).
   Patterns малого размера (менее 1 такта) могут, например, 
применяться для создания затактов.

   В ASM имеется 32 Patterns, имеющих номера 00. 31. Как теперь 
ясно, Pattern, как правило, содержит  нотный текст части 
музыкального  произведения  (музыкальной  фразы).
   Для того, чтобы на основе Patterns конструировать композицию, 
надо указать последовательность номеров Patterns, которые должны 
будут воспроизводиться.
   Эта последовательность называется списком позиций (Position). 
Понятно, что в списке Positions номер одного и того же Pattern 
может быть указан любое количество раз.

   Размер списка Positions - 100.  Positions имеют номера 00…99.

   Теперь от описания структуры музыкального текста в целом 
перейдем к кодированию нот и их характеристик.

   Музыкальный процессор AY-3-8912A/10A имеет 3 программируемых    
генератора   прямоугольных сигналов (tone) с 16-ю градациями 
громкости по логарифмической шкале, 1 генератор белого шума 
(white noise) 32-х видов, а также генератор огибающих (envelope) 
8-ми типов. При этом надо учитывать, что громкость генератора 
noise контролируется регистрами громкости tone генераторов, что 
не позволяет считать его полноценным 4-м каналом.

   Envelope генератор также не обладает достаточными для 
полноценного контроля огибающей возможностями, поэтому в ASM он 
используется нестандартным образом для получения сигналов 
непрямоугольной формы.

   При    редактировании   музыкального   текста каждый Quant 
представляется   в виде строки текста, в которой указываются 
параметры, контролирующие работу генератора envelope, генератора 
noise и tone генераторов.

Формат строки Quant:

 |00|027\12|2#G 1 3 15|...|...|
   A  B CDEF G  H I J   K   L

A. Порядковый номер Quant в Pattern.
B. Код частоты envelope генератора. При сложении колебаний tone 
генератора и колебаний envelope генератора, если частоты 
колебаний соотносятся между собой как небольшие целые числа 
(1:1, 2:3 и т.д.), то в результате получаются колебания с 
достаточно сложной формой сигнала, вносящие приятное 
разнообразие в не слишком богатое звучание AY.

C. Символ типа огибающей.

      Тип          Символ

    |\|\|\|\          \

    /|/|/|/|          /

    /\/\/\/           /\

    \/\/\/\           \/

D.  Код запрета смещения noise - цифра от 0 до 7, показывающая, 
к каким каналам относится, а к каким не относится указанное в п. 
E смещение noise:

  0 - смещение относится ко всем каналам;
  1 - смещение запрещено для канала A;
  2 - смещение запрещено для канала B;
  4 - смещение запрещено для канала C.
	0: A+ B+ C+ 
	1: A- B+ C+ 
	2: A+ B- C+ 
	3: A- B- C+ 
	4: A+ B+ C- 
	5: A- B+ C- 
	6: A+ B- C- 
	7: A- B- C- 

  Суммируя эти значения, можно указывать смешанные запреты (5 - 
запрет смещения для каналов A и C).

E. Базовый номер noise, относительно которого будут затем 
проводиться смещение noise, указанные в Sample (см. ниже).

   Задание базы для генератора noise аналогично указанию ноты 
(т.е.  частоты) для tone генератора.  Можно указать 1 из 32-х 
возможных баз, обозначаемых следующим образом: 0...9 и далее 
A..V.

F..J.  Параметры, контролирующие канал A:

F. Указатель наличия команды (#- есть, |- нет).
  Команды (Command) - мощное средство дополнительного управления 
данным каналом либо композицией в целом.
  Список команд - в описании редактора Pattern.

G. Октава и нота. В ASM допустимы 1 неполная и 7 полных октав:

  U - субконтр октава (в ней только 2 ноты: #A и B);
  C - контроктава;
  L - большая октава;
  S - малая октава;
  1 - первая октава;
  2 - вторая октава;
  3 - третья октава;
  4 - четвертая октава.

   Ноты   обозначаются в соответствии с международным 
стандартом:

  C - до;          #F - фа диез;
 #C - до диез;      G - соль;
  D - ре;          #G - соль диез;
 #D - ре диез;      A - ля;
  E - ми;          #A - ля диез;
  F - фа;           B - си.

H.  Указание номера Sample, используемого при воспроизведении 
данной ноты. В ASM можно определить 32 Samples, первые, 10 из 
которых   обозначаются   цифрами (0...9), а остальные - буквами 
(A…V).

   Sample является основным определителем звука. В Sample 
указываются характеристики огибающей, задействование tone, noise 
и envelope генераторов, смещение номера noise относительно 
базового и смещение частоты tone относительно заданной ноты (в 
единицах частоты AY).

   Подробное описание структуры и возможностей Sample - в 
описании редактора Sample (см. ниже).

I.  Указание номера Image, используемого при воспроизведении 
данной ноты. В ASM можно определить 32 Images, первые, 10 из 
которых    обозначаются    цифрами (0...9), а остальные - 
буквами (A…V).

   Image    является   вспомогательным определителем звука. В 
Image указываются смещение номера noise относительно базового 
(как и в Sample) и смещение частоты tone относительно заданной 
ноты (в полутонах).

   Подробное описание структуры и возможностей Image - в 
описании редактора Image (см. ниже).
   
J.  Громкость. Допустимые значения: 01...15. Указание громкости 
означает то, что диапазон значения громкостей 0...15 при 
воспроизведении данной ноты будет про масштабирован в диапазон 
от 0 до заданного значения. Указание EN в   данном поле 
разрешает использование envelope генератора (если, кроме того, 
его использование указано в Sample (см. п. H)).

K.  и L. Аналогично F..J для каналов B и C соответственно.

   Теперь рассмотрим взаимосвязь работы программы с некоторыми 
жизненно важными параметрами ZX Spectrum.

   Как известно, в ZX Spectrum генерируются прерывания с 
частотой 50 Гц. Интервал времени 1/50 секунды, равный интервалу 
между двумя   соседними прерываниями, называется кварком 
(Quark). По импульсам прерываний осуществляется синхронизация 
работы программы, и, кроме того, взаимодействие компьютера с AY 
также происходит с этой частотой.
Это означает, что лишь 50 раз в секунду могут быть изменены 
значения в регистрах AY. Исходя из этого факта легко прийти к 
мысли, что время звучания одного Quant (см.  выше) должно быть 
равно    целому   числу   Quarks (нельзя   начать воспроизводить 
новую ноту, не изменив значений в регистрах AY).

   Время одного Quant указывается для каждой композиции в 
главном меню.  (например, QV.06 - Quant равен 6 Quarks). 
Допустимые значения длительности Quant - от 3 до 50 Quarks.

   Если Quant равен 6 Quarks и соответствует 1/16 ноты, то тогда 
темп звучания композиции будет составлять примерно 125 ударов в 
минуту. То же самое можно сказать, если Quant равен 3 Quarks, но 
соответствует 1/32 ноты.   К сожалению, изменение времени Quant 
является довольно грубым, но единственным способом задания темпа 
композиции.

   Описатели   звука   Sample и Image неявно также используют 
понятия Quark: каждая строка в описании Sample или Image 
соответствует   одному   Quark, что обеспечивает задание 
характеристик звука с максимальной допустимой дискретностью (как 
уже отмечалось, менять параметры звучания AY в ASM нельзя через 
интервал    времени   меньше, чем Quark).

  Максимальный размер Sample - 150, Image - 30 Quarks. 
  
  Формат строки Sample:

   |002|()|+05|-002|12|TN-|
     A   B  C    D   E  F

A. Порядковый номер Quark в Sample.
B. Метки зацикливания.
 '(' - начало цикла,
 ')' - конец цикла.

   При   воспроизведении Sample будут    проигрываться    Quarks 
'внутри’ этих меток до тех пор, пока не начнется воспроизведение 
другой ноты, паузы (Pause - PSE) либо не будет разрешено начать 
фазу послезвучания (Release - RLS).

   В этом последнем случае при достижении Quark с меткой ')' 
произойдет переход на следующий Quark (если он есть), а не на 
Quark с меткой '('.

C. Смещение номера noise относительно воспроизведенного в 
предыдущем Quark. Это означает, что при каждом последующем 
воспроизведении данного Quark (т.к. в примере он указан внутри 
цикла) номер   noise будет изменяться согласно     
последовательности: n+5, n+10, n+15 и т.д., где n - номер noise, 
воспроизводившегося в Quark с порядковым номером 01.

D.  Аналогично C, но для частоты tone генератора. Надо 
учитывать, что это изменение частоты задается в единицах частоты 
AY. Как известно, каждый tone генератор AY может в данный момент 
воспроизводить одну из 4095 частот, номер которой заносится в 
соответствующие   регистры AY.

   При этом частоту можно определить по формуле: F=110.83/n 
[kHz], где n - номер частоты (1...4095).
   Из формулы видно, что на низких частотах интервал между двумя 
соседними частотами AY составляет доли герца, тогда как на 
высоких частотах он достигает нескольких килогерц.
   Это надо учитывать при задании смещения частоты в Sample. На 
практике для нот первой октавы суммарное смещение частоты обычно 
не превышает 5-10 единиц.

E.  Громкость. Т.к. tone генератор AY имеет 16 градаций 
громкости, то допустимые здесь значения: 00...15.

F. Режим работы канала. Содержит 3 позиции:

1. задействование tone генератора: ‘T’ -да, ‘_' -нет;
2. задействование noise генератора: 'N' -да; '_' -нет;

3. дополнительные возможности:

 '_’ -не использовать дополнительные возможности;
 'E’ -использовать envelope генератор, если в Pattern будет 
указано EN;
 '+’ -увеличить на 1 смещение громкости;
 '-’ -уменьшить на 1 смещение громкости;

   Смещение громкости означает отличие реально воспроизводимой 
громкости от указанной в п. E. В начале   воспроизведения Sample 
оно равно нулю, а затем его значения могут накапливаться, 
оставаясь в диапазоне -15...+15. Если указан режим работы ‘T_E' 
или '__E’, то смещение, указанное в п.  C, относится не к noise, 
а к частоте envelope генератора.

   Формат строки Image схож с форматом строки Sample за 
исключением того, что отсутствуют пп. E. и F., а смещение 
частоты в п. 

D.  указывается в полутонах, что позволяет   задавать   в   
Image воспроизведение аккордов.


ГЛАВНОЕ МЕНЮ ПРОГРАММЫ
----------------------

Теперь перейдем к описанию опций основного меню ASM в порядке их
отображения на экране. Попутно будут прокомментированы и все 
вложенные меню. В заглавии каждого пункта в квадратных скобках 
будут указаны клавиши, нажатием которых можно быстро выбирать 
данную опцию меню. (см. 'Концепция управления').

Функция escape в основном меню служит для выхода из программы. 
При этом запрашивается подтверждение с помощью специального 
подменю.

PLAY COMPOSE / PLAY PATTERN [P]

Функцией select начинается воспроизведение композиции, 
находящейся в данный момент в памяти, в том случае, если в 
текущей Position указан номер какого-либо Pattern (т.е. если 
Position не пуста).

В случае PLAY PATTERN будет воспроизводиться только Pattern, 
указанный в данной Position (циклически), а в случае PLAY 
COMPOSE по окончании проигрывания Pattern в текущей Position 
произойдет переход к Pattern, указанному в следующей Position. 
Если следующая Position пуста, то программа будет анализировать 
последующие Position, пока не будет достигнута последняя 
Position.

В этом случае произойдет переход к Position, помеченной как 
точка цикла (Loop Point - LP - см. ниже).

Переключение варианта опции - функциями sub/add без выбора 
опции. При включении PLAY COMPOSE автоматически производится 
переход к Position с номером 00 (это самый быстрый способ 
перехода на начало композиции).

Во время проигрывания функциями sub/add можно изменять время 
Quant (Quant Value - QV -см. ниже), т.е. подбирать подходящий 
темп звучания композиции. Остановка проигрывания - функцией 
escape.

POSITION 00 [N]

Функциями sub/add можно установить текущую Position для 
проигрывания или редактирования Pattern, указанного в этой 
Position.

Функцией select производится вход в редактор Position. В 
редакторе Position отображается весь список Positions с 
указанием номеров Pattern в каждой Position по 10 в каждой 
строке (10 строк=100 Positions). '--' вместо номера Pattern 
означает, что данная Position пуста.

Up/down/left/right служат для перемещения по списку Position: -
10/+10/-1/+1 соответственно.

Select включает/выключает режим DEL <> INS. Если он выключен, то 
sub/add изменяют номер Pattern в текущей Position, а если 
включен, то sub 'удаляет' данную Position (сдвигая номера 
Pattern в последующих Positions на 1 влево), а add раздвигает 
список (номера Pattern в последующих Positions смещаются на 1 
вправо, а номер в текущей Position дублируется в следующую 
Position).

Выход из редактора Position -функцией escape.

EDIT PAT. -- [E]

Функциями sub/add можно установить номер Pattern, указанного в 
текущей Position (не входя в редактор Position).

'--' означает, что текущая Position пуста. Функцией select 
производится вход в редактор Pattern.

В редакторе Pattern отображаются 19 Quants: 9 предшествующих 
текущему, текущий, 9 следующих за текущим. Термины 
'предшествующий' и 'следующий' соответствуют порядку 
воспроизведения Quants при проигрывании.

Например, если установлен режим PLAY PATTERN и текущим является 
Quant 01, а размер текущего Pattern 64, то предыдущими будут 
Quants 56,57…63 и 00 того же Pattern, а последующими - 02, 
03…10. Если установлен режим PLAY COMPOSE, то при переходе через 
границу Pattern предыдущие Quants будут выбираться из Pattern, 
номер которого указан в предыдущей Position, а следующие - из 
Pattern, номер которого указан в следующей Position. Кроме того, 
если текущая Position помечена как Loop Point, то для нее 
предыдущей считается последняя занятая Position, а для последней 
занятой Position следующей считается Position, помеченная как 
Loop Point.

Перемещение в редакторе Pattern: up/down - перейти к 
предыдущему/следующему Quant. Учитывая вышеописанную систему 
определения предыдущих и следующих Quants, очевидно, что, не 
выходя из редактора Pattern можно переместиться в любую часть 
композиции.

Одновременное нажатие up и down используется для быстрого 
перехода на начало Pattern.

Перемещение по текущему Quant: left/right - перейти к 
предыдущему/следующему элементу строки Quant (см. описание 
формата строки Quant).

Действие sub, add и select изменяется в зависимости от того, на 
каком элементе строки Quant находится в данный момент курсор:

- если курсор указывает на октаву/ноту канала A, B или C, то 
sub/add изменяют текущую октаву, select включает PLAY PATTERN / 
PLAY COMPOSE (в зависимости от того, что установлено в главном 
меню) с той лишь разницей, что проигрывание продолжается не до 
нажатия escape, а пока удерживается какая-либо клавиша;

- иначе sub/add изменяют значение в данном элементе строки, 
select проигрывает текущий Quant без перехода к последующему, 
пока удерживается какая-либо клавиша.

Как уже указывалось, в режиме редактирования Pattern при 
нахождении курсора в поле октавы - ноты 2 нижних ряда клавиатуры 
используются как клавиатура фортепиано. При вводе ноты в 
соответствующем канале могут автоматически устанавливаться 
остальные параметры (Sample, Image, Volume) канала так, как они 
указаны в опциях SM.--, IM. --, VOL.-- основного меню в том 
случае, если вместо '--' указаны какие-либо значения. Иначе 
соответствующий параметр не изменяется. Существует и обратная 
связь: если при редактировании Pattern изменить какой-либо 
параметр канала, то установленное значение будет перенесено в 
соответствующую опцию основного меню (SM, IM, VOL) и, значит, 
при дальнейшем вводе нот будет устанавливаться автоматически.

Особо следует сказать о вводе нот с клавиатуры в том случае, 
если в главном меню указано 'VOL.EN'. При этом в поле символа 
типа огибающей подставляется символ, указанный в главном меню 
(\,/,/\,\/), а код частоты envelope генератора для введенной 
ноты подсчитывается автоматически с учетом указанного в главном 
меню соотношения (3:1, 5:2, 2:1, 3:2, 1:1, 3:4, 1:2, 1:4, причем 
первая цифра указывает множитель для частоты envelope 
генератора, а вторая - для tone генератора).

Кроме того, клавиша 'I' служит для установки 'PSE' (паузы -
Pause), 'K' - для установки 'RLS' (разрешение начать фазу 
Release -см. описание Sample), 'L' - для установки '___' (канал 
в данном Quant продолжает воспроизведение ранее указанной ноты).

При нахождении курсора в поле октавы/ноты клавиша' используется 
для установки команды в текущем Quant для данного канала AY. При 
нажатии этой клавиши на месте параметров канала появляется 
строка с названием команды и ее аргументом.

Список команд:

NO COMMAND - нет команды;

HLD SAMPLE - продолжить воспроизведение Sample с началом новой 
ноты;

HLD IMAGE - продолжить воспроизведение Image с началом новой 
ноты;

HLD INSTR. - продолжить воспроизведение Sample и Image с началом 
новой ноты;

QUANT = 03 - задать новую длительность Quant (смена темпа 
звучания композиции);

GLIS.UP 01 - смещать значение частоты канала на 1 вверх (в 
область высоких звуков) каждый Quark;

GLIS.DN 01 - смещать значение частоты канала на 1 вниз (в 
область низких звуков) каждый Quark;

PORT.-S 01 - плавный переход к указанной ноте от 
воспроизводившейся ранее за 1 Quark; Sample, который 
использовался при воспроизведении предыдущей ноты, продолжает 
свое звучание;

PORT. +S 10 - как предыдущая команда, но в момент начала 
перехода Sample, указанный в данном канале, начинает свое 
звучание с начала.

* Надо учитывать, что при выполнении двух последних команд 
всегда будет продолжать свое звучание Image, использовавшийся 
при воспроизведении предыдущей ноты. То же можно сказать и о 
Sample в случае выполнения команды PORT.-S. Кроме того, команда 
PORT.-S учитывает предыдущее смещение частоты канала, поэтому ее 
можно применять после команд GLIS и PORT. Если в текущем Quant 
канала, где применяется команда PORT, не указана нота, к которой 
надо делать переход (т.е. указано '___' или 'RLS'), и если до 
этого выполнялась команда GLIS или PORT, то произойдет возврат к 
той ноте, из которой происходил переход по команде GLIS или 
PORT; иначе команда ничего не делает.

* Команды GLIS и PORT кроме смещения высоты тона изменяют также 
и текущий номер noise, если noise разрешен в соответствующим 
Sample, в соотношении 16:1 (т.е. команда GLIS UP 32 будет 
смещать номер noise на 2 единицы каждый Quark в сторону меньших 
номеров). Из-за особенностей реализации команды PORT применение 
ее для изменения номера noise достаточно сложно, тогда как 
команда GLIS действует достаточно эффективно.

В режиме установки команды up/down/left/right - смена команды, 
sub/add - изменение аргумента команды (если он есть в данной 
команде), select - воспроизведение текущего Quant. Выход из 
режима редактирования Pattern - функцией escape.

QNT. PLAY -- [Y]

Отображает номер текущего Quant. '--' означает, что текущая 
Position пуста.

Функции sub/add служат для перехода к предыдущему/последующему 
Quant по там же законам, что и up/down в редакторе Pattern.

Функция select вызывает PLAY PATTERN / PLAY COMPOSE, причем 
проигрывание производится, пока нажата какая-либо клавиша.

Данная опция используется редко и в основном служит для контроля 
номера текущего Quant.

PAT. SIZE -- [Z]

Показывает размер текущего Pattern. '--' означает, что текущая 
Position пуста.

Функции sub/add позволяют менять размер текущего Pattern в 
пределах от 1 до 64. При этом если Pattern уменьшается, то 
удаляется его последний Quant, а если увеличивается, то в конце 
его добавляется пустой Quant.

A+ B+ C+ [A, B, C]

С помощью этих трех опций можно запрещать воспроизведение 
соответствующего канала AY при проигрывании композиции. 
Переключение +/- производится функцией select.

LP.00 [J]

Показывает номер Position, на которую производится зацикливание 
(Loop Point). Необходимое значение устанавливается функциями 
sub/add.

QV.06 [Q]

Время Quant в Quarks - т.е. задание темпа композиции. Параметр 
изменяется функциями sub/add в пределах от 3 до 50.

SM.-- [S]

Служит для отображения номера Sample, подставляемого при вводе 
ноты в редакторе Pattern, и одновременно является входом в 
редактор Sample. Sub/add позволяют установить нужный номер 
Sample.

При '--' номер Sample в редакторе Pattern не подставляется и 
вход в редактор Sample не производится. В редакторе Sample 
отображаются до 19 строк текущего Sample и появляется меню 
редактора Sample:

SAMPLE EDITOR
-----------------

HEAR SAMPLE 00 [H]

Функциями sub/add можно установить номер текущего Sample, select 
- воспроизведение Sample (пока нажата какая-либо клавиша).

NAME: <-X--X-> [N]

Имя текущего Sample. Select - ввод нового имени. В режиме ввода 
имени select - завершение ввода, escape - возврат к предыдущему 
имени.

EDIT PLACE 000 [E]

Номер текущей строки Sample. Sub/add - смена текущей строки, 
select - вход в редактирование строки Sample. В режиме 
редактирования строки Sample up/down - перемещение по Sample 
вверх/вниз (смена текущей строки Sample), left/right - 
перемещение по строке Sample (см. описание формата строки 
Sample), sub/add - изменение значения элемента текущей строки 
Sample, select - воспроизведение Sample, escape - выход из 
редактирования строки Sample в меню редактора Sample. При 
нахождении курсора в первой позиции (содержащей номер строки 
Sample) sub/add вызывают изменение размера Sample по описанным 
ниже правилам.

ENTRY SIZE 000 [Z]

Размер текущего Sample в Quarks. Sub - уменьшение размера 
(удаляется текущая строка Sample), add - увеличение размера 
(текущая строка Sample дублируется).

(: 000 ): 000 [J, K]

Начало и конец цикла Sample. Sub/add - перемещение метки 
начала/конца цикла.

1_C 0 0 15 N00 [B, S, I, V, нет]

Параметры канала, используемые при воспроизведении Sample 
(октава, нота, Sample, Image, Volume и базовый номер Noise).

Sub/add - изменение соответствующего параметра. В отличии от 
редактора Pattern здесь октава и нота считаются одним 
параметром. Select - воспроизведение Sample.

DISK [D]

Вход в меню операций с диском для данного Sample. Оно аналогично 
меню операций с диском для композиции в целом и его описание 
помещено ниже. Типы данных для операций с диском (см. описание 
меню операций с диском) при вызове меню дисковых операций из 
этого подменю: 'SAMPLE #00' - текущий Sample.

GET < 00 [G]

Копирование указанного Sample в текущий. Sub/add - изменение 
номера Sample-источника, select - копирование.

Выход из редактора Sample - функцией escape.

IM. -- [I]

IMAGE EDITOR
---------------

Выполняет действия, аналогичные только что описанному редактору 
Sample, но для Image.


1:1 [F]

Соотношение частот envelope и tone генераторов используемое при 
вводе нот для VOL.EN (см. описание редактора Pattern).

Sub/add - смена соотношения (3:1, 5:2, 2:1, 3:2, 1:1, 3:4, 1:2, 
1:4), select - пересчет значений частоты envelope генератора с 
учетом данного соотношения и формы колебаний envelope генератора 
для всех нот в текущем Pattern.

\ [W]

Форма колебаний envelope генератора, используемая при вводе нот 
для VOL.EN (см. описание редактора Pattern). Sub/add - смена 
формы колебаний (\, /, /\, \/), select - пересчет значений 
частоты envelope генератора с учетом данного соотношения и формы 
колебаний envelope генератора в текущем Pattern.

VOL.-- [V]

Значение Volume, подставляемое при вводе нот в режиме 
редактирования Pattern. При '--' значение Volume при вводе нот 
подставляться не будет. Sub/add - изменение Volume (--, 01...15, 
EN).

1-ST OCTAVE [O]

Название октавы, ноты которой будут вводиться при редактировании 
Pattern. Sub/add - смена октавы (SUBCN, CONTR, LARGE, SMALL, 1-
ST, 2-ND, 3-RD, 4-TH).


HOTKEYS HELP [H]

Выдача информации о горячих клавишах, используемых в редакторе. 
Также выводится информация об авторе программы и её доработок. 
Любая клавиша - возврат в основное меню.

CLR A [L]

Очистка указанной части текущего Pattern. Sub/add - выбор части 
Pattern, которая будет очищена (A, B, C - каналы A, B и C 
соответственно, E - значения частоты envelope генератора, N - 
значения базового Noise). Select - выполнение очистки.

UNDO [U]

Отмена изменений, только что внесенных в текущий Pattern при 
редактировании, очистке, копировании или альтерации (см. ниже). 
Следует помнить, что если в ходе редактирования Pattern 
произошел переход в другой Pattern, то функция UNDO действовать 
не будет.

GET A < 00 A [G]

Копирование в указанный канал текущего Pattern информации из 
определенного канала этого же или другого Pattern. Эта строка 
меню разделена на 3 части, в каждой из которых функциями sub/add 
можно установить один из параметров операции (канал-приемник, 
Pattern-источник и канал-источник).

Функция select осуществляет копирование, когда курсор находится 
на любой из этих трех частей.

KEY A < +000

Транспозиция (смещение на указанное количество полутонов) всех 
нот в указанном канале текущего Pattern. Эта строка меню 
разделена на 2 части, в каждой из которых функциями add/sub 
можно установить один из параметров операции (канал и количество 
полутонов). Функция select осуществляет транспозицию, когда 
курсор находится на любой из этих двух частей.


DISK OPTIONS [D]

Вход в меню дисковых операций редактора. Именно этот раздел 
получил максимальное количество доработок и интеграций в 2024 
году, и позволил использовать редактор под дисковой системой TR-
DOS без использования собственного формата диска. Напомню, ранее 
редактор работал в системе ADS, но, к сожалению, работа с ним в 
современных реалиях под эмулятором возможна, но совершенно не 
удобна.:

FILTER: [F]

Sub/add – выбор режима работы систем загрузки/выгрузки и 
сортировки файлов в каталоге.
- ALL CODE, отображение всех файлов с расширением ”C”. Также, за 
одно показываются файлы с расширением ”1”, как логичная часть 
набора файлов ASM 0.12, и с расширением ”ZxZ”, как основной вид 
хранения снэпшот файла данных ASM 1.13.
- MODULES, покажет файлы формата ASM 0.12 и свои ASM 1.13.
- PATTERNS, покажет файлы формата ASM 0.12 и свои ASM 1.13.
- SAMPLES, покажет файлы формата ASM 0.12 и свои ASM 1.13. Так 
же отобразит одиночные сэмплы с расширением ”SAM”, но загружать 
их в этом меню не сможет. Такие файлы загружаются только в 
разделе редактора инструментов.
-IMAGES. Аналогично предыдущему режиму, только для имиджей а-ля 
орнаменты.

NAME: ANY_NAME [N]

Имя файла, по отношении к которому применяются все файловые 
дисковые операции. Select - ввод нового имени. В режиме ввода 
нового имени escape - возврат к предыдущему имени. 
Изначально в ASM нет возможности использовать символы в нижнем 
регистре, т.е. строчных букв нет. Чтобы избежать сложностей с 
переименованием файлов на диске, применён алгоритм поиска в 
универсальном регистре, т.е. вы вводите имя файла заглавными 
буквами, а редактор загрузит первый найденный файл в любом 
регистре символов. Пример: Имя: IMSCORN, загрузчик одинаково 
воспримет файлы IMScorn, imscorn, ImScOrN и т.д.

Так же имя файла можно выбрать в каталоге, используя клавиши 
управления up/down/left/right. Sselect - выбор имени, на которое 
указывает курсор. Повторное нажатие на файле с тем же именем 
производит его автоматическую загрузку и распознание.

NEXT/PREV [X]

Показывает следующую или предыдущую страницу каталога, если они 
имеются. В одну страницу отображается 64 файла. Кнопка не 
активна если файлов на диске меньше.

LOAD [L]

Чтение с диска файла с указанных именем, составляющего выбранный 
тип данных. Если режим фильтра установлен в ”ALL CODE”, то при 
загрузке будет произведен поиск компилированного модуля ASM 
любой версии с плеером или без него. В случае обнаружения, 
происходит его декомпиляция сразу в редактор. Если будет найден 
набор файлов в формате ASM 0.12, то данные так же загружаются и 
адаптируются под рабочий формат текущей версии.

SAVE [S]

Запись на диск текущего трека в виде snapshotа нужных данных и 
при любом варианте выбранного FILTER. Это аналог выгрузки набора 
файлов ASM 0.12, но в один файл. Точно такое же сохранение было 
в системе ADS, но разбитое на несколько файлов. Так же это 
позволяет не потерять названия инструментов.

DRIVE: A [D]

Задание дисковода, на котором будут производиться все дисковые 
операции. Sub/add - выбор дисковода A,B,C,D. Если в выбранном 
дисководе нет диска, то произойдет обратное переключение на 
предыдущий диск. Нажатие Select производит повторное чтение и 
обработку каталога диска.

MUSIC: [M]

Ввод названия композиции, не более 20 символов.

AUTHOR: [B]

Ввод данных об авторе трека. Точно так же, не больше 20 
символов.

COMPILE [C]

Вход в меню компилятора композиций. Как только вы заходите в 
этот раздел, сразу же происходит компиляция текущего трека. В 
верхней части меню (недоступной для курсора) отображается 
справочная информация о находящейся в памяти композиции 
(количество Positions, Pattern, суммарный объем памяти, занятой 
Samples и Images). 
Следует обратить внимание, что максимальный размер 
компилированного файла не может быть больше 16384 байт, и это 
накладывает кое-какие ограничения. Размер учитывается без 
плеера.
Так же в компилятор внесена корректировка логики хранения 
паттернов. В прошлых версиях одинаковые данные в каналах 
паттернов дублировались, а точнее вставлялись в каждый паттерн, 
где повторялись. Условно говоря если один вариант канала C 
использовался в десяти паттернах, то в компилированном варианте 
их тоже хранилось десять копий. Теперь же будет один оригинал и 
девять относительных смещений на него. Эта доработка весьма 
прилично уменьшила размер итогового файла.

PLAYER: [P]

Добавлять (YES) или не добавлять (NO) плеер к компилированному 
модулю. Отсутствие плеера не способствует потере данных об 
авторстве трека, т.к. вся информация хранится непосредственно в 
модуле. По сути, меняется только размер файла. В данной версии 
плеер немного изменился, и стал чуточку короче, т.к. из него 
убрана информация об авторстве трека.
Если размер компилированного модуля + плеер превышает допустимые 
16 килобайт, то плеер добавить нельзя. Сделано это во имя 
возможности сохранения трека, но воспроизводить его придется 
другими способами.

FILE NAME: [N]

Ввод имени файла для сохранения.

SAVE MUSIC [S]

Сохранение компилированного файла на диск.

Если выгрузка производилась с плеером, то воспроизводить 
откомпилированный блок может следующая BASIC-программа:

10 RANDOMIZE USR 49152
20 RANDOMIZE USR 49157: PAUSE 1
30 GO TO 20

После остановки этой программы клавишей BREAK 'заглушить' AY 
можно командой:

RANDOMIZE USR 49160

Как видно, откомпилированный блок имеет 3 стандартные точки 
входа:

49152 - INIT - инициализирует (устанавливает на начало) 
композицию, 'заглушает' AY.
49157 - NEXT - формирование очередного набора значений в 
регистрах AY (собственно воспроизведение композиции); необходимо 
вызывать с частотой 50 Гц (т.е. с частотой следования 
прерываний);
49160 - MUTE - 'заглушение' AY. Как правило, вызов этой точки 
входа производится, если необходимо завершить воспроизведение 
композиции.

Надо учесть, что если после вызова MUTE затем возобновить вызовы 
NEXT, то воспроизведение композиции будет продолжено со звуком с 
момента остановки.
Текущий плеер нерелоцируемый, т.е. не может быть загружен в 
любой адрес памяти, а только с адреса 49152.

Стандартный адрес размещения блока музыкальных данных #C618 
(50712), сразу за плеером, длина которого соответственно 
составляет 1560 байт.

