2P by neo 6달전 | favorite | 댓글 1개

6502 CPU를 6502 CPU로 가상화하는 6o6 소개 (그리고 The Incredible KIMplement 1.0 릴리즈)

  • 저자가 20년 동안 간헐적으로 작업해온 버킷리스트 프로젝트 중 하나인 "The Incredible KIMplement"의 1.0 버전을 공식 릴리즈함
  • The Incredible KIMplement는 1MHz, 1KB 메모리의 MOS/Commodore KIM-1 6502 기반 싱글보드 컴퓨터를 에뮬레이션하는 프로그램
    • Commodore 64에서 동작하며 KIM-1의 TTY 지원 기능과 16KB 확장 RAM을 제공
  • 더 중요한 것은 6o6(6502-on-6502)이라는 완전 가상화된 NMOS 6502 CPU를 6502 CPU에서 구현했다는 점
    • 게스트 코드 실행을 완벽히 제어하고 메모리 액세스를 추상화해서 가상 메모리에서도 실행 가능
    • 기능 테스트를 통과할 뿐 아니라 자기 자신을 여러번 가상화하는 것도 가능

6502 가상화의 동기와 설계

  • 어린 시절 "궁극의 운영체제"를 만들고 싶어했지만, 대부분 원시적인 데모 수준에 그침
  • 멀티유저 시스템을 접하면서 사용자들이 문제가 있는 코드를 실행할 수 있다는 것을 깨달음
    • 효과적인 시스템은 코드로 인한 문제를 막거나 대응할 수 있어야 함
  • 6502 CPU의 한계 때문에 하드웨어만으로는 이를 완벽히 해결하기 어려움
    • 소프트웨어로 해결하기로 함
  • 6o6 가상머신(VM)은 게스트 코드를 실행하고 메모리 액세스를 완전히 추상화
    • Harness는 게스트 메모리와 하드웨어에 대한 VM의 인터페이스 역할
    • 커널은 VM을 실행하고 예외 상황을 처리
  • ALU 연산을 호스트 6502 CPU에서 직접 수행함으로써 정확성과 성능을 확보
  • 인라인 메모리 접근, Instruction Fusion 등으로 성능 최적화

6o6의 검증과 테스트

  • Klaus Dormann의 기능 테스트 스위트를 사용해 정확성 검증
  • lib6502 에뮬레이터를 사용해 성능 측정
    • 인라인 메모리 접근과 Instruction Fusion 적용으로 명령어 실행 횟수를 36.5% 줄임
  • Commodore 64와 Apple IIe에서 동작하는 데모 프로그램 4개 포함
    • Hello World
    • 자기 자신을 여러번 가상화
    • 2개의 독립적인 태스크 간 전환
    • geoRAM 카트리지를 사용해 64KB 주소 공간 에뮬레이션

6o6의 잠재적 활용 분야와 추가 개선 아이디어

  • 사용자 정의 운영체제 개발
  • 안전한 다운로드 코드 실행 환경
    • Gopher 클라이언트의 동적 코드 실행 등
  • NMOS 6502 시스템에서 최소한의 하드웨어로 가상화 지원
  • ROM에서 동작할 수 있도록 리팩토링
  • CMOS 65C02 명령어 에뮬레이션
  • 추가적인 코드 최적화

GN⁺의 의견

  • 6o6은 훌륭한 소프트웨어 가상화 솔루션으로 보임. 특히 한정된 하드웨어 자원을 가진 6502 시스템에서 유용할 듯함.

  • Harness와 커널의 모듈화된 구조가 인상적임. 다양한 하드웨어 지원과 유연성 확보에 도움이 될 것 같음.

  • 에뮬레이터 성능 최적화를 위해 적용한 기법들(인라인 메모리 접근, Instruction Fusion 등)이 흥미로움. 다른 에뮬레이터 프로젝트에도 적용해볼만한 아이디어라고 생각함.

  • 실제 하드웨어(Commodore 64, Apple II)와 geoRAM 같은 확장 카트리지에서의 동작을 시연한 것도 인상적. 소프트웨어 호환성과 활용성을 잘 보여줌.

  • 완성도 높은 프로젝트인 만큼, 소스 코드 공개를 통해 관련 커뮤니티에 기여할 수 있을 것 같음. 앞으로의 개선과 활용 사례가 기대됨.

Hacker News 의견

요약:

  • 작성자가 20년 동안 간헐적으로 작업해온 버킷 리스트 프로젝트 중 첫 번째 완성작을 공개함. 상당히 인상적인 버킷 리스트로 보임.
  • 단순하고 제한적인 50년 된 6502 아키텍처를 새로운 한계로 확장하는 것은 항상 흥미로움. 6502 코어는 여전히 초저가 대량 시장을 겨냥한 일부 SoC에서 발견됨.
  • 작성자가 6502 어셈블리를 처음 배웠을 때의 추억을 되살려줌. 당시 "The Visual Computer"라는 책이 플로피 디스크에 에뮬레이터와 함께 제공되었는데 큰 깨달음을 주었음. 책의 PDF는 찾았지만 플로피의 소프트웨어는 현존 여부 불확실.
  • 게시물 본문에서 진짜 핵심은 Commodore 64가 매우 다른 6502 기반 시스템을 에뮬레이트하는 방법이라고 함. 이를 "6o6" 또는 "6502-on-6502"라고 부르며, 6502 CPU에서 실행되는 완전한 가상화된 소프트웨어 NMOS 6502 CPU임. 이는 오픈소스로 공개됨.
  • 게스트 코드 실행을 완전히 제어할 수 있고, 문서화되지 않은 opcodes와 잼 opcodes를 트래핑할 수 있으며, 모든 메모리 액세스를 완전히 추상화하여 주소 재매핑, 불법 읽기/쓰기 차단, 완전한 가상 메모리 실행이 가능함.
  • 기능 테스트를 통과할 뿐만 아니라 자기 자신을 가상화하는 자기 자신을 가상화할 만큼 완성도가 높음.
  • 6502 관점뿐만 아니라 모든 관점에서 놀라운 작업임.
  • "The Zilog Z80 has a Protected Mode" 영상도 연상시켰으나 해당 영상은 HN에 게시되었을 때 토론이 없었음.
  • 글을 읽으면서 소름이 돋을 정도로 감동적이었음. 몇 번이고 다시 읽어야 할 것 같음.