1dc89b0f26
Все .atl лежали в корне диска рядом с exe — с атласами стражей корень зарос бы окончательно. Теперь ресурсы разложены по каталогам (8.3, как принято в DSS): BG\ фон (env0..4, wall, fore, pot) KID\ персонаж (kid0..27, kid.pal, sword, kid_data.bin) GUARD\ стражи (появятся здесь) LEVELS\ уровни (res2001.bin) make_hdd.sh принимает аргумент вида КАТАЛОГ:файл — создаёт каталог на образе и кладёт файл туда; без префикса файл идёт в корень. В Makefile roomtest появилась цель `make hdd`, которая собирает образ с этой раскладкой (раньше команда набиралась руками на 15 строк). Проверено в MAME: DSS открывает пути вида KID\kid0.atl — комната рисуется, Kid и факелы на месте, то есть все атласы, палитра, таблицы анимации и уровень грузятся из подкаталогов. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
64 lines
2.6 KiB
Bash
Executable File
64 lines
2.6 KiB
Bash
Executable File
#!/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 ...
|
|
# toolchain/make_hdd.sh out.chd prog.exe KID:kid0.atl GUARD:g0.atl ...
|
|
# — аргумент вида КАТАЛОГ:файл кладёт файл в подкаталог образа
|
|
# (каталог создаётся); без префикса файл идёт в корень.
|
|
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:
|
|
|
|
# Аргумент может быть либо файлом (кладём в корень), либо парой
|
|
# КАТАЛОГ:файл — тогда каталог создаётся на образе и файл кладётся туда.
|
|
# Имена на Sprinter/DSS — 8.3, каталоги тоже (KID, GUARD, BG, LEVELS...).
|
|
for f in "$@"; do
|
|
case "$f" in
|
|
*:*) dir="${f%%:*}"; src="${f#*:}"
|
|
mmd "z:/$dir" 2>/dev/null || true
|
|
mcopy -o "$src" "z:/$dir/" ;;
|
|
*) mcopy -o "$f" z: ;;
|
|
esac
|
|
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"
|