Reddit

Flight Simulator 95/98 finally running on 64-bit Windows, patched by Claude Code

Claude Code가 패치한 Flight Simulator 95·98, 64비트 Windows에서 실행 가능

Flight Simulator 95와 98이 64비트 Windows에서 창 메시지를 처리하다 정수 나눗셈 예외로 종료되는 문제를 실행 파일 패치로 해결했습니다. 패치는 게임의 예외 처리 루틴을 벡터 예외 처리기에 등록하며, 작성자는 Claude Code가 충돌 로그와 디버거 자료를 바탕으로 원인을 찾고 패치 프로그램까지 작성했다고 설명합니다.

에디터 노트

이 패치의 실질적인 성과는 게임을 실행한 데 그치지 않고 예외 처리 범위를 정수 나눗셈 오류로 제한한 데 있습니다. 댓글에서 제기된 우려에 작성자는 여러 종류의 예외를 시험하고 패치를 수정했다고 답했으며, 저장소에는 어셈블리 코드와 실행 파일 검증 절차도 공개했습니다. 다만 시험 결과는 작성자의 설명이고 독립적인 검증 결과는 자료에 없습니다. Claude Code가 처음 예상과 달리 DLL이 아닌 실행 파일에서 원인을 찾았다는 과정도 구체적입니다. 충돌 로그와 디버거 화면을 입력하고, 패치 결과를 확인하는 작업은 자동화 도구의 도움을 받았지만, 어떤 파일을 시험하고 예외 처리 범위를 점검할지는 작업자가 결정했습니다. 다른 오래된 게임에도 같은 방법이 통한다는 근거까지 제시된 것은 아닙니다.

AI 요약

오래된 Flight Simulator 95(FS95)와 Flight Simulator 98(FS98)은 64비트 Windows에서 특정 화면이나 창을 다룰 때 충돌합니다. FS95는 위에서 내려다보는 화면이나 보조 창, 시점 전환 중 예외 코드 c000041d로 종료되고, FS98은 시작 화면에서 멈춥니다.

충돌 원인과 패치 방식

두 게임은 정수 나눗셈 오류가 발생하면 자체 예외 처리기를 호출해 안전한 결과를 넣도록 만들어졌습니다. 그러나 64비트 Windows에서 창 메시지 처리 중 발생한 예외는 게임의 기존 처리기에 전달되지 않아 운영체제가 게임을 종료합니다. 패치는 실행 파일에 코드를 추가해 게임의 예외 처리 루틴을 벡터 예외 처리기(Vectored Exception Handler)로 등록합니다. 이 처리기는 창 콜백의 호출 경계와 무관하게 예외를 먼저 받습니다.

작성자의 설명에 따르면 FS98의 처리 루틴은 실행 파일에 있고, FS95의 루틴은 DIVTRAP.DLL에 있습니다. 패치는 게임 파일에서 발생한 정수 나눗셈 오류만 처리합니다. 다른 종류의 예외와 Windows 또는 다른 프로그램 DLL에서 발생한 나눗셈 오류는 Windows에 전달합니다. 게임 DLL은 수정하지 않습니다.

설치와 실행 파일 보호

패치 파일을 게임 폴더에 복사한 뒤 Patch.bat을 실행하면 됩니다. 관리자 권한을 요청할 수 있습니다. 공식 패치로 수정한 실행 파일은 지원하지 않으므로 원본 실행 파일에 적용해야 합니다. 패치 도구는 SHA-256으로 원본 또는 이전 패치 버전인지 확인하고, 조건이 맞지 않으면 변경하지 않습니다. 원본은 .bak 파일로 저장하며 Restore.bat으로 복구할 수 있습니다. 실행 파일을 배포하는 대신 사용자가 보유한 게임 파일을 직접 수정하는 방식입니다.

Reddit 반응

  • @Torturephile — 충돌 로그와 x32dbg 화면을 Claude Code에 제공했고, 작업은 약 20~30분 걸렸습니다. 처음에는 DLL이 원인이라고 생각했지만 Claude가 FS98 실행 파일에서 문제를 찾았고, FS95에서도 같은 문제를 추적했습니다.
  • @kbr89 — Windows 문서도 64비트 Windows에서 창 프로시저를 벗어난 예외가 억제되는 경계를 설명합니다. 벡터 예외 처리기는 스택 해제 전에 호출되므로 콜백 경계와 무관하게 예외를 처리할 수 있습니다. 다만 게임의 처리 루틴이 관련 없는 예외까지 삼키지 않는지 확인해야 한다고 지적했습니다.
  • @Torturephile — 우려를 Claude Code에 전달해 여러 종류의 예외로 다시 시험했고, 나눗셈 오류만 처리하도록 패치를 다시 만들었다고 답했습니다. 어셈블리 코드도 저장소에 공개했습니다.
  • @rushabhsheth — DLL을 의심했던 상황에서 Claude가 실행 파일을 찾아낸 점이 유용하다며, 먼저 증상과 충돌 정보를 주고 자신의 가설은 뒤로 미루는 방식을 언급했습니다.
  • @khooke — 패치가 게임을 실제로 플레이할 수 있게 하는지 물으며 Midtown Madness에도 비슷한 작업을 해보고 싶다고 했습니다. 작성자는 FS 5.1은 DOSBox Staging에서 잘 실행되며 CPU 설정을 조정하라고 답했습니다.
  • @FlightSimGeeks — 과거 기억이 떠오른다며 지금도 이 취미를 이어가고 관련 업계에서 일한다고 했습니다.

원문: GitHub / 번역·요약: Trawling