diff --git a/applications/Volkov/docs/p19-copy-policy-results.md b/applications/Volkov/docs/p19-copy-policy-results.md index 19be7ad..eccb5d1 100644 --- a/applications/Volkov/docs/p19-copy-policy-results.md +++ b/applications/Volkov/docs/p19-copy-policy-results.md @@ -119,11 +119,11 @@ SPRCMD.EXE 43080 ```sh make hdd-p19-overwrite ALLOCS=3000 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 make hdd-p19-policy ALLOCS=3000 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 ``` diff --git a/applications/Volkov/docs/p5-stability-results.md b/applications/Volkov/docs/p5-stability-results.md index 8f9fbd9..471c5d3 100644 --- a/applications/Volkov/docs/p5-stability-results.md +++ b/applications/Volkov/docs/p5-stability-results.md @@ -196,7 +196,7 @@ tests/run_mame_hdd.sh build/hdd/p5_panel_edges.chd \ make hdd-p5-copy-faults ALLOCS=3000 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 make hdd-p5-viewer ALLOCS=3000 diff --git a/applications/Volkov/tests/mame_p19_overwrite.lua b/applications/Volkov/tests/mame_p19_overwrite.lua index 8176f59..c7cd432 100644 --- a/applications/Volkov/tests/mame_p19_overwrite.lua +++ b/applications/Volkov/tests/mame_p19_overwrite.lua @@ -1,4 +1,5 @@ -- P19: запускает target-пробу overwrite и фиксирует итоговую таблицу. +-- Запас на I/O MAME 0.287: ранний выход обрывал пробу до ALL PASS. local KB = ":kbd:ms_naturl:" local HOLD = 0.06 @@ -40,10 +41,10 @@ end type_text(8.0, "d:\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) -local snap_times = {15.0, 20.0} +local snap_times = {80.0, 95.0} local snaps_done = {} local start_time = nil local ports = nil @@ -83,5 +84,5 @@ emu.register_periodic(function() manager.machine.video:snapshot() end end - if elapsed >= 22.0 then manager.machine:exit() end + if elapsed >= 100.0 then manager.machine:exit() end end) diff --git a/applications/Volkov/tests/mame_p19_policy.lua b/applications/Volkov/tests/mame_p19_policy.lua index 1886b7c..1e683e4 100644 --- a/applications/Volkov/tests/mame_p19_policy.lua +++ b/applications/Volkov/tests/mame_p19_policy.lua @@ -85,8 +85,16 @@ key(90.0, "P1.6", 0x20) -- inspect target. key(95.0, "P2.3", 0x80) -- F10. 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) 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 start_time = nil local ports = nil @@ -127,5 +135,5 @@ emu.register_periodic(function() print("[p19-policy] snapshot t=" .. elapsed) end end - if elapsed >= 101.0 then manager.machine:exit() end + if elapsed >= 121.0 then manager.machine:exit() end end) diff --git a/applications/Volkov/tests/mame_p5_copy_faults.lua b/applications/Volkov/tests/mame_p5_copy_faults.lua index 48a68f9..3385d18 100644 --- a/applications/Volkov/tests/mame_p5_copy_faults.lua +++ b/applications/Volkov/tests/mame_p5_copy_faults.lua @@ -1,3 +1,4 @@ +-- Запас на завершение target-пробы в MAME 0.287. -- P5: отдельная детерминированная матрица состояний copy-job на HDD D:. local KB = ":kbd:ms_naturl:" @@ -49,11 +50,11 @@ end type_text(8.0, "d:\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) -local snap_times = {14.0, 18.0} +local snap_times = {80.0, 95.0} local snaps_done = {} local start_time = nil local ports = nil @@ -100,7 +101,7 @@ emu.register_periodic(function() end end - if elapsed >= 20.0 then + if elapsed >= 100.0 then print("[p5-copy-faults] exit t=" .. elapsed) manager.machine:exit() end diff --git a/applications/Volkov/tests/mame_p5_stability.lua b/applications/Volkov/tests/mame_p5_stability.lua index 7bed2d2..71bd4f5 100644 --- a/applications/Volkov/tests/mame_p5_stability.lua +++ b/applications/Volkov/tests/mame_p5_stability.lua @@ -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-цикла. local KB = ":kbd:ms_naturl:" @@ -136,7 +143,7 @@ end) emu.register_periodic(function() if not start_time then return 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 local event = events[index] diff --git a/applications/Volkov/tests/run_mame_hdd.sh b/applications/Volkov/tests/run_mame_hdd.sh index c9dca06..454661c 100755 --- a/applications/Volkov/tests/run_mame_hdd.sh +++ b/applications/Volkov/tests/run_mame_hdd.sh @@ -22,7 +22,20 @@ if pgrep -fl 'mame[^ ]* sprinter( |$)' | grep . >/dev/null 2>&1; then fi 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 \ -beta:wd179x:0 35hd -beta:wd179x:1 35hd \ -flop1 ./IMG/mc.img -flop2 ./IMG/dss171u.img \