In-House
수주 업무 바깥에서
만든 것들
고객사 일은 계약 때문에 자세히 적을 수 없습니다. 대신 저희가 직접 만든 것들을 적습니다. 어느 수준까지 내려가서 다루는지는 이쪽이 더 잘 보여줍니다.
아래 프로그램은 배포하지 않습니다. 작업 내용에 대한 설명입니다.
01 / Bare-metal Emulator
STM32에서 돌아가는 Apple IIe
STM32F7508-DK 보드 위에서 Apple IIe Enhanced를 재현했습니다. HAL을 쓰지 않은 베어메탈 구현이고, 디스크 게임이 실제로 돕니다.
- CPU
- 6502 코어 직접 구현
- 화면
- 40열 텍스트 / LORES / HIRES — 아티팩트 컬러 재현
- 디스크
- Disk II 슬롯 6 (읽기 전용), DOS 인터리브 니블화
- 소리
- 스피커 토글 오디오, 코덱 경유 헤드폰 출력
- 입력
- 호스트 키보드 연결, 제어문자·방향키 전달
풀어야 했던 문제: 내부 플래시 64KB
이 MCU의 내부 플래시는 64KB뿐입니다. ROM과 디스크 이미지, 에뮬레이션 코드를 한 번에 넣을 수 없어 2단계 부팅으로 갔습니다. 1단계는 내부 플래시에서 클럭을 올리고 외부 QSPI 플래시를 메모리 맵 모드로 승격시킨 뒤, 2단계 본체로 점프합니다. QSPI 승격은 칩 제조사마다 절차가 달라 공통 동작을 먼저 확보한 뒤 분기하도록 했습니다.
02 / Bare-metal Emulator
같은 보드에서 MSX2
부팅 메뉴에서 고르면 MSX2로 올라옵니다. 한 플랫폼에 두 기종을 올리기 위해 외부 QSPI 구성을 전제로 설계했습니다.
- Z80
- zexdoc / zexall 전 항목 통과. 인터럽트 · HALT · M1 대기 별도 검증
- V9938
- 스크린 0 · 1 · 2 · 4~8 렌더, 스프라이트 모드 1 · 2, 블리터 32종
- PSG
- 사각파 3채널 + 잡음 + 포락선
- 메모리
- 기본 슬롯 4개 + 확장 슬롯, 메모리 매퍼 512KB
- 카트리지
- 평면 / Konami / Konami SCC / ASCII8 / ASCII16 매퍼
검증을 어떻게 했는가
CPU는 눈으로 보고 맞다고 할 수 없는 영역입니다. 그래서 Z80 표준 검증 스위트인 zexdoc과 zexall을 전 항목 통과시키는 것을 기준으로 삼았습니다. 플래그 하나가 틀려도 통과하지 못합니다. 프레임당 소요 시간도 구간별로 실측해 실기 속도와 대조했습니다.
아직 없는 것도 적어 둡니다 — 디스크(FDC), SCC 음원, MSX-MUSIC, 80열 텍스트, 멀티컬러 모드. 매퍼는 ROM 크기로만 추정해서 일부 게임을 틀리게 고를 수 있습니다.
03 / Desktop Tool
gVue — Gerber 뷰어
PCB 제조 데이터를 열어 보는 도구를 직접 만들었습니다. Rust로 다시 쓴 크로스플랫폼 버전이 현재 베타입니다.
- 구현
- Rust + egui, macOS · Windows 동작
- 파싱
- Gerber RS-274X, NC Drill(Excellon)
- 레이어
- 동시 표시, 가시성 토글, 순서 변경, 레이어 간 비교
- 표시
- Solid / Outline / CenterLine, 패드와 배선을 밝기로 구분
- 자동화
- AI 에이전트가 파일을 열고 레이어를 비교 · 검증할 수 있는 인터페이스 제공
왜 직접 만들었는가
제조 데이터를 넘기기 전 확인하는 일은 매번 반복됩니다. 상용 뷰어는 무겁고, 레이어를 겹쳐 보며 "이 패드가 저 레이어의 홀과 맞는가"를 빠르게 확인하는 용도로는 과합니다. 쓰던 도구를 직접 만들다 보니 PCB 데이터 포맷을 바닥부터 다루게 됐고, 그 경험이 아트워크 검토에 그대로 쓰입니다.