Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8e389c03f8 | |||
| 05bcd8197e | |||
| 25abf8ea36 | |||
| f206a4cca6 |
@@ -0,0 +1,56 @@
|
|||||||
|
# SprPoP — CHANGELOG
|
||||||
|
|
||||||
|
Заметные изменения по релизам. **Версия, дата и коммит каждой записи
|
||||||
|
берутся из git** — из аннотированного тега, а не проставляются руками,
|
||||||
|
поэтому расходиться с историей они не могут:
|
||||||
|
|
||||||
|
git for-each-ref \
|
||||||
|
--format='%(refname:short) | %(creatordate:short) | %(*objectname:short)' \
|
||||||
|
refs/tags/<тег>
|
||||||
|
|
||||||
|
Заголовок записи = `<имя тега> — <дата тега> — <коммит тега>`. Коммит —
|
||||||
|
дереференс аннотированного тега (`*objectname`), то есть та ревизия, на
|
||||||
|
которой релиз собран: по ней воспроизводится ровно этот билд.
|
||||||
|
|
||||||
|
Здесь только то, что видно ИГРОКУ или меняет способ сборки/запуска.
|
||||||
|
Разбор причин живёт в сообщениях коммитов, открытые баги — в
|
||||||
|
`docs/BUGS_OPEN.md`, закрытые — в архиве roomtest.
|
||||||
|
|
||||||
|
Файл начат с релиза v0.9.6; более ранняя история — в `git log` и в
|
||||||
|
досках задач.
|
||||||
|
|
||||||
|
## v0.9.6-hang-sound-button — 2026-09-02 — `aaa480d`
|
||||||
|
|
||||||
|
Три бага, найденные в живой игре и проверенные в MAME после исправления.
|
||||||
|
|
||||||
|
- **Зацеп срывался на следующем кадре** (регресс, тянулся с 4e12aa5).
|
||||||
|
Кид цеплялся за кромку, поза зацепа рисовалась — и он тут же падал.
|
||||||
|
Ловилось на длинном прыжке уровня 3 (комната 7) и в attract-демо, где
|
||||||
|
Кид вместо подъёма на кромку (0,2) улетал на пики. Причина: страж
|
||||||
|
«падения сквозь стену» принимал кладку под кромкой за стену, в которую
|
||||||
|
персонаж влетел, и отменял только что состоявшийся захват. Теперь
|
||||||
|
удачный зацеп отменяет этого стража. `38fb3c0`
|
||||||
|
|
||||||
|
- **Непрерывный взмах клинка у безоружного Кида.** На подъёме шёл
|
||||||
|
нескончаемый свист меча, которого у Кида нет. Причина: в порт не
|
||||||
|
доехали два условия оригинала, включая гард, который автор SDLPoP
|
||||||
|
подписал прямым текстом как «фикс зацикленного звука взмаха». `cb995bf`
|
||||||
|
|
||||||
|
- **Кнопка под Кидом заливалась кладкой** на дворцовых уровнях. Кид
|
||||||
|
подтягивается на открывающую кнопку, и кромка, которая его прячет,
|
||||||
|
нарисована кирпичом (уровень 4, комната 18). Причина: подстановка
|
||||||
|
спрайта «кнопка без пола слева» действует только в подземелье, и это
|
||||||
|
условие было потеряно в перерисовке поверх персонажа — при том что в
|
||||||
|
статической отрисовке комнаты оно есть. `8548aa9`
|
||||||
|
|
||||||
|
Сопутствующее, для разработки:
|
||||||
|
|
||||||
|
- В доске исправлено толкование звука 11: это индикатор ПРОМАХА, а не
|
||||||
|
«любого укола». Прежняя запись описывала наш собственный код вместо
|
||||||
|
оригинала, и из-за неё в CLIMB-VS-GUARD зря отодвинули версию про порог
|
||||||
|
дистанции. `400f5cb`
|
||||||
|
- Новый набор host-тестов `t_hang`: мерит не «вис наступил», а «вис
|
||||||
|
ДЕРЖИТСЯ» — прежние наборы регресс зацепа не видели именно поэтому.
|
||||||
|
Входит в `38fb3c0`.
|
||||||
|
- В `CLAUDE.md` записан путь запуска на HDD-образе: игра лежит в
|
||||||
|
`D:\GAMES\SPRPOP`, а не в корне диска. `aaa480d`
|
||||||
@@ -60,6 +60,24 @@ seqtbl, `seg007` mob/loose/падающие объекты, `seg008` отрис
|
|||||||
нового бага грепни архив по симптому: корень мог уже разбираться.
|
нового бага грепни архив по симптому: корень мог уже разбираться.
|
||||||
Открытые файлы обязаны читаться целиком за раз.
|
Открытые файлы обязаны читаться целиком за раз.
|
||||||
|
|
||||||
|
**CHANGELOG. Ставишь релизный тег — добавь запись в `CHANGELOG.md`.**
|
||||||
|
Версия, дата И КОММИТ в заголовке берутся ИЗ GIT, руками не
|
||||||
|
проставляются:
|
||||||
|
|
||||||
|
git for-each-ref \
|
||||||
|
--format='%(refname:short) | %(creatordate:short) | %(*objectname:short)' \
|
||||||
|
refs/tags/<тег>
|
||||||
|
|
||||||
|
Заголовок = `<имя тега> — <дата> — <коммит>`. Коммит обязателен: тег
|
||||||
|
можно передвинуть или переименовать, а ревизия, на которой релиз собран,
|
||||||
|
должна оставаться в записи однозначно. Берётся именно `*objectname`
|
||||||
|
(дереференс аннотированного тега), а не `objectname` — последний вернёт
|
||||||
|
хеш самого объекта тега, а не коммита.
|
||||||
|
|
||||||
|
В запись идёт только то, что видно ИГРОКУ или меняет сборку/запуск, — по
|
||||||
|
одному пункту «симптом -> причина одной фразой -> хеш коммита». Полный
|
||||||
|
разбор живёт в сообщении коммита, дублировать его сюда не надо.
|
||||||
|
|
||||||
Индекс документации с отметками актуальности — **`docs/README.md`**,
|
Индекс документации с отметками актуальности — **`docs/README.md`**,
|
||||||
начинать чтение оттуда.
|
начинать чтение оттуда.
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
|----------|-------|
|
|----------|-------|
|
||||||
| [`TASKS_OPEN.md`](TASKS_OPEN.md) | **Что берётся в работу сейчас** — начинать отсюда |
|
| [`TASKS_OPEN.md`](TASKS_OPEN.md) | **Что берётся в работу сейчас** — начинать отсюда |
|
||||||
| [`BUGS_OPEN.md`](BUGS_OPEN.md) | Открытые баги и незакрытые оптимизации |
|
| [`BUGS_OPEN.md`](BUGS_OPEN.md) | Открытые баги и незакрытые оптимизации |
|
||||||
|
| [`../CHANGELOG.md`](../CHANGELOG.md) | **Что менялось по релизам** глазами игрока; версия и дата берутся из git-тега |
|
||||||
| [`impl_diff.md`](impl_diff.md) | **Осознанные расхождения с SDLPoP**: где сделано не дословно и почему. Новое расхождение — записью сюда, а не только комментарием в коде |
|
| [`impl_diff.md`](impl_diff.md) | **Осознанные расхождения с SDLPoP**: где сделано не дословно и почему. Новое расхождение — записью сюда, а не только комментарием в коде |
|
||||||
| [`keys.txt`](keys.txt) | **Целевая раскладка управления**, к которой подгоняем SprPoP |
|
| [`keys.txt`](keys.txt) | **Целевая раскладка управления**, к которой подгоняем SprPoP |
|
||||||
| [`keys_plan.md`](keys_plan.md) | План перевода на неё: что совпадает, что переназначить, каких функций нет вовсе |
|
| [`keys_plan.md`](keys_plan.md) | План перевода на неё: что совпадает, что переназначить, каких функций нет вовсе |
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
# Локальные исполняемые файлы платформенных проб собираются рядом с
|
||||||
|
# исходниками. Общий шаблон репозитория не покрывает этот дополнительный
|
||||||
|
# уровень вложенности applications/Volkov/tests/<probe>/.
|
||||||
|
/tests/*/*.exe
|
||||||
|
|
||||||
|
# Клон исторических исходников VC служит локальным справочным материалом и
|
||||||
|
# сохраняет собственный .git; во внешний репозиторий его как gitlink не кладём.
|
||||||
|
/VolkovCommander/
|
||||||
@@ -0,0 +1,222 @@
|
|||||||
|
# Sprinter Commander — двухпанельный файловый менеджер.
|
||||||
|
|
||||||
|
PROJ_ROOT := $(abspath $(CURDIR)/../..)
|
||||||
|
EXAMPLE := sprcmd
|
||||||
|
SRC_DIR := src
|
||||||
|
BUILD_DIR := build
|
||||||
|
MEMORY := big
|
||||||
|
ALLOCS ?= 3000
|
||||||
|
HDD_IMG := $(CURDIR)/build/hdd/sprcmd.chd
|
||||||
|
MDVIEW2_DIR := $(PROJ_ROOT)/examples/mdview2
|
||||||
|
MDVIEW2_SRCS := $(wildcard $(MDVIEW2_DIR)/*.c)
|
||||||
|
MDVIEW2_HEADERS := $(wildcard $(MDVIEW2_DIR)/*.h)
|
||||||
|
MDVIEW2_TEST_EXE := $(CURDIR)/build/external/mdview2.exe
|
||||||
|
P5_COPY_FAULT_EXE := $(CURDIR)/build/tests/cperr.exe
|
||||||
|
P6_SORT_TEST_EXE := $(CURDIR)/build/tests/sortrt.exe
|
||||||
|
P7_SELECT_TEST_EXE := $(CURDIR)/build/tests/selrt.exe
|
||||||
|
P9_MKDIR_TEST_EXE := $(CURDIR)/build/tests/mkrt.exe
|
||||||
|
P10_RENAME_TEST_EXE := $(CURDIR)/build/tests/renrt.exe
|
||||||
|
P11_DELETE_TEST_EXE := $(CURDIR)/build/tests/delrt.exe
|
||||||
|
P19_OVERWRITE_TEST_EXE := $(CURDIR)/build/tests/p19/delrt.exe
|
||||||
|
BANK1_SRCS := src/sc_source_fs.c src/sc_sort.c src/sc_select.c \
|
||||||
|
src/sc_copy_job.c src/sc_metadata.c src/sc_disk.c src/sc_tree.c src/sc_exec_ui.c
|
||||||
|
BANK2_SRCS := src/sc_draw.c src/sc_dialog.c src/sc_copy_ui.c \
|
||||||
|
src/sc_file_ui.c src/sc_name.c src/sc_rename.c
|
||||||
|
EXTRA_FLAGS := --safe --max-allocs $(ALLOCS) -I include \
|
||||||
|
$(foreach f,$(BANK1_SRCS),--bank 1=$(f)) \
|
||||||
|
$(foreach f,$(BANK2_SRCS),--bank 2=$(f))
|
||||||
|
EXTRA_SRCS := \
|
||||||
|
src/sc_app.c \
|
||||||
|
src/sc_command.c \
|
||||||
|
src/sc_input.c \
|
||||||
|
src/sc_path.c \
|
||||||
|
src/sc_panel.c \
|
||||||
|
src/sc_platform_screen.c \
|
||||||
|
src/sc_platform_exec.c \
|
||||||
|
src/sc_screen.c \
|
||||||
|
src/sc_store.c \
|
||||||
|
src/sc_theme.c \
|
||||||
|
src/sc_video_system.c
|
||||||
|
|
||||||
|
include $(PROJ_ROOT)/app.mk
|
||||||
|
|
||||||
|
HEADERS := $(wildcard include/*.h)
|
||||||
|
|
||||||
|
$(EXE): Makefile $(HEADERS) $(BANK1_SRCS) $(BANK2_SRCS)
|
||||||
|
|
||||||
|
hdd-stress: $(EXE)
|
||||||
|
sh tests/make_p3_stress_hdd.sh $(CURDIR)/build/hdd/p3_stress.chd $(EXE)
|
||||||
|
|
||||||
|
hdd-copy: $(EXE)
|
||||||
|
sh tests/make_p4_copy_hdd.sh $(CURDIR)/build/hdd/p4_copy.chd $(EXE)
|
||||||
|
|
||||||
|
tests/p4_exec_child/p4child.exe: tests/p4_exec_child/p4child.c \
|
||||||
|
tests/p4_exec_child/Makefile
|
||||||
|
$(MAKE) -C tests/p4_exec_child ALLOCS=$(ALLOCS)
|
||||||
|
|
||||||
|
hdd-exec: $(EXE) tests/p4_exec_child/p4child.exe
|
||||||
|
sh tests/make_p4_exec_hdd.sh $(CURDIR)/build/hdd/p4_exec.chd \
|
||||||
|
$(EXE) tests/p4_exec_child/p4child.exe
|
||||||
|
|
||||||
|
hdd-p5: $(EXE)
|
||||||
|
sh tests/make_p5_hdd.sh $(CURDIR)/build/hdd/p5_stability.chd $(EXE)
|
||||||
|
|
||||||
|
hdd-p5-enospc: $(EXE)
|
||||||
|
sh tests/make_p5_enospc_hdd.sh \
|
||||||
|
$(CURDIR)/build/hdd/p5_enospc.chd $(EXE)
|
||||||
|
|
||||||
|
hdd-p5-panels: $(EXE)
|
||||||
|
sh tests/make_p5_panel_edges_hdd.sh \
|
||||||
|
$(CURDIR)/build/hdd/p5_panel_edges.chd $(EXE)
|
||||||
|
|
||||||
|
$(MDVIEW2_TEST_EXE): $(MDVIEW2_SRCS) $(MDVIEW2_HEADERS) $(LIB)
|
||||||
|
mkdir -p $(dir $@)
|
||||||
|
$(PROJ_ROOT)/bin/sprinter-cc --memory small --max-allocs $(ALLOCS) \
|
||||||
|
-o $@ $(MDVIEW2_SRCS)
|
||||||
|
|
||||||
|
hdd-p5-viewer: $(EXE) $(MDVIEW2_TEST_EXE)
|
||||||
|
sh tests/make_p5_viewer_hdd.sh \
|
||||||
|
$(CURDIR)/build/hdd/p5_viewer.chd $(EXE) \
|
||||||
|
$(MDVIEW2_TEST_EXE) $(MDVIEW2_DIR)/README.md
|
||||||
|
|
||||||
|
$(P5_COPY_FAULT_EXE): tests/p5_copy_faults.c src/sc_copy_job.c \
|
||||||
|
src/sc_metadata.c src/sc_disk.c \
|
||||||
|
src/sc_path.c src/sc_platform_exec.c include/sc_copy.h \
|
||||||
|
include/sc_metadata.h include/sc_disk.h include/sc_path.h \
|
||||||
|
include/sc_exec.h $(LIB)
|
||||||
|
mkdir -p $(dir $@)
|
||||||
|
$(PROJ_ROOT)/bin/sprinter-cc --memory big --safe --max-allocs $(ALLOCS) \
|
||||||
|
-I include --bank 1=src/sc_copy_job.c --bank 1=src/sc_metadata.c \
|
||||||
|
--bank 1=src/sc_disk.c -o $@ \
|
||||||
|
tests/p5_copy_faults.c src/sc_path.c src/sc_platform_exec.c
|
||||||
|
|
||||||
|
hdd-p5-copy-faults: $(P5_COPY_FAULT_EXE)
|
||||||
|
sh tests/make_p5_copy_faults_hdd.sh \
|
||||||
|
$(CURDIR)/build/hdd/p5_copy_faults.chd $(P5_COPY_FAULT_EXE)
|
||||||
|
|
||||||
|
hdd-p5-media: $(EXE)
|
||||||
|
sh tests/make_p5_media_hdd.sh \
|
||||||
|
$(CURDIR)/build/hdd/p5_media.chd $(EXE)
|
||||||
|
|
||||||
|
$(P6_SORT_TEST_EXE): tests/p6_sort_probe.c src/sc_sort.c src/sc_store.c \
|
||||||
|
include/sc_entry.h include/sc_panel.h include/sc_sort.h \
|
||||||
|
include/sc_store.h $(LIB)
|
||||||
|
mkdir -p $(dir $@)
|
||||||
|
$(PROJ_ROOT)/bin/sprinter-cc --memory big --safe --max-allocs $(ALLOCS) \
|
||||||
|
-I include --bank 1=src/sc_sort.c -o $@ \
|
||||||
|
tests/p6_sort_probe.c src/sc_store.c
|
||||||
|
|
||||||
|
hdd-p6-sort: $(EXE) $(P6_SORT_TEST_EXE)
|
||||||
|
sh tests/make_p6_sort_hdd.sh $(CURDIR)/build/hdd/p6_sort.chd \
|
||||||
|
$(EXE) $(P6_SORT_TEST_EXE)
|
||||||
|
|
||||||
|
$(P7_SELECT_TEST_EXE): tests/p7_select_probe.c src/sc_select.c \
|
||||||
|
src/sc_store.c include/sc_entry.h include/sc_panel.h \
|
||||||
|
include/sc_select.h include/sc_store.h $(LIB)
|
||||||
|
mkdir -p $(dir $@)
|
||||||
|
$(PROJ_ROOT)/bin/sprinter-cc --memory big --safe --max-allocs $(ALLOCS) \
|
||||||
|
-I include --bank 1=src/sc_select.c -o $@ \
|
||||||
|
tests/p7_select_probe.c src/sc_store.c
|
||||||
|
|
||||||
|
hdd-p7-select: $(EXE) $(P7_SELECT_TEST_EXE)
|
||||||
|
sh tests/make_p7_select_hdd.sh $(CURDIR)/build/hdd/p7_select.chd \
|
||||||
|
$(EXE) $(P7_SELECT_TEST_EXE)
|
||||||
|
|
||||||
|
hdd-p8-masks: hdd-p7-select
|
||||||
|
|
||||||
|
$(P9_MKDIR_TEST_EXE): tests/p9_mkdir_probe.c src/sc_name.c src/sc_path.c \
|
||||||
|
include/sc_path.h $(LIB)
|
||||||
|
mkdir -p $(dir $@)
|
||||||
|
$(PROJ_ROOT)/bin/sprinter-cc --memory big --safe --max-allocs $(ALLOCS) \
|
||||||
|
-I include --bank 1=src/sc_name.c -o $@ \
|
||||||
|
tests/p9_mkdir_probe.c src/sc_path.c
|
||||||
|
|
||||||
|
hdd-p9-mkdir: $(EXE) $(P9_MKDIR_TEST_EXE)
|
||||||
|
sh tests/make_p9_mkdir_hdd.sh $(CURDIR)/build/hdd/p9_mkdir.chd \
|
||||||
|
$(EXE) $(P9_MKDIR_TEST_EXE)
|
||||||
|
|
||||||
|
$(P10_RENAME_TEST_EXE): tests/p10_rename_probe.c src/sc_rename.c \
|
||||||
|
include/sc_file_ops.h $(LIB)
|
||||||
|
mkdir -p $(dir $@)
|
||||||
|
$(PROJ_ROOT)/bin/sprinter-cc --memory big --safe --max-allocs $(ALLOCS) \
|
||||||
|
-I include --bank 1=src/sc_rename.c -o $@ \
|
||||||
|
tests/p10_rename_probe.c
|
||||||
|
|
||||||
|
hdd-p10-rename: $(EXE) $(P10_RENAME_TEST_EXE)
|
||||||
|
sh tests/make_p10_rename_hdd.sh $(CURDIR)/build/hdd/p10_rename.chd \
|
||||||
|
$(EXE) $(P10_RENAME_TEST_EXE)
|
||||||
|
|
||||||
|
$(P11_DELETE_TEST_EXE): tests/p11_delete_probe.c $(LIB)
|
||||||
|
mkdir -p $(dir $@)
|
||||||
|
$(PROJ_ROOT)/bin/sprinter-cc --memory big --safe --max-allocs $(ALLOCS) \
|
||||||
|
-o $@ tests/p11_delete_probe.c
|
||||||
|
|
||||||
|
hdd-p11-delete: $(EXE) $(P11_DELETE_TEST_EXE)
|
||||||
|
sh tests/make_p11_delete_hdd.sh $(CURDIR)/build/hdd/p11_delete.chd \
|
||||||
|
$(EXE) $(P11_DELETE_TEST_EXE)
|
||||||
|
|
||||||
|
hdd-p12-group-copy: $(EXE)
|
||||||
|
sh tests/make_p12_group_copy_hdd.sh \
|
||||||
|
$(CURDIR)/build/hdd/p12_group_copy.chd $(EXE)
|
||||||
|
|
||||||
|
hdd-p13-group-delete: $(EXE)
|
||||||
|
sh tests/make_p13_group_delete_hdd.sh \
|
||||||
|
$(CURDIR)/build/hdd/p13_group_delete.chd $(EXE)
|
||||||
|
|
||||||
|
hdd-p14-default-colors: $(EXE)
|
||||||
|
sh tests/make_p14_default_colors_hdd.sh \
|
||||||
|
$(CURDIR)/build/hdd/p14_default_colors.chd $(EXE)
|
||||||
|
|
||||||
|
hdd-p15-tree-copy: $(EXE)
|
||||||
|
sh tests/make_p15_tree_copy_hdd.sh \
|
||||||
|
$(CURDIR)/build/hdd/p15_tree_copy.chd $(EXE)
|
||||||
|
|
||||||
|
hdd-p15-tree-cancel: $(EXE)
|
||||||
|
sh tests/make_p15_tree_cancel_hdd.sh \
|
||||||
|
$(CURDIR)/build/hdd/p15_tree_cancel.chd $(EXE)
|
||||||
|
|
||||||
|
hdd-p15-tree-self: $(EXE)
|
||||||
|
sh tests/make_p15_tree_self_hdd.sh \
|
||||||
|
$(CURDIR)/build/hdd/p15_tree_self.chd $(EXE)
|
||||||
|
|
||||||
|
hdd-p16-group-tree-copy: $(EXE)
|
||||||
|
sh tests/make_p16_group_tree_copy_hdd.sh \
|
||||||
|
$(CURDIR)/build/hdd/p16_group_tree_copy.chd $(EXE)
|
||||||
|
|
||||||
|
hdd-p17-tree-delete: $(EXE)
|
||||||
|
sh tests/make_p17_tree_delete_hdd.sh \
|
||||||
|
$(CURDIR)/build/hdd/p17_tree_delete.chd $(EXE)
|
||||||
|
|
||||||
|
hdd-p17-tree-delete-cancel: $(EXE)
|
||||||
|
sh tests/make_p17_tree_delete_cancel_hdd.sh \
|
||||||
|
$(CURDIR)/build/hdd/p17_tree_delete_cancel.chd $(EXE)
|
||||||
|
|
||||||
|
hdd-p18-metadata: $(EXE)
|
||||||
|
sh tests/make_p18_metadata_hdd.sh \
|
||||||
|
$(CURDIR)/build/hdd/p18_metadata.chd $(EXE)
|
||||||
|
|
||||||
|
$(P19_OVERWRITE_TEST_EXE): tests/p19_overwrite_probe.c \
|
||||||
|
src/sc_copy_job.c src/sc_metadata.c src/sc_disk.c src/sc_path.c \
|
||||||
|
include/sc_copy.h include/sc_metadata.h include/sc_disk.h \
|
||||||
|
include/sc_path.h $(LIB)
|
||||||
|
mkdir -p $(dir $@)
|
||||||
|
$(PROJ_ROOT)/bin/sprinter-cc --memory big --safe --max-allocs $(ALLOCS) \
|
||||||
|
-I include --bank 1=src/sc_copy_job.c --bank 1=src/sc_metadata.c \
|
||||||
|
--bank 1=src/sc_disk.c \
|
||||||
|
-o $@ tests/p19_overwrite_probe.c src/sc_path.c
|
||||||
|
|
||||||
|
hdd-p19-overwrite: $(P19_OVERWRITE_TEST_EXE)
|
||||||
|
sh tests/make_p19_overwrite_hdd.sh \
|
||||||
|
$(CURDIR)/build/hdd/p19_overwrite.chd $(P19_OVERWRITE_TEST_EXE)
|
||||||
|
|
||||||
|
hdd-p19-policy: $(EXE)
|
||||||
|
sh tests/make_p19_policy_hdd.sh \
|
||||||
|
$(CURDIR)/build/hdd/p19_policy.chd $(EXE)
|
||||||
|
|
||||||
|
.PHONY: hdd-stress hdd-copy hdd-exec hdd-p5 hdd-p5-enospc hdd-p5-panels \
|
||||||
|
hdd-p5-viewer hdd-p5-copy-faults hdd-p5-media hdd-p6-sort hdd-p7-select \
|
||||||
|
hdd-p8-masks hdd-p9-mkdir hdd-p10-rename hdd-p11-delete \
|
||||||
|
hdd-p12-group-copy hdd-p13-group-delete hdd-p14-default-colors \
|
||||||
|
hdd-p15-tree-copy hdd-p15-tree-cancel hdd-p15-tree-self \
|
||||||
|
hdd-p16-group-tree-copy hdd-p17-tree-delete hdd-p17-tree-delete-cancel \
|
||||||
|
hdd-p18-metadata hdd-p19-overwrite hdd-p19-policy
|
||||||
@@ -0,0 +1,112 @@
|
|||||||
|
# Sprinter Commander
|
||||||
|
|
||||||
|
Функциональный аналог классического двухпанельного Commander для Sprinter
|
||||||
|
Sp2000. Volkov Commander 4.05/4.99 и Dos Navigator используются как
|
||||||
|
поведенческие и архитектурные референсы; проект не является переносом их
|
||||||
|
DOS-кода.
|
||||||
|
|
||||||
|
Текущее состояние: PoC 0.1 (этапы P1–P5) пройден в MAME / BIOS 3.06 /
|
||||||
|
DSS 1.71.57; аппаратный smoke-тест остаётся внешним контрольным пунктом.
|
||||||
|
Начат этап 0.2: готовы независимые для каждой панели сортировки по имени,
|
||||||
|
расширению, размеру и дате/времени в обоих направлениях, выбор записей через
|
||||||
|
`Insert`, `*` и маски `+`/`-`, создание каталога по `F7` и локальное
|
||||||
|
переименование файла/каталога по `F6` без overwrite, однообъектный F8 и
|
||||||
|
групповой рекурсивный F8 для выбранных файлов и каталогов, а также рекурсивный
|
||||||
|
F5 для выбранных файлов и каталогов. F5 сохраняет FAT date/time и атрибуты
|
||||||
|
`R/H/S/A` обычных файлов и поддерживает conflict-policy
|
||||||
|
`overwrite/skip/rename`, включая `overwrite all`/`skip all`, отдельную
|
||||||
|
защиту readonly и backup/rollback. Обход использует динамическую EMM-очередь.
|
||||||
|
Встроенный профиль имён уже различает белые каталоги, жёлтые `.EXE` и
|
||||||
|
светло-серые остальные файлы; загрузка пользовательских цветовых правил
|
||||||
|
остаётся задачей 1.0.
|
||||||
|
Командер
|
||||||
|
сканирует, хранит и сортирует каталоги, показывает явную виртуальную запись
|
||||||
|
предела DSS 1.71, безопасно копирует один файл через выделенную EMM-страницу
|
||||||
|
W3 и запускает `.EXE` с восстановлением режима, палитры, CWD и обеих панелей.
|
||||||
|
|
||||||
|
## Сборка
|
||||||
|
|
||||||
|
Из этого каталога:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
make
|
||||||
|
```
|
||||||
|
|
||||||
|
Результат: `build/sprcmd.exe`, конфигурация
|
||||||
|
`--memory big --safe --max-allocs 3000`. Значение `ALLOCS=3000` принято как
|
||||||
|
исходное для Commander и всех его проб; при диагностике его можно переопределить
|
||||||
|
явно, например `make ALLOCS=4000`.
|
||||||
|
|
||||||
|
Основные тесты используют быстрый HDD `D:`:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
make hdd # только Commander
|
||||||
|
make hdd-stress # большой каталог P3
|
||||||
|
make hdd-copy # набор успех/overwrite/cancel/zero для P4.1
|
||||||
|
make hdd-exec # запуск child/restore/error для P4.2
|
||||||
|
make hdd-p5 # 20 copy, граничные размеры, 100 refresh, lifecycle
|
||||||
|
make hdd-p5-enospc # реальный disk-full и cleanup temp
|
||||||
|
make hdd-p5-panels # точные границы панели 27/28 записей
|
||||||
|
make hdd-p5-copy-faults # детерминированная матрица ошибок copy/EXEC
|
||||||
|
make hdd-p5-viewer # запуск реального mdview2 и восстановление Commander
|
||||||
|
make hdd-p5-media # снятие/возврат hard2 во время F5
|
||||||
|
make hdd-p6-sort # target-матрица и UI-сценарий сортировок 0.2
|
||||||
|
make hdd-p7-select # выбор Insert/*, статистика и EMM cleanup
|
||||||
|
make hdd-p8-masks # тот же расширенный образ: редактор и маски +/−
|
||||||
|
make hdd-p9-mkdir # validator DOS 8.3, mkdir/error/CWD и UI F7
|
||||||
|
make hdd-p10-rename # file/dir rename, no-overwrite, CWD и UI F6
|
||||||
|
make hdd-p11-delete # confirm/cancel, file/empty-dir, guards и UI F8
|
||||||
|
make hdd-p12-group-copy # legacy group fixture; current F5 also copies selected dirs
|
||||||
|
make hdd-p13-group-delete # legacy file-only group F8 regression
|
||||||
|
make hdd-p14-default-colors # built-in dir/EXE/file colours и restore палитры
|
||||||
|
make hdd-p15-tree-copy # recursive current directory, depth=16 и repeat guard
|
||||||
|
make hdd-p15-tree-cancel # Esc в 4-МБ файле и cleanup temp/traversal page
|
||||||
|
make hdd-p15-tree-self # target-inside-source guard до mutation
|
||||||
|
make hdd-p16-group-tree-copy # selected files + multiple directory roots
|
||||||
|
make hdd-p17-tree-delete # recursive group F8, depth=12, cancel confirmation
|
||||||
|
make hdd-p17-tree-delete-cancel # Esc после начала recursive group F8
|
||||||
|
make hdd-p18-metadata # exact FAT date/time + R/H/S/A после F5
|
||||||
|
make hdd-p19-overwrite # target backup/commit/rollback matrix
|
||||||
|
make hdd-p19-policy # UI overwrite/skip/rename/all/readonly/cancel
|
||||||
|
```
|
||||||
|
|
||||||
|
`make floppy` сохранён для smoke-проверки совместимости с FDD и не запускает
|
||||||
|
эмулятор. Подробнее: [политика тестовых носителей](docs/test-media.md).
|
||||||
|
|
||||||
|
## Документы
|
||||||
|
|
||||||
|
- [требования PoC](docs/commander-requirements.md);
|
||||||
|
- [архитектура](docs/commander-architecture.md);
|
||||||
|
- [roadmap](docs/commander-roadmap.md);
|
||||||
|
- [клавиши и команды](docs/commander-keymap.md);
|
||||||
|
- [результаты платформенных проб P1](docs/p1-platform-probes.md);
|
||||||
|
- [экранный backend и границы BIOS API](docs/p2-screen-backend.md);
|
||||||
|
- [результаты coordinate-screen probe P2.1](docs/p2-screen-probe-results.md);
|
||||||
|
- [результаты системной палитры P2.2](docs/p2-palette-results.md);
|
||||||
|
- [результаты двухпанельного skeleton P2](docs/p2-skeleton-results.md);
|
||||||
|
- [результаты файловых панелей P3](docs/p3-panel-results.md);
|
||||||
|
- [результаты копирования P4.1](docs/p4-copy-results.md);
|
||||||
|
- [результаты запуска EXE P4.2](docs/p4-exec-results.md);
|
||||||
|
- [результаты стабилизации P5](docs/p5-stability-results.md);
|
||||||
|
- [результаты сортировок 0.2/P6](docs/p6-sort-results.md);
|
||||||
|
- [результаты выбора записей 0.2/P7](docs/p7-selection-results.md);
|
||||||
|
- [результаты выбора по маске 0.2/P8](docs/p8-mask-results.md);
|
||||||
|
- [результаты создания каталога 0.2/P9](docs/p9-mkdir-results.md);
|
||||||
|
- [результаты локального rename 0.2/P10](docs/p10-rename-results.md);
|
||||||
|
- [результаты однообъектного delete 0.2/P11](docs/p11-delete-results.md);
|
||||||
|
- [результаты группового F5 0.2/P12](docs/p12-group-copy-results.md);
|
||||||
|
- [результаты группового F8 0.2/P13](docs/p13-group-delete-results.md);
|
||||||
|
- [результаты стандартных цветов P14](docs/p14-default-colors-results.md);
|
||||||
|
- [результаты рекурсивного F5/P15](docs/p15-tree-copy-results.md);
|
||||||
|
- [результаты рекурсивного group F5/P16](docs/p16-group-tree-copy-results.md);
|
||||||
|
- [результаты рекурсивного group F8/P17](docs/p17-tree-delete-results.md);
|
||||||
|
- [результаты сохранения метаданных F5/P18](docs/p18-metadata-results.md);
|
||||||
|
- [результаты conflict-policy F5/P19](docs/p19-copy-policy-results.md);
|
||||||
|
- [направление развития UI по образцу VC](docs/ui-reference.md);
|
||||||
|
- [инструкция и ограничения PoC 0.1](docs/poc-0.1-release.md);
|
||||||
|
- [носители интеграционных тестов](docs/test-media.md);
|
||||||
|
- [предел больших каталогов DSS и стратегия Commander](docs/dss-large-directories.md).
|
||||||
|
|
||||||
|
Экран выводится системными координатными функциями ESTEX/BIOS без оконных
|
||||||
|
дескрипторов и без прямой адресации VRAM. Системные вызовы палитры разрешены;
|
||||||
|
их save/set/readback/restore и многоцветная сцена подтверждены пробой P2.2.
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
# Артефакты MAME-прогона P1
|
||||||
|
|
||||||
|
Дата: 6 сентября 2026 года.
|
||||||
|
|
||||||
|
Окружение: MAME 0.287 (`b0c4527c`), машина `sprinter`, BIOS `v3.06`, текущие системные
|
||||||
|
образы проекта. `p1probe.exe` и `p1child.exe` запускались с дискеты A:.
|
||||||
|
|
||||||
|
Каталоги:
|
||||||
|
|
||||||
|
- `directory/` — CWD, `*.*`, `*`, завершение F_NEXT с `ENOENT=3`;
|
||||||
|
`strict-enoent.png` снят после удаления временного допуска `EISDIR`;
|
||||||
|
- `emm/` — три страницы, граничные patterns и возврат free pages;
|
||||||
|
- `dskinfo/` — геометрия и свободное место текущего диска;
|
||||||
|
- `winrest/` — полный экран 80x32 и частичный вывод из offset `0x2000`;
|
||||||
|
`partial-phase-hidden.png`/`partial-stable.png` показывают неудачные raw-
|
||||||
|
атрибуты, а `partial-flash-phase.png`/`partial-contrast-stable.png` —
|
||||||
|
именованный цветной pattern. Повторная проверка декодированных RGB показала,
|
||||||
|
что два последних кадра пиксельно идентичны; P2.2 отдельно подтвердил
|
||||||
|
стабильность четырёх палитровых планов;
|
||||||
|
- `exec/` — оба вызова child и итоговые значения EXEC/WAIT;
|
||||||
|
- `exec-then-emm/` — повторный EMM-тест после двух EXEC в том же процессе;
|
||||||
|
- `keyboard-commander/` — навигация, F1–F10, Ctrl+R, Ctrl+PgUp, Alt+F1;
|
||||||
|
- `keyboard/` — дополнительная проба Ctrl+A, Alt+X и Shift+Tab.
|
||||||
|
|
||||||
|
Нумерованные клавиатурные кадры соответствуют времени сценария:
|
||||||
|
|
||||||
|
- `0000.png` — первые навигационные события;
|
||||||
|
- `0001.png` — продолжение навигации и начало F-клавиш;
|
||||||
|
- `0002.png` — полная базовая таблица до сочетаний;
|
||||||
|
- `0003.png` — сочетания, Esc и общий `RESULT: PASS`;
|
||||||
|
- `0004.png` — возврат в главное меню.
|
||||||
|
|
||||||
|
Интерпретация результатов и ссылки на основные кадры находятся в
|
||||||
|
`docs/p1-platform-probes.md` и `docs/commander-keymap.md`.
|
||||||
|
Актуальная интерпретация палитры находится в
|
||||||
|
`docs/p2-palette-results.md`.
|
||||||
|
After Width: | Height: | Size: 6.5 KiB |
|
After Width: | Height: | Size: 7.8 KiB |
|
After Width: | Height: | Size: 7.8 KiB |
|
After Width: | Height: | Size: 7.8 KiB |
|
After Width: | Height: | Size: 6.5 KiB |
|
After Width: | Height: | Size: 7.8 KiB |
|
After Width: | Height: | Size: 6.5 KiB |
|
After Width: | Height: | Size: 6.3 KiB |
|
After Width: | Height: | Size: 6.3 KiB |
|
After Width: | Height: | Size: 6.5 KiB |
|
After Width: | Height: | Size: 6.6 KiB |
|
After Width: | Height: | Size: 6.6 KiB |
|
After Width: | Height: | Size: 6.6 KiB |
|
After Width: | Height: | Size: 6.3 KiB |
|
After Width: | Height: | Size: 6.5 KiB |
|
After Width: | Height: | Size: 4.9 KiB |
|
After Width: | Height: | Size: 6.0 KiB |
|
After Width: | Height: | Size: 4.9 KiB |
|
After Width: | Height: | Size: 6.0 KiB |
|
After Width: | Height: | Size: 6.5 KiB |
|
After Width: | Height: | Size: 6.3 KiB |
|
After Width: | Height: | Size: 6.9 KiB |
|
After Width: | Height: | Size: 8.3 KiB |
|
After Width: | Height: | Size: 9.4 KiB |
|
After Width: | Height: | Size: 9.9 KiB |
|
After Width: | Height: | Size: 6.5 KiB |
|
After Width: | Height: | Size: 6.9 KiB |
|
After Width: | Height: | Size: 8.3 KiB |
|
After Width: | Height: | Size: 9.4 KiB |
|
After Width: | Height: | Size: 9.9 KiB |
|
After Width: | Height: | Size: 6.5 KiB |
|
After Width: | Height: | Size: 6.0 KiB |
|
After Width: | Height: | Size: 6.0 KiB |
|
After Width: | Height: | Size: 6.0 KiB |
|
After Width: | Height: | Size: 6.5 KiB |
|
After Width: | Height: | Size: 6.5 KiB |
|
After Width: | Height: | Size: 6.5 KiB |
|
After Width: | Height: | Size: 6.5 KiB |
|
After Width: | Height: | Size: 6.5 KiB |
|
After Width: | Height: | Size: 6.5 KiB |
|
After Width: | Height: | Size: 6.5 KiB |
|
After Width: | Height: | Size: 6.9 KiB |
|
After Width: | Height: | Size: 6.9 KiB |
|
After Width: | Height: | Size: 6.9 KiB |
|
After Width: | Height: | Size: 8.7 KiB |
|
After Width: | Height: | Size: 9.8 KiB |
|
After Width: | Height: | Size: 8.6 KiB |
|
After Width: | Height: | Size: 8.7 KiB |
|
After Width: | Height: | Size: 8.7 KiB |
|
After Width: | Height: | Size: 8.6 KiB |
|
After Width: | Height: | Size: 9.0 KiB |
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 8.7 KiB |
|
After Width: | Height: | Size: 9.8 KiB |
|
After Width: | Height: | Size: 8.8 KiB |
|
After Width: | Height: | Size: 8.7 KiB |
|
After Width: | Height: | Size: 8.7 KiB |
|
After Width: | Height: | Size: 8.6 KiB |
|
After Width: | Height: | Size: 9.0 KiB |
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 8.7 KiB |
|
After Width: | Height: | Size: 9.8 KiB |
|
After Width: | Height: | Size: 8.8 KiB |
|
After Width: | Height: | Size: 8.7 KiB |
|
After Width: | Height: | Size: 8.7 KiB |
|
After Width: | Height: | Size: 8.6 KiB |
|
After Width: | Height: | Size: 9.0 KiB |
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 8.7 KiB |
|
After Width: | Height: | Size: 9.8 KiB |
|
After Width: | Height: | Size: 9.0 KiB |
|
After Width: | Height: | Size: 8.6 KiB |
|
After Width: | Height: | Size: 8.7 KiB |
|
After Width: | Height: | Size: 8.6 KiB |
|
After Width: | Height: | Size: 8.8 KiB |
|
After Width: | Height: | Size: 9.7 KiB |
|
After Width: | Height: | Size: 8.8 KiB |
|
After Width: | Height: | Size: 8.2 KiB |
|
After Width: | Height: | Size: 8.2 KiB |
|
After Width: | Height: | Size: 8.5 KiB |
|
After Width: | Height: | Size: 8.3 KiB |
|
After Width: | Height: | Size: 8.6 KiB |
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 8.8 KiB |
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 8.2 KiB |
|
After Width: | Height: | Size: 9.7 KiB |
|
After Width: | Height: | Size: 8.2 KiB |
|
After Width: | Height: | Size: 8.6 KiB |
|
After Width: | Height: | Size: 8.5 KiB |
|
After Width: | Height: | Size: 8.3 KiB |
|
After Width: | Height: | Size: 7.9 KiB |