Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
msx:basic_dialogue_programming_language:104 [2023-02-05 12:29] GreyWolf |
msx:basic_dialogue_programming_language:104 [2023-02-19 16:26] (текущий) GreyWolf |
||
---|---|---|---|
Строка 4: | Строка 4: | ||
{{anchor:n104}} | {{anchor:n104}} | ||
====== 1.4. Использование ловушек ====== | ====== 1.4. Использование ловушек ====== | ||
- | FIXME | ||
<WRAP group> | <WRAP group> | ||
<WRAP half column> \\ </WRAP> | <WRAP half column> \\ </WRAP> | ||
- | <WRAP half column><WRAP justify> | + | <WRAP half column><WRAP right> |
... И тут Пух все понял. Они с Пятачком попались | ... И тут Пух все понял. Они с Пятачком попались | ||
\\ в Хитрую Ловушку для Пухов, которую в отместку | \\ в Хитрую Ловушку для Пухов, которую в отместку | ||
Строка 14: | Строка 13: | ||
<WRAP rightalign> | <WRAP rightalign> | ||
—//Отрывок из неопубликованной главы повести | —//Отрывок из неопубликованной главы повести | ||
- | \\ А.Милн "Винни-Пух и все-все-все"// | + | \\ А.Милн "Винни–Пух и все–все–все"// |
</WRAP></WRAP> | </WRAP></WRAP> | ||
Строка 33: | Строка 32: | ||
POP HL ; | POP HL ; | ||
</code> | </code> | ||
- | При включении компьютера подпрограмма-ловушка содержит только команду возврата (RET). Вы //можете// заменить эту команду на команду перехода (JP) к подпрограмме, которая написана Вами на машинном языке. | + | При включении компьютера подпрограмма–ловушка содержит только команду возврата (RET). Вы //можете// заменить эту команду на команду перехода (JP) к подпрограмме, которая написана Вами на машинном языке. |
- | <WRAP centeralign>В этом случае о ловушке говорят, что она //обрабатывается//.</WRAP> | + | <WRAP centeralign>В этом случае о ловушке говорят, что она //обрабатывается//.</WRAP> |
Таким образом, Вы можете косвенно изменять ROM и вводить //новые// операторы! Приведенный ниже рисунок показывает, что означает термин "обработать" ловушку. | Таким образом, Вы можете косвенно изменять ROM и вводить //новые// операторы! Приведенный ниже рисунок показывает, что означает термин "обработать" ловушку. | ||
Строка 62: | Строка 61: | ||
{{anchor:e1040-01}} | {{anchor:e1040-01}} | ||
- | __//Пример 1.//__ //Отмена// действия клавиши <key>STOP</key>. | + | __//Пример 1.//__ //Отмена// действия клавиши <key>STOP</key>. |
- | При //выполнении программы// на языке [[msx:basic:|]] клавиатура постоянно опрашивается (сканируется). Нажатие клавиши порождает код, который записывается в буфер клавиатуры (начинающийся с адреса &HF55E в рабочей области). До этого код нажатой клавиши временно записывается в слово NEWKEY, начинающееся с адреса &HFBE5. | + | При //выполнении программы// на языке [[msx:basic:|]] клавиатура постоянно опрашивается (сканируется). Нажатие клавиши порождает код, который записывается в буфер клавиатуры (начинающийся с адреса &HF55E в рабочей области). До этого код нажатой клавиши временно записывается в слово NEWKEY, начинающееся с адреса &HFBE5. |
Регистр А микропроцессора необходимо загрузить значением | Регистр А микропроцессора необходимо загрузить значением | ||
Строка 91: | Строка 90: | ||
Затем осуществим переход на ловушку с именем KEYKOD, расположенную по адресу &HFDCC . | Затем осуществим переход на ловушку с именем KEYKOD, расположенную по адресу &HFDCC . | ||
- | Обычно ловушка занимает 5 байтов памяти, содержащих только команду ассемблера RET (ее код &HC9). Введем вместо нее переход на подпрограмму //обработки ловушки//. Эта подпрограмма будет действовать только при нажатии клавиши <key>STOP</key>. | + | Обычно ловушка занимает 5 байтов памяти, содержащих только команду ассемблера RET (ее код &HC9). Введем вместо нее переход на подпрограмму //обработки ловушки//. Эта подпрограмма будет действовать только при нажатии клавиши <key>STOP</key>. |
\\ {{.examples:1040-01.bas|}} \\ [[+tab|wmsxbpge>1040-01.bas]] | \\ {{.examples:1040-01.bas|}} \\ [[+tab|wmsxbpge>1040-01.bas]] | ||
Строка 106: | Строка 105: | ||
100 'П о д п р о г р а м м а о б р а б о т к и л о в у ш к и | 100 'П о д п р о г р а м м а о б р а б о т к и л о в у ш к и | ||
120 DATA FE,3C :' CP 3C ;Сравниваем константу 3Ch с | 120 DATA FE,3C :' CP 3C ;Сравниваем константу 3Ch с | ||
- | ;содержимым регистра A | + | ;содержимым регистра A |
130 DATA C0 :' RET NZ ; "нет" ──▶ выход | 130 DATA C0 :' RET NZ ; "нет" ──▶ выход | ||
140 DATA 3E,FD :' LD A,FD ; A=FD | 140 DATA 3E,FD :' LD A,FD ; A=FD | ||
Строка 116: | Строка 115: | ||
- | Выполните эту программу: обратите внимание на тот факт,что нажатие клавиши <key>STOP</key> производит такой же эффект, как и нажатие клавиш <key>CTRL + STOP</key> в //командном// режиме. | + | Выполните эту программу: обратите внимание на тот факт,что нажатие клавиши <key>STOP</key> производит такой же эффект, как и нажатие клавиш <key>CTRL + STOP</key> в //командном// режиме. |
Подпрограмма обработки ловушки посылает значение | Подпрограмма обработки ловушки посылает значение | ||
Строка 122: | Строка 121: | ||
&H11111101=&HFD | &H11111101=&HFD | ||
</code> | </code> | ||
- | по адресу &HFBEB (шестая строка матрицы клавиатуры),имитируя тем самым нажатие клавиши <key>CTRL</key>. При этом нажатие клавиши <key>STOP</key> будет прочитано как одновременное нажатие клавиш <key>CTRL</key> и <key>STOP</key>,что будет обработано в [[msx:basic:|]] уже по обычным правилам. | + | по адресу &HFBEB (шестая строка матрицы клавиатуры),имитируя тем самым нажатие клавиши <key>CTRL</key>. При этом нажатие клавиши <key>STOP</key> будет прочитано как одновременное нажатие клавиш <key>CTRL</key> и <key>STOP</key>,что будет обработано в [[msx:basic:|]] уже по обычным правилам. |
Удалите вышеприведенную программу и введите новую программу: | Удалите вышеприведенную программу и введите новую программу: | ||
Строка 186: | Строка 185: | ||
{{anchor:e1040-04}} | {{anchor:e1040-04}} | ||
__//Пример 4//__. | __//Пример 4//__. | ||
- | Программа позволяет на слух оценивать частоту обращений к ловушкам по маскируемым прерываниям. Во время очередного прерывания по таймеру издается звонок-сигнал. Таким образом ловушка "прозванивается". | + | Программа позволяет на слух оценивать частоту обращений к ловушкам по маскируемым прерываниям. Во время очередного прерывания по таймеру издается звонок–сигнал. Таким образом ловушка "прозванивается". |
\\ {{.examples:1040-04.asm|}} \\ [[+tab|wmsxbpge>1040-04.asm]] | \\ {{.examples:1040-04.asm|}} \\ [[+tab|wmsxbpge>1040-04.asm]] | ||
<code> | <code> | ||
Строка 218: | Строка 217: | ||
DW 0 ; | DW 0 ; | ||
DW 0 ; | DW 0 ; | ||
- | NACH: XOR A ; | + | NACH: XOR A ; |
CALL 00C3H ; Очистка экрана | CALL 00C3H ; Очистка экрана | ||
CALL 00CCH ; Выключение функциальных клавиш | CALL 00CCH ; Выключение функциальных клавиш | ||
Строка 274: | Строка 273: | ||
; | ; | ||
GASI MACRO ; | GASI MACRO ; | ||
- | BCALL 041H ; В ы к л ю ч е н и е экрана | + | BCALL 041H ; В ы к л ю ч е н и е экрана |
ENDM ; | ENDM ; | ||
; | ; | ||
GORI MACRO ; | GORI MACRO ; | ||
- | BCALL 044H ; В к л ю ч е н и е экрана | + | BCALL 044H ; В к л ю ч е н и е экрана |
ENDM ; | ENDM ; | ||
; | ; | ||
NETEND MACRO ; | NETEND MACRO ; | ||
RST 030H ; | RST 030H ; | ||
- | DEFB 08FH ; Отключение от с е т и (только для MSX-2) | + | DEFB 08FH ; Отключение от с е т и (только для MSX-2) |
DEFW 04016H ; | DEFW 04016H ; | ||
ENDM ; | ENDM ; | ||
Строка 377: | Строка 376: | ||
CALL VRAM ; атуры. | CALL VRAM ; атуры. | ||
... ; Здесь может находиться Ваша программа. | ... ; Здесь может находиться Ваша программа. | ||
- | ... ; Например, программа движения фона или движения | + | ... ; Например, программа движения фона или движения |
... ; других спрайтов. | ... ; других спрайтов. | ||
... ; | ... ; |