{"id":17427,"date":"2026-07-15T04:07:04","date_gmt":"2026-07-15T04:07:04","guid":{"rendered":"https:\/\/8657085.xyz\/?p=17427"},"modified":"2026-07-15T04:07:04","modified_gmt":"2026-07-15T04:07:04","slug":"doom-on-the-neo-geo-becomes-the-impossible-port-that-just-works","status":"publish","type":"post","link":"https:\/\/8657085.xyz\/?p=17427","title":{"rendered":"Doom on the Neo Geo Becomes the &#8216;Impossible&#8217; Port That Just Works"},"content":{"rendered":"<p> <div style=\"display: grid; grid-template-columns: 300px 160px; gap: 2px; width: 460px; background: #eee; padding: 2px;\">\r\n\r\n  <!-- \u6574\u884c\u5bbd\u5e7f\u544a -->\r\n  <div style=\"grid-column: 1\/-1; width: 460px; height: 250px; background: #ccc; display: grid; place-items: center;\">\r\n  <script async type=\"application\/javascript\" src=\"https:\/\/a.magsrv.com\/ad-provider.js\"><\/script> \r\n <ins class=\"eas6a97888e2\" data-zoneid=\"5876674\"><\/ins> \r\n <script>(AdProvider = window.AdProvider || []).push({\"serve\": {}});<\/script>\r\n  <\/div>\r\n  <div style=\"grid-column: 1\/-1; width: 460px; height: 90px; background: #ccc; display: grid; place-items: center;\">\r\n  <script async type=\"application\/javascript\" src=\"https:\/\/a.magsrv.com\/ad-provider.js\"><\/script> \r\n <ins class=\"eas6a97888e2\" data-zoneid=\"5876676\"><\/ins> \r\n <script>(AdProvider = window.AdProvider || []).push({\"serve\": {}});<\/script>\r\n  <\/div>\r\n\r\n  <!-- \u5de6\u4fa7\u7ad6\u6392 -->\r\n  <div style=\"height: 250px; background: #ccc; display: grid; place-items: center;\">\r\n  <script async type=\"application\/javascript\" src=\"https:\/\/a.magsrv.com\/ad-provider.js\"><\/script> \r\n <ins class=\"eas6a97888e2\" data-zoneid=\"5876672\"><\/ins> \r\n <script>(AdProvider = window.AdProvider || []).push({\"serve\": {}});<\/script>\r\n  <\/div>\r\n  <div style=\"height: 500px; background: #ccc; display: grid; place-items: center;\">\r\n  <script async type=\"application\/javascript\" src=\"https:\/\/a.magsrv.com\/ad-provider.js\"><\/script> \r\n <ins class=\"eas6a97888e2\" data-zoneid=\"5876680\"><\/ins> \r\n <script>(AdProvider = window.AdProvider || []).push({\"serve\": {}});<\/script>\r\n  <\/div>\r\n\r\n  <!-- \u53f3\u4fa7\u6469\u5929\u697c\uff08\u548c\u5de6\u4fa7\u5b8c\u5168\u5bf9\u9f50\uff09 -->\r\n  <div style=\"grid-row: 3\/5; height: 750px; background: #ccc; display: grid; place-items: center;\">\r\n  <script async type=\"application\/javascript\" src=\"https:\/\/a.magsrv.com\/ad-provider.js\"><\/script> \r\n <ins class=\"eas6a97888e2\" data-zoneid=\"5876678\"><\/ins> \r\n <script>(AdProvider = window.AdProvider || []).push({\"serve\": {}});<\/script>\r\n  <\/div>\r\n  \r\n  <script async type=\"application\/javascript\" src=\"https:\/\/a.magsrv.com\/ad-provider.js\"><\/script> \r\n <ins class=\"eas6a97888e6\" data-zoneid=\"5876682\"><\/ins> \r\n <script>(AdProvider = window.AdProvider || []).push({\"serve\": {}});<\/script>\r\n<\/div><br \/>\n<\/p>\n<div>\n<p><img decoding=\"async\" src=\"https:\/\/images.techeblog.com\/wp-content\/uploads\/2026\/07\/14203143\/neo-geo-doom-port-doom64kb-doomgeo.jpg\" alt=\"NEO GEO Doom Port DOOM64KB DOOMGEO\" width=\"960\" height=\"961\"\/><br \/>Longtime owners of the Neo Geo AES have watched countless other platforms receive Doom ports over the decades. The console always looked like a strong candidate on paper, with its fast 68000 processor and graphics hardware built for fast sprite handling. Yet the 64 kilobytes of RAM available to the main CPU kept creating a hard stop for anyone who tried a straight conversion. A fresh project shows the limitation was never as final as it once seemed.<\/p>\n<p><span id=\"more-250336\"\/><br \/><iframe title=\"I was wrong. DOOM runs on everything, even Neo Geo!\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/VJwffCeo4jU?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><noscript><iframe title=\"I was wrong. DOOM runs on everything, even Neo Geo!\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/VJwffCeo4jU?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/noscript><br \/>SNK designed the Neo Geo with the goal of making as much visual impact as possible with the limited memory they had available, and boy did they succeed. It\u2019s a console that really excels when developers know how to give it well-organized sprites and tile data rather than expecting it to draw things on the fly. Classic Doom, on the other hand, builds its environment one vertical strip at a time, transmitting it all to the screen from a large framebuffer, but that approach is far too memory intensive, and the Neo Geo simply cannot keep up.<\/p>\n<div class=\"aawp\">\n<div class=\"aawp-product aawp-product--horizontal\" data-aawp-product-asin=\"B0GXCKTMJ8\" data-aawp-product-id=\"247902\" data-aawp-tracking-id=\"tec02e-20\" data-aawp-product-title=\"NEOGEO AES+ Anniversary Edition\">\n<div class=\"aawp-product__thumb\">\n<p>            <img decoding=\"async\" class=\"aawp-product__image\" src=\"https:\/\/m.media-amazon.com\/images\/I\/31j78JifqPL._SL160_.jpg\" alt=\"NEOGEO AES+ Anniversary Edition\"\/><\/p><\/div>\n<div class=\"aawp-product__content\">\n<p>            NEOGEO AES+ Anniversary Edition        <\/p>\n<div class=\"aawp-product__description\">\n<ul>\n<li>Legendary video game console reborn<\/li>\n<li>1:1 replica of the original console from the 90s<\/li>\n<li>Unmistakable and uncompromising arcade-grade build<\/li>\n<\/ul><\/div>\n<\/p><\/div>\n<\/div>\n<\/div>\n<p>\nMiguel Sabino figured out a way around this by starting the DoomGeo project on a standard computer with a bunch of conversion tools. These programs consume a Doom WAD file before spitting it out in a format that the Neo Geo can understand. Walls become strips of sprite graphics, along with all of the background elements and animations, because they are all pre-baked and ready to go, rather than having to be created on the fly. In the end, all of this is squeezed onto the cartridge as neat little tables and sprite banks.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/images.techeblog.com\/wp-content\/uploads\/2026\/07\/14205131\/neo-geo-doom-port-doom64kb-doomgeo-1.jpg\" alt=\"Neo Geo Doom Port Doom64KB DoomGeo\" width=\"1280\" height=\"720\"\/><br \/>Once the ROM boots up, the 68000 CPU\u2019s primary function is to update the sprite control blocks rather than going in and filling in a whole framebuffer pixel by pixel. The hardware sprite system then places, scales, and layers all of those strips to create a great first-person perspective. Floors and ceilings are handled by pre-baked planes that scroll and tilt as they move, while the fixed tile layer houses the entire heads-up display, which includes the status bar, the marine\u2019s face, key indications, and ammo counters. They kept memory demands low by breaking things up this way, yet the game still looks and plays well.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/images.techeblog.com\/wp-content\/uploads\/2026\/07\/14205136\/neo-geo-doom-port-doom64kb-doomgeo-2.jpg\" alt=\"Neo Geo Doom Port Doom64KB DoomGeo\" width=\"1280\" height=\"720\"\/><br \/>The current build will support every original weapon, including your fist, rocket launcher, and BFG. Monsters have several rotation frames, ensuring that they always face the player in the correct manner while moving about. Doors open, secrets are tucked away, floors that will damage you do exactly that, and the AI inside keeps the enemies on their toes. Even the collision checks take into account the player\u2019s height and step height, ensuring that the movement seems completely natural. A solid 16\u00d716 homemade map becomes the major showpiece, with some experimental paths that can even capture a full-on E1M1 level from the original Doom for testing, and, of course, there\u2019s the audio conversion for the YM2610 sound chip, which is still on the to-do list.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/images.techeblog.com\/wp-content\/uploads\/2026\/07\/14205139\/neo-geo-doom-port-doom64kb-doomgeo-3.jpg\" alt=\"Neo Geo Doom Port Doom64KB DoomGeo\" width=\"1280\" height=\"720\"\/><br \/>Doom64KB, an even more stripped-down project, takes a completely different approach. It\u2019s based on an older low-memory PC port, and it reduces features even further to fit under the same 64k RAM limit. Floors and ceilings lose their texture maps, music is removed, saving and loading are no longer possible, and only a few particular maps may be played, but hey, it works, even if it sacrifices much of the original experience in the process.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/images.techeblog.com\/wp-content\/uploads\/2026\/07\/14205143\/neo-geo-doom-port-doom64kb-doomgeo-4.jpg\" alt=\"Neo Geo Doom Port Doom64KB DoomGeo\" width=\"1280\" height=\"720\"\/><br \/>Both of these projects emphasize one basic point: the Neo Geo\u2019s processor and sprite hardware were never the issue. The big challenge was making Doom\u2019s original graphics model to fit within that small memory footprint. These recent initiatives have ultimately overcome that barrier by shifting the heavy lifting to the pre-processing stage and allowing the current sprite system to perform its job, all without the need for additional RAM or custom hardware.<br \/><span>[Source]<\/span><\/p>\n<\/p><\/div>\n<p><!-- \u603b\u5bb9\u5668\uff1a\u6700\u5927\u5bbd908px Grid\u7d27\u51d1\u5e03\u5c40 -->\r\n<div style=\"display: grid; grid-template-columns: 728px 160px; gap:2px; width:908px; background:#eee; padding:2px;\">\r\n\r\n  <!-- \u901a\u680f\u9876\u90e8\uff1a\u6700\u5927\u6a2a\u5e45 908x258 \u8de8\u6574\u884c -->\r\n  <div style=\"grid-column:1\/-1; height:258px; background:#ff6b6b; display:grid; place-items:center;\">\r\n    <!-- JuicyAds v3.0 -->\r\n<script type=\"text\/javascript\" data-cfasync=\"false\" async src=\"https:\/\/poweredby.jads.co\/js\/jads.js\"><\/script>\r\n<ins id=\"1114307\" data-width=\"908\" data-height=\"258\"><\/ins>\r\n<script type=\"text\/javascript\" data-cfasync=\"false\" async>(adsbyjuicy = window.adsbyjuicy || []).push({'adzone':1114307});<\/script>\r\n<!--JuicyAds END-->\r\n  <\/div>\r\n\r\n  <!-- \u7b2c\u4e8c\u901a\u680f\uff1a728\u00d790 \u901a\u680f -->\r\n  <div style=\"grid-column:1\/-1; height:90px; background:#4ecdc4; display:grid; place-items:center;\">\r\n    <!-- JuicyAds v3.0 -->\r\n<script type=\"text\/javascript\" data-cfasync=\"false\" async src=\"https:\/\/poweredby.jads.co\/js\/jads.js\"><\/script>\r\n<ins id=\"1114300\" data-width=\"728\" data-height=\"90\"><\/ins>\r\n<script type=\"text\/javascript\" data-cfasync=\"false\" async>(adsbyjuicy = window.adsbyjuicy || []).push({'adzone':1114300});<\/script>\r\n<!--JuicyAds END-->\r\n  <\/div>\r\n\r\n  <!-- \u5de6\u4fa7\u4e3b\u680f\uff1a\u591a\u5e7f\u544a\u5806\u53e0 -->\r\n  <div style=\"display:grid; gap:2px;\">\r\n    <div style=\"height:60px; background:#45b7d1; display:grid; place-items:center;\">\r\n\t<!-- JuicyAds v3.0 -->\r\n<script type=\"text\/javascript\" data-cfasync=\"false\" async src=\"https:\/\/poweredby.jads.co\/js\/jads.js\"><\/script>\r\n<ins id=\"1114308\" data-width=\"468\" data-height=\"60\"><\/ins>\r\n<script type=\"text\/javascript\" data-cfasync=\"false\" async>(adsbyjuicy = window.adsbyjuicy || []).push({'adzone':1114308});<\/script>\r\n<!--JuicyAds END-->\r\n\t<\/div>\r\n    <div style=\"height:250px; background:#ffe066; display:grid; place-items:center;\">\r\n\t<!-- JuicyAds v3.0 -->\r\n<script type=\"text\/javascript\" data-cfasync=\"false\" async src=\"https:\/\/poweredby.jads.co\/js\/jads.js\"><\/script>\r\n<ins id=\"1114299\" data-width=\"300\" data-height=\"250\"><\/ins>\r\n<script type=\"text\/javascript\" data-cfasync=\"false\" async>(adsbyjuicy = window.adsbyjuicy || []).push({'adzone':1114299});<\/script>\r\n<!--JuicyAds END-->\r\n\t<\/div>\r\n    <div style=\"height:250px; background:#ff9ecd; display:grid; place-items:center;\">\r\n\t<!-- JuicyAds v3.0 -->\r\n<script type=\"text\/javascript\" data-cfasync=\"false\" async src=\"https:\/\/poweredby.jads.co\/js\/jads.js\"><\/script>\r\n<ins id=\"1114305\" data-width=\"250\" data-height=\"250\"><\/ins>\r\n<script type=\"text\/javascript\" data-cfasync=\"false\" async>(adsbyjuicy = window.adsbyjuicy || []).push({'adzone':1114305});<\/script>\r\n<!--JuicyAds END-->\r\n\t<\/div>\r\n    <div style=\"height:139px; background:#c792ea; display:grid; place-items:center;\">\r\n\t<!-- JuicyAds v3.0 -->\r\n<script type=\"text\/javascript\" data-cfasync=\"false\" async src=\"https:\/\/poweredby.jads.co\/js\/jads.js\"><\/script>\r\n<ins id=\"1114302\" data-width=\"133\" data-height=\"139\"><\/ins>\r\n<script type=\"text\/javascript\" data-cfasync=\"false\" async>(adsbyjuicy = window.adsbyjuicy || []).push({'adzone':1114302});<\/script>\r\n<!--JuicyAds END-->\r\n\t<\/div>\r\n    <div style=\"height:125px; background:#91e7ac; display:grid; place-items:center;\">\r\n\t\r\n<!-- JuicyAds v3.0 -->\r\n<script type=\"text\/javascript\" data-cfasync=\"false\" async src=\"https:\/\/poweredby.jads.co\/js\/jads.js\"><\/script>\r\n<ins id=\"1114303\" data-width=\"125\" data-height=\"125\"><\/ins>\r\n<script type=\"text\/javascript\" data-cfasync=\"false\" async>(adsbyjuicy = window.adsbyjuicy || []).push({'adzone':1114303});<\/script>\r\n<!--JuicyAds END-->\r\n\t<\/div>\r\n  <\/div>\r\n\r\n  <!-- \u53f3\u4fa7\u7ad6\u680f\uff1a160\u00d7600 \u6574\u5217\u9ad8\u5e7f\u544a -->\r\n  <div style=\"grid-row:3\/8; height:600px;  display:grid; place-items:center;\">\r\n    <!-- JuicyAds v3.0 -->\r\n<script type=\"text\/javascript\" data-cfasync=\"false\" async src=\"https:\/\/poweredby.jads.co\/js\/jads.js\"><\/script>\r\n<ins id=\"1114301\" data-width=\"160\" data-height=\"600\"><\/ins>\r\n<script type=\"text\/javascript\" data-cfasync=\"false\" async>(adsbyjuicy = window.adsbyjuicy || []).push({'adzone':1114301});<\/script>\r\n<!--JuicyAds END-->\r\n  <\/div>\r\n\r\n<\/div><br \/>\n<br \/> Doom on the Neo Geo Becomes the &#8216;Impossible&#8217; Port That Just Works<br \/>\n<br \/>#Doom #Neo #Geo #Impossible #Port #Works<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Longtime owners of the Neo Geo AES have watched countless other platforms receive Doom ports&#8230;<\/p>\n","protected":false},"author":1,"featured_media":17428,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[2343,14264,6523,1465,2688,7922],"class_list":["post-17427","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tech","tag-doom","tag-geo","tag-impossible","tag-neo","tag-port","tag-works"],"featured_image_urls":{"full":["https:\/\/8657085.xyz\/wp-content\/uploads\/2026\/07\/neo-geo-doom-port-doom64kb-doomgeo.jpg",960,961,false],"thumbnail":["https:\/\/8657085.xyz\/wp-content\/uploads\/2026\/07\/neo-geo-doom-port-doom64kb-doomgeo-150x150.jpg",150,150,true],"medium":["https:\/\/8657085.xyz\/wp-content\/uploads\/2026\/07\/neo-geo-doom-port-doom64kb-doomgeo-300x300.jpg",300,300,true],"medium_large":["https:\/\/8657085.xyz\/wp-content\/uploads\/2026\/07\/neo-geo-doom-port-doom64kb-doomgeo-768x769.jpg",640,641,true],"large":["https:\/\/8657085.xyz\/wp-content\/uploads\/2026\/07\/neo-geo-doom-port-doom64kb-doomgeo.jpg",640,641,false],"1536x1536":["https:\/\/8657085.xyz\/wp-content\/uploads\/2026\/07\/neo-geo-doom-port-doom64kb-doomgeo.jpg",960,961,false],"2048x2048":["https:\/\/8657085.xyz\/wp-content\/uploads\/2026\/07\/neo-geo-doom-port-doom64kb-doomgeo.jpg",960,961,false],"covernews-slider-full":["https:\/\/8657085.xyz\/wp-content\/uploads\/2026\/07\/neo-geo-doom-port-doom64kb-doomgeo-960x715.jpg",960,715,true],"covernews-slider-center":["https:\/\/8657085.xyz\/wp-content\/uploads\/2026\/07\/neo-geo-doom-port-doom64kb-doomgeo-800x500.jpg",800,500,true],"covernews-featured":["https:\/\/8657085.xyz\/wp-content\/uploads\/2026\/07\/neo-geo-doom-port-doom64kb-doomgeo.jpg",960,961,false],"covernews-medium":["https:\/\/8657085.xyz\/wp-content\/uploads\/2026\/07\/neo-geo-doom-port-doom64kb-doomgeo-540x340.jpg",540,340,true],"covernews-medium-square":["https:\/\/8657085.xyz\/wp-content\/uploads\/2026\/07\/neo-geo-doom-port-doom64kb-doomgeo-400x250.jpg",400,250,true]},"author_info":{"display_name":"admin","author_link":"https:\/\/8657085.xyz\/?author=1"},"category_info":"<a href=\"https:\/\/8657085.xyz\/?cat=8\" rel=\"category\">Tech<\/a>","tag_info":"Tech","comment_count":"0","_links":{"self":[{"href":"https:\/\/8657085.xyz\/index.php?rest_route=\/wp\/v2\/posts\/17427","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/8657085.xyz\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/8657085.xyz\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/8657085.xyz\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/8657085.xyz\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=17427"}],"version-history":[{"count":0,"href":"https:\/\/8657085.xyz\/index.php?rest_route=\/wp\/v2\/posts\/17427\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/8657085.xyz\/index.php?rest_route=\/wp\/v2\/media\/17428"}],"wp:attachment":[{"href":"https:\/\/8657085.xyz\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=17427"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/8657085.xyz\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=17427"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/8657085.xyz\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=17427"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}