Skip to content

picovave 12822759 — 듀얼코어 AMP 안전망 강화 (FM-1 & SMK-37 Pro)

Latest

Choose a tag to compare

@acidsound acidsound released this 24 Oct 17:46

picovave — M-Vave SMK-37 Pro 및 FM-1(AC791N/WL82)에서 PICO-8 카트를 실행하는 펌웨어 패키지입니다.

이 릴리스의 빌드 태그는 12822759 입니다(기기가 --ask / identity SysEx 에 보고하는 값).

설치물 (Firmware Packages)

• FM-1용: picovave-fm1.fwsc — 610,213 B
• sha256: 936e6924cf802366f54dc2fa3062d079094d39698f4ef9ccb2287fee6c41dff3
• 대상 기기: M-Vave FM-1 (FM-1_900)
• SMK-37 Pro용: picovave-smk37.fwsc (또는 picovave.fwsc) — 651,383 B
• sha256: 0eaeeab75e68ccdc10c555f08b3a1f4c3962e78fb6d6f2422ca58b7bf97bd514
• 대상 기기: M-Vave SMK-37 Pro (SMK-37 Pro_700)


주요 변경 사항

듀얼코어 AMP(§18)를 리스크 관점에서 추적해 패널이 얼어붙을 수 있는 경로 4건을 닫았습니다.
모두 실기(FM-1 + SMK-37 Pro)에서 확인했습니다.

• 리셋 뒤 stale 메일박스(가장 위험): 메일박스는 .noinit이라 WDT/크래시 리셋을 넘어 살아남는데,
fm1_cpu1_start()가 이를 지우지 않았습니다. 다음 부팅의 Core 1이 미완료 RENDER를 첫 루프에서
실행하면 그 시점은 .bss 클리어 직후라 m_memory가 NULL이고, Core 1은 icfg=0에 벡터도 없어
폴트합니다. c1_alive는 1로 남고 모든 push가 50 ms 타임아웃을 물며 WDT는 계속 먹여져
리셋도 없이 패널만 영구 정지했습니다. → Core 1 기상 전에 메일박스를 0으로 클리어.
• Core 1 사망 미감지: 부팅 probe가 pingpong 완료 불일치/기동 실패 시 c1_alive = 0으로 내려
기존 Core 0 직접 렌더 경로로 자동 폴백합니다.
• Core 1 스택 2 KB 무감시: 인터럽트가 꺼져 있어 TIMER5 sp 샘플러가 못 보고 가드 밴드도 없습니다.
probe가 스택 바닥을 카나리로 칠하고 pv_c1_wait_done()이 작업 완료 직후 여유를 검사해,
512 B 미만이면 Core 0 렌더로 폴백합니다(부팅 화면 C1 TICKS:xxxxx Snnn에 표시).
• p8_stop_cart() 해체 비직렬화: Lua 상태/VRAM을 해체하기 전에 진행 중인 Core 1 렌더를
기다립니다.

실기에서 잡은 결함: 카나리 표시가 반전돼 있었습니다(소모량을 여유로 오독). 그래서 정상 상태
(Core 1 스택 사용 100 B)를 위험으로 오판해 AMP가 스스로 꺼졌습니다(C1: NOT RESPONDING).
수정 후 두 기기 모두 C1: OK, PINGPONG: 10000/10000, 스택 여유 S1692 로 동작합니다.
참고로 반전된 빌드에서 폴백 경로는 실제로 기기를 살려냈습니다 — AMP가 꺼진 상태에서도 멈추지 않고
카트를 계속 돌렸습니다.

문서: docs/DUAL_CORE_AMP.md §4가 존재하지 않는 필드(busy/skips/active_buf)를 설명하고
있었습니다. 실제 fm1_c1_probe_t와 직렬화 계약(모든 kick은 Core 0의 대기를 통과)으로 다시 썼고,
§5.4에 안전망, §6에는 0.00 ms/60+ FPS의 참인 조건을 한정해 적었습니다.

검증

• 게이트: 태그 12822759, 아레나 415,696 B(SMK-37 Pro) / 416,848 B(FM-1) 불변, build_sim 패리티 통과,
verify_final.py all checks passed
• 실기: FM-1 및 SMK-37 Pro(스톡 v016에서 설치) 모두 정상 부팅·카트 구동·오디오 클리핑 없음