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

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


msx:basic_dialogue_programming_language:102

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
msx:basic_dialogue_programming_language:102 [2023-02-11 19:47]
GreyWolf [1.2.4. Примеры]
msx:basic_dialogue_programming_language:102 [2023-06-12 00:03] (текущий)
GreyWolf
Строка 4: Строка 4:
 {{anchor:​n1022}} {{anchor:​n1022}}
 ====== 1.2. Использование подпрограмм BIOS ====== ====== 1.2. Использование подпрограмм BIOS ======
-FIXME 
  
-[[msx:​bios|]] +<WRAP group 99%>
- +
-<WRAP group  99%>+
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
 <WRAP half column><​WRAP right> <WRAP half column><​WRAP right>
 Когда книга сталкивается с головой — и при Когда книга сталкивается с головой — и при
-//этом раздается ​ глухой ​ звук, разве всегда+//этом раздается глухой звук, разве всегда
 //​виновата книга. //​виновата книга.
 <WRAP rightalign>​ <WRAP rightalign>​
Строка 24: Строка 21:
 Подпрограммы BIOS ("​Basic Input–Output System"​) имеют фиксированные адреса ROM, которые называются //​входными//​ точками. Подпрограммы BIOS ("​Basic Input–Output System"​) имеют фиксированные адреса ROM, которые называются //​входными//​ точками.
 <WRAP center round important 100%> <WRAP center round important 100%>
-Прежде чем Вы начнете разработку собственных подпрограмм,​написанных в машинных кодах,​рекомендуем тщательно изучить,​ что делают подпрограммы BIOS.+Прежде чем Вы начнете разработку собственных подпрограмм,​ написанных в машинных кодах,​рекомендуем тщательно изучить,​ что делают подпрограммы ​ 
 +[[msx:bios|BIOS]].
 </​WRAP>​ </​WRAP>​
  
-Достаточно одного взгляда на описание подпрограмм BIOS, чтобы заметить,​ что некоторые подпрограммы для работы ​ //не требуют//​ ввода параметров.+Достаточно одного взгляда на описание подпрограмм ​[[msx:bios|BIOS]], чтобы заметить,​ что некоторые подпрограммы для работы //не требуют//​ ввода параметров.
  
 Проиллюстрируем использование таких подпрограмм. Проиллюстрируем использование таких подпрограмм.
  
-{{anchor:​e10201-01}} __//​Пример 1//__. //​Инициализация//​ системы. ​+{{anchor:​e10201-01}} __//​Пример 1//__. //​Инициализация//​ системы.
 <​code>​ <​code>​
 DEFUSR=0:​A=USR(0) DEFUSR=0:​A=USR(0)
Строка 40: Строка 38:
  
 {{anchor:​e10201-02}} __//​Пример 2//__. \\ {{.examples:​10201-02.bas|}} \\ [[+tab|wmsxbpge>​10201-02.bas]] {{anchor:​e10201-02}} __//​Пример 2//__. \\ {{.examples:​10201-02.bas|}} \\ [[+tab|wmsxbpge>​10201-02.bas]]
-\\ //​Инициализация//​ значений функциональных клавиш. Если Вам время от времени необходимо ​ возвращение к стандартному определению значений,​ присвоенных ​ функциональным клавишам,​ то поступите следующим образом:​+\\ //​Инициализация//​ значений функциональных клавиш. Если Вам время от времени необходимо возвращение к стандартному определению значений,​ присвоенных функциональным клавишам,​ то поступите следующим образом:​
 <​code>​ <​code>​
 10 KEY 1,"​AAAA":​KEY 2,"​BBBB"​ 10 KEY 1,"​AAAA":​KEY 2,"​BBBB"​
Строка 49: Строка 47:
 Программа BIOS с именем INIFNK по адресу &H3E переопределяет функциональные клавиши. Однако следует выполнить оператор ''​KEY ON,''​ чтобы увидеть результат на экране дисплея. Программа BIOS с именем INIFNK по адресу &H3E переопределяет функциональные клавиши. Однако следует выполнить оператор ''​KEY ON,''​ чтобы увидеть результат на экране дисплея.
  
-{{anchor:​e10201-03}} __//​Пример 3//__. //​Включение и выключение экрана.//​ Если Вы хотите моментально вывести большое количество информации на экран, то можно вначале "​выключить"​ экран, затем ​ выполнить операторы вывода информации,​ а только после этого "​включить"​ экран.+{{anchor:​e10201-03}} __//​Пример 3//__. //​Включение и выключение экрана.//​ Если Вы хотите моментально вывести большое количество информации на экран, то можно вначале "​выключить"​ экран, затем выполнить операторы вывода информации,​ а только после этого "​включить"​ экран.
  
 <WRAP round box> <WRAP round box>
-Подпрограмма BIOS с именем DISSCR, расположенная по адресу ​ &H41 , //"​выключает"//​ экран, тогда как подпрограмма ​ с именем ​ ENASCR, расположенная по адресу &H44 , //"​включает"//​ его.+Подпрограмма BIOS с именем DISSCR, расположенная по адресу &H41 , //"​выключает"//​ экран, тогда как подпрограмма с именем ENASCR, расположенная по адресу &H44 , //"​включает"//​ его.
 </​WRAP>​ </​WRAP>​
  
Строка 102: Строка 100:
 10 DEFUSR=&​HCC:​A=USR(A) </​code>​ 10 DEFUSR=&​HCC:​A=USR(A) </​code>​
  
-<WRAP group  99%>+<WRAP group 99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
 <WRAP half column><​WRAP right> <WRAP half column><​WRAP right>
-Может ли лакомка ​ не есть, если стол +Может ли лакомка не есть, если стол 
-\\ перед ним ломится от яств? Пусть ​ же+\\ перед ним ломится от яств? Пусть же
 \\ он утолит,​ наконец,​ голод и жажду! \\ он утолит,​ наконец,​ голод и жажду!
 <WRAP rightalign>​ <WRAP rightalign>​
Строка 116: Строка 114:
 ===== 1.2.2. Подпрограммы BIOS, требующие параметров ===== ===== 1.2.2. Подпрограммы BIOS, требующие параметров =====
  
-Заметим,​ что большинство подпрограмм BIOS требуют для своей работы ​ передачи параметров,​ значения которых должны быть помещены ​ в  определенные регистры перед вызовом подпрограмм.+Заметим,​ что большинство подпрограмм BIOS требуют для своей работы передачи параметров,​ значения которых должны быть помещены в определенные регистры перед вызовом подпрограмм.
  
 Такие подпрограммы обычно запускаются программой,​написанной в машинных кодах и состоящей из: Такие подпрограммы обычно запускаются программой,​написанной в машинных кодах и состоящей из:
Строка 122: Строка 120:
   * β) вызова нужной подпрограммы BIOS.   * β) вызова нужной подпрограммы BIOS.
  
-Ознакомим Вас с приемами написания подпрограмм на машинном ​ языке, требующих для своей работы передачи параметров.+Ознакомим Вас с приемами написания подпрограмм на машинном языке, требующих для своей работы передачи параметров.
  
-{{anchor:​e10202-01}} __//​Пример 1//__. Программа,​ включающая ​ и  выключающая ​ индикатор ​ CAPS (ввод заглавных букв).+{{anchor:​e10202-01}} __//​Пример 1//__. Программа,​ включающая и выключающая индикатор CAPS (ввод заглавных букв).
  
 Подпрограмма BIOS с именем CHGCAP,​расположенная по адресу &H0132 выключает индикатор "​CAPS",​ если регистр A процессора содержит ненулевое значение,​ и включает индикатор "​CAPS",​ если этот регистр содержит 0. Подпрограмма BIOS с именем CHGCAP,​расположенная по адресу &H0132 выключает индикатор "​CAPS",​ если регистр A процессора содержит ненулевое значение,​ и включает индикатор "​CAPS",​ если этот регистр содержит 0.
Строка 137: Строка 135:
 </​code>​ </​code>​
  
-А теперь приведем запись программы на машинном языке (в шестнадцатеричных кодах): ​           +А теперь приведем запись программы на машинном языке (в шестнадцатеричных кодах):​
 \\ {{.examples:​10202-01.asm|}} \\ {{.examples:​10202-01.asm|}}
 <​code>​ <​code>​
Строка 167: Строка 165:
  
  
-Отметим,​ что использование оператора CLEAR — это ​ не  единственный способ выделения //​защищенной//​ области в RAM. Может быть также "​передвинута"​ Таблица PIT; тогда все машинные подпрограммы могут быть введены в область,​ начинающуюся с адреса &​Н8000.+Отметим,​ что использование оператора ​''​CLEAR'' ​— это не единственный способ выделения //​защищенной//​ области в RAM. Может быть также "​передвинута"​ Таблица PIT; тогда все машинные подпрограммы могут быть введены в область,​ начинающуюся с адреса &​Н8000.
  
  
Строка 173: Строка 171:
  
 <WRAP round box> <WRAP round box>
-Для передачи //​однобайтного// ​ аргумента подпрограмме вызовите подпрограмму,​ размещенную в ROM по адресу &H521F. Аргумент передается в регистр А.                            +Для передачи //​однобайтного//​ аргумента подпрограмме вызовите подпрограмму,​ размещенную в ROM по адресу &H521F. Аргумент передается в регистр А.
 </​WRAP>​ </​WRAP>​
    
Строка 197: Строка 195:
  
 <WRAP round box> <WRAP round box>
-Для передачи подпрограмме //​двухбайтного//​ значения (например,​ адреса) используется подпрограмма,​ размещенная в ROM по  адресу &H2F8A и использующая значение,​ хранящееся в шестнадцатибитном регистре HL.+Для передачи подпрограмме //​двухбайтного//​ значения (например,​ адреса) используется подпрограмма,​ размещенная в ROM по адресу &H2F8A и использующая значение,​ хранящееся в шестнадцатибитном регистре HL.
 </​WRAP>​ </​WRAP>​
  
Строка 294: Строка 292:
 </​code>​ </​code>​
  
-{{anchor:​e10202-05}} __//​Пример 5//__. Использование подпрограммы расширенного ​ BIOS  для ​ построения линии.\\ {{.examples:​10202-05.bas|}} \\ [[+tab|wmsxbpge>​10202-05.bas]]+{{anchor:​e10202-05}} __//​Пример 5//__. Использование подпрограммы расширенного BIOS для построения линии.\\ {{.examples:​10202-05.bas|}} \\ [[+tab|wmsxbpge>​10202-05.bas]]
 <​code>​ <​code>​
 10 DATA 01,​10,​00 ​           :' LD BC, начальная X-координата 10 DATA 01,​10,​00 ​           :' LD BC, начальная X-координата
Строка 313: Строка 311:
 {{anchor:​e10202-06}} __//​Пример 6//__. \\ {{.examples:​10202-06.bas|}} \\ [[+tab|wmsxbpge>​10202-06.bas]] {{anchor:​e10202-06}} __//​Пример 6//__. \\ {{.examples:​10202-06.bas|}} \\ [[+tab|wmsxbpge>​10202-06.bas]]
 <​code>​ <​code>​
-5 '​Автор программы:​ Беленький Г. (9 класс). 05.01.90 ​+5 '​Автор программы:​ Беленький Г. (9 класс). 05.01.90
 10 DATA 01,​00,​00 ​                :'​ LD  BC, X начальное 10 DATA 01,​00,​00 ​                :'​ LD  BC, X начальное
 11 DATA 11,​00,​00 ​                :'​ LD  DE, ∗∗∗∗ ​ ◀─────────────────┐ 11 DATA 11,​00,​00 ​                :'​ LD  DE, ∗∗∗∗ ​ ◀─────────────────┐
Строка 332: Строка 330:
 </​code>​ </​code>​
  
-{{anchor:​e10202-07}} __//​Пример 7//__. Использование подпрограммы расширенного ​ BIOS  для ​ построения прямоугольника \\ {{.examples:​10202-07.bas|}} \\ [[+tab|wmsxbpge>​10202-07.bas]]+{{anchor:​e10202-07}} __//​Пример 7//__. Использование подпрограммы расширенного BIOS для построения прямоугольника \\ {{.examples:​10202-07.bas|}} \\ [[+tab|wmsxbpge>​10202-07.bas]]
 <​code>​ <​code>​
 10 DATA 01,​10,​00 ​    :'​LD ​ BC, X-координата одного угла прямоугольника 10 DATA 01,​10,​00 ​    :'​LD ​ BC, X-координата одного угла прямоугольника
Строка 367: Строка 365:
 150 DATA CD,6F,00 :'​D00B ​  CALL 006Fh     ;​Установка режима SCREEN 1 150 DATA CD,6F,00 :'​D00B ​  CALL 006Fh     ;​Установка режима SCREEN 1
 160 DATA 16,00    :'​D00E ​  ​LD ​  ​D,​0 ​      ; 160 DATA 16,00    :'​D00E ​  ​LD ​  ​D,​0 ​      ;
-170 DATA 06,FF    :'​D010 ​  ​LD ​  ​B,​FFh ​    ;255 символов ​+170 DATA 06,FF    :'​D010 ​  ​LD ​  ​B,​FFh ​    ;255 символов
 180 DATA 21,00,00 :'​D012 ​  ​LD ​  ​HL,​0 ​     ; 180 DATA 21,00,00 :'​D012 ​  ​LD ​  ​HL,​0 ​     ;
 190 DATA 3E,08    :'​D015 ​  ​LD ​  ​A,​8 ​      ; 190 DATA 3E,08    :'​D015 ​  ​LD ​  ​A,​8 ​      ;
Строка 394: Строка 392:
 </​code>​ </​code>​
  
-__//​Примечание//​__. Для написания программ на машинном ​ языке обычно требуется //​программа–монитор//​(т.е. программа,​ позволяющая подключать подпрограммы,​ написанные на машинном языке).+__//​Примечание//​__. Для написания программ на машинном языке обычно требуется //​программа–монитор//​(т.е. программа,​ позволяющая подключать подпрограммы,​ написанные на машинном языке).
  
-Если Вы не пользуетесь программой-монитором,​ то приходится вводить данные в операторах DATA, как мы это только ​ что проделали. Однако ​ для длинных программ этот метод утомителен. При малейшей ошибке система часто "​зависает";​ естественный выход при этом - нажать кнопку сброса "​RESET",​а это означает,​ что все должно быть начато заново.+Если Вы не пользуетесь программой-монитором,​ то приходится вводить данные в операторах DATA, как мы это только что проделали. Однако для длинных программ этот метод утомителен. При малейшей ошибке система часто "​зависает";​ естественный выход при этом - нажать кнопку сброса "​RESET",​а это означает,​ что все должно быть начато заново.
  
 Перед проверкой таких подпрограмм убедитесь,​что они записаны на дискету! Перед проверкой таких подпрограмм убедитесь,​что они записаны на дискету!
Строка 403: Строка 401:
 ===== 1.2.3. Подпрограммы BIOS, возвращающие параметры ===== ===== 1.2.3. Подпрограммы BIOS, возвращающие параметры =====
  
-<WRAP group  99%>+<WRAP group 99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
 <WRAP half column><​WRAP right> <WRAP half column><​WRAP right>
Строка 413: Строка 411:
 </​WRAP></​WRAP>​ </​WRAP></​WRAP>​
  
-Многие подпрограммы BIOS возвращают один или несколько параметров. Эти результаты,​ разумеется,​ можно передать через ячейки ​ RAM  с явно заданным адресом непосредственно перед выходом из подпрограммы. В дальнейшем применение функции ''​PEEK''​ позволит Вам прочитать полученные данные.+Многие подпрограммы BIOS возвращают один или несколько параметров. Эти результаты,​ разумеется,​ можно передать через ячейки RAM с явно заданным адресом непосредственно перед выходом из подпрограммы. В дальнейшем применение функции ''​PEEK''​ позволит Вам прочитать полученные данные.
  
-Однако,​ когда подпрограмма возвращает только одно значение,​ проще ​ всего присвоить его результат переменной в операторе: ​+Однако,​ когда подпрограмма возвращает только одно значение,​ проще всего присвоить его результат переменной в операторе:​
 <WRAP group> <WRAP group>
 <WRAP half column> <WRAP half column>
Строка 429: Строка 427:
 где: где:
   * α) ''​USR''​ ("​USeR"​-"​пользователь"​) — служебное слово;   * α) ''​USR''​ ("​USeR"​-"​пользователь"​) — служебное слово;
-  * β)  R — имя переменной-результата работы подпрограммы;​ +  * β) R — имя переменной-результата работы подпрограммы;​ 
-  * γ) A — арифметическое выражение,​ значение которого совпадает со  значением аргумента.+  * γ) A — арифметическое выражение,​ значение которого совпадает со значением аргумента.
  
  
 {{anchor:​e10203-01}} __//​Пример 1//__. Проверка состояния джойстиков и передача значений через переменную в программу на [[msx:​basic:​|]]. {{anchor:​e10203-01}} __//​Пример 1//__. Проверка состояния джойстиков и передача значений через переменную в программу на [[msx:​basic:​|]].
  
-Подпрограмма с именем GTSTCK позволяет ввести данные с одного из  трех джойстиков. Джойстик при этом выбирается по содержимому регистра ​ А (0, 1 или 2); прочитанное значение помещается в регистр А.+Подпрограмма с именем GTSTCK позволяет ввести данные с одного из трех джойстиков. Джойстик при этом выбирается по содержимому регистра А (0, 1 или 2); прочитанное значение помещается в регистр А.
  
-Если номер джойстика задается посредством аргумента ​ функции ''​USR()'',​ то подпрограмма может быть "​запущена"​ путем обращения к подпрограмме ROM, начинающейся с адреса &H521F. Как только значение аргумента помещено ​ в  регистр А, вызывается подпрограмма с именем GTSTCK. Содержимое ​ регистра ​ А (состояние джойстика) затем передается ​ в  основную ​ программу ​ через ​ регистр HL.+Если номер джойстика задается посредством аргумента функции ''​USR()'',​ то подпрограмма может быть "​запущена"​ путем обращения к подпрограмме ROM, начинающейся с адреса &H521F. Как только значение аргумента помещено в регистр А, вызывается подпрограмма с именем GTSTCK. Содержимое регистра А (состояние джойстика) затем передается в основную программу через регистр HL.
  
 <WRAP round box> <WRAP round box>
-Подпрограмма,​ размещенная с адреса &H2F99, передает содержимое регистра ​ HL программе,​ составленной на языке [[msx:​basic:​|]].+Подпрограмма,​ размещенная с адреса &H2F99, передает содержимое регистра HL программе,​ составленной на языке [[msx:​basic:​|]].
 </​WRAP>​ </​WRAP>​
  
Строка 447: Строка 445:
 \\ {{.examples:​10203-01.asm|}} \\ {{.examples:​10203-01.asm|}}
 <​code>​ <​code>​
-D000  CD,​1F,​52 ​  ​CALL ​ 521F ; В  A помещается однобайтный аргумент+D000  CD,​1F,​52 ​  ​CALL ​ 521F ; В A помещается однобайтный аргумент
 D003  CD,​D5,​00 ​  ​CALL ​ 00D5 ; A=STICK(A) D003  CD,​D5,​00 ​  ​CALL ​ 00D5 ; A=STICK(A)
 D006  26,00      LD    H,0  ; В регистр H помещается 0 D006  26,00      LD    H,0  ; В регистр H помещается 0
Строка 474: Строка 472:
 </​code>​ </​code>​
  
-Вы легко убедитесь,​ что функция ''​USR(0)''​ здесь "​работает"​ точно ​ так же, как функция ​ ''​STICK(0)''​!+Вы легко убедитесь,​ что функция ''​USR(0)''​ здесь "​работает"​ точно так же, как функция ''​STICK(0)''​!
 Перечислим теперь некоторые подпрограммы,​ возвращающие параметры:​ Перечислим теперь некоторые подпрограммы,​ возвращающие параметры:​
   - 1) чтение из видеопамяти <​code>​   - 1) чтение из видеопамяти <​code>​
Строка 565: Строка 563:
 </​code>​ </​code>​
  
-{{anchor:​e10204-02}} __//​Пример 2//__. Вывод на экран слова "​Миша"​! ​+{{anchor:​e10204-02}} __//​Пример 2//__. Вывод на экран слова "​Миша"​!
 \\ {{.examples:​10204-02.bas|}} \\ [[+tab|wmsxbpge>​10204-02.bas]] \\ {{.examples:​10204-02.bas|}} \\ [[+tab|wmsxbpge>​10204-02.bas]]
 <​code>​ <​code>​
Строка 609: Строка 607:
 </​code>​ </​code>​
  
-{{anchor:​e10204-04}} __//​Пример 4//__. Вывод на экран дисплея ​ //​движущегося//​ спрайта+{{anchor:​e10204-04}} __//​Пример 4//__. Вывод на экран дисплея //​движущегося//​ спрайта
 \\ {{.examples:​10204-04.bas|}} \\ [[+tab|wmsxbpge>​10204-04.bas]] \\ {{.examples:​10204-04.bas|}} \\ [[+tab|wmsxbpge>​10204-04.bas]]
 <​code>​ <​code>​
Строка 661: Строка 659:
     POKE &​HD000,​0     POKE &​HD000,​0
 200 NEXT:GOTO 180 200 NEXT:GOTO 180
-</​code> ​                                                            ​+</​code>​
  
 {{anchor:​e10204-06}} __//​Пример 6//__. Мгновенное "​утолщение"​ символов! {{anchor:​e10204-06}} __//​Пример 6//__. Мгновенное "​утолщение"​ символов!
Строка 782: Строка 780:
 </​code>​ </​code>​
  
-{{anchor:​e10204-11}} __//​Пример 11//__. Использование текстового представления для установки //​точки// ​ на графическом экране.+{{anchor:​e10204-11}} __//​Пример 11//__. Использование текстового представления для установки //​точки//​ на графическом экране.
 \\ {{.examples:​10204-11.bas|}} \\ [[+tab|wmsxbpge>​10204-11.bas]] \\ {{.examples:​10204-11.bas|}} \\ [[+tab|wmsxbpge>​10204-11.bas]]
 <​code>​ <​code>​
msx/basic_dialogue_programming_language/102.1676134050.txt.gz · Последние изменения: 2023-02-11 19:47 — GreyWolf