Firmware

picovave

Loud90/100

PICO-8 (femto8) firmware for the M-Vave SMK-37 Pro, and the browser simulator built from the same sources

picovave is custom firmware for the M-VAVE SMK-37 Pro and M-VAVE SMK-37 Elite, by @acidsound. Open source under GPL-3.0, latest release 12822759 (October 2026), 3 stars on GitHub.

forM-VAVE SMK-37 Pro,M-VAVE SMK-37 Elite·by@acidsound

Unclaimed. Is this yours? Sign in with GitHub as @acidsound to claim it.

Downloads
0
Stars
3
Forks
0
Commits
37
Last commit
Download 12822759

picovave-fm1.fwsc· 596 KB· +2 files

GPL-3.0· acidsound/picovave·acidsound.github.io/picovave/·downloads come from the creator’s GitHub releases

37
Commits
9
Releases
37 commits and 9 releases in the last year
Activity · last 12 months
9 releases
  1. 12822759picovave 12822759 — 듀얼코어 AMP 안전망 강화 (FM-1 & SMK-37 Pro)Latest3 files

    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에서 설치) 모두 정상 부팅·카트 구동·오디오 클리핑 없음

  2. 9b87fd08picovave 9b87fd08 — FM-1 부팅 프리즈 해결 및 빌드 태그 표기3 files

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

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

    설치물 (Firmware Packages)

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


    주요 변경 사항

    • FM-1 부팅 프리즈(Boot Freeze) 원인 해결: • 초기 플래시 리소스 정리 시점 보정: 부팅 초기 OTA/플래시 정리 작업(ota_boot_cleanup())이 엔진 루프 진입(picovave_boot()) 이전에 안전하게 완료되도록 순서 재조정. • 첫 부팅 프레임 렌더 동기화: p8_device_wait_render()를 도입하여 Core 1(AMP 렌더러)이 화면 부트 마크를 온전히 전송할 때까지 안전하게 대기한 뒤 PICO-8 메인 루프로 진입. • 인터럽트 조기 활성화 방지: fm1_flash.h 및 fm1_input.h의 irq_save() / irq_restore()에서 무조건적인 sti 대신 이전 icfg 인터럽트 마스크 상태를 안전하게 복원하도록 수정하여 인터럽트 핸들러가 미완성 상태에서 트리거되는 결함 차단.

    • 빌드 태그 표기 및 검증 편의성 강화: • FM-1 Identity 빌드 태그 응답: SMK-37 Pro에 이어 FM-1에서도 Identity SysEx 응답에 빌드 태그(9b87fd08)를 포함하도록 활성화. • 웹 시뮬레이터 배지 추가: 웹 UI 헤더, 디바이스 박스, 다운로드 링크에 현재 펌웨어 빌드 태그 배지 표시 및 Web MIDI 스캔 시 연결된 실기기의 펌웨어 태그를 직관적으로 확인 가능. • 도구 개선: platform/tools/fm1_install.py 및 tools/upload_cart.py에 --wait 옵션을 추가하여 장치 재부팅 및 연결 시 자동 대기 지원.

    • 실기기 검증 완료: • 실제 FM-1 기기에서 OTA 플래싱 완료 및 정상 부팅 확인. • USB-MIDI를 통한 PICO-8 카트 업로드(tools/upload_cart.py) 100% 정상 전송 및 실시간 구동 검증 완료. • 건반 미세 점등(Dim Glow) 가이드 및 입력 시 100% 밝기 반응(옵션 B) 정상 동작 확인. • tools/verify_final.py 238개 전체 하드웨어/소프트웨어 무결성 검증 100% 통과.

  3. c924d336picovave c924d336 — 키 및 패드 LED 가이드/반응 피드백 (FM-1 & SMK-37 Pro)3 files

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

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

    설치물 (Firmware Packages)

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

    주요 변경 사항

    • SMK-37 Pro: 16 패드 WS2812 RGB LED 키 입력 가이드 및 시각 피드백:
      • PICO-8 조작 패드(방향키: 패드 1, 8, 9, 10 / 액션: 패드 14, 15 / Pause: 패드 13)에 유휴 상태 시 소프트 화이트(RGB(40, 40, 40)) LED가 상시 점등되어 게임 조작 가이드 역할 수행.
      • 해당 패드를 누르면 주홍색/앰버(RGB(255, 80, 0))로 색상이 즉시 반응하며, 떼면 다시 소프트 화이트로 복귀.
      • 미사용 패드(패드 0, 2..7, 11, 12)는 OFF(RGB(0, 0, 0))로 소등되어 깔끔한 시인성 제공.
      • SPI1 버스 충돌 방지: 패드 LED 업데이트 시 Core 1의 ST7789 LCD SPI DMA 상태(pv_c1_wait_done())와 안전하게 동기화.
    • FM-1: 건반 & 버튼 LED 가이드 (옵션 B) 및 입력 반응:
      • PICO-8 조작에 사용되는 건반(D-pad: F3, G3, G#3, A3, A#3, B3, C4 / 액션: E5, G5)과 기능 버튼(Play, Home)에 미세 점등(Dim Glow) 랜드마크 가이드 적용 (10 kHz TIMER4 펄스 구동). 어두운 환경에서도 조작 위치를 즉시 식별 가능.
      • 건반 및 버튼 입력 시 100% 풀 밝기로 즉시 점등되며 릴리스 시 가이드 상태(미세 점등 또는 소등)로 복귀.
    • Lua 힙 아레나 불변식 엄격 준수 (0 바이트 오차):
      • SMK-37 Pro 415,696 B / FM-1 416,848 B 메모리 아레나 불변식 정확히 유지 (pv_ring_bss_pad 3388 B 보정).
      • tools/verify_final.py 197개 이상 전수 하드웨어/소프트웨어 불변식 검증 100% 통과.
  4. da881124picovave da8811243 files

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

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

    설치물 (Firmware Packages)

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

    주요 변경 사항

    • USB 통신 락업 및 응답 없음 버그 해결 (usb.c):
      • Felucca 신스에서 상속된 ep1_take 백프레셔 큐 검사 제거.
      • 외부 웹페이지(M-Vave 공식 워크벤치, Chrome Web MIDI 포트 검색 등)에서 MIDI 채널 메시지(CC, Active Sensing 등)가 40개 이상 유입되어도 USB RX FIFO가 영구 차단(NAK)되지 않도록 하여, OTA/SysEx 핸드셰이크 및 플래싱 세션이 절대 멈추지 않도록 수정.
    • 친화적인 기기별 USB-MIDI 포트 네이밍:
      • FM-1: 앱 모드 FM-1 (picovave), 로더 모드 FM-1 Update (picovave)
      • SMK-37 Pro: 앱 모드 SMK-37 Pro (picovave), 로더 모드 SMK-37 Pro Update (picovave)
      • 공식 워크벤치(open.m-vave.com), SLOOP 인스톨러, PICOVAVE Pages 모두에서 기본 디바이스 모델명으로 자동 인식 및 상호 호환.
    • UBOOT 복구 툴셋 커스텀 패키지 지원 (--pkg):
      • tools/recover_fm1.py 및 tools/recover_smk37.py에 --pkg <path.fwsc> 인자 추가.
      • 공식 순정 펌웨어(FM-1.fwsc, FM-1_015.fwsc, SMK-37 Pro_016.fwsc 등)나 임의의 패키지에서 앱 영역(0x4000..0x92FFF / 0x9CFFF)을 즉석에서 자동 추출하여 플래시 헤드(0x00000-0x03FFF) 및 하드웨어 캘리브레이션 손상 없이 100% 안전하게 원복 가능.
    • 메모리 아레나 불변식 준수 (0 바이트 오차):
      • SMK-37 Pro 415,696 B / FM-1 416,848 B 아레나 크기 100% 동일 유지.
      • tools/verify_final.py 197개 이상 전수 검증 통과.
  5. 8865204bpicovave 8865204b — AC791N 듀얼코어 AMP 그래픽 가속 & 복구 툴 (FM-1 / SMK-37 Pro)3 files

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

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

    설치물 (Firmware Packages)

    • FM-1용: picovave-fm1.fwsc — 610,201 B
      • sha256: 6cbec488021124dec47524797eadcb756076e95fda8a0d5df9ff9b432233650d
      • 대상 기기: M-Vave FM-1 (FM-1_900)
    • SMK-37 Pro용: picovave-smk37.fwsc (또는 picovave.fwsc) — 651,355 B
      • sha256: f286a19ca700def76a8ad697d2f814393bbeec95dad5a535f6e5d70b3493e81a
      • 대상 기기: M-Vave SMK-37 Pro (SMK-37 Pro_700)

    주요 변경 사항

    • AC791N 듀얼코어 AMP (비대칭 멀티프로세싱) 그래픽 파이프라인 전면 가속:
      • Core 0 (메인 코어): PICO-8 Lua VM 연산, 오디오 신시사이저/ALNK0 믹서(단일 작성자 원칙 엄수), 10kHz 타이머 매트릭스 입력 스캔 및 USB MIDI 통신 전담. 4bpp 8KB VRAM 그리기 직후 Core 1에 비동기 디스패치(p8_device_dispatch_render())하여 메인 루프 지연 시간 0ms 실현.
      • Core 1 (그래픽 가속 전용 코어): 4bpp ➔ RGB565 LUT 변환, 240행 더티 행 해시 판별, 128x128 ➔ 240x240 하드웨어 업스케일링 및 ST7789 SPI1 DMA 스트리밍 전담.
      • Core 1 독립 스택 초기화 (crt0.S의 _c1_ustack_init, 2048 B 버퍼 및 256 B positive headroom ABI 여유 확보).
      • Core 1 셀프 데드락 방지 가드(pv_c1_wait_done() 내 fm1_core_id() != 0 즉시 반환 및 50ms 와치독 타임아웃) 및 오디오 믹서 침범 원천 차단.
    • 실기 검증 완료 (Baba Is You 데이크 등):
      • 씬 전환 및 텍스트 렌더링 부하가 높은 카트(baba_demake-9)를 포함한 전체 갤러리 카트가 실기에서 크래시 없이 30 FPS 안정 구동 확인.
    • 부팅 시간 최적화:
      • 기존 2,000ms 부트 스플래시 지연을 400ms로 최적화하여 획기적으로 빠른 부팅 속도 달성.
    • 네이티브 UBOOT 복구 툴셋 제공:
      • macOS, Linux, Windows 환경에서 원클릭으로 작동하는 USB SCSI UBOOT 복구 스크립트(tools/recover_fm1.py, tools/recover_smk37.py) 및 docs/RECOVERY.md 가이드 추가.
    • 메모리 아레나 불변식 준수 (0 바이트 오차):
      • SMK-37 Pro 415,696 B / FM-1 416,848 B 아레나 크기 100% 동일 유지.
      • tools/verify_final.py 197개 이상 전수 검증 통과.
  6. 8ef886a8picovave 8ef886a8 — 마스터 볼륨 구현 (FM-1 & SMK-37 Pro)3 files

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

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

    설치물 (Firmware Packages)

    • SMK-37 Pro용: picovave-smk37.fwsc (또는 picovave.fwsc) — 651,271 B • sha256: ec2782c9f5c6c33d075dca7ce069333367208b1667974811e069270362f5acd5 • 대상 기기: M-Vave SMK-37 Pro (SMK-37 Pro_700) • FM-1용: picovave-fm1.fwsc — 610,115 B • sha256: beb8f9d0c2faf74367272568025771f35bf9088cea7c53439d221d683b749fe3 • 대상 기기: M-Vave FM-1 (FM-1_900)


    주요 변경 사항

    • FM-1 마스터 볼륨 (MASTER 노브) 연동: • FM-1의 전면 MASTER 볼륨 노브는 하드웨어 앰프 직결이 아닌 SoC PB6 (SARADC 채널 4) 포텐셔미터입니다. • HAL 드라이버 fm1_adc.h 를 추가하고 프레임 루프에서 논블로킹 방식으로 PB6 전압을 샘플링합니다. • 청각 특성에 맞춘 자승 법칙(Square-law / Audio taper) 곡선 및 IIR 지퍼 노이즈 스무딩 필터를 적용하여 부드럽고 자연스럽게 볼륨이 조절됩니다. • 최소 회전 시 완전 음소거(Mute), 최대 회전 시 100% 게인 클램핑. • SMK-37 Pro 마스터 볼륨 (Knob 1 엔코더) 연동: • SMK-37 Pro 전면 상단의 Knob 1 (Encoder 0) 으로 마스터 볼륨을 32단계(스텝당 128단위)로 가감 제어합니다. • 초경량 오디오 DSP & FPS 0% 영향: • ALNK0 I2S DMA ISR에서 단일 사이클 32비트 하드웨어 정수 곱셈(int32_t)으로 게인을 적용하여 CPU 사용률 0.027% 미만, 게임 프레임레이트(30 FPS) 저하 전혀 없음. • 메모리 아레나 불변식 준수 (0 바이트 드리프트): • 볼륨 변수를 .noinit 섹션에 배치하여 .data/.bss 크기 변화가 전혀 없으며, SMK-37 Pro의 415,696 B 아레나 불변식을 100% 동일하게 유지합니다. • 카트 리로드/업로드 등 소프트 리부트 시에도 설정한 볼륨이 유지됩니다.

  7. b26ac73apicovave b26ac73a — SMK-37 Pro & FM-1 듀얼 타겟 릴리스3 files

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

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

    설치물 (Firmware Packages)

    • SMK-37 Pro용: picovave-smk37.fwsc (또는 picovave.fwsc) — 651,271 B • sha256: 92204cfadc4e3aed1323a3f52affd1b46927ac48bf0ff587c3de9400e316a2d2 • 대상 기기: M-Vave SMK-37 Pro (SMK-37 Pro_700) • FM-1용: picovave-fm1.fwsc — 610,115 B • sha256: 5f2999c7a0dfdcebf3294aa1a0e0913c6680af45c2b08439fb05a0e5fa01c52b • 대상 기기: M-Vave FM-1 (FM-1_900)

    패키지가 쓰는 플래시는 앱 슬롯뿐입니다. VM/SLOOP 카트 스토어 · BTIF · USR · key_mac 등 기존 설정 영역은 건드리지 않습니다.

    설치 / 복구 — docs/RECOVERY.md (jl-uboot-tool 또는 USB-OTA) 브라우저에서 바로 플래싱 — https://acidsound.github.io/picovave/


    주요 변경 사항

    • M-Vave FM-1 포팅 추가: • FM-1 11x6 다이오드 매트릭스 및 로터리 엔코더 HAL 입력 드라이버(fm1_input.h) 추가. • 27개 건반(F3..G5)을 37건반 인덱스(5..31)로 5비트 시프트 오프셋 매핑하여 통일된 인풋 처리. • FM-1 플래시 맵(FL_HEAD_HI, FL_APP_LO, FL_APP_HI) 정합성 및 XIP ISR 스택 가드 연동. • 조작 버튼 리매핑 (E5 / G5): • PICO-8 O 버튼: E5 (건반 28번) 기본 매핑 (SMK-37 Pro A5(33번) 및 패드 15 호환 유지). • PICO-8 X 버튼: G5 (건반 31번, 최상단 흰 건반) 기본 매핑 (SMK-37 Pro C6(36번) 및 패드 14 호환 유지). • PICO-8 Start/Pause 버튼: F5/F#5 (건반 29/30번) 또는 FM-1 PLAY/HOME 버튼 / 패드 13. • 27건반 물리적 배치 내에서 손을 편안하게 두고 플레이 가능. • 듀얼 타겟 빌드 파이프라인 구축: • python3 tools/build_picovave.py --board all 단일 명령으로 SMK-37 Pro 및 FM-1 펌웨어/로더 동시 빌드 및 패키징. • 기기별 독립 아레나 확보: SMK-37 Pro 415,696 B, FM-1 416,832 B (불변식 준수). • 웹 시뮬레이터 및 Web MIDI 플래셔 개선: • SMK-37 Pro용과 FM-1용 패키지 분리 다운로드 링크 제공. • Web MIDI를 통해 브라우저에서 SMK-37 Pro 및 FM-1 기기로 직접 선택 플래싱 지원.

  8. 52257541picovave 52257541 — SMK-37 Pro PICO-8 펌웨어1 file

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

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

    설치물

    • picovave-52257541.fwsc — 651,271 B
    • sha256: 41d658aefbfd66a816f72dc667aba01e80588e3918923b097d08ace13b93b43d
    • 패키지가 쓰는 플래시는 앱 슬롯(0x04000..0x9CFFF)뿐입니다 — VM/SLOOP 카트 스토어 · BTIF · USR · key_mac 은 건드리지 않습니다.

    설치 / 복구 — docs/RECOVERY.md (jl-uboot-tool 또는 USB-OTA) 브라우저에서 바로 플래싱 — https://acidsound.github.io/picovave/

    이번 변경

    • 워치독 안정성 & 32초 타임아웃:
      • 하드웨어 워치독 타임아웃을 ~8초(0x0Du)에서 최댓값인 ~32초(0x0Fu)로 상향.
      • vTaskDelay() 내 20ms 청크별 워치독 피딩 및 p8_post_flip() 프레임 경계 워치독 피딩 추가 (fadeout() 루프 지속 시 리셋 방지).
      • malloc() 할당 주기마다 워치독 피딩을 적용하여 160MHz pi32v2 CPU 환경에서 절차적 맵 생성(mapgen/genfloor) 등 장시간 순수 연산 루프가 실행되어도 워치독 리셋 없이 정상 완료(Bow & Mobs 실기 클리어 검증 완료).
    • 메모리 할당기(alloc.c) 피크 스파이크 억제:
      • realloc 축소 시 잔여 바이트를 즉시 프리 블록으로 분할 반납(Split-on-shrink).
      • realloc 확장 시 선행/후행 블록과의 제자리 양방향 병합(Coalescing)을 지원하여 대형 테이블 재할당 시 더블 얼로케이션 피크 스파이크 방지.
      • 가비지 컬렉터 파라미터(LUAI_GCPAUSE=100, LUAI_GCMUL=300) 튜닝으로 414 KB 기기 아레나에서의 메모리 반환 속도 극대화.
    • 디스플레이 및 30fps 프레임 버짓 달성:
      • ST7789 패널 SPI 클럭을 60 MHz(LCD_BAUD=0u)로 고속화하여 풀프레임 전송 시간을 30.7 ms에서 15.3 ms로 단축.
      • 더티 행(Dirty rows) 기반 부분 갱신 및 SPI 더블 버퍼링 적용으로 다중 스프라이트 및 3D 풀스크린 씬에서의 프레임 드랍 해소.
      • 카트 언로드/리셋 시 프레임버퍼 및 화면 클리어 처리로 카트 전환 시 잔상 제거.
    • 바이트코드(PVB1) 지원 및 웹 시뮬레이터 연동:
      • 웹 페이지에서 Lua 바이트코드를 사전 컴파일하여 업로드함으로써 기기 부팅 시 메모리/CPU 부담 절감.
      • 웹 릴리스(GitHub Pages)에 52257541 펌웨어 및 새 시뮬레이터 WASM 반영.

    실기 검증

    • SMK-37 Pro 실기 플래싱 및 bownmobs-0 1층 계단 도달 후 2층 진입 및 최종 클리어 완료.
    • tools/verify_final.py 80여 개 무결성/아레나(415,696 B)/할당기 스트레스 검사 전수 통과 (all checks passed).
  9. 993b2146picovave 993b2146 — SMK-37 Pro PICO-8 펌웨어1 file

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

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

    설치물

    • picovave-993b2146.fwsc — 651,271 B
    • sha256 3cedb426693f6ef4e6e568f6d57a1168fae98cbfd0571c7d3a33dda952288cec
    • 패키지가 쓰는 플래시는 앱 슬롯(0x04000..0x9CFFF)뿐입니다 — VM/SLOOP 카트 스토어 · BTIF · USR · key_mac 은 건드리지 않습니다.

    설치 / 복구 — docs/RECOVERY.md (jl-uboot-tool 또는 USB-OTA)

    브라우저에서 먼저 — https://acidsound.github.io/picovave/ : 페이지가 실행하는 wasm은 이 패키지와 같은 소스에서 빌드됩니다. .fwsc를 검증해 모델 플래시에 넣어 보고, USB-MIDI로 실기에 그대로 보낼 수 있습니다.

    이번 변경

    • 입력은 일곱 개(D-pad · O · X · Pause). ESC 중단 입력은 제거했습니다 — 이 포팅은 실행 전용이라 돌아갈 콘솔/에디터가 없습니다. Pause는 BUTTON_START → BUTTON_MASK_PAUSE, 카트가 btn(6)으로 읽습니다.
    • 표시 경로: 12 MHz 행별 윈도우 → 30 MHz 프레임당 윈도우 1개.

    상태 — 시뮬레이터/호스트 픽셀 패리티와 패키지 검증(tools/verify_final.py, all checks passed)은 통과했습니다. 실기(하드웨어) 확인은 아직입니다 — docs/HANDOVER.md §0 · §11.