이유: 아마가 디스크는 기록 방식이 달라 일반 PC로는 읽기/쓰기가 불가능합니다. 이 데이터를 미래를 위해 보존하기 위함입니다.
데이터 쓰기 도전기: 7번의 시도 끝에 성공
시도 1: 소프트웨어 흐름 제어 (실패)
디스크 읽기에 성공한 후 쓰기를 역으로 구현하려 했습니다. ADF 디스크 파일을 MFM 데이터로 변환해 인터페이스로 전송하는 방식이었습니다. 하지만 아두이노의 2KB 램과 1KB EEPROM으로는 한 트랙(14,848바이트)을 저장할 수 없어 1바이트씩 주고받는 양방향 확인 방식을 시도했습니다. 2M 보드레이트로 전송해도 OS 레벨에서 지연이 발생해 전체 쓰기 사이클이 디스크 한 바퀴 도는 시간보다 훨씬 길어져 완전 실패했습니다.
시도 2: 하드웨어 흐름 제어 (CTS/DTR 핀 활용, 실패)
FTDI 브레이크아웃 보드의 CTS(Clear To Send) 핀을 아두이노가 제어해 PC의 데이터 흐름을 조절하는 방식을 시도했습니다. 원형 버퍼 대신 단순하게 '데이터 필요 시 CTS=0, 불필요 시 CTS=1'로 제어했으나, CTS 신호 변경과 실제 데이터 흐름 중단 사이에 타이밍 갭이 있어 바이트 손실이 발생했습니다.
시도 3: 비트 쓰기 사이클 틈새에서 바이트 수신 (부분 성공)
시리얼 인터럽트를 쓰지 않고 비트 쓰기 사이의 CPU 사이클에서 수신 버퍼를 확인해 들어온 바이트를 임시 저장하는 방식을 구현했습니다. 데이터 손실 없이 쓰기 완료했으나, 읽어보면 데이터가 유효하지 않음이 확인되었습니다. 헤드 이동 문제(/WRITE_GATE 핀을 LOW로 유지해야 헤드 이동 가능)도 발견해 수정했습니다.
시도 4: 오실로스코프로 타이밍 분석 (중요한 발견)
0xAA 패턴(완벽한 사각파)을 계속 쓰며 오실로스코프로 파형을 관찰했습니다. 12비트마다 'HIGH' 상태가 지속되는 이상 현상 발견 → 흐름 제어 루프에서 매 바이트마다 대기 시간이 발생함을 확인. 두 번째 바이트 사용 후 CTS를 순간적으로 LOW→HIGH 토글해 다음 바이트가 미리 도착하도록 수정하니 완벽한 사각파 출력 성공.
하지만 실제 ADF 이미지 쓰기 후 읽어보니 섹터를 찾는 데 시간이 오래 걸리고, 실제 아마가(A500+)에서 부팅 시 체크섬 에러 발생. 쓰기 타이밍이나 데이터 품질 문제로 판단.
읽기 알고리즘 전면 개선 (100% 성공률 달성)
펄스 간 간격을 기록하는 방식으로 변경. 카운터를 프리런(0~255)시키고 펄스 발생 시 카운터 값을 읽어 value = (COUNTER - 16) / 32 공식으로 0~3 범위 2비트 값으로 압축. MFM 특성상 '00' 조합이 나올 수 없음을 이용해 디코딩: 01→01, 10→001, 11→0001
결과: 테스트한 모든 디스크 100% 완벽 읽기 성공. 위상 분석이나 재시도 로직이 거의 필요 없어졌습니다.
시도 5: 검증 기능 추가로 쓰기 품질 확보
타이머 카운터를 리셋하지 않고 누적값(16, 48, 80...)에서 비트 출력하도록 변경해 500kbps 정확도 확보. 시리얼 수신 루프도 최소화. 윈도우 앱에 검증(Verify) 기능 추가 후 재시도: 95% 트랙이 1회 통과, 나머지 5%는 1회 재시도 후 성공. 실제 아마가에서 완벽 부팅 확인!
시도 6: 바이트 경계 타이밍 보정
사용자 피드백으로 체크섬 에러가 간헐적 발생. 바이트 루프가 타이머 오버플로 전에 다음 바이트 첫 비트를 일찍 쓰는 현상 발견 → 타이머가 0으로 오버플로할 때까지 대기하는 루프 추가로 해결.
시도 7: 트랙 전체 지우기(Erase) 후 쓰기로 최종 해결
X-Copy Pro로 분석 시 헤더/데이터 영역 모두에서 체크섬 에러(코드 4, 6) 발생. 패딩 데이터를 256바이트에서 8바이트로 줄이자 검증 에러 다수 발생 → 쓰기 전 트랙 전체에 0xAA 패턴으로 지우기(Erase) 명령 추가 후 재시도: X-Copy 100% 통과.
진단 모드 탑재
배선 오류나 하드웨어 문제를 쉽게 찾도록 아두이노 펌웨어에 진단 명령어 세트와 자동 테스트 루틴을 내장했습니다.
향후 계획
전체 프로젝트는 GNU GPL v3 오픈소스로 공개.
아두이노 우노 단독으로는 쓰기 기능 구현이 어려워 23K256 SRAM 버퍼 칩을 이용해 우노에서도 쓰기 지원 예정.
ADF 외에 복사 보호/비표준 포맷 지원 위해 FDI 포맷 지원 계획 (범용, 원본에 근접한 트랙 데이터 저장).