Almacenamiento de datos en la NVRAM

1

Estoy diseñando una computadora de 8 bits, y una de las partes difíciles es la agilización de la carga del pequeño "OS" (colección de rutinas de lectura) en la NVRAM de 32kB que usaré en lugar de una EPROM.

Estaba pensando en usar un PIC (conectado a la PC a través de USB) para cargar la NVRAM.

¿Cuál sería una mejor manera de hacer esto?

    
pregunta RA01

2 respuestas

0

Ya que desea acceder a la memoria "detrás de la parte posterior de la CPU" mientras la mantiene en modo de parada, necesitará algo más para generar el control y las señales de datos necesarios, con suerte mientras tenga una forma de tri-indicar la CPU Señales de bus. A la inversa, su "otra cosa" tendrá que hacer un triple estado de sus líneas (excepto la salida de detención) cuando la CPU se esté ejecutando.

En una era anterior, habrías conectado un chip de interfaz de periféricos paralelos 8255 al puerto paralelo de tu PC, y habías utilizado eso y el software para acceder a la NVRAM un byte a la vez. Antes de liberar elementos a la CPU, debe configurar el 8255 para que sea todas las entradas (es decir, tri-estado) y confiar en las resistencias para evitar que la señal de escritura en la memoria se active durante el traspaso. Tendría que conducir la señal de detención desde un puerto que no estaba usando de otra manera, ya que no pudo realizar un triple estado, y el 8255 solo le permite controlar la dirección de puertos completos, excepto un puerto que puede controlar en dos mitades.

Sin embargo, en esta era de PC sin legado, es posible que no tenga un puerto paralelo, y es probable que tenga que trabajar con el USB. Puede usar un simple chip USB IO de la misma manera que el 8255 habría sido usado alguna vez, usando un software para generar todos los ciclos de memoria. Pero los puertos USB en realidad tienen una latencia (demora) mucho mayor para un acceso único que los puertos de impresora anteriores, por lo que esta puede ser una forma muy lenta de acceder a su memoria.

Una solución mejor en la era del USB es usar un pequeño microcontrolador corriente abajo del USB (o incluso un convertidor USB en serie) para generar los ciclos de acceso a la memoria, y enviar comandos como "leer este byte" o "escribir los siguientes 32 bytes comenzando en la dirección xx ". Use el paradigma USB-serial y haga que estos comandos sean ASCII legibles y usted tiene algo que se puede usar como un depurador / monitor primitivo de un programa de terminal, o una herramienta de descarga cuando es manejado por un programa especializado. Puede usar una interfaz binaria en su lugar, pero el USB es tan rápido para mover datos a granel (puede emular puertos en serie a velocidades de baudios insanos) que la sobrecarga de ASCII (hex) que codifica los datos de carga útil no es gran cosa, y al hacerlo le permite usar retornos de nueva línea o de carro para la sincronización de bloques, en lugar de tener que elaborar un esquema para diferenciar los códigos de trama de los bytes de datos.

    
respondido por el Chris Stratton
0

Por el sonido de la misma, usted desea construir un microordenador de 8 bits que tendrá el código almacenado en una NVRAM que es externa al procesador; La computadora no tendrá otra memoria no volátil que no sea la NVRAM, la cual estará sin inicializar, y usted necesita una manera de ponerla al día.

Mi recomendación sería conectar la computadora de modo que la lectura de un cierto rango de direcciones active un ciclo de lectura de uno de los chips de interfaz FIFO USB a paralelo de FTDI, y proporcione un medio (interruptor, puente, o lo que sea) para que la lectura de la parte del espacio de direcciones NVRAM que contiene el vector de restablecimiento se redireccionará para que también utilice el chip FTDI. Otro rango de direcciones debe permitir que el 6502 compruebe si el chip FTDI está listo (conjunto de bits 6 = listo)

Luego mantenga la CPU en reinicio, alimente un programa corto (probablemente de 64 bytes o menos) sin bucle en el chip FTDI a través del puerto USB, y suelte el reinicio. La CPU debe obtener del chip FTDI las instrucciones que se guardaron en él y ejecutarlas. No sé qué CPU está utilizando, pero para el 6502 el código podría tener un aspecto similar al siguiente:

  00 D0  -- Reset vector -- Assumes FTDI chip is mapped at D000-D0FF
  A9 2C  -- Load A with #$2C
  85 80  -- Store it to $80
  A9 00  -- Load A with #$00
  85 81  -- Store it to $81
  85 86  -- Also to $86
  A9 D8 85 82 -- Load A with $D8 and store it to 82
  A9 50 85 83 -- Load A with $50 and store it to 83
  A9 FB 85 84 -- Load A with $FB and store it to 84
  A9 AD 85 85 -- Load A with $AD and store it to 85
  A9 D0 85 87 -- Load A with $D0 and store it to 87
  A9 48 85 88 -- Load A with $48 and store it to 88
  A9 70 85 89 -- Load A with $70 and store it to 89
  A2 F5       -- Load X with #$F5
  86 8A       -- Store X to $8A
  AA 00      -- Transfer X to S (second byte is dummy cycle)
  4C 80 00   -- Jump to code loaded at $0080

El código anterior, 49 bytes almacenará a $ 0080 el siguiente programa corto, con el puntero de pila inicializado a $ F5

$0180: 2C 00 D8 : BIT $D800 ; Read status
$0183: D8 50    : BVC $0080 ; Branch if not ready
$0185: AD 00 D0 : LDA $D000 ; Read data
$0188: 48       : PHA
$0189: 70 F5    : BVS $0080 ; Loop

Esto leerá bytes individuales del chip FTDI, verificando el estado antes de cada uno y los colocará en la pila. Una vez que se hayan insertado suficientes bytes, el siguiente sobrescribirá el segundo byte de la instrucción de bifurcación ($ 008A) y permitirá que se ejecute el nuevo código.

    
respondido por el supercat

Lea otras preguntas en las etiquetas