libc: BGI Фаза 2d-3 — settextstyle (масштаб и направление текста)

settextstyle/gettextsettings/textwidth/textheight: DEFAULT_FONT 8×8,
целочисленный масштаб 1..10, HORIZ/VERT (поворот 90° CCW), прозрачный
фон. Свой scaled-рендер (_bgi_draw_scaled) читает глиф через leaf
_bgi_font_rows (interleaved системный шрифт) и рисует блоки size×size
raw в одной W3-скобке. outtext/outtextxy переведены на него. Проверено
в MAME (tests/bgitest): размеры 1..4 + вертикальный текст.

Доки обновлены (Ф2d-1/2/3 готовы; осталось viewport/клиппинг).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-08 16:18:48 +03:00
parent b26560c409
commit 657c6d2955
16 changed files with 210 additions and 45 deletions
+14 -7
View File
@@ -46,13 +46,20 @@ outtext/outtextxy. initgraph грузит EGA-палитру 0..15. Пакет
- 2c: floodfill (scanline span; медленный — self-bracket чтение, но
корректный), pieslice, sector.
**Фаза 2d (осталось):** getimage/putimage/imagesize (COPY/XOR/AND/OR/
NOT_PUT), setviewport/clearviewport + клиппинг, settextstyle/textwidth/
textheight (размеры/направление), setlinestyle, setactivepage/
setvisualpage (2 страницы в gfx уже есть), setaspectratio (пиксели
320×256 неквадратные — круги визуально эллиптичны), setfillpattern
(USER_FILL). Оптимизации: floodfill на raw-чтении; ellipse/arc в одной
W3-сессии. Потом drv16 + sprinter_gfx16.lib (--gfx 16).
**Фаза 2d-1/2/3 ГОТОВЫ (2026-07-08, MAME tests/bgitest):**
- 2d-1: getimage/putimage/imagesize (COPY/XOR/OR/AND/NOT_PUT), raw-блит
в одной W3-скобке (_gfx_getpixel256_raw).
- 2d-2: setlinestyle/getlinesettings (SOLID/DOTTED/CENTER/DASHED/USERBIT
+ NORM/THICK) — line/lineto/linerel/rectangle/drawpoly.
- 2d-3: settextstyle/gettextsettings/textwidth/textheight — масштаб
1..10, HORIZ/VERT, прозрачный фон (свой scaled-рендер поверх 8×8).
**Фаза 2d (осталось):** setviewport/clearviewport + клиппинг (инвазивно —
трогает все примитивы), settextjustify, setaspectratio (пиксели 320×256
неквадратные — круги визуально эллиптичны), setfillpattern (USER_FILL),
setactivepage/setvisualpage (2 страницы в gfx уже есть). Оптимизации:
floodfill на raw-чтении; ellipse/arc в одной W3-сессии. Потом drv16 +
sprinter_gfx16.lib (--gfx 16).
Acceptance: типичная BGI-программа переносится без существенных
правок. Референс: Turbo C 2.x BGIDEMO.
+10 -2
View File
@@ -229,11 +229,19 @@ CP), `line(x1,y1,x2,y2)` (не двигает).
`fillpoly(n,pts)`, `fillellipse(x,y,xr,yr)`.
Заливка областей (Ф2c): `floodfill(x,y,border)` (медленно, но верно),
`pieslice(x,y,st,end,r)`, `sector(x,y,st,end,xr,yr)`.
Спрайты (Ф2d): `imagesize/getimage/putimage` (COPY/XOR/OR/AND/NOT_PUT;
формат буфера: uint16 w,h + w*h байт).
Стиль линий (Ф2d): `setlinestyle(style,upattern,thick)`/`getlinesettings`
(SOLID/DOTTED/CENTER/DASHED/USERBIT + NORM/THICK) — на line/rectangle/
drawpoly.
Стиль текста (Ф2d): `settextstyle(font,dir,size)`/`gettextsettings`,
`textwidth`/`textheight` — масштаб 1..10, HORIZ/VERT, прозрачный фон
(только DEFAULT_FONT 8×8).
Реализация: libc/bgi/*.c (math) + libc/bgi/drv256/*.c (leaf →
sprinter_gfx256.lib). Пакетные примитивы — одна W3-скобка на примитив;
тригонометрия/эллипсы целочисленные (Q7/isqrt, БЕЗ 32-бит).
Ф2d (осталось): getimage/putimage, viewport/клиппинг, settextstyle,
setlinestyle, setaspectratio — см. docs/TODO.md.
Ф2d (осталось): setviewport/клиппинг, settextjustify, setaspectratio —
см. docs/TODO.md.
## <irq.h> — user-ISR кадрового прерывания (IM 2)
+1 -1
View File
@@ -6,7 +6,7 @@ banked 1056
bankedbg 1067
banklocl 4832
banktest 3767
bgitest 3896
bgitest 4196
bios_text 4470
cat 915
cblstream 6277
1 # Эталон размеров _CODE (байт); обновление: python3 toolchain/size_check.py --update
6 bankedbg
7 banklocl
8 banktest
9 bgitest
10 bios_text
11 cat
12 cblstream