libbgi: bgi256 fill-примитивы на register-ABI + typedef color_t

- удалён глобальный скретч акселератора (_gfx_acc256.c); fill-сегменты
  (_gfx_hfill256/_gfx_vfill256) принимают аргументы в регистрах HL/C/B/E,
  вызываются только из asm raw-примитивов
- новый _gfx_rectfill256: заливка прямоугольника через Horizontal_Size
- raw-примитивы (plot/read/hspan/vspan/clear) переписаны под новый ABI
- graphics.h: typedef color_t (uint8_t) для всех public color-функций
- sprinter-cc: флаг --safe (линковка *_safe.lib при наличии)
- CLAUDE.md/mame_interactive: авто-прогон тестов в MAME
- gfx_demo: демонстрация rectfill

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-10 14:32:21 +03:00
parent 52636a5d6e
commit 029607971f
31 changed files with 618 additions and 283 deletions
+12 -1
View File
@@ -111,6 +111,17 @@ CADENCE = 0.14 # шаг между символами
HOLD = 0.06 # длительность удержания клавиши
def basename_83(name):
"""Обрезать имя файла до формата 8.3, как в FAT12 корневом каталоге."""
name = name.upper()
if '.' in name:
base, ext = name.rsplit('.', 1)
base = base[:8].ljust(8, ' ')
ext = ext[:3].ljust(3, ' ')
return f"{base}.{ext}"
return name[:8].ljust(8, ' ') + '.EXE'
def resolve(ch):
"""char → (tag, mask, need_shift). Заглавные буквы = shift+строчная."""
if ch in PHYS:
@@ -238,7 +249,7 @@ def main():
if not os.path.isfile(exe_path):
print(f"ОШИБКА: не найден {exe_path}")
sys.exit(1)
exe_name = os.path.basename(exe_path).lower()
exe_name = basename_83(os.path.basename(exe_path)).upper()
steps.append((args.launch_at, f"a:\\{exe_name}\n"))
if not steps:
print("ОШИБКА: укажите exe для запуска или хотя бы один --step")