jajaja sip Gaston, se puede el truco esta en que una memoria ROM no es mas que una matriz, en donde cada fila de la matriz es una "posición" que contiene un objeto llamado Palabra.
Como bien dijiste, la misma tiene un determinado PinOut, entre los que claramente se identifican los del tipo Ax(Address), Dx(Data).
Entonces ahí tenemos una correspondencia, para cada valor que le damos a las entradas Ax, las cuales especifican la dirección de memoria que queremos acceder. Y las salidas Dx nos dan la palabra que esta almacenada en esa dirección de memoria.
Un ejemplo sencillo seria una memoria ROM que tenga 3 entradas A2,A1,A0, es decir que tenemos un total de 8 combinaciones posibles. Y cada una de estas posiciones almacenan a una palabra (en este ejemplo 1 bit):
En esa tabla podemos ver fácilmente la implementacion de una función booleana. Lo bueno llega si se incrementa el tamaño de palabra. Por ejemplo 8 bits.
Donde podríamos en un principio almacenar un dígito ASCII por ejemplo... o mejor aun una instrucción de un microprocesador ;)
En resumen para sacar la data, lo único que tenemos que hacer es identificar las entradas de dirección y mandarle todas las combinaciones posibles e ir almacenando la palabra que en la misma se encuentre almacenada.
Ahí vamos a tener un hermoso documento que si nos avivamos lo codificamos en hexadecimal y ya tenemos el Dump :P
solo resta interpretar ese dump y traducirlo a código de bajo nivel y ta pronto...
Perfectamente se puede utilizar para "aprender" a como funciona algún sistema embebido ;)