Skip to content

aayes89/jSimpleCPU

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 

Repository files navigation

jSimpleCPU

Implementación de una CPU en Java con manejo de varios tipos de instrucciones.

SimpleCPU

Versión mejorada y depurada de la implementación anterior.
Operaciones:

  • suma (ADD)
  • resta (SUB)
  • multiplicación (MULT)
  • división (DIV)
  • manejo de pila (PUSH,POP,POPA)
  • operaciones con registros (MOV, INC, DEC, LOOP, GO)

# Componentes principales Registros y Memoria:

accumulator: Acumulador para operaciones aritméticas y lógicas.
programCounter: Contador de programa que apunta a la siguiente instrucción a ejecutar.
memory: Memoria principal que utiliza un HashMap para almacenar valores en direcciones de memoria.
stack: Una pila utilizada para operaciones PUSH, POP y DEL.
carryFlag y overflowFlag: Banderas de estado para acarreo y desbordamiento.

Instrucciones:

Los opcodes están definidos como constantes de tipo byte, representando diversas instrucciones que la CPU puede ejecutar.

Método run(): Ejecuta un bucle hasta que la CPU se detenga (running = false). Decodifica la instrucción del memory en base al programCounter, descompone en opcode y operando. Ejecuta la instrucción correspondiente usando un switch en el opcode.

Instrucciones Aritméticas y Lógicas: ADD, SUB, ADC, SBC, AND, EOR, ORA, etc., realizan operaciones aritméticas y lógicas. Las instrucciones de desvío (JMP, JZ, BCC, BCS, etc.) modifican el programCounter basado en el estado de los flags y valores del acumulador.

Manejo de Pila: PUSH, POP, DEL gestionan el contenido de la pila.

Métodos de Configuración y Ejecución:

reset(): Inicializa el estado de la CPU.

loadProgram(int[] program, Map<Integer, Integer> initialMemory): Carga un programa en la memoria y configura valores iniciales en la memoria.

setMemory(int address, int value), getMemory(int address), getStackTop(): Métodos auxiliares para manipular la memoria y la pila.

Método main():

Ejecuta ejemplos de programas simples para probar la funcionalidad de la CPU.

Pendientes y Mejoras

Documentación:

Agregar comentarios y documentación más detallada sobre cada instrucción y el flujo general de la CPU.

Testeo:

Implementar una suite de pruebas unitarias para verificar que cada instrucción se comporta como se espera.

Optimización:

Revisar si hay oportunidades para optimizar el manejo de memoria y pila, especialmente en operaciones de alto nivel.

Expansión:

Extender la CPU para soportar más instrucciones o características, considerando un diseño modular y extensible desde el principio y no monolítico como ahora.

About

Implementación de una CPU virtual en Java

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages