/*
 * kbd_mod_state — обёртка ESTEX CTRLKEY ($33h): состояние
 * модификаторов клавиатуры НА ДАННЫЙ МОМЕНТ (не из буфера — драйвер
 * берёт данные прямо из последнего скана, см. ProgrammerManual.txt
 * "CTRLKEY"), поэтому в отличие от kbhit/getch/getkey держится ровно
 * столько, сколько клавиша реально зажата.
 *
 * ABI: C=0x33 на входе — функция; на выходе C=mode, B=shift (тот же
 * регистр C переиспользуется под результат, как и во всех ESTEX-
 * функциях клавиатуры).  Расшифровка битов — KBD_MOD_* в <conio.h>.
 */

#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;
}
