002. Lectura y escritura de RAM
Implementar el almacenamiento en bruto de 2 KiB de RAM.
Lección 2 de 356 · tests/chapter_01_cpu/test_002_ram_read_write.py
Archivo a actualizar
emulator/memory/ram.pyUbicación
class RAMPor qué existe este paso
La NES contiene 2 KiB de RAM interna de la CPU. Esta clase solo se encarga del almacenamiento físico de bytes; el bus de la CPU introducirá el espejado de direcciones en la siguiente lección.
Implementación de ejemplo completa
from dataclasses import dataclass, field
@dataclass
class RAM:
_data: bytearray = field(
default_factory=lambda: bytearray(0x800),
init=False,
)
def write(self, addr: int, value: int) -> None:
self._data[addr] = value
def read(self, addr: int) -> int:
return self._data[addr]Invariantes importantes
- el almacenamiento contiene exactamente 0x800 bytes
- una escritura cambia el byte leído desde la misma dirección física
- la RAM no traduce ni espeja direcciones de la CPU
Error común
La RAM no necesita entender las direcciones $0800, $1000 o $1800. Esas son alias del bus de la CPU sobre la RAM física y pertenecen al mecanismo de mapeo introducido en el Test 003.
Fuera de alcance
- una interfaz común de dispositivo de memoria
- almacenamiento de la ROM
- enrutamiento del bus de la CPU
Ejecutar esta lección
uv run pytest tests/chapter_01_cpu/test_002_ram_read_write.py -v