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.py

Ubicación

class RAM

Por 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