Files
Sprinter-SDCC/docs/size_baseline.tsv
T
snark13 6dabe9b4b1 libc: пока raw-клавиатура открыта, не звать обработчик DSS — он крал наши скан-коды
Корень двух багов SprPoP (KBD-STUCK-WAIT, частично GRAB-KBD-TIMING) нашёлся
в исходниках DSS (docs/sources/Estex-DSS): обработчик прерывания DSS живёт в
IM1 по 0x0038 и ПЕРВЫМ ДЕЛОМ делает `CALL KEYSCAN`, а тот вычерпывает FIFO
SIO досуха.  Наш трамплин проверял «есть ли клавиатурный байт» один раз, на
входе в прерывание, а хвост кадрового пути уходил в DSS — значит скан-код,
прилетевший позже, доставался DSS и уезжал в его буфер.  Rx-overrun при этом
НЕ взводится (байт не потерян железом, а прочитан не тем владельцем) — отсюда
и загадка исходного диагноза: бит залип при `_kbdraw_overrun == 0`.

Измерено в MAME (брейки + totalcycles): окно 738 тактов (~34 мкс) на каждом
кадровом прерывании, из них 481 такт — пролог самого DSS.  Поэтому проверка
FIFO перед chain'ом снимает лишь треть и не годится (пробовали, кражи
продолжались); кадровый путь при открытом raw теперь заканчивается приватным
RETI, окно = 0.  Цена: на это время у DSS замирает опрос мыши и мигание
текстового курсора — зафиксировано в <kbd_raw.h>.

Пойманный случай (старая сборка): DSS прочитал 0x74 (make стрелки «вправо»)
при _kbdraw_pending = EXT, то есть посылку E0 74 разорвало пополам между
двумя владельцами канала.

Проверка: брейк на входе KEYSCAN с условием «страница точно DSS + raw открыт»
до правки срабатывал мгновенно (50/с), после — молчит; положительный контроль
на нашем RETI срабатывает сразу.

Трамплин 300 -> 310 Б (буфер W2-копии поднят 336 -> 384, запас 74 Б);
размерный эталон обновлён: +10 Б у программ, линкующих IRQ.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-28 11:40:39 +03:00

942 B

1# Эталон размеров _CODE (байт); обновление: python3 toolchain/size_check.py --update
2accfill3783
3accop7067
4argv3431
5assrtest3847
6atlas9193
7attrprob4087
8banked1056
9bankedbg1067
10banklocl4683
11banktest3767
12bgi_img8677
13bgitest3748
14bios_text4461
15blitperf5860
16blitw4939
17cat913
18cblstream5860
19cbltest6006
20cblwav6099
21conio4605
22conio23929
23convbench3508
24dec_test860
25errno5966
26fbench8085
27fdmax6023
28filetest10547
29fpsdiv4870
30gets509
31gfx_dbuf5131
32gfx_demo4114
33gfxbanks6044
34hello4167
35hello24244
36irqtest6690
37kbdpoll1282
38kbdraw4911
39ls4835
40malloc4461
41mem_test4555
42mouse4382
43openenv6124
44pageflip6334
45palfile5406
46ptime5744
47rt_test5197
48scroll6744
49seek4188
50simple955
51solidt11531
52spranim9431
53spriteclip4119
54sprites6791
55stattest7549
56stdlib6643
57stest23644
58strtest1340
59text_palette5024
60timedir5454
61w0page8831
62w3bgfx5243
63w3big3673
64w3huge3700
65w3probe3556
66w3tiny3471
67winrest4459