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.
- Independencia de BIOS: Interactúa directamente con los puertos de I/O (VDP, PSG, PPI) para garantizar que los diagnósticos funcionen incluso si las rutinas de la BIOS están corruptas o si la configuración de memoria del sistema es anómala.
- Robustez Pragmática: Las rutinas de detección de memoria son no destructivas y capaces de identificar configuraciones complejas (Slots expandidos, Mappers) sin colgar el sistema.
- Arquitectura Modular: El núcleo se divide claramente entre el motor (N'gine) y la lógica de aplicación (Prog), facilitando la mantenibilidad.
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)
- Inicialización (
NGN_START): Espera estabilización de interrupciones, aplica parche al hook$FD9A(Watchdog), limpia variables y silencia el PSG. - 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. - Detección de Hardware: Escanea Slots, RAM e identifica el VDP.
- 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:
- Setup: Limpia VRAM, carga recursos y habilita pantalla.
- Bucle Local: Lee HID, procesa lógica, sincroniza con
HALT(V-Sync). - Teardown: Al salir, apaga pantalla y restaura el modo de vídeo.
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:
- VDP: Escritura directa en puertos
$98/$99. Usa Shadow RAM para sprites volcando datos solo en V-Blank. - PSG: Ignora la BIOS de sonido. Escribe directamente en los registros del AY-3-8910 (puertos
$A0-$A2). - PPI: Lee la matriz de teclado accediendo al PPI (
$A9-$AA), evitando la latencia deCHGET.
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:
- Barrido Topológico: Itera Slots y Sub-slots detectando expansión.
- Verificación de RAM: Lee byte -> Invierte bits (
CPL) -> Escribe -> Lee -> Compara -> Restaura original. - Detección de Mappers: Si detecta 64KB en un slot, realiza prueba de paginación escribiendo marcadores en el puerto
$FCy verificando si los segmentos de memoria cambian.
5.2 Detección de VDP
Identifica el chip por comportamiento hardware, no por BIOS:
- TMS vs V99xx: Escribe en registros exclusivos de V99xx y verifica cambios en S0/S2.
- V9938 vs V9958: Lee ID de chip en registro S1.
- Refresco: Cuenta ciclos de CPU entre dos V-Blanks para determinar 50Hz/60Hz.
6. Compilación y Build
Se generan diferentes formatos mediante directivas condicionales en msxdiag.asm:
- ROM (
f_rom.asm): Cabecera estándar, ORG $4000, padding a 32KB. - BIN (
f_binary.asm): Cabecera BLOAD, ORG $8000. - COM (
f_com.asm): ORG $0100 (MSX-DOS).