@ChepoXX Gracias. 🫂 Igualmente os paso una nueva versión antes de publicarla.
--------------------------Os pongo un sumario de los cambios que ha habido desde la versión v2.0 (la oficial hasta ahora) y las que habéis ido probando:
Sumario v2.0 → v2.1mLínea de versionesv2.0 — Punto de partidaCámara ampliada, extensión del cielo por HDMA y sistema IRQ de restauración de color (
$88:BA00). En flashcart aparecen: línea negra en el cielo (BC1-3, GV1-2, KB1-2, VL1), parpadeo de montañas en Bowser Castle, pantalla de "ranked out" oscura y 1 px que parpadea en la franja TT/2P.
v2.1cElimina la línea negra del cielo y el parpadeo de montañas.
Estado: Confirmado en FXPAK y SD2SNES.
v2.1dArreglo del IRQ del split (franja 2P/TT).
Estado: Confirmado en hardware.
v2.1gSolo cambia el valor de profundidad (
$0200) en la cámara 2 para bajar el coste de
$00:C730.
Estado: El tester de FXPAK: cámara 1 sin ralentizaciones; cámara 2 con ralentizaciones, críticas en Bowser Castle.
v2.1hPrimer parche de rendimiento (hecho aquí): los 4 objetos del pool de Bowser Castle (cadena
$E18D) saltan la proyección del DSP-1 en frames alternos y reusan temporales guardados.
Estado: Va más fluido. Su caché en
$7E:5100 pisaba datos reales.
v2.1i3Extensión a todos los circuitos, con una variante por familia de cadena.
Estado: Usado como base.
v2.1i4Caché movida a
$7F:D940 (34 bytes distintos).
Estado: Bien en emulador.
v2.1jCaché de seno/coseno de la cámara 2 (
$88:F400/F500) en
$7F:D980. Exacta: si el ángulo y la rampa no cambian, se reutiliza el resultado.
Estado: Sin medir.
v2.1k3Arreglo de los residuos de postes en Ghost Valley.
Estado: Revisado en detalle.
v2.1l$88:A800: los rivales lejanos (profundidad
$00C0-$0300) reutilizan la corrección vertical del frame anterior en lugar de repetir el DSP-1 (caché
$7F:D9C0).
Estado: Probado en un varios circuitos: nada raro.
v2.1mDetector de lag (
$34 frente a ticks, en
$80:806C) y modo ahorro de ~0,5 s: pool a 1 de cada 4 ticks y corrección reutilizada para todos los rivales. Se fuerza en Mesen con
5A A5 en
$7F:D9B4.
Estado: Sin probar.
Verificado en la ROM salvo marca- Mapeo: HiROM, 1 MB, con DSP-1.
- Cámara y circuito: $7E:0AF8 bit 0 vale 1 en la cámara 2; Bowser Castle es $0126 == $0C.
- Intérprete de objetos: hay hilos de punteros en ROM; el render va por $80:BAD7 (despacho en $BB22) y la lógica de karts por $80:BB6C. Cada frame hay 12-13 objetos: 7 karts, jugador, 1 objeto extra y un pool de 4 en $1800-$1980.
- Los pools por circuito: Bowser Castle ($E18D), Mario Circuit, Vanilla Lake 1 y Donut Plains 1 ($E4E9), Choco Island ($E070), Donut Plains 2 ($E36D), Koopa Beach 1 ($DF80) y Ghost Valley ($E700, sin paso de visibilidad).
- Dónde va el tiempo: ~291k ciclos de 357k por frame de media, con picos de hasta 388k. La cámara 2 solo añade ~2,7 % ($C730, $88:A800 y el seno/coseno).
- Lo que no se puede tocar: la lógica de los corredores ($AD48: estados, aceleración, DSP-1 de posición, temporizadores) es física e IA.
- Datos de los states: hay dos búferes de sprites ($0200 y $0420, este último +42 en Y). En Ghost Valley, los postes se dibujan detrás del fondo (prioridad 0).
- Trazas: PC == $80BB22 no funciona en Ghost Valley (archivos vacíos); falta la Copa Especial.
Lo que no se ha hecho- Lava, plataformas, muelles y cajas de ítems: sin identificar sus rutinas.
- El punto 2 (matrices Mode 7 por línea) no se sostiene con los perfiles.
- El caché de $80:A4D0 (DSP-1 por corredor) quedó sin implementar.
- Un recorte fuerte del render en lag (quedó pendiente de comprobar qué más actualiza $BAD7).
Pendiente o sin medir- Ninguna mejora de rendimiento está medida. Pendientes de confirmar.
- Probar la v2.1m, con y sin modo ahorro forzado, y mirar los topos de Donut Plains 2.
- Un A/B simple en FXPAK (v2.1g contra v2.1l o m) en el mismo tramo.
- Posibles residuos o falsos disparos del detector de lag al empezar carrera o tras pausas.
Material entregadoLas ROMs h, i4, j, l y m, los scripts de parcheo (
patch_v2_1h.py,
patch_v2_1m.py) y el paquete
SMK_Fullscreen_paquete.zip con ROMs, trazas, perfiles y contexto técnico.