Volkov: адаптировать тайминги MAME 0.287 и таймаут на macOS

This commit is contained in:
2026-09-15 17:57:20 +03:00
parent 8e389c03f8
commit 50c6e56b7b
7 changed files with 42 additions and 12 deletions
@@ -119,11 +119,11 @@ SPRCMD.EXE 43080
```sh ```sh
make hdd-p19-overwrite ALLOCS=3000 make hdd-p19-overwrite ALLOCS=3000
tests/run_mame_hdd.sh build/hdd/p19_overwrite.chd \ tests/run_mame_hdd.sh build/hdd/p19_overwrite.chd \
tests/mame_p19_overwrite.lua artifacts/mame-p19/core-local 26 tests/mame_p19_overwrite.lua artifacts/mame-p19/core-local 180
tests/check_p19_overwrite_hdd.sh build/hdd/p19_overwrite.chd tests/check_p19_overwrite_hdd.sh build/hdd/p19_overwrite.chd
make hdd-p19-policy ALLOCS=3000 make hdd-p19-policy ALLOCS=3000
tests/run_mame_hdd.sh build/hdd/p19_policy.chd \ tests/run_mame_hdd.sh build/hdd/p19_policy.chd \
tests/mame_p19_policy.lua artifacts/mame-p19/policy-local 106 tests/mame_p19_policy.lua artifacts/mame-p19/policy-local 200
tests/check_p19_policy_hdd.sh build/hdd/p19_policy.chd tests/check_p19_policy_hdd.sh build/hdd/p19_policy.chd
``` ```
@@ -196,7 +196,7 @@ tests/run_mame_hdd.sh build/hdd/p5_panel_edges.chd \
make hdd-p5-copy-faults ALLOCS=3000 make hdd-p5-copy-faults ALLOCS=3000
tests/run_mame_hdd.sh build/hdd/p5_copy_faults.chd \ tests/run_mame_hdd.sh build/hdd/p5_copy_faults.chd \
tests/mame_p5_copy_faults.lua artifacts/mame-p5/faults-local 35 tests/mame_p5_copy_faults.lua artifacts/mame-p5/faults-local 180
tests/check_p5_copy_faults_hdd.sh build/hdd/p5_copy_faults.chd tests/check_p5_copy_faults_hdd.sh build/hdd/p5_copy_faults.chd
make hdd-p5-viewer ALLOCS=3000 make hdd-p5-viewer ALLOCS=3000
@@ -1,4 +1,5 @@
-- P19: запускает target-пробу overwrite и фиксирует итоговую таблицу. -- P19: запускает target-пробу overwrite и фиксирует итоговую таблицу.
-- Запас на I/O MAME 0.287: ранний выход обрывал пробу до ALL PASS.
local KB = ":kbd:ms_naturl:" local KB = ":kbd:ms_naturl:"
local HOLD = 0.06 local HOLD = 0.06
@@ -40,10 +41,10 @@ end
type_text(8.0, "d:\n") type_text(8.0, "d:\n")
type_text(10.0, "DELRT.EXE\n") type_text(10.0, "DELRT.EXE\n")
key(18.0, "P2.1", 0x10) key(90.0, "P2.1", 0x10)
table.sort(events, function(a, b) return a[1] < b[1] end) table.sort(events, function(a, b) return a[1] < b[1] end)
local snap_times = {15.0, 20.0} local snap_times = {80.0, 95.0}
local snaps_done = {} local snaps_done = {}
local start_time = nil local start_time = nil
local ports = nil local ports = nil
@@ -83,5 +84,5 @@ emu.register_periodic(function()
manager.machine.video:snapshot() manager.machine.video:snapshot()
end end
end end
if elapsed >= 22.0 then manager.machine:exit() end if elapsed >= 100.0 then manager.machine:exit() end
end) end)
@@ -85,8 +85,16 @@ key(90.0, "P1.6", 0x20) -- inspect target.
key(95.0, "P2.3", 0x80) -- F10. key(95.0, "P2.3", 0x80) -- F10.
key(97.0, "P2.1", 0x10) key(97.0, "P2.1", 0x10)
-- Запас на I/O MAME 0.287: ответ readonly должен идти после двух копий.
for _, event in ipairs(events) do
if event[1] >= 40.0 then event[1] = event[1] + 20.0 end
end
table.sort(events, function(left, right) return left[1] < right[1] end) table.sort(events, function(left, right) return left[1] < right[1] end)
local snap_times = {31.5, 38.0, 44.0, 54.0, 58.0, 70.0, 76.0, 85.0, 89.0, 92.0, 99.0} local snap_times = {31.5, 38.0, 44.0, 54.0, 58.0, 70.0, 76.0, 85.0, 89.0, 92.0, 99.0}
for i, t in ipairs(snap_times) do
if t >= 40.0 then snap_times[i] = t + 20.0 end
end
local snaps_done = {} local snaps_done = {}
local start_time = nil local start_time = nil
local ports = nil local ports = nil
@@ -127,5 +135,5 @@ emu.register_periodic(function()
print("[p19-policy] snapshot t=" .. elapsed) print("[p19-policy] snapshot t=" .. elapsed)
end end
end end
if elapsed >= 101.0 then manager.machine:exit() end if elapsed >= 121.0 then manager.machine:exit() end
end) end)
@@ -1,3 +1,4 @@
-- Запас на завершение target-пробы в MAME 0.287.
-- P5: отдельная детерминированная матрица состояний copy-job на HDD D:. -- P5: отдельная детерминированная матрица состояний copy-job на HDD D:.
local KB = ":kbd:ms_naturl:" local KB = ":kbd:ms_naturl:"
@@ -49,11 +50,11 @@ end
type_text(8.0, "d:\n") type_text(8.0, "d:\n")
type_text(9.0, "CPERR.EXE\n") type_text(9.0, "CPERR.EXE\n")
key(16.0, "P2.1", 0x10) -- Enter после итоговой таблицы. key(90.0, "P2.1", 0x10) -- Enter после итоговой таблицы.
table.sort(events, function(a, b) return a[1] < b[1] end) table.sort(events, function(a, b) return a[1] < b[1] end)
local snap_times = {14.0, 18.0} local snap_times = {80.0, 95.0}
local snaps_done = {} local snaps_done = {}
local start_time = nil local start_time = nil
local ports = nil local ports = nil
@@ -100,7 +101,7 @@ emu.register_periodic(function()
end end
end end
if elapsed >= 20.0 then if elapsed >= 100.0 then
print("[p5-copy-faults] exit t=" .. elapsed) print("[p5-copy-faults] exit t=" .. elapsed)
manager.machine:exit() manager.machine:exit()
end end
@@ -1,3 +1,10 @@
-- На медленном DSS можно растянуть расписание, сохранив всю матрицу.
local time_scale = tonumber(os.getenv("SPRCMD_TEST_TIME_SCALE") or "1")
assert(time_scale and time_scale >= 1, "SPRCMD_TEST_TIME_SCALE должен быть >= 1")
if os.getenv("SPRCMD_TEST_UNTHROTTLED") == "1" then
manager.machine.video.throttled = false
end
-- P5 на HDD D: 20 copy, 100 refresh и три полных cleanup-цикла. -- P5 на HDD D: 20 copy, 100 refresh и три полных cleanup-цикла.
local KB = ":kbd:ms_naturl:" local KB = ":kbd:ms_naturl:"
@@ -136,7 +143,7 @@ end)
emu.register_periodic(function() emu.register_periodic(function()
if not start_time then return end if not start_time then return end
if not ports then ports = manager.machine.ioport.ports end if not ports then ports = manager.machine.ioport.ports end
local elapsed = now() - start_time local elapsed = (now() - start_time) / time_scale
while index <= #events and elapsed >= events[index][1] do while index <= #events and elapsed >= events[index][1] do
local event = events[index] local event = events[index]
+14 -1
View File
@@ -22,7 +22,20 @@ if pgrep -fl 'mame[^ ]* sprinter( |$)' | grep . >/dev/null 2>&1; then
fi fi
cd "$MAME_DIR" cd "$MAME_DIR"
exec timeout "$TIMEOUT" ./mame.arm sprinter \ # В macOS GNU timeout может отсутствовать; Python обеспечивает тот же лимит.
if command -v timeout >/dev/null 2>&1; then
set -- timeout "$TIMEOUT"
else
set -- python3 -c '
import subprocess, sys
try:
sys.exit(subprocess.run(sys.argv[2:], timeout=float(sys.argv[1])).returncode)
except subprocess.TimeoutExpired:
print("run_mame_hdd.sh: истёк лимит времени", file=sys.stderr)
sys.exit(124)
' "$TIMEOUT"
fi
exec "$@" ./mame.arm sprinter \
-skip_gameinfo -video opengl -window -nofilter \ -skip_gameinfo -video opengl -window -nofilter \
-beta:wd179x:0 35hd -beta:wd179x:1 35hd \ -beta:wd179x:0 35hd -beta:wd179x:1 35hd \
-flop1 ./IMG/mc.img -flop2 ./IMG/dss171u.img \ -flop1 ./IMG/mc.img -flop2 ./IMG/dss171u.img \