Инструменты пользователя

Инструменты сайта


msx:basic_dialogue_programming_language:107

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
msx:basic_dialogue_programming_language:107 [2023-01-24 15:12]
GreyWolf
msx:basic_dialogue_programming_language:107 [2023-02-18 18:12] (текущий)
GreyWolf
Строка 27: Строка 27:
 |  13  |Указатель формы волны| |  13  |Указатель формы волны|
  
-Звуки бывают двух типов, которые мы назовем "​звук"​ и "​шум"​. За сочетание звучания "​звука"​ и "​шума"​ отвечает 7-й регистр PSG:+Звуки бывают двух типов, которые мы назовем "​звук"​ и "​шум"​. За сочетание звучания "​звука"​ и "​шума"​ отвечает 7й регистр PSG:
  
 <​code>​ <​code>​
Строка 58: Строка 58:
 |  A2h  |  Последнее число, записанное в PSG  | |  A2h  |  Последнее число, записанное в PSG  |
  
-Существует два способа записи чисел в PSG средствами языка ​MSX-BASIC:+Существует два способа записи чисел в PSG средствами языка ​[[msx:​basic:​|]]:
   * α) <​code>​SOUND reg, data</​code>​   * α) <​code>​SOUND reg, data</​code>​
   * β) <​code>​OUT &​HA0,​reg:​OUT &​HA1,​data</​code>​   * β) <​code>​OUT &​HA0,​reg:​OUT &​HA1,​data</​code>​
  
-__//​Пример 1.//__ Программа в машинных кодах, записывающая число 254 в звукогенератор (в регистр 0).+{{anchor:​e1070-01}} ​__//​Пример 1//__Программа в машинных кодах, записывающая число 254 в звукогенератор (в регистр 0).\\ {{.examples:​1070-01.bas|}} \\ [[+tab|wmsxbpge>​1070-01.bas]]
 <​code>​ <​code>​
 10 CLEAR 200,&​HF000:​DEFUSR=&​HF000 10 CLEAR 200,&​HF000:​DEFUSR=&​HF000
Строка 179: Строка 179:
 |(шестая)| ​ —  |  13|  0  | |(шестая)| ​ —  |  13|  0  |
  
-__//​Пример 2.//__ Программа,​ позволяющая прочесть данные из звукогенератора и проверить приведённую таблицу.+{{anchor:​e1070-02}} ​__//​Пример 2//__Программа,​ позволяющая прочесть данные из звукогенератора и проверить приведённую таблицу.\\ {{.examples:​1070-02.bas|}} \\ [[+tab|wmsxbpge>​1070-02.bas]]
 <​code>​ <​code>​
 10 CLEAR 200,&​HF000:​DEFUSR=&​HF000 10 CLEAR 200,&​HF000:​DEFUSR=&​HF000
Строка 191: Строка 191:
 90 POKE &​HF000+T,​VAL("&​h"​+Z$):​T=T+1:​GOTO 70 90 POKE &​HF000+T,​VAL("&​h"​+Z$):​T=T+1:​GOTO 70
 100 PLAY "O4 C#" 100 PLAY "O4 C#"
-110 PRINT USR(0);​USR(1) '​Читаем содержимое 0-го и 1-го регистров+110 PRINT USR(0);​USR(1) '​Читаем содержимое 0го и 1го регистров
 </​code>​ </​code>​
  
Строка 202: Строка 202:
 Предлагаемый нами алгоритм реализации фонового музыкального сопровождения полностью //​исключает//​ перечисленные неудобства! Предлагаемый нами алгоритм реализации фонового музыкального сопровождения полностью //​исключает//​ перечисленные неудобства!
  
-Расскажем Вам идею алгоритма. Во время работы процессор совершает маскируемые прерывания частотой 5О Гц и опрашивает область ловушек (hooks),а точнее происходят обращения (CALL ...) по адресам FD9Ah, FD9Fh. Напомним Вам, что эти прерывания разрешаются командой ассемблера EI, а запрещаются командой DI. Начальный адрес Таблицы ловушек ​&hFD9A. По этому адресу системной области хранится подпрограмма перехода на программу сетевого обмена у компьютеров серии MSX-2 и число &​HC9(машинный код команды RET) у компьютеров серии MSX-1, поэтому при обращении к данной ловушке либо из подпрограммы обработки прерываний (которая расположена по адресу 0038h), либо из Вашей программы означает мгновенный возврат в основную программу (если MSX-2 не ведёт "​сетевой диалог"​).+Расскажем Вам идею алгоритма. Во время работы процессор совершает маскируемые прерывания частотой 5О Гц и опрашивает область ловушек (hooks),а точнее происходят обращения (CALL ...) по адресам FD9Ah, FD9Fh. Напомним Вам, что эти прерывания разрешаются командой ассемблера EI, а запрещаются командой DI. Начальный адрес Таблицы ловушек ​— &hFD9A. По этому адресу системной области хранится подпрограмма перехода на программу сетевого обмена у компьютеров серии MSX-2 и число &​HC9(машинный код команды RET) у компьютеров серии MSX-1, поэтому при обращении к данной ловушке либо из подпрограммы обработки прерываний (которая расположена по адресу 0038h), либо из Вашей программы означает мгновенный возврат в основную программу (если MSX-2 не ведёт "​сетевой диалог"​).
  
 Если по адресу FD9Ah "​положить"​ подпрограмму:​ Если по адресу FD9Ah "​положить"​ подпрограмму:​
Строка 237: Строка 237:
 ^  //​Команда// ​ ^  Описание ​ ^ ^  //​Команда// ​ ^  Описание ​ ^
 |0|Установка частоты (высоты) звучания:​ \\ 1 полубайт — команда 00 ; 2 полубайт — номер ноты 1÷12.| |0|Установка частоты (высоты) звучания:​ \\ 1 полубайт — команда 00 ; 2 полубайт — номер ноты 1÷12.|
-|1|Микширование (регистр 7 PSG,по умолчанию ​&​hb10111000):​ \\ 1 полубайт ​команда 01 , 2 полубайт ​формальный , следующий байт ​байт состояния (структура аналогична структуре данных,​ находящихся в регистре 7): <​code>​+|1|Микширование (регистр 7 PSG,по умолчанию ​— &​hb10111000):​ \\ 1 полубайт ​— команда 01 , 2 полубайт ​— формальный , следующий байт ​— байт состояния (структура аналогична структуре данных,​ находящихся в регистре 7): <​code>​
 &b10 ∗∗∗ ∗∗∗ &b10 ∗∗∗ ∗∗∗
      ​▲▲▲ ▲▲▲      ​▲▲▲ ▲▲▲
Строка 248: Строка 248:
 |4|Установка частоты шума (по умолчанию — 20): \\ 1 полубайт — команда 04, 2 полубайт — данное (1÷15, частота = данное·2).| |4|Установка частоты шума (по умолчанию — 20): \\ 1 полубайт — команда 04, 2 полубайт — данное (1÷15, частота = данное·2).|
 |5|Установка формы волны (пакета):​ \\ 1 полубайт — команда 05 , 2 полубайт — данное (1÷15).| |5|Установка формы волны (пакета):​ \\ 1 полубайт — команда 05 , 2 полубайт — данное (1÷15).|
-|6|Установка значения для 11 регистра PSG(по умолчанию-100) \\ 1 полубайт — команда 06, 2 полубайт — данное (0÷15, значение = данное · 10).| +|6|Установка значения для 11 регистра PSG(по умолчанию ​— 100) \\ 1 полубайт — команда 06, 2 полубайт — данное (0÷15, значение = данное · 10).| 
-|7|Установка значения для 12 регистра PSG(по умолчанию-10): \\ 1 полубайт — команда 07, 2 полубайт ​данное (0÷15, значение=данное·2).|+|7|Установка значения для 12 регистра PSG(по умолчанию ​— 10): \\ 1 полубайт — команда 07, 2 полубайт ​— данное (0÷15, значение=данное·2).|
 |8|Установка текущей длительности звучания:​ \\ 1 полубайт — команда 08, \\ 2 полубайт — данное (1÷15), где <​WRAP>​ |8|Установка текущей длительности звучания:​ \\ 1 полубайт — команда 08, \\ 2 полубайт — данное (1÷15), где <​WRAP>​
-  * 1 — целая с точкой, ​+  * 1 — целая с точкой,​
   * 2 — целая,   * 2 — целая,
   * 3 — половинная с точкой,​   * 3 — половинная с точкой,​
Строка 272: Строка 272:
 |15|Резервная:​ \\ 1 полубайт — команда 15, 2 полубайт — ... (можно использовать как передачу других команд,​ т.е. 15–я команда становится //​префиксной//​).| |15|Резервная:​ \\ 1 полубайт — команда 15, 2 полубайт — ... (можно использовать как передачу других команд,​ т.е. 15–я команда становится //​префиксной//​).|
  
-Таким образом,​ Ваша подпрограмма должна распознавать номер команды,​ исполнять её, исходя из параметров,​ следующих за командой и помещать указатель данных на следующую команду. Если Вы желаете увеличить музыкальные возможности программы,​а команд (в полубайт можно поместить число от 0 до 15) не хватает,​ то необходимо выделить префиксную команду (например,​ 15-ю, так как она резервная)и теперь порядок размещения данных в очереди станет следующим:​+Таким образом,​ Ваша подпрограмма должна распознавать номер команды,​ исполнять её, исходя из параметров,​ следующих за командой и помещать указатель данных на следующую команду. Если Вы желаете увеличить музыкальные возможности программы,​а команд (в полубайт можно поместить число от 0 до 15) не хватает,​ то необходимо выделить префиксную команду (например,​ 15ю, так как она резервная)и теперь порядок размещения данных в очереди станет следующим:​
 <​code>​ <​code>​
 <​Команда>,<​Команда>,​{данное},​{данное},​... <​Команда>,<​Команда>,​{данное},​{данное},​...
msx/basic_dialogue_programming_language/107.1674562344.txt.gz · Последние изменения: 2023-01-24 15:12 — GreyWolf