해결책
2017년 1월, 버지니아주 허던에서 열린 Awesome Games Done Quick에서 툴 어시스티드 스피드런 로봇인 TASBot은 정품 슈퍼 NES에서 슈퍼 마리오 64와 밸브의 Portal을 플레이하는 것처럼 보였고, 이어서 콘솔을 통해 중계된 라이브 Skype 통화로 전환했습니다. 기기 내부는 아무것도 개조되지 않았습니다. 모든 것이 초당 수천 번의 버튼 누름으로 컨트롤러 포트를 통해 들어왔으며, 약 20만 명이 Twitch에서 시청했습니다.
방식은 '완전 제어'였습니다. 슈퍼 마리오 브라더스 3와 메가맨 같은 게임의 알려진 글리치를 악용하고, 버퍼 오버플로를 이용해 메모리에 진입한 뒤, 컨트롤러 입력 스트림을 원시 어셈블리 오피코드로 읽는 로더를 부트스트랩하는 것이었습니다. 몇 달 전 팀 조직자 앨런 세실(dwangoAC)은 중국의 Geekpwn 콘퍼런스에서 NES 사운드 칩을 통한 고품질 오디오 스트리밍을 선보였고, NES Classic 입력 장치는 피터 그린우드(micro500)가 제작했습니다.
이 시연은 실제 에뮬레이션을 주장한 적이 없습니다. SNES에서 Portal을 진짜로 플레이하는 것에 대해 Ars Technica는 '답은 여전히 아니오'라고 썼습니다. 그러나 이는 직관적으로 핵심을 보여주었습니다. 초당 충분한 버튼 누름이 주어진다면 25년 된 콘솔이 임의의 현대 소프트웨어를 위한 출력 장치 역할을 할 수 있다는 것입니다.
이룬 것
콘솔의 컨트롤러 포트를 데이터 버스로 취급합니다. 버튼 누름이 원시 오피코드가 되고, 버퍼 오버플로가 그 스트림을 실행하는 로더를 부트스트랩합니다.
작동한 이유
버퍼 오버플로 글리치를 통해 로봇은 컨트롤러 입력만으로 콘솔 메모리에 임의의 코드를 쓸 수 있었습니다.
초당 수천 개의 입력 속도에서 컨트롤러 포트는 사실상 오피코드, 오디오, 비디오를 운반하는 데이터 버스가 되었습니다.
AGDQ에서 라이브로 선보임으로써 스피드런 도구가 콘솔이 게임 포트를 통해 재프로그래밍될 수 있음을 보여주는 공개 시연이 되었습니다.
충분히 빠르게 도달할 수 있다면 어떤 입력 채널이든 프로그래밍 인터페이스가 됩니다. 무엇이 입력으로 간주되는지를 재정의하는 것은 새 하드웨어보다 플랫폼을 더 크게 확장합니다.
그 후
이 런은 'Super N64' 데모로 AGDQ의 전설이 되었습니다. 수년간 마라톤의 고정 코너였던 TASBot의 완전 제어 블록은 이미 슈퍼 마리오 브라더스 3를 1초 이내에 '클리어'하는 등의 위업을 만들어냈습니다.
근거 확인하기
출처
- How a robot got Super Mario 64 and Portal 'running' on an SNES Ars Technica · arstechnica.com ·