Well 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.
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.
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.
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
Mike Holzinger
2024-09-19 14:35:34 +0000 UTCBrian Dubin
2024-09-16 07:37:28 +0000 UTCatrac17
2024-09-16 04:45:58 +0000 UTCBrian Dubin
2024-09-16 04:04:46 +0000 UTCatrac17
2024-09-10 21:29:20 +0000 UTCDr. Manga
2024-09-10 04:05:09 +0000 UTCatrac17
2024-09-10 02:46:58 +0000 UTCEl Nagual
2024-09-10 01:51:48 +0000 UTCatrac17
2024-09-10 00:33:32 +0000 UTCEl Nagual
2024-09-09 22:16:49 +0000 UTCTetra
2024-09-08 08:39:49 +0000 UTCworstJago
2024-09-08 08:05:02 +0000 UTCDrew Alden
2024-09-08 07:26:39 +0000 UTCJohn Fletcher
2024-09-08 04:40:01 +0000 UTCmichael kilpert
2024-09-08 00:52:03 +0000 UTCGeckofingers
2024-09-07 22:15:09 +0000 UTCEspiox
2024-09-07 20:14:38 +0000 UTCFrank McDonald
2024-09-07 19:39:13 +0000 UTCTrifle
2024-09-07 19:28:35 +0000 UTCShannon Thomasson
2024-09-07 19:16:59 +0000 UTC