applications/PoP: порт Prince of Persia — PoC (roomtest) + пайплайн
Порт PoP на Sprinter. Текущий PoC — applications/PoP/roomtest/: комната 1 (фон-композиция тайлов) + Kid с управлением на raw-клавиатуре и коллизией с картой. - roomtest — pop_bg (фон), pop_kid (спрайты Kid, column-major флип, seqtbl-анимация), pop_ctrl (порт control() PoP на held-state kbd_raw), pop_map (коллизия seg004/005: бег/стоп у стены, падение/приземление, отскок seq_47, вертикальный прыжок K4.1). MEMORY=small (DATA сразу за CODE, ~23КБ кода не лезет в huge). - toolchain (PoP) — pop_pack_kid/pop_pack_bg/render_room/extract — распаковка res-графики MSDOS в атласы + композиция комнат. - toolchain/ (корень) — make_hdd.sh (быстрый HDD-тест вместо FDD), png_strip.py / room_compose.py (ассет-пайплайн). - docs — PORT_PLAN, KID_PLAN, форматы ресурсов (Apple II / MSDOS / DAT). - bgtest/coltest/poc — ранние PoC (фон, коллизия, первый прототип). .gitignore: build-артефакты applications/*/*/*; исключены внешние референс-репозитории (SDLPoP/mininim/PR/Apple-II — свои git-клоны) и оригинальные game-данные MSDOS/ (копирайт, только для реверса форматов). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Executable
+52
@@ -0,0 +1,52 @@
|
||||
#!/bin/bash
|
||||
# make_hdd.sh OUT.chd FILE1 [FILE2 ...]
|
||||
#
|
||||
# Собирает 32 МБ RAW-образ жёсткого диска (MBR + один раздел FAT16) с
|
||||
# указанными файлами в корне и конвертит его в CHD для MAME (монтируется
|
||||
# как -hard2). Быстрая альтернатива floppy (mc.img): MAME эмулирует FDD
|
||||
# с реальной черепашьей скоростью, HDD — в разы быстрее.
|
||||
#
|
||||
# Требует: mtools (mpartition/mformat/mcopy) + chdman (из MAME).
|
||||
# Sprinter DSS штатно монтирует стандартный MBR+FAT16 (подтверждено).
|
||||
#
|
||||
# Использование:
|
||||
# toolchain/make_hdd.sh mame/v306/IMG/test_hdd.chd prog.exe data1 data2 ...
|
||||
set -e
|
||||
|
||||
if [ $# -lt 2 ]; then
|
||||
echo "usage: $0 OUT.chd FILE1 [FILE2 ...]" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
OUT_CHD="$1"; shift
|
||||
|
||||
# Геометрия: 128*16*32*512 = 32 МБ. BPS=512.
|
||||
CYLS=128; HEADS=16; SECS=32
|
||||
SECTORS=$((CYLS * HEADS * SECS)) # 65536
|
||||
|
||||
# macOS mktemp требует X'ы в КОНЦЕ шаблона.
|
||||
RAW=$(mktemp /tmp/sphdd.raw.XXXXXX)
|
||||
MTC=$(mktemp /tmp/sphdd.mtc.XXXXXX)
|
||||
trap 'rm -f "$RAW" "$MTC"' EXIT
|
||||
|
||||
dd if=/dev/zero of="$RAW" bs=512 count=$SECTORS status=none
|
||||
|
||||
# mtools-диск z: = раздел 1 нашего RAW-образа.
|
||||
printf 'drive z: file="%s" partition=1\n' "$RAW" > "$MTC"
|
||||
export MTOOLSRC="$MTC" MTOOLS_SKIP_CHECK=1
|
||||
|
||||
# MBR + раздел 1 на весь диск (тип FAT16), затем формат FAT16.
|
||||
mpartition -I -c -t $CYLS -h $HEADS -s $SECS z:
|
||||
mformat z:
|
||||
|
||||
for f in "$@"; do
|
||||
mcopy -o "$f" z:
|
||||
done
|
||||
|
||||
echo "--- содержимое образа ---"
|
||||
mdir z:
|
||||
|
||||
# RAW -> CHD (без сжатия = быстро; та же геометрия).
|
||||
chdman createhd -i "$RAW" -o "$OUT_CHD" -c none \
|
||||
-chs $CYLS,$HEADS,$SECS -ss 512 -f
|
||||
echo "готово: $OUT_CHD"
|
||||
Reference in New Issue
Block a user