Skip to content

ebalvis/nano-cpu-4i

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🖥️ Simulador Interactivo de Máquina Simple

versión licencia HTML5 CSS3 JavaScript GitHub Pages

Simulador interactivo de una CPU simplificada con ensamblador integrado, ejecución paso a paso y visualización en tiempo real de registros, memoria y flags.

🚀 Demo en vivo · 📖 Manual de uso · ⚙️ Set de instrucciones · 📋 Ejemplos


✨ Características

  • Editor ensamblador integrado con sintaxis retro (terminal verde), 4 ejemplos cargables
  • Listado unificado instrucciones + datos con valores en tiempo real y código máquina hex
  • Panel CPU — PC, RI desglosado en campos OP/A/B (binario + hex), ZF animado, contador de ciclos
  • Breakpoints — activa/desactiva con un clic, ejecución RUN para automáticamente
  • Tabla de símbolos editable en ejecución (clic para modificar cualquier dato)
  • Memoria de datos — grid hex 8×16 (128 celdas) con valores en tiempo real
  • Traza de ejecución completa con log coloreado paso a paso
  • Sin instalación — abre index.html directamente en el navegador

🚀 Demo rápida

.titulo Multiplicación

      mov  CERO   , RDO       ; RDO ← 0
      mov  CERO   , CONTAD    ; CONTAD ← 0
BUCLE:cmp  CONTAD , NUM2      ; ¿terminamos?
      beq  FIN
      add  NUM1   , RDO       ; RDO += NUM1
      add  UNO    , CONTAD    ; CONTAD++
      cmp  CERO   , CERO      ; salto incondicional
      beq  BUCLE
FIN:  beq  FIN

NUM1:   dato 0002
NUM2:   dato 0003
RDO:    dato 0000
CONTAD: dato 0000
UNO:    dato 0001
CERO:   dato 0000

🏗️ Arquitectura simulada

Elemento Especificación
Bus de direcciones 7 bits → 128 posiciones
Bus de datos 16 bits sin signo
Memoria unificada 128 × 16 bits — Von Neumann (instrucciones + datos)
Registros PC (7b) · RI/IR (16b) · ZF (1b)

ISA — 4 instrucciones

Instr Binario Operación
MOV 00 AAAAAAA BBBBBBB mem[B] ← mem[A]
ADD 01 AAAAAAA BBBBBBB mem[B] ← mem[B] + mem[A]
CMP 10 AAAAAAA BBBBBBB ZF ← (mem[A] == mem[B])
BEQ 11 0000000 AAAAAAA si ZF=1 : PC ← A

Codificación de instrucción (16 bits):

 15  14  13 ........  7   6 .........  0
┌────────┬───────────────┬───────────────┐
│  OP    │   Campo A     │   Campo B     │
│ 2 bits │    7 bits     │    7 bits     │
└────────┴───────────────┴───────────────┘

📂 Estructura del repositorio

Simulador-interactivo-de-maquina-simple/
│
├── css/
│   └── styles.css          Estilos retro-industrial (IBM Plex Mono)
│
├── js/
│   ├── cpu.js              Núcleo CPU: createCPU, cloneCPU, decode, stepCPU
│   ├── assembler.js        Ensamblador 2 pasadas + 4 ejemplos
│   ├── app.js              Estado global y controladores
│   └── ui.js               Renderizado completo con innerHTML
│
├── assets/
│   ├── favicon.svg         Icono chip CPU
│   └── arquitectura.svg    Diagrama de arquitectura
│
├── docs/
│   ├── arquitectura.md     Hardware: buses, memorias, registros
│   ├── isa.md              Juego de instrucciones detallado
│   ├── ensamblador.md      Referencia del lenguaje ensamblador
│   └── simulador.md        Guía de uso de la interfaz
│
├── examples/
│   ├── multiplicacion.asm  Multiplicación por sumas repetidas
│   ├── suma.asm            Suma de dos números
│   ├── contador.asm        Contador 0..N (ideal para breakpoints)
│   └── maximo.asm          Comprobación de igualdad
│
├── index.html              Punto de entrada (carga css/ + js/)
├── .gitignore
├── CHANGELOG.md
├── CONTRIBUTING.md
└── LICENSE

🖥️ Ejecución en local

El simulador es HTML + CSS + JS puro. Solo necesitas estos ficheros:

index.html
css/styles.css
js/cpu.js
js/assembler.js
js/app.js
js/ui.js

Cópialos a cualquier carpeta y abre index.html en el navegador. Sin instalación, sin compilación.

⚠️ Si la página aparece en blanco, el navegador puede estar bloqueando scripts locales por CORS.
Solución: abre una terminal en la carpeta y lanza un servidor mínimo:

# Python (macOS / Linux — viene instalado)
python3 -m http.server 8080
# → http://localhost:8080

# VS Code: clic derecho sobre index.html → Open with Live Server

🚀 O usa directamente la demo en vivo sin instalar nada.


🔧 Flujo de trabajo del ensamblador

Código fuente (.asm)
        │
        ▼
  Pasada 1: recoger etiquetas → symCode{}, symData{}
        │
        ▼
  Pasada 2: generar código máquina
        │
        └─▶ mem[128]     → Memoria unificada (instrucciones + datos)
                │
                ▼
          createCPU(mem)
                │
                ▼
          stepCPU() × N   ← fetch → decode → execute

📚 Documentación

Documento Contenido
Arquitectura Diagrama de bloques, buses, memorias, ciclo F-D-E
ISA Las 4 instrucciones con ejemplos y codificación binaria
Ensamblador Sintaxis, etiquetas, directivas, ejemplos
Simulador Guía de uso de la interfaz, breakpoints, traza
Ejemplos 4 programas comentados listos para cargar
Contribuir Cómo contribuir al proyecto
Changelog Historial de versiones

📄 Licencia

MIT — libre para uso docente y académico.


Desarrollado para la asignatura de Arquitectura de Computadores · Universidad de Vigo

About

Simulador didáctico de una CPU de arquitectura sencilla, orientado a la docencia de Arquitectura de Computadores. Funciona directamente en el navegador — sin instalación, sin frameworks pesados.

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors