Red de conocimiento informático - Aprendizaje de programación - Tutorial de desarrollo del emulador NES 04 - Cartucho NES

Tutorial de desarrollo del emulador NES 04 - Cartucho NES

En el Capítulo 04, aprendimos sobre la estructura de archivos de NES. Los archivos de NES son esencialmente información descargada del casete. Por lo tanto, primero debemos simular el casete y cargar el programa y otros datos en la memoria. Continuando con la operación en un solo paso

Mapper ha aparecido muchas veces en artículos anteriores, aprendamos más sobre esto ahora

El artículo 03 mencionó que en el bus NES, el rango de direccionamiento de PRG es. 0x8000 - 0xFFFF, el rango de direcciones de CHR es 0x0000 - 0x2000, sus tamaños son 32K y 8K respectivamente. Para juegos grandes, un espacio tan pequeño está lejos de ser suficiente. Obviamente, Nintendo también tuvo esto en cuenta al diseñar, por lo que utiliza Mapper. extensiones

Mapper no se encuentra en el host, sino en el cartucho. Cada casete corresponde a un Mapper. En el formato NES 1.0, puede representar hasta 256 tipos de Mapper.

Cada Mapper se comporta de manera diferente. Por ejemplo, algunos Mappers agregan chips de audio para mejorar el rendimiento del audio. aumenta el tamaño del programa de extensión de registro, y algunos también tienen la función de contar interrupciones

Por ejemplo, Mapper2 agrega un registro de selección de banco para controlar el mapeo de diferentes bancos a 0x8000 - 0xFFFF, expandiendo así la capacidad del juego

Después de comprender el papel de Mapper, primero eche un vistazo al Mapper más simple: Mapper0. Este Mapper no tiene capacidades de expansión, por lo que su ROM máxima es de solo 32K 8K = 40K

. solo uno Lo que hay que tener en cuenta es:

Después de comprender la función de Mapper, puede comenzar a definir la API

Primero defina la interfaz ROMInfo, que representa la información del encabezado analizada desde el archivo NES

Además, se necesita un objeto Mapper para representar diferentes Mappers. Para la CPU, solo debemos preocuparnos por las capacidades de lectura y escritura del Mapper, por lo que debemos definir las interfaces de escritura y lectura

Finalmente, solo se necesitan dos instancias de Info y Mapper en Cartucho

Aquí hay un ejemplo de cómo simular un Cartucho (solo se enumera la lógica central, y usted mismo completará otra lógica simple)

Un *** requiere dos clases, un Cartucho y un Mapper0

p>

Archivo cartucho.ts

Archivo mapper0.ts