/*
 * getkey — как getch(), но возвращает И ASCII, И позиционный скан-код,
 * чтобы различать расширенные клавиши (стрелки, F1..F12, PgUp/PgDn,
 * Home/End, Ins/Del — у них ASCII == 0 из ESTEX) и обычные символы.
 *
 *   возврат = (scan << 8) | ascii
 *
 * Обычные клавиши: ascii — символ, scan — позиционный код (бит 7
 *                  взведён при Ctrl/Alt/Shift).
 * Расширенные:     ascii == 0, клавишу определяет scan (см. KEY_* в
 *                  <conio.h>).
 */

#include "_conio.h"

uint16_t getkey(void) __naked
{
    __asm
        push  ix
        ld    c, #0x30              ; ESTEX WAITKEY: A=ASCII, D=scan, E=ASCII
        rst   #0x10
        pop   ix
        ld    e, a                  ; E = ASCII (защитно: канонична копия в A)
        ret                         ; __sdcccall(1) возвращает uint16_t в DE
    __endasm;
}
