Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
ll-34 — Émulateur PDP-11/34 au niveau circuit | Kitploit
Outils/GitHubGitHub/dbrll/ll-34
Sécurité des Systèmes EmbarquésRétro-ingénierieDébogueursSécurité MatérielleApprentissage et ÉducationRessources OrganiséesAnalyse de Micrologiciel
GitHubdbrll/ll-34

ll-34

Émulateur PDP-11/34 au niveau circuit

Voir le dépôt
6941il y a 5 moisVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

ll/34

ll/34 est un émulateur au niveau circuit du PDP-11/34A (1976), exécutant un processeur virtuel rétro-conçu à partir des schémas, microcode et captures logiques d’un vrai PDP-11/34A.

Il a été conçu à l’origine comme une réplique numérique du vrai processeur pour aider au dépannage au niveau des signaux. Le processeur virtuel KD11-EA est essentiellement une traduction en C des schémas, avec des consultations des tables ROM. Toutes les ROM combinatoires sont rétro-conçues, et le générateur d’horloge est modélisé avec précision.

Le niveau circuit (tables de vérité ROM + logique combinatoire) a été choisi plutôt que le niveau portes (Verilog) car il est suffisamment bas niveau pour reproduire les bugs matériels, tout en étant assez rapide pour exécuter des programmes.

Périphériques émulés

  • Fond de panier UNIBUS (timing et signaux précis)
  • Processeur KD11-EA (niveau circuit)
  • Carte d’amorçage M9301 avec ROMs d’amorçage et de diagnostic d’origine
  • Carte série DL11 (timing précis)
  • Horloge ligne KW11 (50/60 Hz)
  • Console programmeur (y compris le mode maintenance pour le dépannage du processeur)
  • Unités RK05 (émulation haut niveau du contrôleur RK11)
  • Unités RL01 et RL02 (émulation haut niveau du contrôleur RL11)
  • Lecteur de bande
  • Terminal VT100 avec modes stdio, port TCP ou PTY

Architecture

Tous les périphériques sont branchés sur le fond de panier UNIBUS (unibus.c), qui effectue le décodage d’adresses, le timing et les cycles bus.

En interne, le processeur est composé des éléments suivants :

FichierDescription
ucode_rom.hMémoire de microcode 512×48 bits (PROMs bipolaires), basée sur le Verilog et les dumps de Bitsavers. Chaque micro-mot contrôle l’UAL, le scratchpad, l’interface bus et le branchement pour un micro-cycle.
combo_roms.hROMs combinatoires (E51–E83, E107), décodage IR (E59/E60/E63/E69/E70/E71/E74), sélection fonction UAL (E61/E82/E83), priorité trap/service (E52/E53) et logique des codes condition (E68/E107), toutes reconstituées à partir des schémas et des captures logiques. Les ROMs à collecteur ouvert font un OU câblé sur le bus MPC.
kd11ea.cMoteur du chemin de données. Parcourt le microcode un micro-mot par cycle. Les portes 74xx de base sont simulées à l’aide d’opérateurs logiques C (!, &&, >> etc.). L’UAL 74S181 en tranches de bits est entièrement modélisée (4 tranches, 16 bits).
mmu.cGestion mémoire. Espaces d’adressage noyau/utilisateur, relogement 18 bits (3 additionneurs 74S283), 16 paires PAR/PDR, registres d’abandon SR0/SR2 avec logique de gel.
clockgen.cGénérateur d’horloge. Modélise la ligne à retard E106 (rétroaction TAP 30/90/120, attente bus TRAN INH). Cycles courts : 180 ns, cycles longs : 240 ns, les transfers bus s’étirent jusqu’au retour de SSYN.
clock.cCadencement temps réel. Maintient le temps simulé synchronisé avec le temps réel.
int.cArbitre d’interruptions. File de priorité BR4–BR7, approxime l’ordre d’octroi en guirlande UNIBUS.

Console programmeur (Ctrl-P)

Émule les commutateurs et indicateurs du panneau avant du PDP-11/34A. Active lorsque le processeur est arrêté (mise sous tension, instruction HALT ou Ctrl-P).

Elle permet d’initialiser le bus, d’amorcer le processeur, de faire du pas à pas dans le code, d’examiner et de déposer des données à des adresses arbitraires, et de quitter l’émulateur.

Le frontal est découplé du moteur, donc un panneau avant photoréaliste en interface graphique est également fourni en WebAssembly.

Console de débogage (Ctrl-E)

La console de débogage offre un débogueur interactif pour le code au niveau microcode et au niveau instruction :

  • s [n] : pas à pas de n micro-instructions avec affichage complet de l’état (MPC, UAL, bus, registres)
  • b addr : définir un point d’arrêt sur PC (octal), bl pour lister, bd n pour supprimer
  • g : reprendre l’exécution
  • u [addr] [n] : désassembler les instructions
  • c [addr] [n] : affichage mémoire (octal)
  • mmu : afficher l’état MMU (PAR/PDR noyau + utilisateur, mode courant marqué)
  • r : affichage des registres

Analyseur logique (Ctrl-L)

Le dépannage de ll-34 pendant son développement s’est avéré si similaire au dépannage du matériel réel qu’un analyseur logique interne a été implémenté pour tracer les signaux et sonder le chemin de données. Cela s’est révélé essentiel pour traquer des bogues subtils dans les ROM et le timing du processeur virtuel. Il peut également être utilisé comme référence pour dépanner le matériel réel, tout comme le matériel fonctionnel a aidé à développer l’émulateur.

L’analyseur logique permet de sonder 102 points sur les signaux majeurs du processeur, mappés aux broches physiques des puces (notation KD1:Exx:pin correspondant aux schémas DEC K1-5 à K2-9). Des alias logiques (MPC, ALU_OUT, IR, PSW…) sont fournis pour plus de commodité.

La fréquence d’échantillonnage est l’horloge temps réel du processeur (5 555 556 Hz) avec une résolution de 180 ns par échantillon. Un diviseur configurable réduit la fréquence d’échantillonnage pour des fenêtres de capture plus longues.

Les captures utilisent un tampon circulaire (jusqu’à 64K échantillons) avec déclenchement configurable sur n’importe quel signal, position de déclenchement réglable (rapport pré/post), et export CSV pour analyse hors ligne.

Les captures logiques ont été largement utilisées tout au long du projet pour cartographier et déboguer des chemins de multiplexage mal compris.

Programmes d’exemple

ll-34 est livré avec quelques programmes et systèmes à essayer : un Jeu de la Vie, V6 UNIX, RT-11 V4 avec le jeu Tetris original, et ATTN/11, un petit Transformer à auto-attention entraînable.

RT-11

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

La ROM d’amorçage charge automatiquement depuis le RK11 et démarre le système d’exploitation. DIR liste les fichiers, HELP affiche l’aide, RUN TETRIS lance la démo Tetris (même si le $TERM est probablement mal configuré ?). RUN ADVENT lance Colossal Cave Adventure, compilé sur un vrai PDP-11/34.

Unix v6

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

Le chargeur d’amorçage affiche une invite @ minimale. Tapez rkunix et appuyez sur Entrée ; quelques secondes plus tard, vous devriez obtenir une invite login:. Entrez le nom d’utilisateur root sans mot de passe et vous êtes dedans ! Note : cd s’appelle chdir dans les premiers Unix.

Construction

make + un compilateur C11, sans autre dépendance.

Vérifié pour compiler sans avertissements sur Linux (x86_64 et aarch64) avec musl et glibc, macOS aarch64 et NetBSD 10 aarch64.

Exécution

Outre l’interface en ligne de commande, une version WebAssembly autonome avec une interface graphique photoréaliste est disponible ici : https://dbrll.github.io/ll-34.

Note : ll-34 est un émulateur gourmand en ressources. Contrairement aux émulateurs au niveau instruction, il parcourt le microcode cycle par cycle et exécute l’UAL, les ROM combinatoires, le scratchpad, le générateur d’horloge et le timing bus à chaque étape. L’hôte doit soutenir en continu la cadence du générateur d’horloge à 5,5 MHz pour rester précis au cycle près.

Au démarrage, l’émulateur s’auto-évalue et rapporte sa vitesse par rapport à un vrai KD11-EA. Un rapport inférieur à 1x signifie que l’hôte ne peut pas suivre et la précision temporelle n’est pas garantie. Le benchmark n’est pas disponible dans la version WebAssembly, où la résolution des timers du navigateur le rend peu fiable. Comme la version WASM est plus lente que la version native, l’exécuter sur un smartphone sera généralement trop lent.

Télécharger l’outil