Files
snark13 484b18d10c libc+libbgi: raw-клавиатура (held-state) + column-major блит спрайтов
libc/kbd: kbd_raw_open/close/down — сырой PS/2-канал клавиатуры с
held-state (битовая карта _kbdraw_down[512], EXT-клавиши +256).  Пока
raw открыт, кадровый IRQ-трамплин перехватывает байт SIO у DSS и
декодирует make/break (0xF0/0xE0-префиксы) сам.  FIFO вычерпывается В
ЦИКЛЕ (приёмный буфер SIO 3 байта; пачка break-кодов при одновременном
отпускании иначе теряется → залипание клавиши).  Буфер W2-трамплина
поднят 224→288 Б под выросший обработчик.

libc/conio: kbd_mod_state() — live-состояние модификаторов (ESTEX
CTRLKEY $33h), Shift/Ctrl/Alt/Lock прямо сейчас, KBD_MOD_* маска.

libbgi: gfx_blit_cols(x,y,img,flip) + _bgi_blit_cols_raw — блит
column-major спрайта вертикальным accel-проходом, бесплатный
горизонтальный флип (sstride<0), клип по экрану.  Для персонажей.

libbgi/atlas_load: восстанавливать W3 ДО записи a->count (atlas_t в
--bank памяти резолвится через W3; count оставался мусором).

tests/kbdraw — тест raw-клавиатуры; size-baseline +kbdraw.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 17:48:32 +03:00

27 lines
1.2 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* 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;
}