아두이노 기반 아마가 플로피 디스크 리더 - 저렴한 오픈소스 데이터 복구 솔루션
필요한 부품 및 준비물
| 부품 |
수량 |
비고 |
| 아두이노 우노 (또는 프로 미니) |
1 |
ATmega328P 기반 보드 |
| 플로피 디스크 드라이브 (3.5인치, PC용) |
1 |
구형 PC에서 적출 가능 |
| IDE 플로피 케이블 (34핀) |
1 |
드라이브 연결용 |
| 브레드보드 |
1 |
프로토타이핑용 |
| 점퍼 와이어 |
1세트 |
연결용 |
| 1kΩ 저항 |
1 |
풀업용 |
| 브레드보드 전원 모듈 (5V/3.3V) |
1 |
드라이브 5V 전원 공급용 |
| SN74HCT14N 헥스 슈미트 트리거 (선택) |
1 |
신호 정제용 (시도 6에서 사용) |
소프트웨어 및 도구
프로젝트 배경 및 동기
저자(Rob Smith)는 어린 시절 아마가 500+로 프로그래밍을 시작했으며, 수십 장의 플로피 디스크에 소중한 데이터와 추억이 담겨 있었습니다. 하지만 작동하지 않는 하드웨어와 비싼 상용 솔루션(KryoFlux, Catweasel 등), 그리고 대부분 폐쇄 소스인 상황에서 직접 저렴하고 개방적인 복구 장치를 만들기로 결심했습니다.
기술적 도전과 해결 과정
아마가 플로피 디스크 포맷 이해
- 더블 덴시티(DD): 300 RPM 회전
- 80 트랙, 트랙당 11 섹터, 섹터당 512바이트
- MFM(Modified Frequency Modulation) 인코딩 사용
- 데이터 전송률: 500kbps (아두이노 16MHz에서 처리하기 벅참)
시도 1: 시프트 레지스터 병렬 변환 (실패)
두 개의 74HC594 시프트 레지스터로 8비트씩 병렬 변환하여 샘플링 주파수 1/8로 낮추려 시도. USART 2Mbps로 전송했으나 동기화 문제로 의미 있는 데이터 획득 실패.
시도 2: 인터럽트 기반 펄스 감지 (실패)
500kHz 타이머 인터럽트에서 펄스 감지 시도. digitalRead() 오버헤드와 ISR 진입/복귀 비용으로 타이밍 미준수. 포트 직접 접근으로도 부족.
시도 3: 하드웨어 카운터 활용 (돌파구)
ATmega328의 Timer0을 외부 펄스 카운터로 구성. 500kHz 타이머(Timer2) 오버플로 시 카운터 값 확인하여 펄스 유무 판별. 첫 펄스 감지 시 타이머 리셋으로 동기화 시작.
시도 4: 위상 고정 루프(PLL) 방식 동기화 (성공)
타이머 카운터 값을 펄스 감지 시점에 강제로 재설정하여 클럭을 신호에 동기화. 오실로스코프로 확인 결과 완벽한 동기화 달성. 하지만 체크섬 오류 발생.
시도 5: 네이키드 ISR로 지터 최소화 (개선)
INT0 외부 인터럽트에 ISR_NAKED 속성 적용, 어셈블리 레벨에서 5명령어(0.3125μs)로 타이머 재동기화 구현. 읽기 안정성 향상.
시도 6: 슈미트 트리거 추가 (보완)
SN74HCT14N으로 노이즈 제거 시도했으나 큰 차이 없음. 기존 방식 유지.
시도 7: MFM 디코딩 규칙 기반 오류 보정
- 연속된 두 개의 '1' 비트 불가 규칙 적용
- 연속된 네 개의 '0' 비트 불가 규칙 적용
- 디코딩 단계에서 오류 패턴 탐지 및 보정
MFM 디코딩 및 ADF 파일 생성
- 동기 워드
0x4489 (또는 0x2AAAAAAA44894489) 검색으로 섹터 시작 위치 찾기
- 헤더/데이터 필드 읽기 및 CRC 체크섬 검증
- 유효한 11섹터 모두 읽힐 때까지 트랙 재시도
- 섹터 순서대로 512바이트씩 기록하여 .ADF 파일 생성
- ADFOpus 등 에뮬레이터 도구로 검증
향후 계획 (V2 이후)
- FDI 포맷 지원: 비표준/카피 프로텍션 디스크 대응을 위한 범용 포맷
- 쓰기 기능 추가: ADF/FDI → 실물 디스크 복원
- 타 플랫폼 지원: PC, C64, ST 등 타 포맷 확장
- 전체 오픈소스: GNU GPL v3로 공개, 커뮤니티 기여 환영
핵심 기술 포인트 요약
| 기술 요소 |
구현 방식 |
| 고속 샘플링 |
Timer0 외부 클럭 카운터 + Timer2 500kHz 기준 클럭 |
| 동기화 |
펄스 감지 시 Timer2 카운터 강제 리셋 (PLL 유사) |
| 인터럽트 최적화 |
ISR_NAKED + 인라인 어셈블리로 5사이클 달성 |
| 데이터 전송 |
USART 2Mbps (FTDI 브레이크아웃 보드 활용) |
| 오류 처리 |
체크섬 기반 재시도 + MFM 규칙 기반 소프트 보정 |
마치며
이 프로젝트는 레거시 미디어 보존을 위한 메이커의 열정과 저수준 하드웨어 제어 기술이 결합된 훌륭한 사례입니다. 아두이노라는 접근성 높은 플랫폼으로 전문 장비 수준의 플로피 디스크 읽기를 구현했으며, 모든 소스가 공개되어 있어 누구나 개선하고 확장할 수 있습니다. 레트로 컴퓨팅 애호가와 데이터 보존가에게 큰 가치를 제공합니다.