Español abajo
When I made the JTBUBL (Bubble Bobble, Tokio) core, I had to limit it to certain game versions that used a MCU (Micro Controller Unit) for which I had found a Verilog module. That meant putting the original Tokio version aside and working only with the bootleg. The same happened with Renegade too, where I had to hide the MRA for the original version and use one for a bootleg instead. Not only that was a limitation I didn't like. But, I also had no idea whether the MCU module I was using was cycle accurate.
Come forward to Halloween 2023, I presented JTSHOUSE, featuring Splatter House support on FPGA. It worked using the same MCU with some patches as I had discovered several things:
About the same time, LordBarker80, a patron and proud owner of a Japanese Bubble Bobble board, contacted me about slowness in the core, compared to his system. Again, the smoking gun was that MCU implementation.
It was clear that I needed to have my own modules for all these MCUs (at least four models for now). But my experience designing CPUs has been a mixed bag. QSound's DSP16 wasn't too bad but the NeoGeo Pocket CPU was a hard design that got even more complicated when I tried to work on it with an unexperienced team. Having learnt from that, I approached the Konami CPU using a mix of 50% microcode, 50% hardware. That went much better.
Microcoding is a digital design technique were the sequencing of a state machine (such as a CPU) is encoded in a memory. The way you describe the entries in the memory has some resemblance to assembly code, hence the term. Microcoding is more readable, debuggable and understandable than regular digital logic. Making debugging as less painful as possible is a design priority for me, after the NGP experience. So this time I tried a more radical approach:
With these design goals, I wrote my own automation tools and got three radically different MCU models (MC6801, MC6805 and HD63701Y0) working in just two weeks. With this approach, all these MCUs are cycle accurate by construction (even the interrupt service timing is exact). My tools even print a report of the number of clock ticks that each processor instruction takes and compare it to the specification. I have attached images of these reports for the three devices. Thanks to this new development, we now have support for the original game versions that relied on an MCU:
New Supported Versions
About the speed discrepancy, LordBarker80 and I went back and forth testing new core iterations. The old JTBUBL (version v1.3.2) had a delay of 2.85" after 9'24", or roughly 85 microseconds/frame. The new version delay is only 30 microseconds/frame. This is a huge improvement, as we have more than halved the speed difference. But, I was expecting it to be perfect. I thought the crystal oscillator in the Bubble Bobble board may have become faster over time (a phenomenon called aging in the industry). But after measuring a few boards in our lab, aging could only account for 0.02% or some 3 microseconds/frame. So there must be something else going on. Now that I am confident that the MCU is reliably built, I can double check other items in the core.
This new approach and tools will be applied to Splatter House and Double Dragon, fixing the MCU accuracy in both of them. There are many other games that directly use the same MCUs. Just to mention a few for which I already have traction on:
I am also going to apply this approach to the NeoGeo Pocket CPU and re-design it from scratch. I think it will be faster and more enjoyable than to continue debugging the current core. So, yes that core was on hold while I was looking for a way to tackle the CPU debugging. This is the approach I needed.
As I announced in October, I have modified the entry-level tiers for new members. I want to say thanks to long-time supporters by keeping their tier price fixed. Current members will not see changes to their tier and price.
Español
Cuando hice el núcleo JTBUBL (Bubble Bobble, Tokio), tuve que limitarlo a ciertas versiones del juego que utilizaban una MCU (Micro Controller Unit) para la que había encontrado un módulo Verilog. Eso significó dejar de lado la versión original de Tokio y trabajar sólo con la pirata. Lo mismo ocurrió con Renegade, en el que tuve que ocultar el MRA de la versión original y utilizar en su lugar uno pirata. No sólo era una limitación que no me gustaba. Además, no tenía ni idea de si el módulo MCU que utilizaba era preciso para el ciclo.
Llegados a Halloween de 2023, presenté JTSHOUSE, con soporte para Splatter House en FPGA. Funcionó usando la misma MCU con algunos parches, ya que había descubierto varias cosas:
Más o menos al mismo tiempo, LordBarker80, un mecenas y orgulloso propietario de una placa japonesa Bubble Bobble, se puso en contacto conmigo acerca de la lentitud del núcleo, en comparación con su sistema. De nuevo, la pistola humeante era la implementación de la MCU.
Estaba claro que necesitaba tener mis propios módulos para todas estas MCUs (al menos cuatro modelos por ahora). Pero mi experiencia diseñando CPUs ha sido una de cal y una de arena. El DSP16 de QSound no fue difícil, pero la CPU de la NeoGeo Pocket era un diseño muy enrevesado que se complicó aún más cuando intenté trabajar en él con un equipo sin experiencia. Tras aprender de aquello, abordé la CPU de Konami utilizando una mezcla de 50% de microcódigo y 50% de hardware. Eso fue mucho mejor.
El microcódigo es una técnica de diseño digital en la que la secuencia de una máquina de estados (como una CPU) se codifica en una memoria. La forma de describir las entradas en la memoria tiene cierto parecido con el código ensamblador, de ahí el término. La microcodificación es más legible, depurable y comprensible que la lógica digital normal. Hacer la depuración lo menos dolorosa posible es una prioridad de diseño para mí, después de la experiencia con la NGP. Así que esta vez he intentado un enfoque más radical:
Con estos objetivos de diseño, escribí mis propias herramientas de automatización y conseguí que tres modelos de MCU radicalmente diferentes (MC6801, MC6805 y HD63701Y0) funcionaran en sólo dos semanas. Con este enfoque, todos estos MCU son precisos en cuanto al ciclo (incluso la temporización del servicio de interrupción es exacta). Mis herramientas incluso imprimen un informe del número de pulsaciones de reloj que tarda cada instrucción del procesador y lo comparan con la especificación. He adjuntado imágenes de estos informes para los tres dispositivos. Gracias a este nuevo desarrollo, ahora tenemos soporte para las versiones originales del juego que dependían de una MCU:
Nuevas versiones soportadas
Acerca de la discrepancia de velocidad, LordBarker80 y yo probando sucesivas iteraciones del núcleo. El antiguo JTBUBL (versión v1.3.2) tenía un retardo de 2.85" después de 9'24", o aproximadamente 85 microsegundos/fotograma. El retardo de la nueva versión es de sólo 30 microsegundos/fotograma. Es una mejora enorme, ya que hemos reducido a menos de la mitad la diferencia de velocidad. Pero esperaba que fuera perfecto. Pensé que el oscilador de cristal de la placa Bubble Bobble podría haberse vuelto más rápido con el tiempo (un fenómeno llamado envejecimiento en la industria). Pero después de medir unas cuantas placas en nuestro laboratorio, el envejecimiento sólo podía explicar el 0,02% o unos 3 microsegundos/fotograma. Así que tiene que haber algo más. Ahora que estoy seguro de que la MCU está construida de forma fiable, puedo volver a comprobar otros elementos del núcleo.
Este nuevo enfoque y herramientas se aplicarán a Splatter House y Double Dragon, arreglando la precisión de la MCU en ambos. Hay muchos otros juegos que utilizan directamente las mismas MCU. Por mencionar sólo algunos que estamos mirando:
También voy a aplicar este enfoque a la CPU de NeoGeo Pocket y rediseñarla desde cero. Creo que será más rápido y divertido que seguir depurando el núcleo actual. Así que, sí, ese núcleo estaba en espera mientras yo estaba buscando una manera de abordar la depuración de la CPU. Este es el enfoque que necesitaba.
Como anuncié en octubre, he modificado los niveles de entrada para los nuevos miembros. Quiero dar las gracias a los que me apoyan desde hace tiempo manteniendo fijo el precio de su nivel. Los miembros actuales no verán cambios en su nivel y precio.
Quinterrya Swanson
2023-12-29 14:07:45 +0000 UTCDatGeekUKnow
2023-12-20 02:39:08 +0000 UTCDarkStar7
2023-12-19 18:33:32 +0000 UTCNacho
2023-12-13 22:18:27 +0000 UTCNacho
2023-12-13 21:56:42 +0000 UTCmpatou
2023-12-12 12:31:53 +0000 UTCHiddenbyleaves
2023-12-12 09:39:41 +0000 UTCmpatou
2023-12-12 09:04:00 +0000 UTCJOTEGO
2023-12-12 06:28:46 +0000 UTCmpatou
2023-12-11 20:06:20 +0000 UTCOwlnonymous
2023-12-11 15:10:42 +0000 UTCLoBai Zen
2023-12-10 03:57:02 +0000 UTCJOTEGO
2023-12-09 20:46:34 +0000 UTCMysterious Benefactor
2023-12-09 19:59:43 +0000 UTCDr Tenma
2023-12-09 18:20:48 +0000 UTCmpatou
2023-12-09 16:04:00 +0000 UTCMatthew Caron
2023-12-09 14:15:11 +0000 UTCJohn Fletcher
2023-12-09 00:05:25 +0000 UTCThorias
2023-12-08 21:43:19 +0000 UTCBedwablackburn
2023-12-08 20:39:44 +0000 UTCAlexander Vasquez
2023-12-08 18:50:10 +0000 UTCTrey S.
2023-12-08 18:44:00 +0000 UTCMike Chapa
2023-12-08 17:22:16 +0000 UTCMat Azel
2023-12-08 17:22:00 +0000 UTCDaniel Thomas Stack
2023-12-08 17:15:11 +0000 UTCLukas Schaper
2023-12-08 17:08:29 +0000 UTCLiteUp X
2023-12-08 17:04:16 +0000 UTCDwight Davis
2023-12-08 17:04:13 +0000 UTCBaz M
2023-12-08 16:58:04 +0000 UTCRichard Maxey
2023-12-08 16:57:36 +0000 UTCjoshewah777
2023-12-08 16:44:34 +0000 UTCCory Stargel
2023-12-08 16:44:12 +0000 UTCFabio Degrassi
2023-12-08 16:27:39 +0000 UTCronalvel .
2023-12-08 16:27:14 +0000 UTCStephen Marshall
2023-12-08 16:25:21 +0000 UTCPixel Cherry Ninja
2023-12-08 16:24:25 +0000 UTCJOTEGO
2023-12-08 16:19:23 +0000 UTC