Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Herramientas/GitHubGitHub/dbrll/ll-34
Seguridad de Sistemas EmbebidosIngeniería InversaDepuradoresSeguridad de HardwareAprendizaje y EducaciónRecursos CuradosAnálisis de Firmware
GitHubdbrll/ll-34

ll-34

Emulador PDP-11/34 a nivel de circuito

Ver Repositorio
694hace 4 mesesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

ll/34

ll/34 es un emulador a nivel de circuito para el PDP-11/34A (1976), que ejecuta una CPU virtual diseñada mediante ingeniería inversa a partir de los esquemas, el microcódigo y las capturas lógicas de un PDP-11/34A real.

Fue diseñado originalmente como una réplica digital de la CPU real para ayudar en la resolución de problemas a nivel de señal. La CPU virtual KD11-EA consiste esencialmente en una traducción en C de los esquemas y consultas a las tablas ROM. Todas las ROMs combinacionales han sido sometidas a ingeniería inversa, y el generador de reloj está modelado con precisión.

Se eligió el nivel de circuito (tablas de verdad ROM + lógica combinacional) sobre el nivel de puertas (Verilog) porque es lo suficientemente bajo como para reproducir errores de hardware, pero lo suficientemente rápido para ejecutar programas.

Dispositivos emulados

  • Backplane UNIBUS (precisión de temporización y señal)
  • CPU KD11-EA (a nivel de circuito)
  • Tarjeta de arranque M9301 con ROMs de arranque y diagnóstico originales
  • Tarjeta serie DL11 (precisión de temporización)
  • Reloj de línea KW11 (50/60 Hz)
  • Consola de programador (incluyendo modo de mantenimiento para diagnóstico de CPU)
  • Unidades RK05 (emulación de alto nivel del controlador RK11)
  • Unidades RL01 y RL02 (emulación de alto nivel del controlador RL11)
  • Lector de cinta
  • Terminal VT100 con modos stdio, puerto TCP o PTY

Arquitectura

Todos los dispositivos se conectan al backplane UNIBUS (unibus.c), que realiza la decodificación de direcciones, la temporización y los ciclos de bus.

Internamente, la CPU se compone de los siguientes componentes:

ArchivoDescripción
ucode_rom.hAlmacén de microcódigo de 512x48 bits (PROMs bipolares), basado en el Verilog y volcados de Bitsavers. Cada micro-palabra controla la ALU, el scratchpad, la interfaz de bus y la bifurcación para un microciclo.
combo_roms.hROMs combinacionales (E51-E83, E107), decodificación IR (E59/E60/E63/E69/E70/E71/E74), selección de función ALU (E61/E82/E83), prioridad de trampa/servicio (E52/E53) y lógica de código de condición (E68/E107), todas reconstituidas a partir de los esquemas y capturas lógicas. Las ROMs de colector abierto se conectan en cable-OR al bus MPC.
kd11ea.cMotor de ruta de datos. Avanza a través del microcódigo una micropalabra por ciclo. Las puertas básicas 74xx se simulan usando operadores lógicos de C (!, &&, >>, etc.). La ALU de cortes de bits 74S181 está completamente modelada (4 cortes, 16 bits).
mmu.cGestión de memoria. Espacios de direcciones kernel/usuario, reubicación de 18 bits (3 sumadores 74S283), 16 pares PAR/PDR, registros de aborto SR0/SR2 con lógica de congelación.
clockgen.cGenerador de reloj. Modela la línea de retardo E106 (retroalimentación TAP 30/90/120, espera de bus TRAN INH). Ciclos cortos: 180 ns, ciclos largos: 240 ns, las transferencias de bus se extienden hasta que regresa SSYN.
clock.cSincronización en tiempo real. Mantiene el tiempo simulado sincronizado con el tiempo real.
int.cÁrbitro de interrupciones. Cola de prioridad BR4-BR7, aproxima el orden de concesión en cadena tipo margarita del UNIBUS.

Consola de programador (Ctrl-P)

Emula los interruptores e indicadores del panel frontal del PDP-11/34A. Activa cuando la CPU está detenida (encendido, instrucción HALT o Ctrl-P).

Permite inicializar el bus, arrancar la CPU, ejecutar paso a paso el código, examinar y depositar datos en direcciones arbitrarias, y salir del emulador.

El frontend está desacoplado del motor, por lo que también se proporciona una GUI de panel frontal fotorrealista en WebAssembly.

Consola de depuración (Ctrl-E)

La Consola de depuración proporciona un depurador interactivo tanto para código a nivel de microcódigo como a nivel de instrucciones:

  • s [n]: ejecución paso a paso de n microinstrucciones con volcado completo del estado (MPC, ALU, bus, registros)
  • b addr: establecer punto de interrupción de PC (octal), bl para listar, bd n para eliminar
  • g: reanudar ejecución
  • u [addr] [n]: desensamblar instrucciones
  • c [addr] [n]: volcado de memoria (octal)
  • mmu: mostrar estado de la MMU (PAR/PDR de kernel y usuario, modo actual marcado)
  • r: volcado de registros

Analizador lógico (Ctrl-L)

La resolución de problemas de ll-34 durante su desarrollo resultó ser tan similar a la resolución de problemas del hardware real que se implementó un analizador lógico interno para trazar las señales y sondear la ruta de datos. Esto resultó fundamental para localizar errores sutiles de ROM y temporización en la CPU virtual. También se puede utilizar como referencia para solucionar problemas del hardware real, tal como el hardware funcional ayudó a desarrollar el emulador.

El analizador lógico permite sondear 102 puntos en las señales principales de la CPU, asignados a pines físicos de chips (notación KD1:Exx:pin que coincide con los esquemas DEC K1-5 a K2-9). Se proporcionan alias lógicos (MPC, ALU_OUT, IR, PSW…) por conveniencia.

La frecuencia de muestreo es el reloj de CPU en tiempo real (5.555.556 Hz) con una resolución de 180 ns por muestra. Un divisor configurable reduce la frecuencia de muestreo para ventanas de captura más largas.

Las capturas utilizan un búfer circular (hasta 64K muestras) con disparo configurable en cualquier señal, posición de disparo ajustable (relación pre/post) y exportación CSV para análisis sin conexión.

Las capturas lógicas se utilizaron ampliamente en todo el proyecto para mapear y depurar rutas de multiplexación poco comprendidas.

Programas de ejemplo

ll-34 incluye algunos programas y sistemas para probar: un Juego de la Vida, V6 UNIX, RT-11 V4 con el juego original Tetris, y ATTN/11, un pequeño Transformer entrenable con autoatención.

RT-11

root@kitploit:~
./ll-34 --rk ./wasm/demos/rtv4_rk.dsk

La ROM de arranque cargará automáticamente desde el RK11 e iniciará el sistema operativo. DIR listará los archivos, HELP imprimirá ayuda, RUN TETRIS iniciará la demo de Tetris (aunque $TERM probablemente esté mal). RUN ADVENT iniciará Colossal Cave Adventure, construido en un PDP-11/34 real.

v6 Unix

root@kitploit:~
./ll-34 --rk ./wasm/demos/v6bin.rk

El cargador de arranque imprimirá un símbolo de sistema @ mínimo. Escriba rkunix y presione Enter, y unos segundos después debería obtener un símbolo de sistema login:. ¡Ingrese el nombre de usuario root sin contraseña y ya está dentro! Una nota es que cd se llama chdir en los primeros Unix.

Compilación

make + un compilador C11, no hay otras dependencias.

Verificado para compilar sin advertencias en Linux (x86_64 y aarch64) tanto con musl como con glibc, macOS aarch64 y NetBSD 10 aarch64.

Ejecución

Además de la CLI, una versión independiente en WebAssembly con una GUI fotorrealista está disponible aquí: https://dbrll.github.io/ll-34.

Nota: ll-34 es un emulador que consume muchos recursos. A diferencia de los emuladores a nivel de instrucciones, avanza a través del microcódigo un ciclo a la vez y ejecuta la ALU, las ROMs combinacionales, el scratchpad, el generador de reloj y la temporización del bus en cada paso. El host debe mantener el ritmo del generador de reloj de 5.5 MHz continuamente para permanecer exacto en cuanto a ciclos.

Al inicio, el emulador se evaluará a sí mismo e informará su velocidad relativa a un KD11-EA real. Una relación inferior a 1x significa que el host no puede mantener el ritmo y no se garantiza la precisión de la temporización. La evaluación comparativa no está disponible en la versión WebAssembly, donde la resolución del temporizador del navegador la hace poco fiable. Como la compilación WASM es más lenta que la nativa, ejecutarla en un smartphone normalmente será demasiado lenta.

Descargar herramienta