Ayer estuvimos hablando del tema este de la Neo Geo en el canal de Telegram de Megadrive Dev, y Cegonse, que a parte de programar sabe de hardware un rato, dió esta solución:
Como hacer un framebuffer por hardware en Neo-Geo (receta para peña trastornada)
- En NGS tenemos en la CHA board el C-bus (character ROM data), F-bus (fix layer data) y PA-bus (paleta, addresses, latches, etc)
- A partir de tiles accesibles desde el F-bus podemos formar el fix plane con 40H28V tiles (320x224 px)
- Esta información la fetchea la consola a partir del P bus y el F bus directamente a la hora de pintar
- Es sólo lectura: no hay señales de escritura disponibles en el bus
- En el P bus de la PRG board, tienes disponible R/W (como si fuese LWR+UWR en Mega)
- Desde el P bus, puedes controlar si el 68k escribe en alguna región que tiene mapeada
- Puedes mapear un rango de direcciones de la P1/2-ROM a una dual port RAM en la CHA board (conectandola con un flex cable o algo asi de una board a otra
- El 68k tiene accesible esa dual port RAM para hacer un framebuffer de forma directa
- El VDP accede a los tiles del FIX plane a partir de ese dual port RAM
Habria que meter lógica en varios lados seguro para la gestionar el bus de los gráficos porque las señales de control van multiplexadas en tiempo y espacio (multiplexa en 4 ciclos cada ciclo de lectura, en plan primero odd address, luego even address, luego upper byte, luego lower byte, etc)
Con una dual port RAM de 128 KB te daría para tener un doble buffer full screen
Y 128 KB es justo lo máximo que puedes direccionar de FIX tiles sin meter bank switching
Básicamente, todo lo mapeado de del C-bus y el F-bus es solo lectura, no puedes escribir ahí, así que parecería que no puedes escribir en ninguna CHR-RAM en el cartucho.
No obstante, Cegonse propone hacer un remapeo desde el bus P a una ram que tienes mapeada en el bus de la CHA board. Escribiendo en el bus P, darias instrucciones para crear gráficos en la CHR_RAM que leerías por el bus C.
Se habría de comprobar si es factible con la lógica adicional que necesitarías para gestionar las señales de los diferentes buses, pero podría hacerse parece.