NES (및 SNES가 너무 많음)의 기본 개요는 다음과 같습니다. 나는 NES 게임을 쓰지 않았지만 NES 에뮬레이터 (Graybox)를 작성했으며 오래된 카트를 상당량의 rev-engineering했습니다.
프로그래밍 언어에 관해서는 그렇습니다. 모두 어셈블리였습니다. NES 프로그래밍은 하드웨어 인터럽트, DMA 포트, 뱅크 스위칭 등으로 직접 작업하는 것을 의미했습니다. 다행히도 6502 (또는 2A03) 프로그래밍은 매우 쉽습니다 [1] :
- 레지스터가 거의 없습니다 : A, X 및 Y. 주로 후자 2 개는 인덱싱 및 반복에만 사용할 수 있습니다.
- 명령 세트는 작고 대부분 간단합니다
- 메모리가 많지 않은 경우 : 기본 RAM은 2KB이며 배터리 옵션 8KB 확장을 지원합니다. 이 2KB 중에서 256 바이트는 스택 용으로 예약되어 있으며 페이지 0 (처음 256 바이트)은 특별한 주소 지정 모드로 인해 가장 많이 사용되는 포인터와 값을 저장하려는 위치입니다.
이 3 가지 기능은 함께 작업하면서 기억하기에 충분한 환경을 만듭니다. 예, 모든 메모리를 직접 관리하지만 기본적으로 모든 작업이 진행되는 위치에 대한 전체 맵을 작성하고 2K에 대해서만 걱정하면되므로 맵이 크지 않다는 것을 의미합니다. 모눈 종이. 좀 더 계획하고 RAM과 ROM (카트리지의) 위치에 변수와 상수를 정적으로 할당해야했습니다.
카트리지 데이터가 CPU의 주소 지정 가능한 한계를 초과하면 비트 트릭을 얻습니다. 64KB는 하위 32KB가 스톤으로 설정되어 모든 종류의 하드웨어 포트 및 RAM에 매핑됩니다. 이것은 뱅크 스위칭이 작동하는 곳인데, 이는 ROM의 한 부분을 더 높은 32KB 주소 공간에 (일부) 매핑하는 것을 의미합니다.
이것은 프로그래머가 원하는대로 사용할 수 있지만, 예를 들어, 각 레벨에 대한 모든 레벨 데이터, 메타 데이터 및 코드가 카트리지의 별도 8KB 메모리 영역에 채워진 3 레벨 게임이있을 수 있습니다. 레벨은 예를 들어 초기화, 프레임 업데이트 등을위한 콜백을 가질 수 있습니다. 레벨을 "로드"하는 것은 8KB 메모리 청크 (예 : 0xC000)를 매핑하는 것을 의미합니다. 그런 다음 초기화 루틴이 항상 0xC000에 있고 프레임 업데이트 루틴이 0xC200에 있고 레벨 데이터가 0xC800에 시작되도록 지정할 수 있습니다. 다른 메모리 청크에 저장된 게임의 메인 코드는 오른쪽 청크를 바꾸고 적절한 시간에 절대 주소 0xC000 및 0xC200으로 점프하여 레벨 변경을 제어합니다.
Wrt 그래픽 데이터 : NES의 타일 데이터는 2 비트 8x8 픽셀 맵입니다. 배경의 경우 1/4 해상도 2 비트 레이어와 결합됩니다. 이 4 비트 값은 16 개의 항목 팔레트에 색인화되었으며 53 개의 유효하고 독특한 색상을 사용할 수 있다고 생각합니다. 스프라이트는 또한 2 비트 픽셀 데이터를 사용했으며 각 스프라이트는 자체의 2 비트 그룹 인덱스를 다시 지정하여 4 비트 PAL 인덱스를 형성했습니다. 화면의 BG 이미지는 32x30 배열의 타일 인덱스 번호입니다.
기본적으로 많은 반복 및 인덱스를 인덱스로 사용하면 데이터를 매우 작게 유지할 수 있습니다. 레벨 데이터는 종종 타일 색인의 수직 막대로 저장되었으며 수직 막대도 재사용되기 때문에 색인화되어 카트리지에 한 번만 저장되었습니다. 간단한 데이터 압축 기술도 비슷하게 작동합니다. 이로 인해 Mario 1은 여유 공간이있는 32KB의 데이터와 8KB의 비트 맵 데이터가되었습니다.
개발 환경과 관련하여 사람들이 인증을받을 수있는 고대 컴퓨터에서 작업을 위해 EEPROM 버너에 연결된 일부 사진을 보았습니다. SNES 시대가 지나기 전까지는 툴 지원 디버깅이 실제로 가능하지 않았다 [2]. 이것이 많은 오래된 게임에 "명백한"버그가있는 주된 이유이며, Gameshark와 같은 것들이 그들이하는 일을 할 수있는 이유입니다. 플레이어 체력은 항상 mem-location X에있을 것이므로 항상 100이되도록 할 수 있습니다.
이런 것들이 흥미로워지면 http://wiki.nesdev.com/w/index.php/Nesdev_Wiki 를 보길 권한다.
NES는 온라인에서도 찾을 수있는 프로그래밍 과정이 꽤있다.
이 간단한 개요가 80 년대 게임 개발에 대한 통찰력을 얻었기를 바랍니다.
[1] 상대적으로 말하기. 또한 Graybox 자체를 약 85 % PowerPC 어셈블리로 작성했을 때 편견입니다. [2] FF6 기사 만들기 : http://www.edge-online.com/features/the-making-of-final-fantasy-vi/