3P by neo 3달전 | favorite | 댓글 1개

NES Tetris에서 새로운 코드 발견됨

  • 해커들이 게임 내에서 NES Tetris를 재프로그래밍하는 방법을 발견함
  • 이 방법은 게임 종료 크래시를 피하려는 고득점 추격자들에게 도움이 될 수 있음

코드 실행 방법

  • NES Tetris의 "kill screen"을 활용하여 메모리를 조작하는 복잡한 방법으로 수정되지 않은 하드웨어와 카트리지에서 실행되는 Tetris 버전에 새로운 동작을 코딩할 수 있음
  • Super Mario World, Paper Mario, The Legend of Zelda: Ocarina of Time 등의 게임에서도 유사한 "임의 코드 실행" 글리치가 발견된 바 있음
  • NES Tetris에 외부 코드를 도입하는 기본 방법은 적어도 2021년부터 공개적으로 이론화되어 왔음
  • 이 방법은 Tetris의 높은 점수 테이블을 기계어 코드 명령으로 읽기 시작하는 방법을 자세히 설명함

컨트롤러 포트를 이용한 재미

  • NES Tetris의 크래시는 게임의 점수 처리기가 프레임 사이에 새로운 점수를 계산하는 데 너무 오래 걸릴 때 발생함
  • 이 지연이 발생하면 제어 코드의 일부가 새 프레임 쓰기 루틴에 의해 중단되어 의도하지 않은 RAM 부분으로 점프하여 다음 명령어를 찾게 됨
  • 일본 버전 콘솔인 패미컴에서 실행될 때 Tetris가 잠재적 입력을 처리하는 방식 덕분에 플레이어는 이 점프를 조작할 수 있음

높은 점수 테이블에서 코딩하기

  • Displaced Gamers의 점프 제어 방법을 위해 플레이어는 세 번째 컨트롤러에서 "위쪽"을, 네 번째 컨트롤러에서 오른쪽, 왼쪽, 아래쪽을 누르고 있어야 함
  • 이렇게 하면 점프 코드가 게임의 높은 점수 목록에 대한 이름과 점수를 저장하는 RAM 영역으로 보내져 플레이어가 직접 조작할 수 있는 더 큰 RAM 표면을 제공함
  • 높은 점수 테이블의 대상 부분에 "(G"를 넣으면 게임이 높은 점수 테이블의 다른 영역으로 점프하도록 강제할 수 있음
  • 여기서 이름과 점수를 NES CPU에 대한 opcode로 순차적으로 읽기 시작함
  • 그러나 이름 입력 영역에 사용할 수 있는 기호는 43개, 높은 점수의 일부가 될 수 있는 숫자는 10개뿐이므로 가용한 NES의 opcode 명령 중 일부만 높은 점수 테이블에 "코딩"될 수 있음
  • 배터리 백업 저장 시스템이 없기 때문에 해커는 Tetris를 시작할 때마다 이러한 높은 점수를 수동으로 달성하고 복잡한 이름을 입력해야 함

GN⁺의 의견

  • NES 버전의 Tetris에 이런 숨겨진 기능이 있었다는 것이 놀랍다. 당시에는 발견되지 않았던 것 같은데, 수십년이 지난 지금에서야 발견되었다는 점이 신기하다.
  • 패미컴의 확장포트를 활용해서 이런 해킹이 가능했다는 점도 흥미롭다. 닌텐도가 의도하지 않은 기능이었겠지만, 아무래도 NES에 비해 기능이 풍부한 패미컴의 장점이 드러난 것 같다.
  • 이런 버그를 활용해서 오히려 크래시를 방지하는 코드를 심는다는 아이디어도 기발하다. 이론상으로는 게임 플레이를 계속할 수 있게 해주니 고득점 도전에 큰 도움이 될 것 같다.
  • 다만 이 방법을 쓰려면 매번 게임을 시작할 때마다 복잡한 설정을 해줘야 한다는 점은 불편해 보인다. 실제로 사용하려면 좀더 자동화할 방법이 필요할 것 같다.
  • 아무래도 이 방법은 게임 플레이를 즐기려는 일반 유저보다는 고득점에 도전하는 매니아층이나 프로그래밍에 관심 있는 사람들에게 어필할 만한 것 같다. 대중적으로 사용되긴 어려워 보인다.
Hacker News 의견

요약:

  • Stross의 소설 'Accelerando'에서 언급된 "시공간 구조를 해킹하여 그 아래에 있는 것을 찾아내는 것"이 궁극적인 해킹의 목표라는 대사가 이런 익스플로잇을 떠올리게 함.
  • 아무런 실용적 목적 없이 그저 재미로 뭔가를 하는 해커 정신을 갖지 못해 부끄러움을 느낌.
  • NES 카트리지는 ROM에서 구동되지만, 이 익스플로잇은 CPU가 최고 점수 테이블을 저장하는 데 사용되는 RAM으로 점프하도록 함.
  • 누군가 테트리스에서 둠을 구동하는 데 얼마나 걸릴지 궁금해 함.
  • Factorio 내에서 벨트로 거대한 컴퓨터를 만들어 세그먼트 폴트를 일으켜 게임에서 벗어나고 싶어 함.
  • 시간을 잘 낭비했다고 생각함.
  • 오래된 게임에서의 ACE 발견이 매우 흥미로움. 몇 년 전 슈퍼 마리오 월드에서 이를 보고 어떻게 가능한지에 사로잡혔음.
  • 정말 영리한 사람들이 완전히 쓸모없는 일에 많은 시간과 노력을 쏟는 것이 좋아 보임.
  • NES 테트리스에 코드를 주입하는 데는 당장은 이유가 없겠지만, 그것이 요점이 아님. 무엇이 가능한지, 오래된 코드와 원시적인 컴퓨터에게 무엇을 시킬 수 있는지 알아내는 것이 포인트임.
  • 테트리스가 이렇게 오래 걸려서야 깨진 것이 놀라움. 이는 게임 엔딩/크레딧을 가능한 한 빨리 실행하는 것을 목표로 하는 새로운 시대의 any% 런을 예고함.
  • 오카리나 오브 타임은 수년 동안 ACE 익스플로잇이 있었음. 게임 메모리를 조작하고 특정 입구 워프를 편집하여 불과 몇 분 만에 "완료"될 수 있을 정도로 완전히 망가졌음.
  • 가장 놀라운 것은 사람들이 단지 몇 개의 버튼과 아날로그 조이스틱만 사용하여 손으로 메모리를 편집한다는 것임.
  • 임의 코드 실행이 가능해지는 것이 그 후에 무엇을 하느냐보다 항상 더 흥미로움.
  • 게임을 분해하여 언제 어디서 이 모든 것을 하는지, 그 다음 명령을 입력하기 위해 어디서 조작할 수 있는지 알아내는 것은 존경할 만한 수준의 헌신임.
  • 2024년에 NES/SNES에 시간을 쓰는 것은 닌텐도가 어린이들에게 비윤리적인 정신 통제/심리 트릭을 쓴 증거라고 느낌.
  • 이 사람들은 재능이 있으며, 이 프로젝트를 선택한 이성적인 이유가 없어 보임.