Capturas del juego



Qué ofrece Shatranj
- Modos de juego: Spectrum vs Spectrum (Direct TCP / MQTT) y Spectrum vs PC (cliente Qt).
- Interfaz completa dentro de 48K: pantallas de configuración, selección de color, entrada de jugadas, relojes, historial, chat, propuestas de tablas, rendición y reinicio.
- Tablero y piezas: tres sets de 16×16 (BRRY, SPCY, PIXL) y cinco paletas de color.
- Transporte: Direct TCP para pares alcanzables y MQTT para céspedes en NAT/CGNAT.
- Protocolo legible: mensajes de aplicación (HELLO, GAME START, MOVE, ACK/NACK, CHAT, PING) para facilitar la depuración hardware.
Aspectos técnicos y desarrollo
Shatranj es un proyecto híbrido diseñado específicamente para las restricciones del ZX Spectrum 48K y para interoperar con un cliente moderno en PC:
- Plataforma Spectrum: imagenes y runtime empaquetados como release (SHATRANJ.tap, SHATRANJ.OVL, SHATRANJ.DAT). La OVL contiene rutas de código "frío" y la DAT activos; ambos son necesarios para un arranque correcto.
- Lenguajes y toolchain: z88dk (zcc) + SDCC para el código C y partes en C++, con optimizaciones de tamaño (--opt-code-size, --fomit-frame-pointer) y uso de sdcc_iy para ABI. Segmentos críticos y rutinas de I/O se implementan en ASM Z80 a mano para ahorrar memoria y cumplir la interfaz con ROM IM1.
- Overlay y carga: uso de esxDOS/divMMC para cargar overlays que reducen la huella residente; generadores de overlays y comprobaciones de tamaño están incluidos en herramientas del repo.
- Red y hardware: soporte para ESP-AT UART (divMMC/ZX-Uno compatibles) para conectar a redes mediante TCP directo o brokers MQTT; el diseño separa claramente la capa de transporte de la lógica de sesión para mantener el protocolo legible y depurable.
- Cliente PC: implementado con Qt (interfaz gráfica, log RX/TX, modos Direct/MQTT), compilable con Makefile que selecciona MSVC/Qt en Windows y CMake/qmake en macOS/Linux. Permite jugar haciendo click en las casillas y enviar comandos de chat (/draw, /resign).
- Motor de ajedrez: integración de mcu-max (motor compacto, MIT) como dependencia de terceros para lógica de juego en entornos de recursos limitados.
Cómo jugar — guía rápida
1) En el Spectrum, en Connection Setup selecciona Direct TCP (host o guest) o MQTT (broker, puerto y room).
2) En Game Setup ajusta paleta y set de piezas, selección de color y opciones de notación/hints.
3) Si eres host, inicia la partida cuando el peer esté conectado. Si eres guest, espera el mensaje GAME START y confirma. Durante la partida escribe jugadas en notación coordenada (por ejemplo: e2e4) para mover o escribe texto para chat. Usa /draw y /resign para ofertas y rendición.
Comandos y protocolo (ejemplos)
Direct TCP (ejemplo de intercambio):
HELLO DIRECT HOST|GUEST GAME START WHITE=HOST|GUEST MOVE <ply> <move> ACK <ply> NACK <ply> CHAT <text> PING / ACK PING
MQTT (ejemplo simplificado):
H W|B <sid> J <sid> GAME START MOVE / ACK / NACK / CHAT PING / ACK PING
Requisitos y construcción
- ZX Spectrum 48K con divMMC/esxDOS o entorno compatible para cargar TAP/OVL/DAT.
- ESP-AT o puerto UART compatible para la ruta de red en hardware real (opcional si se usa cliente PC).
- Toolchain: z88dk + SDCC para compilar la parte Spectrum. Makefile incluido:
make tap PORT=5000para generar TAPs y pruebas locales. - Cliente PC:
make clientpara compilar el cliente Qt; en Windows la build empaqueta release enrelease/shatranj-client/shatranj-client.exe.
Documentación y código
Repositorio principal y documentación técnica (manuales de arquitectura, política MQTT, layout de fuentes y scripts de generación) se encuentran en el README y la carpeta docs/. Recomendado revisar:
Créditos
Autor: Ignacio Monge García (2026). Agradecimientos y créditos por piezas y librerías en la sección Acknowledgements del repositorio; incluye BRRY, SPCY, PIXL y el motor mcu-max.
Conclusión
Shatranj es un proyecto técnico muy notable: lleva la experiencia de ajedrez en red al ZX Spectrum respetando sus limitaciones físicas y aportando una pila de red robusta y depurable (Direct TCP y MQTT). Ideal para entusiastas del retro-hardware que quieran jugar en máquinas reales o experimentar con integración hardware↔software. Para desarrolladores, la separación clara de capas, el uso de overlays y las comprobaciones de ABI hacen que el código sea un buen ejemplo de trabajo sobre plataformas con memoria extremadamente limitada.

Comentarios
Publicar un comentario