Cómo escribir un programa EPROM

0

Tenemos algunos productos que utilizan 27C256 EPROMS. El tipo que escribió los programas originales (hace muchos años) se ha ido y nos gustaría hacer cambios y escribir algunos programas nuevos para algunos productos nuevos y mantenerlos en casa. Tenemos el quemador y todo eso, así que eso no es un problema. Mi pregunta es muy básica, ¿cómo se escribe un programa EPROM? ¿Lenguaje de máquina? ¿DO? ¿Es específico para el quemador que usamos? Todo lo que tenemos es la versión compilada de los programas existentes, por lo que no hay ayuda para su ingeniería inversa para ver el formato original. He buscado en línea, pero no puedo encontrar detalles sobre cómo escribir un programa desde cero.

    
pregunta Russ

4 respuestas

5

No existe tal cosa como un "programa EPROM" ... necesita saber a qué EPROM le suministra sus datos. Cualquier información que pueda agregar a la pregunta puede ayudar, incluso una foto de buena calidad del PCB.

Si se trata de un microprocesador Z80 (por ejemplo), existe un programa Z80 que puede desarmar (lea la EPROM en el quemador, escriba como un archivo hexadecimal, probablemente en formato INTEL HEX) , luego ejecute un programa de desensamblador para generar una lista de fuentes en lenguaje ensamblador Z80.

En este punto, puede tener suerte: un "volcado hexadecimal" del archivo, separado del listado desensamblado, probablemente le mostrará algunas cadenas ASCII - texto que le dará algunas pistas de lo que hace.

(Lo mismo es cierto para cualquier otro microprocesador que se usó ... si la EPROM almacenó la configuración de un FPGA, tiene un problema completamente diferente).

Luego viene la parte difícil ... entender lo que hace, lo suficientemente bien como para modificarlo con éxito.

Incluso si fue escrito originalmente en C o en otro idioma, de manera realista, no podrás recrear ningún nivel superior al ensamblador desde allí.

Saber lo que hace también requerirá un conocimiento íntimo del diseño del hardware: por ejemplo, si escribe un número en una dirección de puerto de E / S, necesita saber qué hardware está conectado a ese puerto y qué significa ese número a ese puerto ... por ejemplo, si un UART se asigna a esa dirección, probablemente se asignará a 4 direcciones, y una de esas direcciones será su puerto "Transmitir Datos". Entonces cualquier número (digamos, 65) que se escriba en ese puerto aparecerá en un puerto serie RS232, en este caso como el carácter "A". (Si está escrito en el puerto de control de UART, lea la hoja de datos de UART: podría deshabilitar el UART, cambiar la velocidad en baudios o hacer algo más).

Si tienes todo ese conocimiento, tienes una tarea laboriosa y tediosa pero posiblemente factible.

Si no lo hace, (y posiblemente incluso si lo hace), es probable que sea más rápido y económico definir exactamente lo que hace el circuito, y volver a implementarlo desde cero utilizando cualquier microcontrolador con el que esté más familiarizado (Arduino, etc. ) - en C, C ++, Ada etc.

    
respondido por el Brian Drummond
1

A un nivel básico, la EPROM contendrá códigos de operación binarios y datos para el procesador específico que está utilizando. ("Código de máquina / idioma").

La forma en que generes esos códigos de operación depende de ti. Puede escribir el código de máquina directamente, usar un ensamblador o usar un lenguaje de alto nivel para generar las instrucciones. Desde allí, descarga el (probablemente) archivo hexadecimal generado en su grabadora y graba la EPROM.

Parece que necesitas aprender los conceptos básicos de la programación integrada, así que buscaré recursos en línea o clases locales que puedas tomar.

    
respondido por el John D
1

La última vez que usé dispositivos 27C256, todo el código estaba en ensamblaje (después de todo, es un dispositivo de 32 k x 8; ¡la configuración de las pilas de llamadas C tendría que estar muy optimizada!)

Si tiene los archivos originales, puede haber herramientas para describir el flujo del programa (esto dependerá del procesador / controlador específico).

Tendría que intentar encontrar el ensamblador original (hacer el código de máquina codificado a mano es muy laborioso e incluso más propenso a errores que el ensamblaje); Si se hizo en código de máquina, tendría que volver a ensamblarse para que el programa tenga sentido.

Hacer nuevos programas requeriría conocer los fundamentos de la programación incorporada de hace muchos años (los programas incorporados más recientes se realizan en C o C ++, quizás en Java) y una comprensión sólida del conjunto de instrucciones del procesador .

Dicho esto, hay algunos compiladores de C que son extremadamente eficientes; investigar si hay uno disponible para su procesador de destino; El código C (aunque tiene sus limitaciones y debilidades) probablemente será más fácil de mantener y menos propenso a errores que el ensamblaje.

    
respondido por el Peter Smith
1

No sé lo que quieres decir con "desaparecido", pero si no quieres decir "muerto", creo que primero debes hacer todo lo posible para ponerte en contacto con él. Es muy probable que tenga el código fuente, en algún lugar. Debería averiguar si existe alguna posibilidad de asegurarle el código fuente. Este es por lejos el camino más fácil por delante. Incluso si se fue en circunstancias difíciles. Solo necesitas averiguar qué podría motivarlo y ver si puedes obtener la fuente de esa manera.

Si está muerto o por cualquier motivo, simplemente no puede contactarlo en ninguna circunstancia, entonces el camino es más difícil. Supongo que sabes qué funciones son necesarias y supongo que tienes todos los esquemas. Así que eso es un comienzo, por supuesto.

Para el x86 (y usted no dice qué procesador es este) los idiomas utilizados serán ensamblador, C o una combinación de ambos. Trabajé en sistemas EPROM a mediados de la década de 1980, por ejemplo, que utilizaban Lattice C y ensamblaje mezclados y otros sistemas que solo usaban ensamblaje. Sería más raro, pero aún es posible, haber usado solo C. Por ejemplo, Intel estaba vendiendo un enlazador integrado en el momento que podía usarse con Microsoft C o Lattice C. Y Borland había estado usando su compilador de C (incluso después de vender los derechos, el nuevo propietario continuó con Paradigm C ++ Professional) también para el trabajo integrado. Tengo una edición de summer2k, junto con su enlace / localizador.

Para otros procesadores, debe investigar los entornos de codificación disponibles, tanto "en aquel entonces" como "ahora", y tomar algunas decisiones sobre cómo proceder.

El proceso suele ser algo como esto: use el compilador de C para generar archivos de objetos, según corresponda. Utilice el ensamblador para generar más archivos de objetos, también según corresponda. Use una herramienta de enlace / localizador especializada para combinar estos archivos de objetos y luego ubíquelos en un archivo de salida binario (o más de uno, si su sistema usa más de uno para hacer las EPROM). Tome el archivo de salida binario y selecciónelo con Su herramienta de programación EPROM. Colocar en un EPROM en blanco. Verifique que esté en blanco. Programar la EPROM. Conéctalo a tu tablero. Arranque y prueba. Las EPROM antiguas se borran (cuadro de borrador de UV) para que queden en blanco y sean reutilizables.

Para descubrir cómo dirigir el enlazador / localizador, debe comprender el mapa de memoria de su (s) EPROM (s). De lo contrario, no sabrás exactamente dónde ubicar las cosas. Incluso es posible que la EPROM esté directamente controlada por algún hardware o que se use para iniciar un procesador a través de algún mecanismo funky (el ADSP-21xx admite algo así, muy raro, muy específico para el dispositivo). también, si su procesador (suponiendo que tenga uno) arranca desde EPROM en lugar de ejecutar código y obtener datos directamente de uno como dispositivo direccionado.

Usted realmente NO proporciona suficiente información sobre su sistema. Si lo hubieras hecho, podría haber escrito menos de lo que escribí aquí.

    
respondido por el jonk

Lea otras preguntas en las etiquetas