Skip to content

v0.0.149

Choose a tag to compare

@github-actions github-actions released this 11 Aug 18:32
· 127 commits to main since this release

rePIU v0.0.149

이전 릴리스 v0.0.148 이후의 변경입니다. 이번 릴리스는 PIU10 타이틀별 CAT702 구성을
분리하고, 호출 래퍼를 사용하는 포트 I/O와 MP3 feeder에도 주소·바이너리 독립적인 batching을
확장하며, 후속 PIU10 타깃 프로파일 7종을 추가합니다.

TargetProfile과 CAT702

  • TargetProfile::enable_cat702을 PIU10 ISA 보드 capability와 분리했습니다.
  • CAT702이 꺼져도 PIU10 flash, MP3와 DAC는 계속 동작하며, CAT702 data-out은 0이고 직렬
    입력은 무시됩니다. 해당 profile은 <target>.cat702 자산도 요구하지 않습니다.
  • pumpitpc에서 CAT702을 끄면 실제 Lock Error 키 대기 경로로 진입하고, 기본값을 다시
    켜면 같은 지점을 지나 계속 실행됨을 확인했습니다. 이는 profile 설정이 실제 보안 검사
    결과를 제어한다는 회귀 검증입니다.
  • CAT702 transform과 challenge-response 알고리즘은 타이틀별로 보정하지 않았습니다.

호출 래퍼형 포트 I/O 지연 루프

  • 입력 포트 래퍼의 register 보존, port 전달, 상대 call, guest stack 반환 주소와 caller
    loop를 검증한 뒤, 결과를 폐기하는 반복만 일괄 처리합니다.
  • 마지막 반복과 flags 계산은 원본 guest가 수행하며, matcher는 target 이름이나 고정 코드
    주소를 사용하지 않습니다.
  • pumpitpc Release A/B에서 전체 port I/O는 244,970회에서 14,110회로 약 94.2%,
    privileged-instruction 예외는 236,962회에서 7,936회로 약 96.7% 감소했습니다.

호출 래퍼형 PIU10 MP3 feeder

  • 기존 direct OUT DX,AL matcher를 유지하면서 register 보존 byte-output 래퍼와 feeder
    call/return 관계를 검증하는 후순위 matcher를 추가했습니다.
  • source cursor, frame count, ECX, backward loop와 service 조건을 명령 operand에서
    추출하므로 profile, 실행 파일 주소나 해시에 의존하지 않습니다.
  • 감사 계획도 compressed inflight의 0xE00 DEMAND 경계에서 끊어 scalar status polling과
    같은 반환 지점을 보존합니다.
  • 실제 pumpitpc 감사에서 3,700개 segment가 연속 일치했고, 일반 실행은 140,795 byte 중
    136,595 byte(약 97.0%)를 batch 처리하면서 drop과 starvation을 기록하지 않았습니다.

추가 타깃 프로파일

  • 기존 pumpite 뒤에 pumpitpr, pumpitpx, pumpit8, pumpitp2, pumpipx2,
    pumpitp3, pumpipx3을 추가했습니다.
  • 신규 프로파일은 공용 piu_common, CHD mount, JAMMA/YMZ280B, PIU10 ISA와 CAT702 경로를
    사용하며 MP3 시작 지연 기본값은 0 ms입니다.
  • Debug/Release profile probe가 등록 순서, 단일 등록, 경로, ROM-set id와 capability를
    검증합니다.

검증

  • Win32 x86 Debug와 Release 빌드가 성공했습니다.
  • Debug/Release repiu_aot_probe --piu10이 통과했습니다.
  • 신규 7개 로컬 ROM ZIP은 PIU10/CAT702 필수 entry 검증을 통과했습니다.
  • pumpitpc의 일반 실행, batching A/B와 MP3 감사 실행을 완료했습니다.

알려진 제한

  • 저작권이 있는 ROM ZIP과 CHD는 배포하지 않습니다.
  • 신규 7개 타깃은 로컬 CHD가 없어 profile과 ZIP까지만 검증했으며, ISO mount와 guest
    실행은 아직 검증하지 않았습니다.
  • matcher가 wrapper, loop, memory alias 또는 runtime 범위를 완전히 검증하지 못하면 기존
    scalar 경로를 유지합니다.

rePIU v0.0.149

Everything since the previous release, v0.0.148. This release separates per-target CAT702
configuration, extends address- and binary-independent batching to wrapped port I/O and MP3
feeders, and adds seven later PIU10 target profiles.

TargetProfile and CAT702

  • Added TargetProfile::enable_cat702 independently from the PIU10 ISA-board capability.
  • With CAT702 disabled, PIU10 flash, MP3, and DAC remain active; CAT702 data-out is zero, serial
    input is ignored, and <target>.cat702 is not required.
  • Disabling CAT702 for pumpitpc reaches the real Lock Error key-wait path, while restoring the
    default enabled value continues beyond the same point. This verifies that the profile setting
    controls the original security-check result.
  • No title-specific adjustment was made to the CAT702 transform or challenge-response algorithm.

Wrapped port-I/O delay loops

  • The batcher validates input-wrapper register preservation, port transfer, relative call, guest
    stack return address, and caller loop before skipping only iterations whose input is discarded.
  • The original guest executes the final iteration and flag calculation, and matching uses no target
    name or fixed code address.
  • In a same-Release-binary pumpitpc A/B, total port I/O fell about 94.2%, from 244,970 to 14,110,
    and privileged-instruction exceptions fell about 96.7%, from 236,962 to 7,936.

Wrapped PIU10 MP3 feeders

  • The existing direct OUT DX,AL matcher remains first, followed by a matcher that validates a
    register-preserving byte-output wrapper and feeder call/return relationship.
  • Source cursor, frame count, ECX, backward loop, and service conditions come from instruction
    operands, without profile, executable-address, or hash dependencies.
  • Audit plans also stop at the compressed-inflight 0xE00 DEMAND boundary, preserving the same
    return point as scalar status polling.
  • A live pumpitpc audit passed 3,700 consecutive segments. A normal run batched 136,595 of
    140,795 bytes, about 97.0%, with no drops or starvation.

Additional target profiles

  • Added pumpitpr, pumpitpx, pumpit8, pumpitp2, pumpipx2, pumpitp3, and pumpipx3
    immediately after the existing pumpite profile.
  • They use the shared piu_common, CHD mount, JAMMA/YMZ280B, PIU10 ISA, and CAT702 paths, with zero
    milliseconds of default MP3 startup latency.
  • Debug and Release profile probes validate registration order, uniqueness, paths, ROM-set ids,
    and capabilities.

Verification

  • Win32 x86 Debug and Release builds passed.
  • Debug and Release repiu_aot_probe --piu10 passed.
  • Local ROM ZIPs for all seven new targets passed required PIU10/CAT702 entry validation.
  • Live pumpitpc normal execution, batching A/B, and MP3 audit runs completed.

Known limitations

  • Copyrighted ROM ZIP and CHD assets are not distributed.
  • The seven new targets have no local CHDs, so validation currently stops after profile and ZIP
    checks; ISO mounting and guest execution remain unverified.
  • If a wrapper, loop, memory alias, or runtime range cannot be fully validated, the matchers retain
    the existing scalar path.