Skip to content

Santitub/PyDMG

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

12 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

PyDMG ๐ŸŽฎ๐Ÿ”ฅ

Ask DeepWiki Python 3.7+ License: MIT Status: Active

Un emulador de Game Boy Classic de alto rendimiento escrito en Python y optimizado con Cython para lograr velocidad de juego completa con precisiรณn de ciclo.


โšก Rendimiento

Modo Python Puro Con Cython Speedup
Normal ~20 FPS ~60 FPS 3x
Turbo ~5 FPS ~50 FPS 10x

Benchmarks en Intel Core i5-1135G7 @ 2.40GHz. El turbo mode ejecuta 4 frames por ciclo.


๐ŸŽฏ Caracterรญsticas Principales

  • ๐ŸŽฎ Emulaciรณn Precisa: Timing de CPU por ciclo, PPU con modos de renderizado exactos
  • โšก Rendimiento Extremo: Optimizado con Cython, SIMD AVX2 y Link-Time Optimization
  • ๐Ÿ”Š Audio de Calidad: 4 canales (Pulse, Wave, Noise) a 22.050Hz stereo
  • ๐Ÿ’พ Save States: 10 slots con compresiรณn zlib (F5/F7)
  • ๐ŸŽจ Paletas de Color: 4 paletas integradas (DMG, Verde, Gris, Pocket)
  • ๐Ÿ“€ Soporte MBC: ROMs sin MBC, MBC1, MBC2, MBC3 (con RTC), MBC5
  • ๐Ÿ’พ SRAM con Baterรญa: Guardado automรกtico de partidas (.sav)
  • ๐Ÿš€ Modo Turbo: Ejecuta hasta 4x velocidad (mantรฉn ESPACIO)
  • ๐Ÿ› ๏ธ CPU Auto-Detect: Se adapta automรกticamente a tu procesador

๐Ÿ“ฆ Requisitos

PySDL2>=0.9.14
numpy>=1.19.0
cython>=0.29.0
pysdl2-dll>=2.0.0  # Para Windows (SDL2 precompilado)
py-cpuinfo>=9.0.0
setuptools>=58.0.0

๐Ÿ”ง Instalaciรณn

Linux / macOS

# 1. Clonar repositorio
git clone https://github.com/Santitub/pydmg.git
cd pydmg

# 2. Instalar dependencias
pip install -r requirements.txt

# 3. Compilar extensiones Cython (crรญtico para rendimiento)
python setup.py build_ext --inplace

# 4. Ejecutar
python main.py roms/tetris.gb

Windows

# 1. Clonar
git clone https://github.com/Santitub/pydmg.git
cd pydmg

# 2. Instalar dependencias (incluye SDL2 precompilado)
pip install -r requirements.txt

# 3. โš ๏ธ INSTALAR COMPILADOR C++ (PASO OBLIGATORIO)
#    Descarga "Visual Studio Community" e instala:
#    "Desarrollo para el escritorio con C++"
#    Incluye: MSVC, CMake y herramientas de Windows para C++
#    Link: https://visualstudio.microsoft.com/visual-cpp-build-tools/

# 4. Compilar
python setup.py build_ext --inplace

# 5. Ejecutar
python main.py roms\tetris.gb

โš ๏ธ IMPORTANTE: En Windows, DEBES instalar las herramientas de C++ de Visual Studio antes de compilar Cython. Sin ellas, la compilaciรณn fallarรก con errores de "vcvarsall.bat no encontrado".

โš ๏ธ RENDIMIENTO: Sin la compilaciรณn Cython, el rendimiento serรก ~20 FPS. La compilaciรณn habilita optimizaciones AVX2 y LTCG automรกticamente segรบn tu CPU.


๐ŸŽฎ Controles

Controles del Juego

Tecla Botรณn GB
โ†‘โ†“โ†โ†’ D-Pad
Z / A A
X / S B
Enter Start
Shift Select

Controles del Emulador

Tecla Funciรณn
F1 Mostrar ayuda
P Pausar/Continuar
C Cambiar paleta de color
M Silenciar/Activar audio
R Resetear juego
D Modo debug (FPS log)
Space Turbo (mantener)
ESC Salir
Save States
F5 Guardar estado
F7 Cargar estado
F6 / F8 Slot anterior/siguiente
0-9 Seleccionar slot directo

๐Ÿš€ Compilaciรณn Avanzada

Modos de Compilaciรณn

El setup.py detecta automรกticamente tu CPU y aplica flags optimizados:

# Compilaciรณn estรกndar (detecta CPU automรกticamente)
python setup.py build_ext --inplace

# Mantener archivos C intermedios (para debug)
KEEP_CYTHON_FILES=1 python setup.py build_ext --inplace

# Para distribuciรณn (compatibilidad mรกxima)
python setup.py build_ext --inplace --force-compat

Flags por CPU

CPU Flags Aplicados Rendimiento
Moderna (AVX2) /arch:AVX2, -march=native, LTO, unroll loops โญโญโญโญโญ
Antigua (Genรฉrico) /O2, -march=x86-64, tune genรฉrico โญโญโญ

๐Ÿ—๏ธ Arquitectura Tรฉcnica

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚           main.py (SDL2 Frontend)       โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                  โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚         GameBoy (Orchestrator)          โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  CPU      โ”‚  PPU      โ”‚  APU      โ”‚ MMU โ”‚
โ”‚  (LR35902)โ”‚  (LCD)    โ”‚  (Audio)  โ”‚     โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”˜
     โ–ฒ           โ–ฒ          โ–ฒ           โ”‚
     โ”‚           โ”‚          โ”‚           โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Timer   โ”‚ โ”‚ Window โ”‚ โ”‚ SDL2  โ”‚ โ”‚ MBC1/2/3/5   โ”‚
โ”‚          โ”‚ โ”‚ Spritesโ”‚ โ”‚ Queue โ”‚ โ”‚ SRAM .sav    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Componentes Core

  • CPU: Dispatch table de 256 handlers, timing por M-cycle, HALT bug implementado
  • PPU: Memoryviews de Cython, renderizado scanline, 4 modos exactos
  • APU: Generaciรณn por lotes, 4 canales, buffer de 512 samples, SDL_QueueAudio
  • MMU: MBC completo, baterรญa SRAM, DMA, memoria conectada
  • Timer: Div preciso por ciclo, 4 frecuencias seleccionables

๐ŸŽจ Ejemplos de Paletas

Paleta Previsualizaciรณn Uso
dmg ๐ŸŸซ๐ŸŸฉ๐ŸŸฉ๐ŸŸซ Clรกsico Game Boy
green ๐ŸŸฉ๐ŸŸฉ๐ŸŸฉ๐ŸŸฉ Pantalla verde original
gray โฌœโฌœโฌœโฌœ Escala de grises pura
pocket โฌœโฌœโฌœโฌœ Game Boy Pocket

๐Ÿ› ๏ธ Desarrollo

# Instalar en modo editable
pip install -e .

# Ejecutar tests (si los hay)
pytest tests/

# Perfilado de rendimiento
python -m cProfile -o profile.stats main.py rom.gb

๐Ÿ“ธ Capturas de Pantalla

Tetris en acciรณn Classic Tetris corriendo a 60 FPS

Zelda: Link's Awakening The Legend of Zelda: Link's Awakening DX


โญ Si te gusta este proyecto, ยกdale una estrella en GitHub!

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors