Coin-Op Collection Presents: Z-Unit (RC1)
🕑 Added 2024-09-07 19:07:02 +0000 UTCWell folks, I never even thought this would see the light of day on ANY current platform, but here we are. It is my dream come true!
For the first time the Williams Z Unit comes to an FPGA Platform: The Analogue Pocket. It took almost 2 years to get to this point, 6 of those months actually being spent on trying to make this core work on the MiSTer unsuccessfully. I failed over 500 times, I redid the CPU and the core at least 10 times experimenting with new and different ways to optimize things.
Despite all my failures with this core, and a lot of the MiSTer community bringing me down, I still never gave up, and well, here I am today. And I have the Y Unit working too. I hope you enjoy this long lost classic as much as I did when I was young.
Now some notes about the game:
NARC was actually the first ever "ultra-violent" video game by standards. It was revolutionary in not only its content, but also its technical demands from a board perspective.
Specs:
512x400 medium res @ 16mhz pixel clock.
1x TMS34010, 2x 6809, 1x YM2151, 1x HC55564 CVSD module.
The core runs at 128mhz, and the SDRAM has a 128MHz pll that's phase shifted to accommodate. It was challenging timing the core in general, because the higher you go, the more essential timing problems become. So, I spent a lot of time tuning different areas of the design and going through static timing analysis, and so on.
From a memory perspective, I created a hybrid memory system for the game. The game uses the entirety of the Pocket's external memory resources and FPGA memory resources. All BRAM M10k blocks are used.
The BRAM is used for bitmap ram, as well as for the line buffers. It also holds the memory for the 2 6809s and other temporary memories needed, the part of the CMOS RAM that is backed up as NVRAM, as well as color RAM.
The SRAM is used for the scratch (main) RAM and some part of the CMOS RAM that is essential for operation, but not backed up as NVRAM.
The PSRAM is loaded to at startup, and is used for the program rom.
The SDRAM is loaded to at the startup, and is used for the sound samples, program ROMs and graphics ROMs. It is also used as storage for palette RAM. Speaking on this, the SDRAM controller I use, which comes from JTFrame, only supports non-burst writes which are 16 bits. However, most of the time I am writing 32 or 64 bits, so this is the primary cause of some of the flickering that appears in the current release. I have talked with Jose, and he has committed to implementing burst writes in the next week. So, hopefully when I get that, I can resolve the flickering issues.
The core takes up around 87% of the logic. In order to make the game fit on the pocket, I cut the TMS34010's GPU from the core. The GPU is not essential, as it is only used to draw the POST screens and test menu. I have implemented some of the test menu options in the Analogue Pocket options for you, which is more complicated than it seems... I had to basically reverse engineer the CMOS memory and checksum system and put that in the core. Furthermore, I patch the ROM of the game to skip over the POST checks, but still do the VRAM test. So, after the VRAM test, it will go to the game.
Procedure for using / playing the core:
Place the contents of the package on your Analogue Pocket. You will need to find your own ROM set. Use the NARC ver. 7.00. The MRA is included in this post under the tools directory. Drag the .mra file and .zip (ROM) over mra.exe to assemble. Place the assembled ROM in Assets\narc\common.
Note, I include a "default" .sav file in Saves, however, this is unnecessary for you to place on your pocket. However, on first startup, you will get the RESET screen, at which it will prompt you to reset the game as CMOS was cleared. Just simply quit out of the core using the menu and start it up again, and your CMOS will be restored. Saving and reloading is accomplished automatically with the start and shutdown of the core.
Credits:
atrac17 - playtesting. He is the best tester there is, and I am glad he worked on this release. He helped me find many bugs with his superior attention to detail.
jotego - Framework/ NVRAM implementation - Thanks to Jose for JTFrame and also the NVRAM implementation he did on the pocket. Without this, we cant save CMOS RAM and it gets annoying. He has committed to also implementing burst write in the SDRAM controller so this way we can resolve flickering and improve performance.
dyreschlock/ platform image - really nice job on this.
Thanks, and hope you enjoy the game.
pram0d
Comments
Mike Holzinger
Paisley-mother-loving-boxers here. This is FINE work. I am glad to be in support of it.
Brian Dubin
Thank you so much!
atrac17
Yeah, it's not Mac friendly. I'll message you in the morning.
Brian Dubin
I tried to do this but it won't work on my mac. Oh well.
atrac17
Everything going forward will be the same except Technos ROM conversions. This is due to RLE compression that would be painful and time consuming to implement. For those games, you decompress the GFX data like the custom would do with the python script.
Dr. Manga
The process of converting the ROM has improved a lot. This time was much more easier. And, of course, thank you Pramod, Atrac17, Darren and the rest of the team for your great work.
atrac17
Mortal Kombat releases on Oct. 8th
El Nagual
that worked! Thank you :) What about Mortal Kombat?
atrac17
There's a tools directory that includes the .mra and mra.exe files. Locate a mame-merged or FBNEO NARC arcade ROM and place it in the tools directory. Select the .mra file and .zip file and drag them onto the mra.exe and it will generate a ROM.
El Nagual
It's a little too complicated to convert the ROM file for the first time :( I'll wait for October, I guess.
Tetra
Thank you! Fun to play these old ones. Adding in case it helps someone else, it said something about crc mismatch using mra.exe but worked anyway with the .rom file it created. I thought it had failed. Cheers Edit: It says md5 not crc sorry
worstJago
Works great, looking forward to the next releases!
Drew Alden
another MiSTer user :) thank you!!
John Fletcher
Thank you from a MiSTer user.
michael kilpert
thanks you got my favorite retro game on analogue pocket!!!
Geckofingers
Thanks guys, works great 👍🏻
Espiox
Incredible work, congrats!
Frank McDonald
Amazing work!
Trifle
Many thanks for your contributions, team!
Shannon Thomasson
Thanks for the hard-work from you all! Look forward to playing it!