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

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


msx:basic_dialogue_programming_language:102

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
msx:basic_dialogue_programming_language:102 [2023-02-11 18:26]
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 (ввод заглавных букв).\\ {{.examples:​10201-01.bas|}} \\ [[+tab|wmsxbpge>​10201-02.bas]]+{{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|}}
 <​code>​ <​code>​
 3E, 00        LD A,0 3E, 00        LD A,0
Строка 143: Строка 142:
 </​code>​ </​code>​
 и на языке [[msx:​basic:​|]]:​ и на языке [[msx:​basic:​|]]:​
 +\\ {{.examples:​10202-01.bas|}} \\ [[+tab|wmsxbpge>​10202-01.bas]]
 <​code>​ <​code>​
 10 CLEAR 200,&​HD000 ​         ' Резервирование области в RAM 10 CLEAR 200,&​HD000 ​         ' Резервирование области в RAM
Строка 165: Строка 165:
  
  
-Отметим,​ что использование оператора CLEAR — это ​ не  единственный способ выделения //​защищенной//​ области в RAM. Может быть также "​передвинута"​ Таблица PIT; тогда все машинные подпрограммы могут быть введены в область,​ начинающуюся с адреса &​Н8000.+Отметим,​ что использование оператора ​''​CLEAR'' ​— это не единственный способ выделения //​защищенной//​ области в RAM. Может быть также "​передвинута"​ Таблица PIT; тогда все машинные подпрограммы могут быть введены в область,​ начинающуюся с адреса &​Н8000.
  
  
-{{anchor:​e10202-02}} __//​Пример 2//__. Включение и выключение индикатора CAPS в соответствии со значением аргумента функции ''​USR''​. ​\\ {{.examples:​10202-02.bas|}} \\ [[+tab|wmsxbpge>​10202-02.bas]]+{{anchor:​e10202-02}} __//​Пример 2//__. Включение и выключение индикатора CAPS в соответствии со значением аргумента функции ''​USR''​.
  
 <WRAP round box> <WRAP round box>
-Для передачи //​однобайтного// ​ аргумента подпрограмме вызовите подпрограмму,​ размещенную в ROM по адресу &H521F. Аргумент передается в регистр А.                            +Для передачи //​однобайтного//​ аргумента подпрограмме вызовите подпрограмму,​ размещенную в ROM по адресу &H521F. Аргумент передается в регистр А.
 </​WRAP>​ </​WRAP>​
    
 На языке ассемблера это пишется следующим образом:​ На языке ассемблера это пишется следующим образом:​
 +\\ {{.examples:​10202-02.asm|}}
 <​code>​ <​code>​
 CD,​1F,​52 ​   CALL  521F  ; Вызов подпрограммы по адресу 521F CD,​1F,​52 ​   CALL  521F  ; Вызов подпрограммы по адресу 521F
Строка 180: Строка 181:
 </​code>​ </​code>​
 Приведем окончательную программу:​ Приведем окончательную программу:​
 +\\ {{.examples:​10202-02.bas|}} \\ [[+tab|wmsxbpge>​10202-02.bas]]
 <​code>​ <​code>​
 10 CLEAR 200,&​HD000 '​Резервирование области в RAM 10 CLEAR 200,&​HD000 '​Резервирование области в RAM
Строка 193: Строка 195:
  
 <WRAP round box> <WRAP round box>
-Для передачи подпрограмме //​двухбайтного//​ значения (например,​ адреса) используется подпрограмма,​ размещенная в ROM по  адресу &H2F8A и использующая значение,​ хранящееся в шестнадцатибитном регистре HL.+Для передачи подпрограмме //​двухбайтного//​ значения (например,​ адреса) используется подпрограмма,​ размещенная в ROM по адресу &H2F8A и использующая значение,​ хранящееся в шестнадцатибитном регистре HL.
 </​WRAP>​ </​WRAP>​
  
Строка 259: Строка 261:
 </​code>​ </​code>​
  
-{{anchor:​e10202-03}} __//​Пример 3//__. Запись в видеопамять. Изменение латинской буквы "​A"​.\\ {{.examples:​10201-03.bas|}} \\ [[+tab|wmsxbpge>​10201-03.bas]]+{{anchor:​e10202-03}} __//​Пример 3//__. Запись в видеопамять. Изменение латинской буквы "​A"​.\\ {{.examples:​10202-03.bas|}} \\ [[+tab|wmsxbpge>​10202-03.bas]]
 <​code>​ <​code>​
 10 CLEAR 200,&​H9000:​SCREEN 1 10 CLEAR 200,&​H9000:​SCREEN 1
Строка 275: Строка 277:
 </​code>​ </​code>​
  
-{{anchor:​e10202-04}} __//​Пример 4//__. Запись данных в регистр видеопроцессора (VDP).\\ {{.examples:​10201-04.bas|}} \\ [[+tab|wmsxbpge>​10201-04.bas]]+{{anchor:​e10202-04}} __//​Пример 4//__. Запись данных в регистр видеопроцессора (VDP).\\ {{.examples:​10202-04.bas|}} \\ [[+tab|wmsxbpge>​10202-04.bas]]
 <​code>​ <​code>​
 10 INPUT C,B:POKE &​HA000,​C:​POKE &​HA001,​B 'C - регистр,​ B - значение 10 INPUT C,B:POKE &​HA000,​C:​POKE &​HA001,​B 'C - регистр,​ B - значение
Строка 290: Строка 292:
 </​code>​ </​code>​
  
-{{anchor:​e10202-05}} __//​Пример 5//__. Использование подпрограммы расширенного ​ BIOS  для ​ построения линии.\\ {{.examples:​10201-05.bas|}} \\ [[+tab|wmsxbpge>​10201-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-координата
Строка 307: Строка 309:
 </​code>​ </​code>​
  
-{{anchor:​e10202-06}} __//​Пример 6//__. \\ {{.examples:​10201-06.bas|}} \\ [[+tab|wmsxbpge>​10201-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, ∗∗∗∗ ​ ◀─────────────────┐
Строка 328: Строка 330:
 </​code>​ </​code>​
  
-{{anchor:​e10202-07}} __//​Пример 7//__. Использование подпрограммы расширенного ​ BIOS  для ​ построения прямоугольника \\ {{.examples:​10201-07.bas|}} \\ [[+tab|wmsxbpge>​10201-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-координата одного угла прямоугольника
Строка 347: Строка 349:
 В заключении пункта приведем более сложный пример. В заключении пункта приведем более сложный пример.
  
-{{anchor:​e10202-08}} __//​Пример 8//__. "​Утолщение"​ символов в режиме SCREEN 1. \\ {{.examples:​10201-08.bas|}} \\ [[+tab|wmsxbpge>​10201-08.bas]]+{{anchor:​e10202-08}} __//​Пример 8//__. "​Утолщение"​ символов в режиме SCREEN 1. \\ {{.examples:​10202-08.bas|}} \\ [[+tab|wmsxbpge>​10202-08.bas]]
 <​code>​ <​code>​
 10 CLEAR 300,&​HD000 10 CLEAR 300,&​HD000
Строка 363: Строка 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 ​      ;
Строка 390: Строка 392:
 </​code>​ </​code>​
  
-__//​Примечание//​__. Для написания программ на машинном ​ языке обычно требуется //​программа–монитор//​(т.е. программа,​ позволяющая подключать подпрограммы,​ написанные на машинном языке).+__//​Примечание//​__. Для написания программ на машинном языке обычно требуется //​программа–монитор//​(т.е. программа,​ позволяющая подключать подпрограммы,​ написанные на машинном языке).
  
-Если Вы не пользуетесь программой-монитором,​ то приходится вводить данные в операторах DATA, как мы это только ​ что проделали. Однако ​ для длинных программ этот метод утомителен. При малейшей ошибке система часто "​зависает";​ естественный выход при этом - нажать кнопку сброса "​RESET",​а это означает,​ что все должно быть начато заново.+Если Вы не пользуетесь программой-монитором,​ то приходится вводить данные в операторах DATA, как мы это только что проделали. Однако для длинных программ этот метод утомителен. При малейшей ошибке система часто "​зависает";​ естественный выход при этом - нажать кнопку сброса "​RESET",​а это означает,​ что все должно быть начато заново.
  
 Перед проверкой таких подпрограмм убедитесь,​что они записаны на дискету! Перед проверкой таких подпрограмм убедитесь,​что они записаны на дискету!
Строка 399: Строка 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>
Строка 409: Строка 411:
 </​WRAP></​WRAP>​ </​WRAP></​WRAP>​
  
-Многие подпрограммы BIOS возвращают один или несколько параметров. Эти результаты,​ разумеется,​ можно передать через ячейки ​ RAM  с явно заданным адресом непосредственно перед выходом из подпрограммы. В дальнейшем применение функции ''​PEEK''​ позволит Вам прочитать полученные данные.+Многие подпрограммы BIOS возвращают один или несколько параметров. Эти результаты,​ разумеется,​ можно передать через ячейки RAM с явно заданным адресом непосредственно перед выходом из подпрограммы. В дальнейшем применение функции ''​PEEK''​ позволит Вам прочитать полученные данные.
  
-Однако,​ когда подпрограмма возвращает только одно значение,​ проще ​ всего присвоить его результат переменной в операторе: ​+Однако,​ когда подпрограмма возвращает только одно значение,​ проще всего присвоить его результат переменной в операторе:​
 <WRAP group> <WRAP group>
 <WRAP half column> <WRAP half column>
Строка 425: Строка 427:
 где: где:
   * α) ''​USR''​ ("​USeR"​-"​пользователь"​) — служебное слово;   * α) ''​USR''​ ("​USeR"​-"​пользователь"​) — служебное слово;
-  * β)  R — имя переменной-результата работы подпрограммы;​ +  * β) R — имя переменной-результата работы подпрограммы;​ 
-  * γ) A — арифметическое выражение,​ значение которого совпадает со  значением аргумента.+  * γ) A — арифметическое выражение,​ значение которого совпадает со значением аргумента.
  
  
-{{anchor:​e10203-01}} __//​Пример 1//__. Проверка состояния джойстиков и передача значений через переменную в программу на [[msx:​basic:​|]].\\ {{.examples:​10203-01.bas|}} \\ [[+tab|wmsxbpge>​10203-01.bas]]+{{anchor:​e10203-01}} __//​Пример 1//__. Проверка состояния джойстиков и передача значений через переменную в программу на [[msx:​basic:​|]].
  
-Подпрограмма с именем GTSTCK позволяет ввести данные с одного из  трех джойстиков. Джойстик при этом выбирается по содержимому регистра ​ А (0, 1 или 2); прочитанное значение помещается в регистр А.+Подпрограмма с именем GTSTCK позволяет ввести данные с одного из трех джойстиков. Джойстик при этом выбирается по содержимому регистра А (0, 1 или 2); прочитанное значение помещается в регистр А.
  
 +Если номер джойстика задается посредством аргумента функции ''​USR()'',​ то подпрограмма может быть "​запущена"​ путем обращения к подпрограмме ROM, начинающейся с адреса &H521F. Как только значение аргумента помещено в регистр А, вызывается подпрограмма с именем GTSTCK. Содержимое регистра А (состояние джойстика) затем передается в основную программу через регистр HL.
 +
 +<WRAP round box>
 +Подпрограмма,​ размещенная с адреса &H2F99, передает содержимое регистра HL программе,​ составленной на языке [[msx:​basic:​|]].
 +</​WRAP>​
 +
 +
 +Подпрограмма на языке ассемблера выглядит следующим образом:​
 +\\ {{.examples:​10203-01.asm|}}
 <​code>​ <​code>​
-Если номер джойстика задается посредством аргумента ​ функции USR(), то +D000  CD,​1F,​52 ​  ​CALL ​ 521F ; В A помещается однобайтный аргумент 
-подпрограмма может быть "​запущена"​ путем обращения к подпрограмме ROM, на- +D003  CD,​D5,​00 ​  ​CALL ​ 00D5 ; A=STICK(A) 
-чинающейся с адреса &H521F. Как только значение аргумента помещено ​ в  ре- +D006  26,00      LD    H,0  ; В регистр H помещается 0 
-гистр А, вызывается подпрограмма с именем GTSTCK. Содержимое ​ регистра ​ А +D008  6F         ​LD ​   L,A  ; Содержимое А помещается в L 
-(состояние джойстика) затем передается ​ в  основную ​ программу ​ через ​ ре- +D00A  C3,​99,​2F ​  ​JP ​   2F99 ; Содержимое регистра HL передается 
-гистр HL. +                            ; основной программе 
-   ​┌────────────────────────────────────────────────────────────────┐ +D00D  C9         RET 
-   │ Подпрограмма,​ размещенная с адреса &H2F99, передает содержимое │ +</​code>​ 
-   ​│ ​    ​регистра ​ HL программе,​ составленной на языке MSX-BASIC. ​  │ +Приведем теперь программу на языке ​[[msx:​basic:​|]]. 
-   ​└────────────────────────────────────────────────────────────────┘ +\\ {{.examples:​10203-01.bas|}} \\ [[+tab|wmsxbpge>​10203-01.bas]] 
-   ​Подпрограмма на языке ассемблера выглядит следующим образом:​ +<​code>​ 
-    ​D000  CD,​1F,​52 ​  ​CALL ​ 521F ; В  A помещается однобайтный аргумент +10 CLEAR 200,&​HD000 '​Резервирование области в RAM 
-    D003  CD,​D5,​00 ​  ​CALL ​ 00D5 ; A=STICK(A) +20 AD=&​HD000 
-    D006  26,00      LD    H,0  ; В регистр H помещается 0 +30 READ A$:IF A$="​Z"​ THEN 100 
-    D008  6F         ​LD ​   L,A  ; Содержимое А помещается в L +50 A=VAL("&​H"​+A$):​POKE AD,​A:​AD=AD+1:​GOTO 30 
-    D00A  C3,​99,​2F ​  ​JP ​   2F99 ; Содержимое регистра HL передается +100 DEFUSR=&​HD000 
-                                ; основной программе +110 A=USR(0) 
-    D00D  C9         RET +120 IF A<>0 THEN PRINT A 
-   ​Приведем теперь программу на языке ​MSX-BASIC+130 GOTO 110 
-   ​10 CLEAR 200,&​HD000 '​Резервирование области в RAM +220 DATA CD,​1F,​52 ​ :' CALL 521F 
-   ​20 AD=&​HD000 +230 DATA CD,​D5,​00 ​ :' CALL 00D5 
-   ​30 READ A$:IF A$="​Z"​ THEN 100 +240 DATA 26,00     :'​ LD   H,0 
-   ​50 A=VAL("&​H"​+A$):​POKE AD,​A:​AD=AD+1:​GOTO 30 +250 DATA 6F        :' LD   L,A 
-   ​100 DEFUSR=&​HD000 +260 DATA C3,​99,​2F ​ :' JP   ​2F99 
-   ​110 A=USR(0) +270 DATA C9,"​Z" ​   :' RET 
-   ​120 IF A<>0 THEN PRINT A +</​code>​
-   ​130 GOTO 110 +
-   ​220 DATA CD,​1F,​52 ​ :' CALL 521F +
-   ​230 DATA CD,​D5,​00 ​ :' CALL 00D5 +
-   ​240 DATA 26,00     :'​ LD   H,0 +
-   ​250 DATA 6F        :' LD   L,A +
-   ​260 DATA C3,​99,​2F ​ :' JP   ​2F99 +
-   ​270 DATA C9,"​Z" ​   :' RET +
-   Вы легко убедитесь,​ что функция USR(0) здесь "​работает"​ точно ​ так же, +
-как функция ​ STICK(0)! +
-   ​Перечислим теперь некоторые подпрограммы,​ возвращающие параметры:​ +
-   1) чтение из видеопамяти +
-                       ​LD ​   HL,​adrVRAM +
-                       ​CALL ​ 004A +
-                       ​LD ​   H,0 +
-                       ​LD ​   L,A +
-                       ​CALL ​ 2F99 +
-                       RET +
-   2) начальный адрес атрибутов спрайта +
-                       ​CALL ​ 521F +
-                       ​CALL ​ 004A +
-                       ​CALL ​ 2F99 +
-                       RET +
-   3) размер спрайта +
-                       ​CALL ​ 008A +
-                       ​LD ​   H,0 +
-                       ​LD ​   L,A +
-                       ​CALL ​ 2F99 +
-                       RET +
-   4) чтение числа из звукогенератора +
-                       ​CALL ​ 521F +
-                       ​CALL ​ 0096 +
-                       ​LD ​   H,0 +
-                       ​LD ​   L,A +
-                       ​CALL ​ 2F99 +
-                       RET +
-   5) задержка до нажатия клавиши и чтение ее кода +
-                       ​CALL ​ 009F +
-                       ​LD ​   H,0 +
-                       ​LD ​   L,A +
-                       ​CALL ​ 2F99 +
-                       RET +
-   6) чтение состояния рукоятки джойстика +
-                       ​CALL ​ 521F +
-                       ​CALL ​ 00D5 +
-                       ​LD ​   H,0 +
-                       ​LD ​   L,A +
-                       ​CALL ​ 2F99 +
-                       RET +
-   7) чтение состояния кнопки джойстика +
-                       ​CALL ​ 521F +
-                       ​CALL ​ 00D8 +
-                       ​LD ​   H,0 +
-                       ​LD ​   L,A +
-                       ​CALL ​ 2F99 +
-                       RET +
-   8) чтение состояния клавиши на графическом планшете +
-                       ​CALL ​ 521F +
-                       ​CALL ​ 00DB +
-                       ​LD ​   H,0 +
-                       ​LD ​   L,A +
-                       ​CALL ​ 2F99 +
-                       RET +
-   9) чтение статуса манипулятора PDL +
-                       ​CALL ​ 521F +
-                       ​CALL ​ 00DE +
-                       ​LD ​   H,0 +
-                       ​LD ​   L,A +
-                       ​CALL ​ 2F99 +
-                       RET+
  
 +Вы легко убедитесь,​ что функция ''​USR(0)''​ здесь "​работает"​ точно так же, как функция ''​STICK(0)''​!
 +Перечислим теперь некоторые подпрограммы,​ возвращающие параметры:​
 +  - 1) чтение из видеопамяти <​code>​
 +LD    HL,adrVRAM
 +CALL  004A
 +LD    H,0
 +LD    L,A
 +CALL  2F99
 +RET
 +</​code>​
 +  - 2) начальный адрес атрибутов спрайта <​code>​
 +CALL  521F
 +CALL  004A
 +CALL  2F99
 +RET
 +</​code>​
 +  - 3) размер спрайта <​code>​
 +CALL  008A
 +LD    H,0
 +LD    L,A
 +CALL  2F99
 +RET
 +</​code>​
 +  - 4) чтение числа из звукогенератора <​code>​
 +CALL  521F
 +CALL  0096
 +LD    H,0
 +LD    L,A
 +CALL  2F99
 +RET
 +</​code>​
 +  - 5) задержка до нажатия клавиши и чтение ее кода <​code>​
 +CALL  009F
 +LD    H,0
 +LD    L,A
 +CALL  2F99
 +RET
 +</​code>​
 +  - 6) чтение состояния рукоятки джойстика <​code>​
 +CALL  521F
 +CALL  00D5
 +LD    H,0
 +LD    L,A
 +CALL  2F99
 +RET
 +</​code>​
 +  - 7) чтение состояния кнопки джойстика <​code>​
 +CALL  521F
 +CALL  00D8
 +LD    H,0
 +LD    L,A
 +CALL  2F99
 +RET
 +</​code>​
 +  - 8) чтение состояния клавиши на графическом планшете <​code>​
 +CALL  521F
 +CALL  00DB
 +LD    H,0
 +LD    L,A
 +CALL  2F99
 +RET
 +</​code>​
 +  - 9) чтение статуса манипулятора PDL <​code>​
 +CALL  521F
 +CALL  00DE
 +LD    H,0
 +LD    L,A
 +CALL  2F99
 +RET
 </​code>​ </​code>​
  
Строка 536: Строка 547:
 ===== 1.2.4. Примеры ===== ===== 1.2.4. Примеры =====
  
 +{{anchor:​e10204-01}} __//​Пример 1//__. Чтение символа с заданной позицией из буфера клавиатуры
 +\\ {{.examples:​10204-01.bas|}} \\ [[+tab|wmsxbpge>​10204-01.bas]]
 <​code>​ <​code>​
-   П р и м е р 1. Чтение символа с заданной позицией из буфера клавиатуры +10 CLEAR 200,&​HA000:​DEFUSR=&​HA000:​POKE &​HA100,​2 '​◀── Позиция символа 
-   ​───────────── +20 FOR I=0 TO 14:READ R$:POKE &​HA000+I,​VAL("&​h"​+R$):​NEXT 
-   10 CLEAR 200,&​HA000:​DEFUSR=&​HA000:​POKE &​HA100,​2 '​◀── Позиция символа +30 Z=USR(0) 
-   ​20 FOR I=0 TO 14:READ R$:POKE &​HA000+I,​VAL("&​h"​+R$):​NEXT +40 DATA CD,​B4,​00 ​      :' ​ CALL  00B4h 
-   ​30 Z=USR(0) +50 DATA 3A,​00,​A1 ​      :' ​ LD    A,(A100h) 
-   ​40 DATA CD,​B4,​00 ​      :' ​ CALL  00B4h +60 DATA 4F             :' ​ LD    C,A 
-   ​50 DATA 3A,​00,​A1 ​      :' ​ LD    A,(A100h) +70 DATA 06,00          :' ​ LD    B,0 
-   ​60 DATA 4F             :' ​ LD    C,A +80 DATA 09             :' ​ ADD   ​HL,​BC 
-   ​70 DATA 06,00          :' ​ LD    B,0 +90 DATA 7E             :' ​ LD    A,(HL) 
-   ​80 DATA 09             :' ​ ADD   ​HL,​BC +100 DATA CD,​A2,​00 ​     :' ​ CALL  00A2h 
-   ​90 DATA 7E             :' ​ LD    A,(HL) +110 DATA C9            :' ​ RET 
-   ​100 DATA CD,​A2,​00 ​     :' ​ CALL  00A2h +</​code>​
-   ​110 DATA C9            :' ​ RET+
  
-   П р и м е р 2.   ​Вывод на экран слова "​Миша"​! +{{anchor:​e10204-02}} __//Пример 2//__. Вывод на экран слова "​Миша"​! 
-   ───────────── +\\ {{.examples:​10204-02.bas|}} \\ [[+tab|wmsxbpge>​10204-02.bas]] 
-   ​10 AD=&​HD000:​DEFUSR=&​HD000 +<​code>​ 
-   ​20 READ A$:IF A$="​Z"​ THEN A=USR(0):​END +10 AD=&​HD000:​DEFUSR=&​HD000 
-   ​30 POKE AD,​VAL("&​h"​+A$) +20 READ A$:IF A$="​Z"​ THEN A=USR(0):​END 
-   ​40 AD=AD+1:​GOTO 20 +30 POKE AD,​VAL("&​h"​+A$) 
-   ​50 DATA  3E,ED     :'​ LD   ​A,​ED +40 AD=AD+1:​GOTO 20 
-   ​60 DATA  CD,​A2,​00 ​ :' CALL 00A2h;​Вывод на экран содержимого регистра А +50 DATA  3E,ED     :'​ LD   ​A,​ED 
-   ​70 DATA  3E,C9     :'​ LD   ​A,​C9 +60 DATA  CD,​A2,​00 ​ :' CALL 00A2h;​Вывод на экран содержимого регистра А 
-   ​80 DATA  CD,​A2,​00 ​ :' CALL 00A2h;​Вывод на экран содержимого регистра А +70 DATA  3E,C9     :'​ LD   ​A,​C9 
-   ​90 DATA  3E,DB     :'​ LD   ​A,​DB +80 DATA  CD,​A2,​00 ​ :' CALL 00A2h;​Вывод на экран содержимого регистра А 
-   ​100 DATA CD,​A2,​00 ​ :' CALL 00A2h;​Вывод на экран содержимого регистра А +90 DATA  3E,DB     :'​ LD   ​A,​DB 
-   ​110 DATA 3E,C1     :'​ LD   ​A,​C1 +100 DATA CD,​A2,​00 ​ :' CALL 00A2h;​Вывод на экран содержимого регистра А 
-   ​120 DATA CD,​A2,​00 ​ :' CALL 00A2h;​Вывод на экран содержимого регистра А +110 DATA 3E,C1     :'​ LD   ​A,​C1 
-   ​130 DATA C9        :' RET +120 DATA CD,​A2,​00 ​ :' CALL 00A2h;​Вывод на экран содержимого регистра А 
-   ​140 DATA "​Z" ​      :'​ К о н е ц+130 DATA C9        :' RET 
 +140 DATA "​Z" ​      :'​ К о н е ц 
 +</​code>​
  
-   П р и м е р  3.    Вывод на экран дисплея ​ н е п о д в и ж н о г о  +{{anchor:​e10204-03}} __//Пример 3//__. Вывод на экран дисплея ​//неподвижного// спрайта. 
-   ​────────────── ​    спрайта. +\\ {{.examples:10204-03.bas|}} \\ [[+tab|wmsxbpge>​10204-03.bas]] 
-   10 SCREEN 1 +<​code>​ 
-   20 KEY OFF:CLEAR 300,&​HD000:​I=&​HD000 +10 SCREEN 1 
-   30 READ A$:IF A$="​z"​ THEN SCREEN 1:GOTO 50 +20 KEY OFF:CLEAR 300,&​HD000:​I=&​HD000 
-   40 POKE I,​VAL("&​h"​+A$):​I=I+1:​GOTO 30 +30 READ A$:IF A$="​z"​ THEN SCREEN 1:GOTO 50 
-   50 DEFUSR=&​HD00C:​A=USR(0) +40 POKE I,​VAL("&​h"​+A$):​I=I+1:​GOTO 30 
-   ​60 ​ DATA FF,​FF,​C3,​C3:'​Д а н н ы е +50 DEFUSR=&​HD00C:​A=USR(0) 
-   ​70 ​ DATA C3,​C3,​FF,​FF:'​Д а н н ы е +60  DATA FF,​FF,​C3,​C3:'​Д а н н ы е 
-   ​80 ​ DATA 64,​01,​00,​0F:'​X,​ Y, Ш а б л о н , Ц в е т +70  DATA C3,​C3,​FF,​FF:'​Д а н н ы е 
-   ​90 ​ DATA 21,​00,​D0 ​  :'​LD ​  ​HL,​D000 +80  DATA 64,​01,​00,​0F:'​X,​ Y, Ш а б л о н , Ц в е т 
-   100 DATA 11,​00,​38 ​  :'​LD ​  ​DE,​3800 +90  DATA 21,​00,​D0 ​  :'​LD ​  ​HL,​D000 
-   110 DATA 01,​08,​00 ​  :'​LD ​  ​BC,​0008 +100 DATA 11,​00,​38 ​  :'​LD ​  ​DE,​3800 
-   120 DATA CD,​5C,​00 ​  :'​CALL 005C +110 DATA 01,​08,​00 ​  :'​LD ​  ​BC,​0008 
-   130 DATA 21,​08,​D0 ​  :'​LD ​  ​HL,​D008 +120 DATA CD,​5C,​00 ​  :'​CALL 005C 
-   140 DATA 11,​00,​1B ​  :'​LD ​  ​DE,​1B00 +130 DATA 21,​08,​D0 ​  :'​LD ​  ​HL,​D008 
-   150 DATA 01,​04,​00 ​  :'​LD ​  ​BC,​0004 +140 DATA 11,​00,​1B ​  :'​LD ​  ​DE,​1B00 
-   160 DATA CD,​5C,​00 ​  :'​CALL 005C +150 DATA 01,​04,​00 ​  :'​LD ​  ​BC,​0004 
-   170 DATA 21,​09,​D0 ​  :'​LD ​  ​HL,​D009 +160 DATA CD,​5C,​00 ​  :'​CALL 005C 
-   180 DATA 34         :'​INC ​ (HL) +170 DATA 21,​09,​D0 ​  :'​LD ​  ​HL,​D009 
-   190 DATA C9         :'​RET +180 DATA 34         :'​INC ​ (HL) 
-   230 DATA"​z" ​        :'​К о н е ц +190 DATA C9         :'​RET 
-   П р и м е р  4  Вывод на экран дисплея ​ д в и ж у щ е г о с я +230 DATA"​z" ​        ​:'К о н е ц 
-   ────────────── ​   спрайта +</​code>​
-   ​10 SCREEN 1 +
-   ​20 KEY OFF:CLEAR 300,&​HD000:​I=&​HD000 +
-   ​30 READ A$:IF A$="​z"​ THEN SCREEN 1:GOTO 50 +
-   ​40 POKE I,​VAL("&​h"​+A$):​I=I+1:​GOTO 30 +
-   ​50 DEFUSR=&​HD00C:​A=USR(0) +
-   ​60  DATA FF,​FF,​C3,​C3:'​Д а н н ы е +
-   ​70  DATA C3,​C3,​FF,​FF:'​Д а н н ы е +
-   ​80  DATA 64,​01,​00,​0F:'​X,​ Y, Ш а б л о н , Ц в е т +
-   ​90  DATA 21,​00,​D0 ​  :'​LD ​  ​HL,​D000 +
-   ​100 DATA 11,​00,​38 ​  :'​LD ​  ​DE,​3800 +
-   ​110 DATA 01,​08,​00 ​  :'​LD ​  ​BC,​0008 +
-   ​120 DATA CD,​5C,​00 ​  :'​CALL 005C +
-   ​130 DATA 21,​08,​D0 ​  :'​LD ​  ​HL,​D008◀┐ +
-   ​140 DATA 11,​00,​1B ​  :'​LD ​  ​DE,​1B00 ​ +
-   ​150 DATA 01,​04,​00 ​  :'​LD ​  ​BC,​0004 ​ +
-   ​160 DATA CD,​5C,​00 ​  :'​CALL 005C    │ +
-   ​170 DATA 21,​09,​D0 ​  :'​LD ​  ​HL,​D009 ​ +
-   ​180 DATA 34         :'​INC ​ (HL)    │ +
-   ​190 DATA CD,​BA,​00 ​  :'​CALL 00BA    │ +
-   200 DATA 06,​F1,​00 ​  :'​LD ​  ​B,​F1◀─┐ │Задержка +
-   210 DATA 10,FD      :'​DJNZ ​     ─┘ │Задержка +
-   220 DATA C3,​17,​D0 ​  :'​JP ​  D017 ───┘ +
-   230 DATA"​z" ​        :'​К о н е ц +
-П р и м е р  5.  Столкновение спрайтов +
-────────────── +
-   10 POKE &​HD000,​0:​KEYOFF +
-   20 SCREEN 1:​SPRITE$(0)="​orpolrplor":​SPRITE$(1)="​orplorlorlo"​ +
-   30 DEFUSR=&​H9000:​D=&​H9000 +
-   50 READ A$ +
-   60 IF A$="​z"​ THEN 180 +
-   70 POKE D,​VAL("&​h"​+A$) +
-   80 D=D+1 +
-   90 GOTO 50 +
-   100 DATA CD,​3E,​01 ​  :'​ CALL 013E +
-   110 DATA E6,20      :' AND  20 +
-   120 DATA FE,00      :' CP   0 +
-   130 DATA C8         :'​ RET  Z +
-   140 DATA 3E,01      :' LD   A,1 +
-   150 DATA 32,​00,​D0 ​  :'​ LD   ​(D000),​A +
-   ​160 ​DATA C9         :'​ RET +
-   170 DATA "​z" ​       :' К о н е ц +
-   180 FOR I=0 TO 255:PUT SPRITE 1,​(I,​40),​6,​0:​PUT SPRITE 2,​(255-I,​40),​5,​1 +
-   190 A=USR(0):​P=PEEK(&​HD000):​ +
-       IF P=1 THEN FOR K=0 TO 10:COLOR 1,​15,​15:​COLOR 15,​1,​1:​NEXT:​ +
-       POKE &​HD000,​0 +
-   200 NEXT:GOTO 180 +
-                                                              +
-   П р и м е р  6.  Мгновенное "​утолщение"​ символов! ​             +
-   ​────────────── +
-   10 CLEAR 100,&​HA000:​AD=&​HA000:​DEFUSR=&​HA000 +
-   30 READ A$:IF A$="​z"​THEN 80 +
-   50 POKE AD,​VAL("&​h"​+A$):​AD=AD+1:​GOTO 30 +
-   80 A=USR(0):​END +
-   90 DATA CD,​6F,​00 ​ :' ​ CALL  006Fh +
-   100 DATA 21,08,01 :' ​ LD    HL,0108h +
-   110 DATA 11,F8,07 :' ​ LD    DE,07F8h +
-   120 DATA CD,4A,00 :' ​ CALL  004Ah ◀──┐ +
-   130 DATA 47       :' ​ LD    B,A      │ +
-   140 DATA CB,38    :' ​ SRL   ​B ​       │ +
-   150 DATA B0       :' ​ OR    B        │ +
-   160 DATA CD,4D,00 :' ​ CALL  004Dh    │ +
-   170 DATA 7D       :' ​ LD    A,L      │ +
-   180 DATA BB       :' ​ CP    E        │ +
-   190 DATA CA,1C,A0 :' ​ JP    Z,​A01Ch──│──┐ +
-   200 DATA 23       :' ​ INC   ​HL ​      ​│ ​ │ +
-   210 DATA C3,09,A0 :' ​ JP    A009  ───┘ ​ │ +
-   220 DATA 7A       :' ​ LD    A,D  ◀──────┘ +
-   230 DATA BC       :' ​ CP    H +
-   240 DATA CA,25,A0 :' ​ JP    Z,​A025h──┐ +
-   250 DATA 23       :' ​ INC   ​HL ​      │ +
-   260 DATA C3,09,A0 :' ​ JP    A009h    │ +
-   270 DATA C9       :' ​ RET         ​◀──┘ +
-   280 DATA "​z" ​     :' ​ К о н е ц+
  
-   П р и м е р  7 ​Образование слова-"​перевертыша" +{{anchor:​e10204-04}} __//Пример ​4//__Вывод на экран дисплея //движущегося// спрайта 
-   ────────────── +\\ {{.examples:​10204-04.bas|}} \\ [[+tab|wmsxbpge>​10204-04.bas]] 
-   ​10 CLEAR 400,&​HD000:​DEFUSR=&HD00F:​A=&​HD00F +<​code>​ 
-   20 READ A$:IF A$="​z"​ THEN R=USR(R):END ELSE 30 +10 SCREEN 1 
-   30 POKE A,​VAL("&​h"​+A$):​A=A+1:​GOTO ​20 +20 KEY OFF:CLEAR 300,&​HD000:​I=&HD000 
-   40  ​DATA ​CD,C3,00 :'  ​CALL 00C3   ; Очистка экрана +30 READ A$:IF A$="​z"​ THEN SCREEN 1:GOTO 50 
-   50  ​DATA ​CD,B4,00 :' ​ CALL 00B4   ; Ввод строки +40 POKE I,​VAL("&​h"​+A$):​I=I+1:​GOTO ​30 
-   60  ​DATA ​06,11    :' ​ LD   B,11h  ; Загрузка параметра цикла +50 DEFUSR=&​HD00C:​A=USR(0) 
-   70  ​DATA 23       :' ​ ​INC  ​HL     ; ──────┐ +60  ​DATA ​FF,FF,C3,C3:'Д а н н ы е 
-   80  ​DATA 10,FD    ​:' ​ DJNZ $-1    ; ───────┘ +70  DATA C3,​C3,​FF,​FF:'​Д ​а н н ы е 
-   90  ​DATA 06,11    ​:' ​ LD   B,11h  ; Загрузка параметра цикла +80  ​DATA ​64,01,00,0F:'X, Y, Ш а б л о н , Ц в е т 
-   100 DATA 7E       :' ​ LD   A,(HL) ; +90  ​DATA ​21,00,D0   :'​LD ​  ​HL,​D000 
-   110 DATA 2B       :'  ​DEC  ​HL     ; +100 DATA 11,​00,​38 ​  :'​LD ​  DE,3800 
-   120 DATA CD,A2,00 :' ​ CALL 00A2   ​; Печать символа,​ код которого содер+110 DATA 01,​08,​00 ​  ​:'​LD ​  ​BC,​0008 
-                                     ; ​жится в регистре A +120 DATA CD,​5C,​00 ​  :'CALL 005C 
-   130 DATA 10,F9    ​:' ​ DJNZ $-5    ; Цикл, ​ организованный  ​для  печати +130 DATA 21,​08,​D0 ​  :'​LD ​  HL,D008◀┐ 
-                                     ; слова +140 DATA 11,00,1B   :'LD   ​DE,​1B00 │ 
-   140 DATA C9       :' ​ ​RET ​        ; ​К о н е ц +150 DATA 01,04,00   :'​LD ​  BC,0004 │ 
-   150 DATA "​z"​+160 DATA CD,​5C,​00 ​  ​:'CALL 005C    │ 
 +170 DATA 21,​09,​D0 ​  :'​LD ​  HL,D009 │ 
 +180 DATA 34         :'INC  (HL)    │ 
 +190 DATA CD,BA,00   ​:'​CALL ​00BA    │ 
 +200 DATA 06,​F1,​00 ​  ​:'​LD ​  ​B,​F1◀─┐ │Задержка 
 +210 DATA 10,FD      ​:'​DJNZ ​     ​─┘ │Задержка 
 +220 DATA C3,​17,​D0 ​  :'​JP ​  D017 ───┘ 
 +230 DATA"​z" ​        :'К о н е ц 
 +</​code>​
  
-   П р и м е р  8 ​Вычеркивание ​из слова латинской буквы "​А"​ +{{anchor:​e10204-05}} __//Пример ​5//__Столкновение спрайтов 
-   ────────────── +\\ {{.examples:​10204-05.bas|}} \\ [[+tab|wmsxbpge>​10204-05.bas]] 
-   ​10  CLEAR 200,&​HD000:​DEFUSR=&​HD001:A=&HD001 +<​code>​ 
-   20  ​READ R$:IF R$="​z"​ THEN 40 +10 POKE &HD000,0:KEYOFF 
-   30  ​POKE A,​VAL("&​h"​+R$):A=A+1:GOTO 20 +20 SCREEN 1:​SPRITE$(0)="​orpolrplor":​SPRITE$(1)="​orplorlorlo"​ 
-   40  P=USR(0) +30 DEFUSR=&​H9000:D=&H9000 
-   ​45  ​DATA CD,C3,00 :'​CALL ​00C3   ; Очистка экрана +50 READ A$ 
-   50  ​DATA ​CD,B4,00 :'CALL 00B4   ​; Ввод строки +60 IF A$="​z"​ THEN 180 
-   70  DATA 3E,41    ​:'​LD ​  A,41   ; Загрузка кода вычеркиваемого символа +70 POKE D,​VAL("&​h"​+A$) 
-   75  ​DATA 23       :'​INC ​ HL     ; +80 D=D+1 
-   ​80  DATA BE       :'CP   (HL  ; +90 GOTO 50 
-   90  ​DATA 28,04    ​:'JR   ​Z,​$+6 ​ ; +100 DATA CD,3E,01   :' CALL 013E 
-   100 DATA 7E       :'LD   A,(HL+110 DATA E6,20      :' AND  20 
-   110 DATA CD,A2,00 :'CALL 00A2   ; Вывод символа с кодом,содержащимся в +120 DATA FE,00      :' ​CP   ​0 
-                                   ; регистре А +130 DATA C8         :'​ RET  
-   120 DATA 3E,00    :'​LD ​  A,00   ; +140 DATA 3E,01      ​:' LD   A,1 
-   130 DATA BE       :'​CP ​  (HL  ; +150 DATA 32,​00,​D0 ​  :' ​LD   (D000),A 
-   140 DATA 28,02    :'​JR ​  Z,$+3  ; Выход из программы по биту Z +160 DATA C9         :' ​RET 
-   141 DATA 18,EF    ​:'​JR ​  $-15   ; +170 DATA "​z" ​       ​:' ​К о н е ц 
-   145 DATA C9       :'​RET ​        ; +180 FOR I=0 TO 255:PUT SPRITE 1,(I,40),6,0:PUT SPRITE 2,(255-I,40),5,1 
-   150 DATA "​z"​+190 A=USR(0):P=PEEK(&HD000): 
 +    ​IF P=1 THEN FOR K=0 TO 10:COLOR 1,15,15:COLOR 15,1,1:NEXT: 
 +    POKE &​HD000,​0 
 +200 NEXT:GOTO 180 
 +</​code>​
  
-   П р и м е р 9 Подсчет количества ​символов ​во введенном слове +{{anchor:​e10204-06}} __//Пример ​6//__Мгновенное "утолщение" ​символов! 
-   ───────────── +\\ {{.examples:​10204-06.bas|}} \\ [[+tab|wmsxbpge>​10204-06.bas]] 
-   ​10  CLEAR 200,&HD000:DEFUSR=&HD001:A=&HD001 +<​code>​ 
-   20  ​READ R$:IF R$="​z"​ THEN 40 +10 CLEAR 100,&HA000:AD=&HA000:DEFUSR=&HA000 
-   30  ​POKE A,​VAL("&​h"​+R$):A=A+1:​GOTO ​20 +30 READ A$:IF A$="​z"​THEN ​80 
-   40  P=USR(0) +50 POKE AD,​VAL("&​h"​+A$):AD=AD+1:​GOTO ​30 
-   45  ​DATA CD,C3,00   ​:' CALL 00C3    ; Очистка экрана +80 A=USR(0):END 
-   50  DATA CD,B4,00   ​:' CALL 00B4    ; Ввод слова +90 DATA CD,6F,00  :' ​ CALL  ​006Fh 
-   ​60 ​ ​DATA ​06,00      ​:' LD   ​B,00    ; +100 DATA 21,08,01 :' ​ LD    HL,0108h 
-   70  ​DATA 3E,00      ​:' ​LD   ​A,00    ​; +110 DATA 11,F8,07 :' ​ LD    DE,07F8h 
-   75  ​DATA 23         :' ​INC  HL      ; +120 DATA CD,4A,00 :' ​ CALL  ​004Ah ◀──┐ 
-   80  ​DATA BE         :' CP   (HL)    ; +130 DATA 47       :' ​ LD    B,A      │ 
-   90  ​DATA 28,03      ​:' ​JR   Z,$+5   ; +140 DATA CB,38    ​:' ​ ​SRL ​  ​B        │ 
-   100 DATA 04         :' ​INC        ​; +150 DATA B0       :' ​ OR    B        │ 
-   110 DATA 18,F7      ​:' ​JR   ​$-7 ​    ; +160 DATA CD,4D,00 :' ​ CALL  004Dh     
-   120 DATA 78         :' LD   ​A,B     ; +170 DATA 7D       :'  ​LD    A,L       
-   130 DATA 32,00,A0   ​:' ​LD   ​(A000),A; +180 DATA BB       :' ​ CP    ​E        │ 
-   140 DATA C9         ​:' RET          ; +190 DATA CA,1C,A0 :' ​ ​JP ​   ​Z,A01Ch──│──┐ 
-   150 DATA "​z"​ +200 DATA 23       :'  ​INC   ​HL ​      ​│  │ 
-   160 PRINT PEEK(&​HA000)+210 DATA C3,09,A0 :' ​ ​JP ​   A009  ───┘ ​ │ 
 +220 DATA 7A       :' ​ LD    A,D  ◀──────┘ 
 +230 DATA BC       :' ​ CP    H 
 +240 DATA CA,25,A0 :' ​ ​JP ​   Z,A025h──┐ 
 +250 DATA 23       :' ​ INC   ​HL       │ 
 +260 DATA C3,09,A0 :' ​ JP    A009h    │ 
 +270 DATA C9       ​:' ​ RET         ◀──┘ 
 +280 DATA "​z" ​     :' ​ К о н е ц 
 +</​code>​
  
 +{{anchor:​e10204-07}} __//​Пример 7//__. Образование слова-"​перевертыша"​
 +\\ {{.examples:​10204-07.bas|}} \\ [[+tab|wmsxbpge>​10204-07.bas]]
 +<​code>​
 +10 CLEAR 400,&​HD000:​DEFUSR=&​HD00F:​A=&​HD00F
 +20 READ A$:IF A$="​z"​ THEN R=USR(R):​END ELSE 30
 +30 POKE A,​VAL("&​h"​+A$):​A=A+1:​GOTO 20
 +40  DATA CD,C3,00 :' ​ CALL 00C3   ; Очистка экрана
 +50  DATA CD,B4,00 :' ​ CALL 00B4   ; Ввод строки
 +60  DATA 06,11    :' ​ LD   ​B,​11h ​ ; Загрузка параметра цикла
 +70  DATA 23       :' ​ INC  HL     ; ◀──────┐
 +80  DATA 10,FD    :' ​ DJNZ $-1    ; ───────┘
 +90  DATA 06,11    :' ​ LD   ​B,​11h ​ ; Загрузка параметра цикла
 +100 DATA 7E       :' ​ LD   ​A,​(HL) ;
 +110 DATA 2B       :' ​ DEC  HL     ;
 +120 DATA CD,A2,00 :' ​ CALL 00A2   ; Печать символа,​ код которого содер-
 +                                  ; жится в регистре A
 +130 DATA 10,F9    :' ​ DJNZ $-5    ; Цикл, ​ организованный ​ для ​ печати
 +                                  ; слова
 +140 DATA C9       :' ​ RET         ; К о н е ц
 +150 DATA "​z"​
 +</​code>​
  
 +{{anchor:​e10204-08}} __//​Пример 8//__. Вычеркивание из слова латинской буквы "​А"​
 +\\ {{.examples:​10204-08.bas|}} \\ [[+tab|wmsxbpge>​10204-08.bas]]
 +<​code>​
 +10  CLEAR 200,&​HD000:​DEFUSR=&​HD001:​A=&​HD001
 +20  READ R$:IF R$="​z"​ THEN 40
 +30  POKE A,​VAL("&​h"​+R$):​A=A+1:​GOTO 20
 +40  P=USR(0)
 +45  DATA CD,C3,00 :'CALL 00C3   ; Очистка экрана
 +50  DATA CD,B4,00 :'CALL 00B4   ; Ввод строки
 +70  DATA 3E,41    :'​LD ​  ​A,​41 ​  ; Загрузка кода вычеркиваемого символа
 +75  DATA 23       :'​INC ​ HL     ;
 +80  DATA BE       :'​CP ​  ​(HL) ​  ;
 +90  DATA 28,04    :'​JR ​  ​Z,​$+6 ​ ;
 +100 DATA 7E       :'​LD ​  ​A,​(HL) ;
 +110 DATA CD,A2,00 :'CALL 00A2   ; Вывод символа с кодом,​содержащимся в
 +                                ; регистре А
 +120 DATA 3E,00    :'​LD ​  ​A,​00 ​  ;
 +130 DATA BE       :'​CP ​  ​(HL) ​  ;
 +140 DATA 28,02    :'​JR ​  ​Z,​$+3 ​ ; Выход из программы по биту Z
 +141 DATA 18,EF    :'​JR ​  ​$-15 ​  ;
 +145 DATA C9       :'​RET ​        ;
 +150 DATA "​z"​
 +</​code>​
  
-   П р и м е р  10 Иллюстрация работы подпрограммы BIOS по адресу 0010h +{{anchor:​e10204-09}} __//Пример ​9//__Подсчет количества символов во введенном слове 
-   ─────────────── +\\ {{.examples:​10204-09.bas|}} \\ [[+tab|wmsxbpge>​10204-09.bas]] 
-   ​10 CLEAR 100,&​HD000:​DEFUSR=&​HD000:AD=&HD000 +<​code>​ 
-   40 C$="​YAMAHA !!!":​C=LEN(C$) +10  CLEAR 200,&​HD000:​DEFUSR=&​HD001:A=&HD001 
-   50 FOR I=1 TO LEN(C$) +20  ​READ R$:IF R$="​z"​ THEN 40 
-   ​60 ​   POKE &​HA000+I,​ASC(MID$(C$,​I,​1)) +30  ​POKE A,​VAL("&​h"​+R$):A=A+1:​GOTO ​20 
-   70 NEXT +40  P=USR(0) 
-   ​80 ​READ A$:IF A$="​z"​THEN ​120 +45  ​DATA CD,C3,00   ​:' ​CALL 00C3    ; ​Очистка экрана 
-   100 POKE AD,​VAL("&​h"​+A$):AD=AD+1:​GOTO ​80 +50  DATA CD,​B4,​00 ​  :'​ CALL 00B4    ​Ввод ​слова 
-   120 POKE &​HD001,​C:​A=USR(0):END +60  ​DATA 06,00      :' LD   B,00    ; 
-   130 DATA 06,00    :' ​ ​LD ​   B,0      ​;В регистре B уже находится длина +70  ​DATA 3E,00      :' LD   A,00    ; 
-                                        ;​слова ​C$ +75  DATA 23         :' ​INC  HL      ​
-   140 DATA 21,00,A0 :' ​ LD    HL,A000 +80  DATA BE         :'​ CP   ​(HL)    ; 
-   150 DATA CD,10,00 :'  ​CALL  0010     ;◀──┐ +90  ​DATA 28,03      :' JR   Z,$+5   ; 
-   160 DATA CD,A2,00 :'  ​CALL  00A2       │ +100 DATA 04         :' ​INC  B       
-   170 DATA 10,F8    ​:' ​ ​DJNZ ​ D005     ;───┘ +110 DATA 18,F7      ​:' ​JR   ​$-7 ​    ; 
-   180 DATA C9       ​:' ​ RET +120 DATA 78         :'​ LD   ​A,B     ; 
-   190 DATA "​z"​+130 DATA 32,​00,​A0 ​  :'​ LD   ​(A000),​A;​ 
 +140 DATA C9         ​:' RET          ; 
 +150 DATA "​z"​ 
 +160 PRINT PEEK(&​HA000) 
 +</​code>​
  
-   П р и м е р 11 Использование текстового представления для установки +{{anchor:​e10204-10}} __//Пример ​10//__. Иллюстрация работы подпрограммы BIOS по адресу 0010h 
-   ​────────────── ​  т о ч к и  на графическом экране. +\\ {{.examples:10204-10.bas|}} \\ [[+tab|wmsxbpge>​10204-10.bas]] 
-   10 SCREEN 7 +<​code>​ 
-   20 POKE &​HA000,&​H28 ​ :'​Загрузка кода ASCII символа "​("​ +10 CLEAR 100,&​HD000:​DEFUSR=&​HD000:​AD=&​HD000 
-   30 POKE &​HA001,&​HF ​  :'​Управляющий код. Если координата X двухбайтовая, +40 C$="​YAMAHA !!!":​C=LEN(C$) 
-                          ​то управляющий код равен &H1C, иначе - &h0F +50 FOR I=1 TO LEN(C$) 
-   40 POKE &​HA002,&​HFF ​ :'Координата X +60    POKE &​HA000+I,​ASC(MID$(C$,​I,​1)) 
-   50 POKE &​HA003,&​H2C ​ :'​Код ASCII символа ","​ +70 NEXT 
-   60 POKE &​HA004,&​HF ​  :'​Управляющий код +80 READ A$:IF A$="​z"​THEN ​120 
-   70 POKE &​HA005,&​H1A ​ :'​Координата Y +100 POKE AD,​VAL("&​h"​+A$):​AD=AD+1:​GOTO ​80 
-   80 POKE &​HA006,&​H29 ​ :'​Код ASCII символа "​)"​ +120 POKE &​HD001,​C:​A=USR(0):END 
-   90 POKE &​HA007,&​H2C  ​:'​Код ASCII символа ","​ +130 DATA 06,00    :' ​ LD    B,0      ;В регистре B уже находится длина 
-   100 POKE &​HA008,&​HF ​ :'​Управляющий код +                                     ;слова C$ 
-   110 POKE &​HA009,&​HF ​ :'​Код цвета ​ т о ч к и +140 DATA 21,00,A0 :' ​ LD    HL,A000 
-   120 POKE &​HA00A,&​H0 ​ :'​Конец ​ т е к с т о в о г о  представления +150 DATA CD,10,00 :' ​ CALL  0010     ;​◀──┐ 
-   ​130 ​CLEAR 200,&​HD000:​DEFUSR=&​HD000:​P=&​HD000 +160 DATA CD,​A2,​00 ​:'  ​CALL  00A2     ; ​  │ 
-   140 READ A$ +170 DATA 10,F8    :' ​ DJNZ  D005     ;​───┘ 
-   ​150 ​IF A$="​z"​ THEN GOTO 170 +180 DATA C9       :' ​ RET 
-   160 POKE P,​VAL("&​h"​+A$):​P=P+1:​GOTO ​140 +190 DATA "​z"​ 
-   170 A=USR(0) +</​code>​
-   180 DATA 21,00,A0     :'​LD ​HL,A000       Загрузка ​адреса ​текстового ​                                                     представления оператора +
-   190 DATA F7,87,6D,00  :'RST 30[87/​006D] ​ Обращение к подпрограмме BIOS +
-   200 DATA c9,"​z"​ +
-   210 A$=INPUT$(1)+
  
-   П р и м е р 12 ​Вывод на экран дисплея числа из регистра +{{anchor:​e10204-11}} __//Пример ​11//__Использование текстового ​представления для установки //точки// на графическом экране. 
-   ​─────────────── +\\ {{.examples:10204-11.bas|}} \\ [[+tab|wmsxbpge>​10204-11.bas]] 
-   10 DATA  3A,​00,​E0 ​     :' D000:LD A,(E000) ;Исходное число +<​code>​ 
-   20 DATA  47            :' ​     LD B,A      ;сохраняем в регистре B +10 SCREEN 7 
-   30 DATA  CD,​12,​D0 ​     ​:' ​     CALL D012   ;​──────────────────────┐ +20 POKE &HA000,&​H28  ​:'Загрузка кода ASCII символа "​("​ 
-   40 DATA  CD,A2,00      ​:' ​     CALL 00A2   ;​Печатаем символ ​      │ +30 POKE &​HA001,&​HF ​  :'Управляющий код. Если координата ​X двухбайтовая, 
-   50 DATA  78            ​:' ​     LD A,B      ;​Восстанавливаем ​      │ +                       ​то управляющий код равен &​H1C, ​иначе - &h0F 
-   60 DATA  CD,​16,​D0 ​     :' ​     CALL D016   ;​──────────────────────│┐ +40 POKE &​HA002,&​HFF  ​:'Координата X 
-   70 DATA  CD,​A2,​00 ​     :' ​     CALL 00A2   ;​Печатаем ​символ       ​││ +50 POKE &HA003,&​H2C  ​:'Код ASCII символа "," 
-   80 DATA  C9            :' ​     RET         ;Возврат в MSX-BASIC ​  ​││ +60 POKE &HA004,&​HF ​  :'Управляющий код 
-   90 DATA  0F            :'​D012:​ RRCA        ;​◀─────────────────────┘│ +70 POKE &HA005,&H1A  :'​Координата Y 
-   100 DATA 0F            :' ​     RRCA        ;Ставим старший полубайт +80 POKE &HA006,&​H29 ​ :'Код ASCII символа ")
-   110 DATA 0F            :' ​     RRCA        ;на место младшего ​     │ +90 POKE &HA007,&​H2C  ​:'Код ASCII символа ",
-   120 DATA 0F            :' ​     RRCA        ;                       ▼ +100 POKE &​HA008,&​HF ​ :'Управляющий код 
-   130 DATA E6,0F         :'​D016:​ AND 0F      ;Выделяем младший полубайт +110 POKE &​HA009,&​HF ​ :'​Код цвета ​ т о ч к и 
-   140 DATA 0E,0A         :' ​     LD C,0A     ;Сравниваем с 10 +120 POKE &​HA00A,&​H0  ​:'​Конец  ​т ​е к с т о в о г о  представления 
-   150 DATA B9            ​:' ​     CP C        ;··· +130 CLEAR 200,&​HD000:​DEFUSR=&​HD000:​P=&​HD000 
-   160 DATA FA,21,D0      ​:' ​     JP M,​D021 ​  ;Если меньше, то ───────┐ +140 READ A$ 
-   170 DATA C6,37         :' ​     ADD A,37    ;                       │ +150 IF A$="​z"​ THEN GOTO 170 
-   180 DATA C9            :' ​     RET         ; ​                      │ +160 POKE P,VAL("&​h"​+A$):​P=P+1:​GOTO ​140 
-   190 DATA C6,30         :'​D021:​ ADD A,30    ;​◀──────────────────────┘ +170 A=USR(0) 
-   ​200 DATA C9            ​:' ​     ​RET ​        ; +180 DATA 21,00,A0     :'LD HL,A000       ​Загрузка адреса текстового 
-   210 ' ​                 :'​E000:​ заданное число +                                         ​представления ​оператора 
-   220 FOR I=0 TO 35: READ A$ +190 DATA F7,87,6D,00  :'​RST 30[87/​006D] ​ Обращение к подпрограмме BIOS 
-   ​230 ​  POKE &HD000+I,VAL("&h"​+A$) +200 DATA c9,"​z"​ 
-   240 NEXT I +210 A$=INPUT$(1
-   245 PRINT"​Введите целое число, ​не превышающее 255"; +</​code>​
-   250 INPUT BYTE: POKE &HE000,BYTE +
-   255 PRINT"​Ваше число в шестнадцатеричном виде: &h"; +
-   260 DEFUSR=&HD000:Z=USR(0) +
-   run +
-   ​Введите целое числоне превышающее 255? 255 +
-   ​Ваше число в шестнадцатеричном виде&hFF +
-   Ok +
- +
-   П р и м е р  13.  Ввод в память компьютера числа с клавиатуры при помо+
-   ​─────────────── ​  щи подпрограммы BIOS +
-   ​5'​ Автор программы:​ Поляков С.,10-й класс. 14.01.89  ​ +
-   10 CLEAR 200,&​HD000:​AD=&​HD000 +
-   30 READ A$:IF A$="​z"​ THEN 60 +
-   50 A=VAL("&​h"​+A$):​POKE AD,A:AD=AD+1:​GOTO ​30 +
-   60 DEFUSR=&​HD000 +
-   70 PRINT"​Введите десятичное трехзначное число от 0 до 255:"​ +
-   ​80 ​A=USR(0):​PRINT"​Вы ввели число:"​PEEK(&​HB000):​END +
-   110 DATA F7,00,B4,00 :'​RST ​ 30[00/​00B4];​BIOS ввода строки +
-   120 DATA 23          :'​INC ​ HL +
-   130 DATA 7E          ​:'​LD ​  A,(HL)     ;​В ​ А - код первого символа +
-   140 DATA 06,63       ​:'​LD ​  ​B,​63h ​     ;Блок получения числа сотен +
-   150 DATA D6,30       :'​SUB ​ 30h        ;;; В регистре А - число +
-   160 DATA 57          :'​LD ​  ​D,​A ​       ;;; +
-   170 DATA 8A          :'​ADC ​ A,D        ;;; +
-   180 DATA 10,FD       :'​DJNZ $-1        ;;; +
-   190 DATA 5F          :'​LD ​  ​E,​A ​       ;В регистрах А и Е  - число +
-   200 DATA 16,00       :'​LD ​  ​D,​00h ​     ;​сотен, ​умноженное на 100 +
-   210 DATA D5          :'PUSH DE         ;Результат - в регистре DE +
-   220 DATA 23          :'​INC ​ HL           +
-   230 DATA 7E          :'​LD ​  ​A,​(HL) ​    ;​В ​ А - код второго символа +
-   240 DATA 06,09       :'​LD ​  ​B,​09h ​     ;Блок получения ​числа десятков +
-   250 DATA D6,30       :'​SUB ​ 30h        ;;; В регистре А - число +
-   260 DATA 57          :'​LD ​  D,A        ;;; +
-   270 DATA 8A          :'​ADC ​ A,D        ;;; +
-   280 DATA 10,FD       :'​DJNZ $-1        ;;; +
-   290 DATA D1          :'​POP ​ DE         ; +
-   300 DATA 8B          ​:'ADC  A,E        ; +
-   310 DATA 5F          :'​LD ​  ​E,​A ​       ;В регистрах А и Е - сумма со- +
-   320 DATA D5          :'PUSH DE         ;тен и десятков +
-   330 DATA 23          :'​INC ​ HL         ; +
-   340 DATA 7E          :'​LD ​  ​A,​(HL) ​    ;​В ​ А - код ​третьего символа +
-   350 DATA D6,30       :'​SUB ​ 30h        ;В регистре А - число +
-   360 DATA D1          :'​POP ​ DE +
-   370 DATA 8B          :'​ADC ​ A,E        ;В  А - введенное нами число +
-   380 DATA 6F          :'​LD ​  L,A +
-   390 DATA 26,00       :'​LD ​  ​H,​00 +
-   400 DATA 22,​00,​B0 ​   :'​LD ​  (B000h),HL +
-   410 DATA C9          :'​RET +
-   420 DATA "​z"​+
  
 +{{anchor:​e10204-12}} __//​Пример 12//__. Вывод на экран дисплея числа из регистра B
 +\\ {{.examples:​10204-12.bas|}} \\ [[+tab|wmsxbpge>​10204-12.bas]]
 +<​code>​
 +10 DATA  3A,​00,​E0 ​     :' D000:LD A,(E000) ;​Исходное число
 +20 DATA  47            :' ​     LD B,A      ;​сохраняем в регистре B
 +30 DATA  CD,​12,​D0 ​     :' ​     CALL D012   ;​──────────────────────┐
 +40 DATA  CD,​A2,​00 ​     :' ​     CALL 00A2   ;​Печатаем символ ​      │
 +50 DATA  78            :' ​     LD A,B      ;​Восстанавливаем ​      │
 +60 DATA  CD,​16,​D0 ​     :' ​     CALL D016   ;​──────────────────────│┐
 +70 DATA  CD,​A2,​00 ​     :' ​     CALL 00A2   ;​Печатаем символ ​      ​││
 +80 DATA  C9            :' ​     RET         ;​Возврат в MSX-BASIC ​  ​││
 +90 DATA  0F            :'​D012:​ RRCA        ;​◀─────────────────────┘│
 +100 DATA 0F            :' ​     RRCA        ;​Ставим старший полубайт│
 +110 DATA 0F            :' ​     RRCA        ;на место младшего ​     │
 +120 DATA 0F            :' ​     RRCA        ;                       ▼
 +130 DATA E6,0F         :'​D016:​ AND 0F      ;​Выделяем младший полубайт
 +140 DATA 0E,0A         :' ​     LD C,0A     ;​Сравниваем с 10
 +150 DATA B9            :' ​     CP C        ;···
 +160 DATA FA,​21,​D0 ​     :' ​     JP M,​D021 ​  ;​Если меньше,​ то ───────┐
 +170 DATA C6,37         :' ​     ADD A,37    ;                       │
 +180 DATA C9            :' ​     RET         ; ​                      │
 +190 DATA C6,30         :'​D021:​ ADD A,30    ;​◀──────────────────────┘
 +200 DATA C9            :' ​     RET         ;
 +210 ' ​                 :'​E000:​ заданное число
 +220 FOR I=0 TO 35: READ A$
 +230   POKE &​HD000+I,​VAL("&​h"​+A$)
 +240 NEXT I
 +245 PRINT"​Введите целое число, не превышающее 255";
 +250 INPUT BYTE: POKE &​HE000,​BYTE
 +255 PRINT"​Ваше число в шестнадцатеричном виде: &​h";​
 +260 DEFUSR=&​HD000:​Z=USR(0)
 +run
 +Введите целое число, не превышающее 255? 255
 +Ваше число в шестнадцатеричном виде: &hFF
 +Ok
 +</​code>​
  
 +{{anchor:​e10204-13}} __//​Пример 13//__. Ввод в память компьютера числа с клавиатуры при помощи подпрограммы BIOS
 +\\ {{.examples:​10204-13.bas|}} \\ [[+tab|wmsxbpge>​10204-13.bas]]
 +<​code>​
 +5' Автор программы:​ Поляков С.,10-й класс. 14.01.89
 +10 CLEAR 200,&​HD000:​AD=&​HD000
 +30 READ A$:IF A$="​z"​ THEN 60
 +50 A=VAL("&​h"​+A$):​POKE AD,​A:​AD=AD+1:​GOTO 30
 +60 DEFUSR=&​HD000
 +70 PRINT"​Введите десятичное трехзначное число от 0 до 255:"
 +80 A=USR(0):​PRINT"​Вы ввели число:"​PEEK(&​HB000):​END
 +110 DATA F7,00,B4,00 :'​RST ​ 30[00/​00B4];​BIOS ввода строки
 +120 DATA 23          :'​INC ​ HL
 +130 DATA 7E          :'​LD ​  ​A,​(HL) ​    ;​В ​ А - код первого символа
 +140 DATA 06,63       :'​LD ​  ​B,​63h ​     ;Блок получения числа сотен
 +150 DATA D6,30       :'​SUB ​ 30h        ;;; В регистре А - число
 +160 DATA 57          :'​LD ​  ​D,​A ​       ;;;
 +170 DATA 8A          :'​ADC ​ A,D        ;;;
 +180 DATA 10,FD       :'​DJNZ $-1        ;;;
 +190 DATA 5F          :'​LD ​  ​E,​A ​       ;В регистрах А и Е  - число
 +200 DATA 16,00       :'​LD ​  ​D,​00h ​     ;​сотен,​ умноженное на 100
 +210 DATA D5          :'PUSH DE         ;​Результат - в регистре DE
 +220 DATA 23          :'​INC ​ HL
 +230 DATA 7E          :'​LD ​  ​A,​(HL) ​    ;​В ​ А - код второго символа
 +240 DATA 06,09       :'​LD ​  ​B,​09h ​     ;Блок получения числа десятков
 +250 DATA D6,30       :'​SUB ​ 30h        ;;; В регистре А - число
 +260 DATA 57          :'​LD ​  ​D,​A ​       ;;;
 +270 DATA 8A          :'​ADC ​ A,D        ;;;
 +280 DATA 10,FD       :'​DJNZ $-1        ;;;
 +290 DATA D1          :'​POP ​ DE         ;
 +300 DATA 8B          :'​ADC ​ A,E        ;
 +310 DATA 5F          :'​LD ​  ​E,​A ​       ;В регистрах А и Е - сумма со-
 +320 DATA D5          :'PUSH DE         ;​тен и десятков
 +330 DATA 23          :'​INC ​ HL         ;
 +340 DATA 7E          :'​LD ​  ​A,​(HL) ​    ;​В ​ А - код третьего символа
 +350 DATA D6,30       :'​SUB ​ 30h        ;В регистре А - число
 +360 DATA D1          :'​POP ​ DE
 +370 DATA 8B          :'​ADC ​ A,E        ;В  А - введенное нами число
 +380 DATA 6F          :'​LD ​  L,A
 +390 DATA 26,00       :'​LD ​  H,00
 +400 DATA 22,​00,​B0 ​   :'​LD ​  ​(B000h),​HL
 +410 DATA C9          :'RET
 +420 DATA "​z"​
 </​code>​ </​code>​
  
Строка 867: Строка 901:
 </​WRAP></​WRAP>​ </​WRAP></​WRAP>​
  
- +{{anchor:​e10204-14}} __//Пример 14//__. Инициализация текстово-графического режима SCREEN 1-2 на компьютерах MSX-1. 
-Пример 14. Инициализация текстово-графического режима SCREEN 1-2 на компьютерах MSX-1.+\\ {{.examples:​10204-14.bas|}} \\ [[+tab|wmsxbpge>​10204-14.bas]]
 <​code>​ <​code>​
 10 CLEAR 400,&​HD000:​DEFUSR=&​HD000:​K=&​HD000 10 CLEAR 400,&​HD000:​DEFUSR=&​HD000:​K=&​HD000
msx/basic_dialogue_programming_language/102.1676129165.txt.gz · Последние изменения: 2023-02-11 18:26 — GreyWolf