298 4199 2E: 88 26 061A mov cs:[061Ah],ah;
299 419E 57 push di
300 419F 58 pop ax
301 41A0 2E: A2 061C mov cs:[061Ch],al;
302 41A4 2E: 88 26 061E mov cs:[061Eh],ah;
303 41A9 F4 hlt
304 ;-------------------------------------------------------------------305 ;Обработка IRQ2 - прерывания от клавиатуры
306 ;
307 ;При обработке прерывания от оператора МПС должна выполнить следующие действия:
308 ;а) опрос клавиатуры и определение кода нажатой клавиши;
309 ;б) ввод уставки последовательным нажатием клавиш 0 - F
310 ; после нажатия клавиши УСТАВКА;
311 ;в) вывод на световую индикацию значений X1...X4 и Q4 в случае
312 ; нажатия клавиши ВЫВОД;
313 ;г) перевод системы в состояние ожидания в случае нажатия клавиши ОСТАНОВ.
314 ;-------------------------------------------------------------------315 41AA IRQ2:
316 41AA FA cli ;Запрещение прерывания.
317 ;Сохранение регистров в стеке.
318 41AB 50 push ax
319 41AC 53 push bx
320 41AD 51 push cx
321 41AE 52 push dx
322 41AF 9C pushf
323 41B0 B0 40 mov al,01000000b ;программирование контроллера дисплея/клав для режима
324 ;считывания ОЗУ клавиатуры
325 41B2 E6 49 out [49h],al
326 41B4 E4 48 in al,[48h] ;считывание кода нажатой клавиши
327 41B6 3C 10 cmp al,10h ;проверка - это клавиша УСТАВКА
328 41B8 75 08 jne check1 ;если нет - переход
329 41BA B0 02 mov al,2 ;устанавливаем признак уставки
330 41BC A2 0303r mov [ust],al ;ust - ячейка памяти
331 41BF EB 38 90 jmp break
332 41C2 check1:
333 41C2 3C 11 cmp al,11h ;проверка - это клавиша ВЫВОД
334 41C4 75 0B jne check2 ; если нет - переход
335 41C6 E8 FF29 call output
336 41C9 32 C0 xor al,al ;сбрасываем признак уставки
337 41CB A2 0303r mov [ust],al ;ust - ячейка памяти
338 41CE EB 29 90 jmp break
339 41D1 check2:
340 41D1 3C 12 cmp al,12h ;проверка - это клавиша ОСТАНОВ
341 41D3 75 01 jne check3 ;если нет - переход
342 41D5 F4 hlt
343 41D6 check3: ; значит это цифровая клавиша
344 41D6 8A 26 0303r mov ah,[ust]
345 41DA 0A E4 or ah,ah
346 41DC 74 1B jz break ;признак уставки не установлен - клавиша не обрабатывается
347 41DE FE 0E 0303r dec [ust]
348 41E2 74 0E jz ust_2 ;ввести младший полубайт уставки
349 ;ввод старшего полубайта уставки
350 41E4 D0 E0 shl al,1
351 41E6 D0 E0 shl al,1
352 41E8 D0 E0 shl al,1
353 41EA D0 E0 shl al,1
354 41EC A2 0302r mov [pred_key],al ;pred_key - ячейка, хранящая вводимую уставку
355 41EF EB 08 90 jmp break
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.