libc/kbd: held-карта клавиш в биты (512 -> 64 Б); эталон размеров принят
Разгрузка W1/W2 под будущий ИИ стражей: _kbdraw_down был БАЙТОМ на
скан-код (512 Б в _DATA при 32-килобайтной раскладке). Теперь бит на
код: код>>3 = байт, код&7 = бит, расширенные (префикс 0xE0) — смещение
+32 байта вместо +256.
Трамплин прерывания строит маску СДВИГОМ, а не таблицей: таблица
потребовала бы `ld hl,#метка` внутри трамплина, а он копируется в W2
побайтно и обязан быть без абсолютных само-ссылок (см. его шапку).
Маска строится в BC, поэтому в клавиатурной ветке добавлен push/pop bc.
Трамплин вырос 244 -> 267 Б, буфер копии поднят 320 -> 336 (запас 69 Б).
Проверено в MAME на roomtest, все три класса клавиш:
- обычные: '=' (обход комнат) и 'K' (чит-убийство стража — читал
guardhp_curr/delta: 3/0 -> 0/-3);
- расширенные (E0): стрелка вправо — Kid добежал до края комнаты;
- модификаторы: удержание Shift ставит бит 2 байта 2 карты
(скан-код 0x12), отпускание снимает.
Скорость: кадр 334 716 -> 338 508 тактов (+1.1 %) на битовой арифметике
в kbd_raw_down (~15 вызовов за кадр); при бюджете 430 000 это 0.79
периода вместо 0.78 — регрессии нет.
Итог по roomtest: данные 4422 -> 4022 Б, куча W2 996 -> 1294 Б.
Эталон размеров принят заново (make size-baseline): _CODE десяти
программ вырос на 14-23 Б — это код битовой арифметики в трамплине и
kbd_raw_down, обмен на -448 Б данных, которые size_check не считает.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+17
-10
@@ -1,5 +1,5 @@
|
||||
# Эталон размеров _CODE (байт); обновление: python3 toolchain/size_check.py --update
|
||||
accfill 3772
|
||||
accfill 3786
|
||||
argv 3431
|
||||
assrtest 3847
|
||||
atlas 9193
|
||||
@@ -9,15 +9,15 @@ banked 1056
|
||||
bankedbg 1067
|
||||
banklocl 4683
|
||||
banktest 3767
|
||||
bgi_img 7057
|
||||
bgitest 3737
|
||||
bgi_img 7200
|
||||
bgitest 3751
|
||||
bios_text 4461
|
||||
blitperf 5860
|
||||
blitw 4939
|
||||
cat 913
|
||||
cblstream 6217
|
||||
cbltest 6366
|
||||
cblwav 6434
|
||||
cblstream 6431
|
||||
cbltest 6580
|
||||
cblwav 6648
|
||||
conio 4605
|
||||
conio2 3929
|
||||
dec_test 860
|
||||
@@ -27,12 +27,12 @@ fdmax 6023
|
||||
filetest 10547
|
||||
fpsdiv 4870
|
||||
gets 509
|
||||
gfx_dbuf 5032
|
||||
gfx_demo 4103
|
||||
gfx_dbuf 5112
|
||||
gfx_demo 4117
|
||||
gfxbanks 6044
|
||||
hello 4167
|
||||
hello2 4244
|
||||
irqtest 6527
|
||||
irqtest 6647
|
||||
kbdraw 4911
|
||||
ls 4835
|
||||
malloc 4461
|
||||
@@ -45,7 +45,8 @@ palfile 5406
|
||||
ptime 5744
|
||||
rpgprof 12082
|
||||
rpgwalk 10309
|
||||
rt_test 4892
|
||||
rt_test 5154
|
||||
scroll 2974
|
||||
seek 4188
|
||||
simple 955
|
||||
solidt 11531
|
||||
@@ -60,4 +61,10 @@ strtest 1340
|
||||
text_palette 5024
|
||||
timedir 5454
|
||||
w0page 8831
|
||||
w3bankgfx 5240
|
||||
w3bgfx 5246
|
||||
w3big 3673
|
||||
w3huge 3700
|
||||
w3probe 3556
|
||||
w3tiny 3471
|
||||
winrest 4459
|
||||
|
||||
|
Reference in New Issue
Block a user