Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия | |||
msx:basic_dialogue_programming_language:103 [2023-02-05 13:03] GreyWolf |
msx:basic_dialogue_programming_language:103 [2023-02-11 21:40] (текущий) GreyWolf |
||
---|---|---|---|
Строка 6: | Строка 6: | ||
Кроме подпрограмм [[msx:bios|BIOS]] в версии [[msx:disk_basic|]], а также в операционной системе [[msx:dos:|]] поддерживаются подпрограммы системы [[msx:bdos|BDOS]]. | Кроме подпрограмм [[msx:bios|BIOS]] в версии [[msx:disk_basic|]], а также в операционной системе [[msx:dos:|]] поддерживаются подпрограммы системы [[msx:bdos|BDOS]]. | ||
- | Подпрограммы BDOS вызываются следующим образом: | + | Подпрограммы BDOS вызываются следующим образом: |
* α) из операционной системы [[msx:dos:|]]: <code> | * α) из операционной системы [[msx:dos:|]]: <code> | ||
LD C,номер подпрограммы | LD C,номер подпрограммы | ||
CALL 0005h | CALL 0005h | ||
</code> | </code> | ||
- | * β) из системы [[msx:disk_basic|]]:<code> | + | * β) из системы [[msx:disk_basic|]]:<code> |
LD C,номер подпрограммы | LD C,номер подпрограммы | ||
CALL F37Dh | CALL F37Dh | ||
</code> | </code> | ||
- | Приведем несколько примеров вызова подпрограмм BDOS из системы [[msx:disk_basic|]]. | + | Приведем несколько примеров вызова подпрограмм BDOS из системы [[msx:disk_basic|]]. |
- | {{anchor:e1030-01}} __//Пример 1//__. Вывод //символа// на экран.\\ {{.examples:1030-01.bas|}} \\ [[+tab|wmsxbpge>1030-01.bas]] | + | {{anchor:e1030-01}} __//Пример 1//__. Вывод //символа// на экран. |
+ | \\ {{.examples:1030-01.bas|}} \\ [[+tab|wmsxbpge>1030-01.bas]] | ||
<code> | <code> | ||
10 CLEAR 200,&HC000:DEFUSR=&HC000 | 10 CLEAR 200,&HC000:DEFUSR=&HC000 | ||
Строка 29: | Строка 30: | ||
</code> | </code> | ||
- | {{anchor:e1030-02}} __//Пример 2//__. Попробуем //уничтожить// имя файла с диска.\\ {{.examples:1030-02.bas|}} \\ [[+tab|wmsxbpge>1030-02.bas]] | + | {{anchor:e1030-02}} __//Пример 2//__. Попробуем //уничтожить// имя файла с диска.\\ {{.examples:1030-02.bas|}} \\ [[+tab|wmsxbpge>1030-02.bas]] |
<code> | <code> | ||
10 CLEAR 200,&HC000:DEFUSR=&HC000 | 10 CLEAR 200,&HC000:DEFUSR=&HC000 | ||
Строка 57: | Строка 58: | ||
LD (METKA),BC ; ла из шестнадцатеричного вида в десятичный | LD (METKA),BC ; ла из шестнадцатеричного вида в десятичный | ||
LD (METKA+2),BC ; | LD (METKA+2),BC ; | ||
- | LD C,#20 ; В регистре С - число 20h (п о ч е м у!?) | + | LD C,#20 ; В регистре С - число 20h (п о ч е м у!?) |
- | LOOP1: ADD HL,HL ; Сложение и сдвиги необходимы для установки | + | LOOP1: ADD HL,HL ; Сложение и сдвиги необходимы для установки |
- | RL E ; флага C регистра флагов, а следовательно, и | + | RL E ; флага C регистра флагов, а следовательно, и |
- | RL D ; для увеличения содержимого регистра E,a затем | + | RL D ; для увеличения содержимого регистра E,a затем |
PUSH HL ; и регистра D . | PUSH HL ; и регистра D . | ||
- | LD HL,METKA ; Считывание предыдущих результатов вычислений | + | LD HL,METKA ; Считывание предыдущих результатов вычислений |
LD B,#04 ; и (при выполнении условия переполнения регист- | LD B,#04 ; и (при выполнении условия переполнения регист- | ||
ZAPOL: LD A,(HL) ; ра D) увеличениe их содержимого | ZAPOL: LD A,(HL) ; ра D) увеличениe их содержимого | ||
ADC A,A ; Обратите внимание на эту команду: она увеличи- | ADC A,A ; Обратите внимание на эту команду: она увеличи- | ||
- | DAA ; вает содержимое регистра А при установленном | + | DAA ; вает содержимое регистра А при установленном |
LD (HL),A ; флаге C | LD (HL),A ; флаге C | ||
INC HL ; | INC HL ; | ||
Строка 72: | Строка 73: | ||
POP HL ; | POP HL ; | ||
DEC C ; Уменьшение значения цикла. | DEC C ; Уменьшение значения цикла. | ||
- | JR NZ,LOOP1 ; На выходе из этого цикла в ячейках METKA ÷ | + | JR NZ,LOOP1 ; На выходе из этого цикла в ячейках METKA ÷ |
- | ; METKA+3 будет лежать Ваше число в десятичном | + | ; METKA+3 будет лежать Ваше число в десятичном |
; виде | ; виде | ||
- | LD BC,#0410 ; ПервыЙ байт - данные для работы цикла, второй | + | LD BC,#0410 ; Первый байт - данные для работы цикла, второй |
; байт нужен для коррекции кода числа | ; байт нужен для коррекции кода числа | ||
LD HL,METKA+3 ; Число выводится со старшего байта | LD HL,METKA+3 ; Число выводится со старшего байта | ||
Строка 92: | Строка 93: | ||
CALL POLBYTE ; Переход на печать старшего полубайта | CALL POLBYTE ; Переход на печать старшего полубайта | ||
DJNZ PRINT ; | DJNZ PRINT ; | ||
- | RET ; К о н е ц программы | + | RET ; К о н е ц программы |
POLBYTE:AND #0F ; "Отрезание" младшего полубайта | POLBYTE:AND #0F ; "Отрезание" младшего полубайта | ||
- | JR Z,SUMMA ; Если это число - нуль, то - печать символа | + | JR Z,SUMMA ; Если это число - нуль, то - печать символа |
; "пробел" | ; "пробел" | ||
LD C,#00 ; Иначе - печать самого числа ──────┐ | LD C,#00 ; Иначе - печать самого числа ──────┐ |