{"id":1999,"date":"2023-08-23T14:06:04","date_gmt":"2023-08-23T14:06:04","guid":{"rendered":"https:\/\/retroramblings.net\/?page_id=1999"},"modified":"2026-08-14T12:55:28","modified_gmt":"2026-08-14T12:55:28","slug":"snk-neo-geo-core-for-tc64","status":"publish","type":"page","link":"https:\/\/retroramblings.net\/?page_id=1999","title":{"rendered":"Neo Geo core for TC64"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">This is a port of the <a href=\"https:\/\/github.com\/MiSTer-devel\/NeoGeo_MiSTer\">SNK NeoGeo FPGA implementation<\/a> by <a href=\"https:\/\/www.patreon.com\/furrtek\/posts\">Furrtek<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ported to MiST by Gyorgy Szombathelyi<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ported to Turbo Chameleon 64 by A. M. Robinson<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is an experimental core, and while I do my utmost to make sure it works for everyone and will try to help solve any problems that arise, <strong>you run this core entirely at your own risk.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>If you\u2019d like to show your appreciation for this core, or motivate me to work on this and other cores in future, donations are welcome at <\/em><a href=\"https:\/\/paypal.me\/robinsonb5\"><em>https:\/\/paypal.me\/robinsonb5<\/em><\/a><em> or <\/em><a href=\"https:\/\/patreon.com\/coresforchameleon\"><em>https:\/\/patreon.com\/coresforchameleon<\/em><\/a><em>. Anyone donating \u00a320 or more via PayPal or sponsoring on Patreon at the second tier will be thanked by name in a \u201cCore Supporters\u201d shout-out page in subsequent releases.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Please note:<\/strong> it\u2019s vitally important that you download the correct version of the core for your Chameleon.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>NeoGeo for Chameleon V1 hardware:<\/strong> If you have a single mini-DIN socket on the left hand side of your Chameleon, to which a breakout cable attaches for the keyboard and mouse, then you have V1 hardware and need this version:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/retroramblings.net\/snapshots\/NeoGeo_TC64v1_20230620.zip\">NeoGeo_TC64v1_20230620.zip<\/a> \u2013 Initial port of MiST core.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>NeoGeo for Chameleon V2 hardware: \u00a0<\/strong>If you have three mini-DIN sockets on the left-hand side, with the keyboard and mouse plugging in directly, you have V2 hardware, and need this version:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/retroramblings.net\/snapshots\/NeoGeo_TC64v2_20230620.zip\">NeoGeo_TC64v2_20230620.zip<\/a> \u2013 Initial port of MiST core.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Limitations<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The original Neo Geo system has big RAM\/ROM memories, which don&#8217;t fit into the BRAM of the MiST&#8217;s FPGA. A new SDRAM controller was written, which can read one 64 bit and one 32 bit word simultaneously in just 12 cycles using bank interleaviMiSTng, and running at 120MHz. Later on, it was replaced by a 96MHz variant reading two 32 bit words in 8 cycles. Since the Turbo Chameleon 64 has just 32 megabytes of SDRAM, this version of the core supports ~6 MiB PROMS and 24 MiB CROM+VROMs (in any size combination)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Usage<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Internal ROMs (System ROM, SFIX, LO ROM and SM1 ROM) can be created from MAME&#8217;s neogeo.zip with the help of the <a href=\"https:\/\/github.com\/mist-devel\/mist-board\/wiki\/CoreDocArcade#mra-and-arc-files\">MRA files<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">TerraOnion .NEO file format was choosen as the supported cart format, as it conveniently merges all the various ROMs in one file. The following utilities can be used to create such files:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/wiki.terraonion.com\/index.php\/Neobuilder_Guide\">Original NeoBuilder tool<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/gitlab.com\/loic.petit\/darksoft-to-neosd\/\">Darksoft to .neo conversion tool<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/city41\/neosdconv\">MAME to .neo conversion tool<\/a> &#8211; please note many MAME Neo Geo ROMs are encrypted, and these are not supported by the core, so it&#8217;s recommended to use the Darksoft collection instead.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Controls<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The NeoGeo has four fire buttons, as well as start and select buttons &#8211; and in Arcade configurations there are coin buttons too. On the TC64 the PS\/2 keyboard, C64 keyboard and CDTV control pad are all supported.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Gamepad 1<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Gamepad button<\/th><th>PS\/2 keyboard<\/th><th>C64 keyboard<\/th><th>CDTV controller<\/th><\/tr><\/thead><tbody><tr><td>A<\/td><td>Right Ctrl<\/td><td>N \/ Period<\/td><td>Button A<\/td><\/tr><tr><td>B<\/td><td>Right Alt<\/td><td>B \/ Slash<\/td><td>Button B<\/td><\/tr><tr><td>C<\/td><td>Right Win<\/td><td>Comma<\/td><td>Vol Up<\/td><\/tr><tr><td>D<\/td><td>Right Shift<\/td><td>M<\/td><td>Vol Down<\/td><\/tr><tr><td>Start<\/td><td>Enter<\/td><td>Return<\/td><td>Play\/Pause<\/td><\/tr><tr><td>Select<\/td><td>Slash<\/td><td>Equals<\/td><td>Fast Fwd<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Directions on the C64 keyboard are mapped to I, J, K, L and the cursor keys.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Gamepad 2<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Gamepad button<\/th><th>PS\/2 keyboard<\/th><th>C64 keyboard<\/th><th>CDTV controller<\/th><\/tr><\/thead><tbody><tr><td>A<\/td><td>Left Ctrl<\/td><td>C<\/td><td>Button A<\/td><\/tr><tr><td>B<\/td><td>Left Alt<\/td><td>V<\/td><td>Button B<\/td><\/tr><tr><td>C<\/td><td>Left Win<\/td><td>Z<\/td><td>Vol Up<\/td><\/tr><tr><td>D<\/td><td>Left Shift<\/td><td>X<\/td><td>Vol Down<\/td><\/tr><tr><td>Start<\/td><td>Enter<\/td><td>Control<\/td><td>Play\/Pause<\/td><\/tr><tr><td>Select<\/td><td>Z<\/td><td>Run\/Stop<\/td><td>Fast Fwd<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Directions on the C64 keyboard are mapped to W, A, S and D.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mouse (trackball) support for the game Irritating Maze can be selected in the OSD. Middle mouse button is Start. <strong>Note:<\/strong> this game requires its own system BIOS.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Memory Card<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A 8K (8192 bytes) empty file can be used as a memory card. It can be loaded-unloaded and saved via the OSD (use a .SAV extension). Hint: rename it to <strong>NeoGeo.vhd<\/strong> and it&#8217;ll be auto-mounted. One memory card can store progress and high score information for a couple of games.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Sidenotes (from Gyorgy):<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The upstream MiSTer core was inherently unstable. While Furrtek (Sean Gonsalves) did a very good and tedious job reverse-engineering and documenting the original Neo-Geo chipset, the resulting HDL is not very good for FPGAs. Probably MiSTer&#8217;s Cyclone V FPGA can deal with it better, as it&#8217;s built in a newer process, has smaller inner delays, has more clock networks, or the more recent Quartus tool is better synthesizing such code, but it still broken. Translating old ASIC designs 1-1 into FPGA won&#8217;t work, as there are dozens of generated signals (even with combinatorial output) used as clocks, which are glitching, the compiler cannot check if flip-flops clocked by these signals meet setup and hold times, resulting in very unstable cores.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">At the end, the core&#8217;s HDL was converted into synchronous code, using a simulator to check if it still produces the same signals as before. Finally all latches were eliminated, and all generated clock usages were removed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Thanks to all who supported this conversion!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This is a port of the SNK NeoGeo FPGA implementation by Furrtek Ported to MiST by Gyorgy Szombathelyi Ported to Turbo Chameleon 64 by A. M. Robinson This is an experimental core, and while I do my utmost to make &hellip; <a href=\"https:\/\/retroramblings.net\/?page_id=1999\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"parent":1904,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1999","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/retroramblings.net\/index.php?rest_route=\/wp\/v2\/pages\/1999","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/retroramblings.net\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/retroramblings.net\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/retroramblings.net\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/retroramblings.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1999"}],"version-history":[{"count":7,"href":"https:\/\/retroramblings.net\/index.php?rest_route=\/wp\/v2\/pages\/1999\/revisions"}],"predecessor-version":[{"id":2006,"href":"https:\/\/retroramblings.net\/index.php?rest_route=\/wp\/v2\/pages\/1999\/revisions\/2006"}],"up":[{"embeddable":true,"href":"https:\/\/retroramblings.net\/index.php?rest_route=\/wp\/v2\/pages\/1904"}],"wp:attachment":[{"href":"https:\/\/retroramblings.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1999"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}