Files
Sprinter-SDCC/docs/size_baseline.tsv
T
snark13 a823e7ee9c libbgi: блочные AND/OR/XOR акселератора (блит строками и колонками)
Акселератор умеет не только копировать блок, но и совмещать его с
приёмником: опкод `and/or/xor (hl)` между триггерами чтения и записи
переводит внутренний автомат из «буфер := память» в «буфер <op>= память».
Операция ортогональна направлению (гориз. LD L,L / верт. LD A,A), значит
одинаково работает и для row-major картинок, и для column-major спрайтов
персонажей с бесплатным флипом.

Полный набор, по образцу существующего копирующего:
- ядра bgi256/_bgi_blit_rows_op_raw.c и _bgi_blit_cols_op_raw.c;
- строками: gfx_blit_op / gfx_blit_part_op (через _gfx_blit_full_op);
- колонками: gfx_blit_cols_op / gfx_blit_cols_part_wx_op (skip/rows/
  skipw/maxw и flip — как у копирующего близнеца);
- putimage(XOR/OR/AND_PUT) переведён на accel, попиксельным остался
  только NOT_PUT — закрыт пункт 2d-1 docs/TODO.md.

Одна функция на три операции: опкод патчится SMC, как размер блока и
страйд, — ветвления в цикле нет.  Колоночный путь дороже строкового на
один OUT Port_Y: вертикальный op-burst шагает Port_Y, и перед записью
его надо вернуть на верх колонки (STOP обязателен — иначе fetch операнда
OUT перезапустит burst, memory/accel_operand_fetch_retrigger).

Две оговорки (в шапках модулей):
- операция ЧИТАЕТ ОЗУ-копию экрана, а не видео-ОЗУ, поэтому при банках
  0x54/0x5C совмещается с чистым фоном, а не с нарисованным поверх;
- аппаратная прозрачность #FF совместима с AND (нейтраль) и OR (#FF|bg =
  #FF, запись подавляется), но НЕ с XOR: там источник обязан хранить
  прозрачный пиксель как 0x00.

Проверка: tests/accop (новый) — 8/8 PASS в MAME, побайтно, источник с
разными значениями по строкам И колонкам + рамка вокруг; tests/bgi_img
получил две байтовые самопроверки (COPY==источник, XOR дважды == фон),
обе PASS.  make size-check: роста нет (эталон принят заново — kbdpoll
+63 Б приехал из прошлой сессии, воспроизводится и без этих правок).

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

916 B

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