NGP Development Update / 1942/Higemaru for Pocket (Patreon)
Downloads
Content
2023-12-29 NGP Development Update / 1942/Higemaru for Pocket
Español abajo
NeoGeo Pocket Update
The NeoGeo Pocket core is the worst time to market from my career. I have worked on and off on it for the last two years. During some months, it has been the main focus. I also tried to have three different developers work on test tasks on the system CPU and the whole core with little results. Sadly, after two years, the NGP core was crashing and we could not find the bug. I put the development on hold two months ago in order to reconsider it.
The complication with this core has been the Toshiba 900H CPU. This is a 16-bit CISC CPU that tries to be a hypervitaminated Z80. The instruction encoding is very diverse, going from 1 to ~8 bytes per instruction. And the operations these instructions perform are all but uniform. These two conditions translated to a very convoluted design, with lots of exceptions and long files. Each time I added a new feature to the CPU, I felt like I was less in control of the design. That was a bad feeling. The complexity also made it difficult to hop back and forth from this project to another one, as it took a couple of days to get my head around it each time I resumed it.
I decided to redesign it optimizing development time and debugability over FPGA resources. Normally, a hardware engineer would optimize for less resource usage. But in our case, it has no impact to the user whether 40% or 80% of their FPGA is used on a given core. I changed the CPU architecture to a microcoded one. This means that the CPU is built by combining a number of simpler hardware elements with a control logic that follows a sequence defined in software-like way.
Having microcode for each one of the CPU instructions reversed the feelings about the CPU. This time around, adding a new feature felt like I understood the design better and everything was coming together nicely. Many of the complex operations that required specific implementations before could be broken down into combinations of smaller operations in sequence, so the hardware became much easier.
The hardware simplification can be stated in terms of lines of code. The old design had 4.1k lines of Verilog, whereas the new one is about 1k. That's 4 times less! It's true that the new one also has 1k lines of microcode, of which 300 are instruction definitions and 700 are the instruction sequences.
After two weeks of work, all instructions are implemented in the new design. I am moving next to the test phase using the unit tests I had developed for the old design. Then I will connect it to the rest of the NeoGeo Pocket system. I will give another update in two weeks.
1942, Pirate Ship Higemaru and Vulgus for the Analogue Pocket
The updated JT1942 MiSTer core comes to the Pocket. This core supports three of the first CAPCOM games: 1942, Pirate Ship Higemaru and Vulgus. These games are the initial work that the old Konami developers made when they moved to CAPCOM. But from the three, only Fujiwara's Higemaru has some Konami flavour to it. Fujiwara had worked on Pooyan and Roc'N Rope in Konami, games with no scroll and cute characters where playability was the design goal. Higemaru also falls in that category.
The fourth starting title for CAPCOM is SonSon. I have not made a core for it yet. Every now and then I check whether there is a reasonably priced PCB available but have not been lucky yet. I hope we will get access to it soon.
I hope you enjoy your Christmas Eve.
Español
Noticias de la NeoGeo Pocket
El núcleo de NeoGeo Pocket es el proyecto con más retraso de mi carrera. He trabajado en él de forma intermitente durante los dos últimos años y durante algunos meses, ha sido la tarea principal. También intenté que tres desarrolladores diferentes realizaran tareas de prueba en la CPU del sistema y en todo el núcleo, con escasos resultados. Lamentablemente, después de dos años, el núcleo NGP se bloqueaba y no pudimos encontrar el fallo. Hace dos meses dejé en suspenso el desarrollo para reconsiderarlo.
La complicación con este núcleo ha sido la CPU Toshiba 900H. Se trata de una CPU CISC de 16 bits que intenta ser un Z80 hipervitaminado. La codificación de las instrucciones es muy diversa, yendo de 1 a ~8 bytes por instrucción. Y las operaciones que realizan estas instrucciones son casi uniformes. Estas dos condiciones se tradujeron en un diseño muy enrevesado, con montones de excepciones y archivos largos. Cada vez que añadía una nueva función a la CPU, tenía la sensación de controlar menos el diseño. Era una mala sensación. La complejidad también dificultaba alternar este proyecto y otro, ya que tardaba un par de días en entender el diseño cada vez que lo retomaba.
He decidido rediseñarlo optimizando el tiempo de desarrollo y la depurabilidad sobre los recursos de la FPGA. Normalmente, un ingeniero de hardware optimizaría para utilizar menos recursos. Pero en nuestro caso, no tiene ningún impacto para el usuario si el 40% o el 80% de su FPGA se utiliza en un núcleo determinado. He cambiado la arquitectura de la CPU por una microcodificada. Esto significa que la CPU se construye combinando una serie de elementos de hardware más sencillos con una lógica de control que sigue una secuencia definida de manera similar al software.
Tener microcódigo para cada una de las instrucciones de la CPU invirtió las sensaciones sobre ésta. Esta vez, al añadir una nueva función sentía que entendía mejor el diseño y que todo encajaba a la perfección. Muchas de las operaciones complejas que antes requerían implementaciones específicas podían descomponerse en combinaciones de operaciones más pequeñas en secuencia, por lo que el hardware se hizo mucho más sencillo.
La simplificación del hardware puede expresarse en términos de líneas de código. El antiguo diseño tenía 4,1k líneas de Verilog, mientras que el nuevo tiene alrededor de 1k. Es decir, ¡4 veces menos! Es cierto que el nuevo también tiene 1.000 líneas de microcódigo, de las cuales 300 son definiciones de instrucciones y 700 son secuencias de instrucciones.
Tras dos semanas de trabajo, todas las instrucciones están implementadas en el nuevo diseño. A continuación paso a la fase de pruebas utilizando las pruebas unitarias que había desarrollado para el diseño antiguo. Después, lo conectaré al resto del sistema NeoGeo Pocket. Dentro de dos semanas volveré a informar del progreso.
1942, Pirate Ship Higemaru y Vulgus para la Analogue Pocket
El núcleo actualizado JT1942 de MiSTer llega a la Pocket. Este núcleo soporta tres de los primeros juegos de CAPCOM: 1942, Pirate Ship Higemaru y Vulgus. Estos juegos son el trabajo inicial que hicieron los antiguos desarrolladores de Konami cuando se trasladaron a CAPCOM. Pero de los tres, sólo el Higemaru de Fujiwara tiene algo de sabor a Konami. Fujiwara había trabajado en Pooyan y Roc'N Rope en Konami, juegos sin scroll y con personajes simpáticos en los que la jugabilidad era el objetivo del diseño. Higemaru también entra en esa categoría.
El cuarto título de partida para CAPCOM es SonSon. Aún no he creado un núcleo para él. De vez en cuando compruebo si hay alguna PCB disponible a un precio razonable, pero aún no he tenido suerte. Espero que pronto podamos acceder a ella.
Espero que disfrutes de tu Nochebuena.