libbgi: тривиальные аксессоры → inline в заголовках (17 модулей удалено)
setcolor/getcolor/setbkcolor/getbkcolor/getmaxx/getmaxy/getmaxcolor/
getx/gety/moveto/moverel/setfillstyle/graphresult (graphics.h) и
gfx_get_bank/gfx_set_bank/gfx_get_draw_page/gfx_get_visible_page
(gfx.h) определены inline в публичных заголовках; state-переменные
объявлены там же (хранилище прежнее — _bgi_state.c/_gfx_state.c).
Именно `inline` БЕЗ static: проверено артефактами (.asm) — SDCC 4.5
инлайнит вызов при всех наших флагах (--opt-code-size/--opt-code-speed/
--max-allocs) и не эмитит standalone-тело; `static inline` эмитил бы
мёртвую копию каждого аксессора в КАЖДЫЙ включивший модуль. Отказ
инлайнить = громкая ошибка линковки (все 47 программ слинковались).
Экономия ~30-40Т на вызов, минус 17 .rel; по _CODE размер-нейтрально
(сайт вызова ≈ телу). size_baseline: bgitest +267/accfill +528 — это
НЕ inline, а run-рендер текста из ba09c0b (draw_scaled потянул
vspan_raw+vfill256 и сам вырос) — цена за ~2-6× скорость текста.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+7
-21
@@ -25,28 +25,14 @@
|
||||
#include <graphics.h>
|
||||
#include <gfx.h> /* GFX_MODE_*, размеры — для внутренних таблиц */
|
||||
|
||||
/* ---- Состояние BGI (_bgi_state.c) -------------------------------- */
|
||||
extern uint8_t _bgi_fg; /* текущий цвет рисования */
|
||||
extern uint8_t _bgi_bg; /* фоновый цвет */
|
||||
extern int _bgi_cx; /* текущая позиция X (CP) */
|
||||
extern int _bgi_cy; /* текущая позиция Y */
|
||||
extern int _bgi_maxx; /* правая граница (319 / 639) */
|
||||
extern int _bgi_maxy; /* нижняя граница (255) */
|
||||
extern int _bgi_maxcolor; /* макс. индекс цвета (255 / 15) */
|
||||
/* ---- Состояние BGI (_bgi_state.c) -------------------------------- *
|
||||
* _bgi_fg/_bgi_bg/_bgi_cx/_bgi_cy/_bgi_maxx/_bgi_maxy/_bgi_maxcolor/
|
||||
* _bgi_result объявлены в ПУБЛИЧНОМ graphics.h (нужны static inline
|
||||
* аксессорам: setcolor/moveto/getmaxx/…, 2026-07-10);
|
||||
* _gfx_visible_page/_gfx_draw_page/_gfx_bank — в публичном gfx.h.
|
||||
* Байт _gfx_bank (0x50..0x5F): какой видеобанк мапится при записи —
|
||||
* 0x50 normal, 0x54 temp, 0x58 transparent, 0x5C оба. */
|
||||
extern uint8_t _bgi_prevmode; /* видеорежим до initgraph */
|
||||
extern int _bgi_result; /* код graphresult */
|
||||
|
||||
/* ---- Общее gfx-состояние (common/_gfx_state.c) ------------------ *
|
||||
* Пишут gfx_set_visible_page / gfx_set_draw_page /
|
||||
* gfx_set_bank; читают все mode-специфичные примитивы. */
|
||||
|
||||
extern uint8_t _gfx_visible_page;
|
||||
extern uint8_t _gfx_draw_page;
|
||||
|
||||
/* Байт страницы W3 (0x50..0x5F) — какой видеобанк мапится при записи.
|
||||
* См. memory/sprinter_vram_transparency.md (0x50 normal, 0x54 temp,
|
||||
* 0x58 transparent, 0x5C оба). */
|
||||
extern uint8_t _gfx_bank;
|
||||
|
||||
/* CPU-адрес колонки 0 текущей draw-страницы: 0xC000 (page 0) или
|
||||
* 0xC140 (page 1); каждый примитив использует его вместо константы. */
|
||||
|
||||
Reference in New Issue
Block a user