/* * kbd_mod_state — обёртка ESTEX CTRLKEY ($33h): состояние * модификаторов клавиатуры НА ДАННЫЙ МОМЕНТ (не из буфера — драйвер * берёт данные прямо из последнего скана, см. ProgrammerManual.txt * "CTRLKEY"), поэтому в отличие от kbhit/getch/getkey держится ровно * столько, сколько клавиша реально зажата. * * ABI: C=0x33 на входе — функция; на выходе C=mode, B=shift (тот же * регистр C переиспользуется под результат, как и во всех ESTEX- * функциях клавиатуры). Расшифровка битов — KBD_MOD_* в . */ #include "_conio.h" uint16_t kbd_mod_state(void) __naked { __asm push ix ld c, #0x33 ; ESTEX CTRLKEY rst #0x10 pop ix ld d, c ; D = mode (старший байт результата) ld e, b ; E = shift (младший байт результата) ret ; __sdcccall(1): DE = uint16_t __endasm; }