MSX DIAGNOSTICS v1.2.0 - Documentación Técnica

Autor: Cesar Rincon "NightFox"
Plataforma: MSX (Z80)
Compilador: asMSX 0.19+

Tabla de Contenidos

1. Resumen Ejecutivo

MSX Diagnostics es una herramienta de validación de hardware diseñada bajo el paradigma "Bare Metal". A diferencia del software estándar de MSX, este programa minimiza la dependencia de la BIOS del sistema.

2. Mapa de Memoria

El sistema fuerza una distribución de memoria específica para evitar conflictos con áreas reservadas por el sistema anfitrión o la pila.

2.1 Mapa de Memoria RAM

Dirección Etiqueta Tipo Descripción
$0000 - $3FFF BIOS ROM Página 0 (Slot 0).
$4000 - $BFFF PROGRAMA ROM Código del cartucho y datos estáticos (Páginas 1 y 2).
$C000 - $E37F STACK / LIBRE RAM Área libre y Pila del sistema (Stack).
$E380 - $EB7F NGN_RAM_BUFFER RAM Buffer de 2KB. Usado para descompresión RLE, buffer de texto y variables volátiles.
$EB80 - $F380 VARIABLES RAM Variables Estáticas. Definidas en vars.asm. Ubicación forzada para seguridad.

2.2 Mapa de Memoria de Vídeo (VRAM - SCREEN 2)

Dirección Etiqueta Contenido
$0000 NGN_CHRTBL Pattern Table: Definición de los tiles (Caracteres).
$1800 NGN_NAMTBL Name Table: Mapa de la pantalla.
$1B00 NGN_SPRATR Sprite Attributes: Tabla de atributos de sprites.
$2000 NGN_CLRTBL Color Table: Tabla de colores para los tiles.
$3800 NGN_SPRTBL Sprite Patterns: Definición gráfica de los sprites.

3. Arquitectura del Software

3.1 Flujo de Arranque (Boot & POST)

  1. Inicialización (NGN_START): Espera estabilización de interrupciones, aplica parche al hook $FD9A (Watchdog), limpia variables y silencia el PSG.
  2. POST (Power On Self Test): Ejecuta FUNCTION_SYSTEM_POST. Emite 3 pitidos y parpadeos del LED CAPS LOCK. Objetivo: Feedback de vida (CPU OK) incluso si el chip de vídeo falla.
  3. Detección de Hardware: Escanea Slots, RAM e identifica el VDP.
  4. Lanzamiento: Cede el control a FUNCTION_MAIN.

3.2 Máquina de Estados del Menú

El programa no tiene un bucle único. Cada pantalla actúa como un estado independiente:

4. Análisis del Motor (N'gine)

4.1 Abstracción de Hardware (HAL)

El motor aísla la lógica mediante drivers de bajo nivel:

4.2 Watchdog de Sincronización

En ngn_system.asm, el hook $FD9A intercepta la interrupción. Si no es del VDP (Bit 7 de S0), retorna. Esto garantiza que el HALT del bucle principal sea un sincronizador vertical perfecto (50/60Hz).

5. Módulos de Diagnóstico

5.1 Detección de RAM y Mappers (Core)

Ubicación: memory_routines.asm. Algoritmo no destructivo:

  1. Barrido Topológico: Itera Slots y Sub-slots detectando expansión.
  2. Verificación de RAM: Lee byte -> Invierte bits (CPL) -> Escribe -> Lee -> Compara -> Restaura original.
  3. Detección de Mappers: Si detecta 64KB en un slot, realiza prueba de paginación escribiendo marcadores en el puerto $FC y verificando si los segmentos de memoria cambian.

5.2 Detección de VDP

Identifica el chip por comportamiento hardware, no por BIOS:

6. Compilación y Build

Se generan diferentes formatos mediante directivas condicionales en msxdiag.asm: