BookinglyTech News
Hardware

El microcódigo del NEC V20 deja de ser un misterio gracias a una CNN

Un desarrollador extrae la ROM de microcódigo del procesador a partir de una foto del dado de 5,6 gigapíxeles, con una red neuronal entrenada en una tarde.

2 min de lecturaLobsters0 vistas

El microcódigo del NEC V20 ya se puede leer. Un desarrollador ha conseguido extraerlo a partir de una fotografía del dado del chip a 5,6 gigapíxeles y una red neuronal convolucional que entrenó en una tarde, sin haber tocado una CNN antes. El objetivo no es arqueología: es que los emuladores dejen de aproximar los tiempos del V20 y lo clonen ciclo a ciclo.

El punto de partida es conocido por quien sigue la emulación de x86 antiguo. En 2020 reenigne desmontó el microcódigo del 8088 y eso abrió la puerta a emular ese procesador con una precisión muy alta. En MartyPC el V20 ya funcionaba, pero su núcleo no respetaba los tiempos reales del chip: era un 8088 con instrucciones del V20 pegadas encima. Perseguir la exactitud de ciclos a base de prueba y error pintaba a calvario, así que el autor fue a por el microcódigo.

Encargó a InfoSecDJ la fotografía del dado de un V20, en concreto un segundo fabricante de Sharp, pero un V20 al fin y al cabo. El fotomosaico resultante mide 70.478 x 80.672 píxeles, 5,6 gigapíxeles, un tamaño que ni siquiera cabe en el formato JPEG.

De la imagen al bit

La región rectangular bajo el centro del dado es la ROM de microcódigo. La matriz es de 258x116, 29.928 bits. Dividida entre 29 da un número entero, y 29 es la longitud de palabra del microcódigo del V20, así que la cosa cuadra. Lo que no cuadra tanto es que eso implica 1.032 palabras cuando se esperaban 1.024; la explicación queda pendiente.

Para leer los bits hay que fijarse en el polisilicio que asoma tras la capa de metal: los huecos a cada lado de un interconnect forman un transistor, y su presencia marca un 1. El autor cargó la imagen en MaskRomTool y marcó filas y columnas, pero la detección por umbral no servía: el contraste entre bit y no bit es demasiado plano y el histograma sale comprimido. No quiso pedir que se eliminara la capa metálica, así que cambió de estrategia.

Exportó las posiciones de bit a JSON, escribió un script en Python que recorta un PNG de 42x42 píxeles centrado en cada posición y se quedó con un ZIP de 105 MB de recortes. Con eso entrenó un clasificador de dos clases —bit o no bit— usando PyTorch. Para el conjunto de entrenamiento clasificó a mano algo más de 1.000 bits con una herramienta de tkinter y dos teclas. En el registro de entrenamiento se ve cómo el acierto en validación arranca en torno al 79% y a partir de la cuarta epoch se instala en el 98-99%.

El microcódigo extraído, y el trabajo que lo acompaña, apunta a emulación exacta de ciclos del V20. Ahí está el código del proyecto para quien quiera mirarlo. Queda por aclarar de dónde salen las ocho palabras de más en la ROM, y queda por ver cuánto tarda eso en notarse en emuladores que hoy siguen aproximando.