Shatranj: ajedrez online

Shatranj portada
Shatranj es la primera implementación que permite a un ZX Spectrum 48K jugar partidas de ajedrez en línea compartiendo un único tablero entre dos máquinas reales o contra un cliente de PC. El proyecto reúne desarrollo en C/C++, ASM y Qt, y está pensado para ejecutarse dentro de los límites de 48K RAM del Spectrum.

Capturas del juego

Pantalla principal

Partida en progreso

Configuración de red

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=5000 para generar TAPs y pruebas locales.
  • Cliente PC: make client para compilar el cliente Qt; en Windows la build empaqueta release en release/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.

Enlaces

Comentarios