{"id":3215,"date":"2025-10-31T11:40:32","date_gmt":"2025-10-31T11:40:32","guid":{"rendered":"https:\/\/www.robertprice.co.uk\/robblog\/?p=3215"},"modified":"2025-10-31T12:54:04","modified_gmt":"2025-10-31T12:54:04","slug":"rc2025-part-8-playing-manic-miner-with-an-nes-controller","status":"publish","type":"post","link":"https:\/\/www.robertprice.co.uk\/robblog\/rc2025-part-8-playing-manic-miner-with-an-nes-controller\/","title":{"rendered":"RC2025 &#8211; Part 8 &#8211; Playing Manic Miner with an NES controller"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">I&#8217;ve made good progress with my RetroChallenge to get an NES controller working on my RC2014 computer.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I wanted to be able to play a game with the controller. I had hoped to write my own, but with only a few days left, I didn&#8217;t think this was practical. Instead, I wondered about hacking an existing game.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">While it&#8217;s not an RC2014, the Sinclair ZX Spectrum is also based on the Z80 processor. Colin Piggot makes a <a href=\"https:\/\/2014.samcoupe.com\/#busspec\">ZX Spectrum Bus Interface<\/a> that allows RC2014 cards to be plugged into a Speccy.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As the RC2014 NES controller module can now be plugged into a Speccy, could I adapt one of my favourite games to work with it? Could <a href=\"https:\/\/en.wikipedia.org\/wiki\/Manic_Miner\">Manic Miner <\/a>be playable with an NES controller?<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.robertprice.co.uk\/robblog\/assets\/ManicMinerIntroScreen.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"678\" height=\"381\" src=\"https:\/\/www.robertprice.co.uk\/robblog\/assets\/ManicMinerIntroScreen.jpg\" alt=\"The Manic Miner intro screen.\" class=\"wp-image-3235\" srcset=\"https:\/\/www.robertprice.co.uk\/robblog\/assets\/ManicMinerIntroScreen.jpg 678w, https:\/\/www.robertprice.co.uk\/robblog\/assets\/ManicMinerIntroScreen-300x169.jpg 300w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The first step was to try to disassemble Manic Miner to see how the existing Kempston joystick support worked. I was hoping it would be simple to just wire in NES controller support there.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I made a start on this myself, before thinking that for such an iconic game, someone must have done this before. A quick search revealed an excellent <a href=\"https:\/\/skoolkit.ca\/disassemblies\/manic_miner\/\">commented disassembly of Manic Miner by Richard Dymond<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Faking a Kempston joystick<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The Kempston joystick interface works by using a Z80 <code>in<\/code> operation on port 31. I would need to fake this by calling a routine to read the NES controller and return data in the Kempston format.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The Kempston joysticker interface returns the following in a single byte.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Bit<\/strong><\/td><td><strong>Value<\/strong><\/td><\/tr><tr><td>0<\/td><td>Right<\/td><\/tr><tr><td>1<\/td><td>Left<\/td><\/tr><tr><td>2<\/td><td>Down<\/td><\/tr><tr><td>3<\/td><td>Up<\/td><\/tr><tr><td>4<\/td><td>Fire<\/td><\/tr><tr><td>5<\/td><td>N\/A<\/td><\/tr><tr><td>6<\/td><td>N\/A<\/td><\/tr><tr><td>7<\/td><td>N\/A<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">So, if the Fire button is being pressed, bit 4 will be 1. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I can modify the <a href=\"https:\/\/www.robertprice.co.uk\/robblog\/rc2025-part-5-writing-a-reusable-z80-subroutine-to-read-the-nes-controller\/\">get_buttons routine<\/a> I previously wrote to read the NES controller and return the data in this format.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To do this, before the <code>pop bc<\/code> instruction, I can add the following code.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>; build the kempston joystick byte in register a\n        xor a               ; clear a\n        \n.test_fire:\n        bit NES_A_BTN, c\n        jr nz, .test_up\n        set 4, a\n.test_up:\n        bit NES_UP_BTN, c\n        jr nz, .test_down\n        set 3, a\n.test_down:\n        bit NES_DOWN_BTN, c\n        jr nz, .test_left\n        set 2, a\n.test_left:\n        bit NES_LEFT_BTN, c\n        jr nz, .test_right\n        set 1, a\n.test_right:\n        bit NES_RIGHT_BTN, c\n        jr nz, .done\n        set 0, a\n.done:\n        pop bc              ; restore bc registers<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Here I am clearing the a register so all bits have a default value of 0. Next, I am testing the bits in the byte I built to store the values from the NES controller. If the bits are set in the NES byte, then I set the relevant bit in the Kempston byte.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Hacking Manic Miner<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">My original idea was to load Manic Miner into a Spectrum, then use a Multiface to poke my changes into memory. Although this would work, I decided it would take too long and would be harder to save my work. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Instead, I downloaded <a href=\"https:\/\/worldofspectrum.org\/archive\/software\/games\/manic-miner-bug-byte-software-ltd\">a clean .tap file of Manic Miner<\/a> from World of Spectrum and loaded this into the <a href=\"https:\/\/github.com\/chernandezba\/zesarux\">ZEsarUX<\/a> emulator. ZEsarUX will let me poke my changes into the game and save the results as an SNA file. I can use the SNA file on a <a href=\"https:\/\/www.tfw8b.com\/product\/divmmc-future-sinclair-zx-spectrum\/\">DivMMC<\/a> connected to my Spectrum to load the game. This means I can make sure the game is still working before saving my changes. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I needed to find a place to store my get_buttons routine in Manic Miner. Upon examining the disassembly, remnants of the source code from when Matthew Smith was writing the game are visible at 0x934c. This space is unused in the game, so it&#8217;s safe for me to put my code there.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>; A simple button reading program for the RC2014 Z80 computer running SCM\n; This will pretend to be a Kempston joystick interface, and return bits like that interface.\n; Robert Price - 24th October 2025\n\n        ORG $934c\n\n; The Z80 port address to use for the controller interface.\nNES_PORT    EQU $01\n\n; The bit masks for the controller interface lines.\nCLOCK   EQU $01\nLATCH   EQU $02\nDATA    EQU $01\n\nNES_A_BTN      EQU $00\nNES_UP_BTN     EQU $04\nNES_DOWN_BTN   EQU $05\nNES_LEFT_BTN   EQU $06\nNES_RIGHT_BTN  EQU $07\n\n\n; subroutine to read the NES controller button states.\n; returns the button states in register a.\n; all other registers are preserved.\nget_buttons:\n        push bc           ; save bc registers\n\n; pulse the LATCH line low to high and back to low again.\n        xor a               ; set a to 0 \n        out (NES_PORT), a\n        ld a, LATCH\n        out (NES_PORT), a\n        xor a               ; set a to 0\n        out (NES_PORT), a\n\n; setup the loop counter to read 8 buttons.\n        ld b, 8             ; 8 buttons to read. This will be decremented to 0.\n\n; now we rebuild the byte into register c. As we are setting all 8 bits,\n; we don't need to worry about clearing c first.\n.loop:\n; read the controller button states\n        in a, (NES_PORT)    ; read the DATA line\n\n; move the DATA bit into register c to rebuild the send byte\n        srl a               ; shift right to get the DATA bit into carry\n        rr c                ; rotate carry into bit 7 of c\n\n; pulse the CLOCK line to read the next button.\n        ld a, CLOCK\n        out (NES_PORT), a\n        xor a               ; set a to 0\n        out (NES_PORT), a\n\n; loop 8 times to read all buttons.\n        djnz .loop\n\n; build the kempston joystick byte in register a\n        xor a               ; clear a\n        \n.test_fire:\n        bit NES_A_BTN, c\n        jr nz, .test_up\n        set 4, a\n.test_up:\n        bit NES_UP_BTN, c\n        jr nz, .test_down\n        set 3, a\n.test_down:\n        bit NES_DOWN_BTN, c\n        jr nz, .test_left\n        set 2, a\n.test_left:\n        bit NES_LEFT_BTN, c\n        jr nz, .test_right\n        set 1, a\n.test_right:\n        bit NES_RIGHT_BTN, c\n        jr nz, .done\n        set 0, a\n.done:\n        pop bc              ; restore bc registers\n\n        ret                 ; return to caller with button states in a\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">I compiled the code using the <a href=\"https:\/\/github.com\/z00m128\/sjasmplus\">sjasmplus assembler<\/a> on my Mac, and this gave me a 61-byte block of assembled code. Running this through hexdump gave me the following hex code to poke into memory.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>9c4c  c5 af d3 01 3e 02 d3 01  af d3 01 06 08 db 01 cb\n9c5c  3f cb 19 3e 01 d3 01 af  d3 01 10 f1 af cb 41 20\n9c6c  02 cb e7 cb 61 20 02 cb  df cb 69 20 02 cb d7 cb\n9c7c  71 20 02 cb cf cb 79 20  02 cb c7 c1 c9<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">I used the Hexadecimal Editor in the Debug Menu of ZEsarUX to input this.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Now I needed to call this when the Kempston joystick was being called from the game.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The first place this is done is at address 0x8878. This code checks if the fire button is being pressed in demo mode.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>8878\tLD A,($8459)\tPick up the Kempston joystick indicator from 8459\n887B\tOR A\t        Is there a joystick connected?\n887C\tJR Z,$8884\tJump if not\n887E\tIN A,($1F)\tCollect input from the joystick<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">In this case, I don&#8217;t need to check the joystick indicator, so all 4 instructions can be replaced with the following.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>8878    CALL $934C\n887B    NOP\n887C    NOP\n887D    NOP\n887E    NOP\n887F    NOP<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The NOP instructions tell the Z80 to do nothing. I am just using them to fill up the space that the 4 original instructions were using. The assembled code looks like this, and it was loaded using the hexadecimal editor.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>8878  cd 4c 93 00 00 00 00 00<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The next block of code looks for left or right being pressed at address 0x8C24<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>8C24\tLD A,($8459)\tCollect the Kempston joystick indicator from 8459\n8C27\tOR A\t        Is the joystick connected?\n8C28\tJR Z,$8C34\tJump if not\n8C2A\tLD BC,$001F\tCollect input from the joystick\n8C2D\tIN A,(C)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">I can use the same code as before to drop in there, but I need an extra 3 NOP instructions to fill up the space. The replacement hex code looks like this.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>8C24  cd 4c 93 00 00 00 00 00 00 00 00<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">There is similar code to check the fire button at address 0x8c6c. I can poke in the same hex code there.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>8C6C  cd 4c 93 00 00 00 00 00 00 00 00<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Finally, there is a routine at 0x9337 that checks if the fire button is being pressed. This is a shorter version like the code at 0x8878, so I can poke in the same code there.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>9337  cd 4c 93 00 00 00 00 00<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">I can now save a snapshot of the game. I do this using the Snapshot option in ZEsarUX and making sure I use a .SNA file extension. I called my file MMNES.SNA. It&#8217;s available to download for anyone following along.<br><br>Copying this to an SD card and placing it in the DivMMC allowed me to load the modified game on my Spectrum.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.robertprice.co.uk\/robblog\/assets\/ManicMinerCentralCavern.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"770\" src=\"https:\/\/www.robertprice.co.uk\/robblog\/assets\/ManicMinerCentralCavern-1024x770.jpg\" alt=\"A screenshot of Manic Miner's first level - The Central Cavern\" class=\"wp-image-3237\" srcset=\"https:\/\/www.robertprice.co.uk\/robblog\/assets\/ManicMinerCentralCavern-1024x770.jpg 1024w, https:\/\/www.robertprice.co.uk\/robblog\/assets\/ManicMinerCentralCavern-300x226.jpg 300w, https:\/\/www.robertprice.co.uk\/robblog\/assets\/ManicMinerCentralCavern-768x577.jpg 768w, https:\/\/www.robertprice.co.uk\/robblog\/assets\/ManicMinerCentralCavern.jpg 1192w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">While I hadn&#8217;t planned to hack a Spectrum game as part of the RetroChallenge this year, it&#8217;s turned out to be a great diversion and learning experience. It&#8217;s still using the code and hardware developed on the RC2014.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The joypad works well, and although it is using a little more CPU time, it&#8217;s not noticeable when playing the game.  It doesn&#8217;t have the nostalgia value of using the Spectrum&#8217;s rubber keys, but it is responsive and comfortable to use.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.robertprice.co.uk\/robblog\/assets\/RC2025-Spectrum-Quazar-NES.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/www.robertprice.co.uk\/robblog\/assets\/RC2025-Spectrum-Quazar-NES.jpg\" alt=\"The NES Controller module connected to a Spectrum with the Quazar bus interface.\" class=\"wp-image-3243\" srcset=\"https:\/\/www.robertprice.co.uk\/robblog\/assets\/RC2025-Spectrum-Quazar-NES.jpg 1024w, https:\/\/www.robertprice.co.uk\/robblog\/assets\/RC2025-Spectrum-Quazar-NES-300x225.jpg 300w, https:\/\/www.robertprice.co.uk\/robblog\/assets\/RC2025-Spectrum-Quazar-NES-768x576.jpg 768w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/a><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;ve made good progress with my RetroChallenge to get an NES controller working on my RC2014 computer. I wanted to be able to play a game with the controller. I had hoped to write my own, but with only a few days left, I didn&#8217;t think this was practical. Instead, I wondered about hacking an &hellip; <a href=\"https:\/\/www.robertprice.co.uk\/robblog\/rc2025-part-8-playing-manic-miner-with-an-nes-controller\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;RC2025 &#8211; Part 8 &#8211; Playing Manic Miner with an NES controller&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":3241,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[181,187],"tags":[193,183,117,185,195],"class_list":["post-3215","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-rc2025","category-retrochallenge","tag-manic-miner","tag-nes-joypad","tag-rc2014","tag-rc2025","tag-zx-spectrum"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>RC2025 - Part 8 - Playing Manic Miner with an NES controller - Robert Price<\/title>\n<meta name=\"description\" content=\"Attaching an NES controller module to a Sinclair ZX Spectrum computer and hacking the classic game Manic Miner to use an NES controller.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.robertprice.co.uk\/robblog\/rc2025-part-8-playing-manic-miner-with-an-nes-controller\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"RC2025 - Part 8 - Playing Manic Miner with an NES controller - Robert Price\" \/>\n<meta property=\"og:description\" content=\"Attaching an NES controller module to a Sinclair ZX Spectrum computer and hacking the classic game Manic Miner to use an NES controller.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.robertprice.co.uk\/robblog\/rc2025-part-8-playing-manic-miner-with-an-nes-controller\/\" \/>\n<meta property=\"og:site_name\" content=\"Robert Price\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-31T11:40:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-10-31T12:54:04+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.robertprice.co.uk\/robblog\/assets\/RC205-Spectrum-NES.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"768\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"rob\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"rob\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/rc2025-part-8-playing-manic-miner-with-an-nes-controller\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/rc2025-part-8-playing-manic-miner-with-an-nes-controller\\\/\"},\"author\":{\"name\":\"rob\",\"@id\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/#\\\/schema\\\/person\\\/fac6d5b076e0e14e1fb13e15b542a6c5\"},\"headline\":\"RC2025 &#8211; Part 8 &#8211; Playing Manic Miner with an NES controller\",\"datePublished\":\"2025-10-31T11:40:32+00:00\",\"dateModified\":\"2025-10-31T12:54:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/rc2025-part-8-playing-manic-miner-with-an-nes-controller\\\/\"},\"wordCount\":940,\"image\":{\"@id\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/rc2025-part-8-playing-manic-miner-with-an-nes-controller\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/assets\\\/RC205-Spectrum-NES.jpg\",\"keywords\":[\"Manic Miner\",\"NES Joypad\",\"RC2014\",\"RC2025\",\"ZX Spectrum\"],\"articleSection\":[\"RC2025\",\"RetroChallenge\"],\"inLanguage\":\"en-GB\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/rc2025-part-8-playing-manic-miner-with-an-nes-controller\\\/\",\"url\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/rc2025-part-8-playing-manic-miner-with-an-nes-controller\\\/\",\"name\":\"RC2025 - Part 8 - Playing Manic Miner with an NES controller - Robert Price\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/rc2025-part-8-playing-manic-miner-with-an-nes-controller\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/rc2025-part-8-playing-manic-miner-with-an-nes-controller\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/assets\\\/RC205-Spectrum-NES.jpg\",\"datePublished\":\"2025-10-31T11:40:32+00:00\",\"dateModified\":\"2025-10-31T12:54:04+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/#\\\/schema\\\/person\\\/fac6d5b076e0e14e1fb13e15b542a6c5\"},\"description\":\"Attaching an NES controller module to a Sinclair ZX Spectrum computer and hacking the classic game Manic Miner to use an NES controller.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/rc2025-part-8-playing-manic-miner-with-an-nes-controller\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/rc2025-part-8-playing-manic-miner-with-an-nes-controller\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/rc2025-part-8-playing-manic-miner-with-an-nes-controller\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/assets\\\/RC205-Spectrum-NES.jpg\",\"contentUrl\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/assets\\\/RC205-Spectrum-NES.jpg\",\"width\":1024,\"height\":768,\"caption\":\"A ZX Spectrum with a DivMMC Future card, and NES controller interface attached.\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/rc2025-part-8-playing-manic-miner-with-an-nes-controller\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"RC2025 &#8211; Part 8 &#8211; Playing Manic Miner with an NES controller\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/#website\",\"url\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/\",\"name\":\"Robert Price\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/#\\\/schema\\\/person\\\/fac6d5b076e0e14e1fb13e15b542a6c5\",\"name\":\"rob\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6f0eb511179100a4e968abc70403e33686e6ab3e992e392bedd2ccac01da666c?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6f0eb511179100a4e968abc70403e33686e6ab3e992e392bedd2ccac01da666c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6f0eb511179100a4e968abc70403e33686e6ab3e992e392bedd2ccac01da666c?s=96&d=mm&r=g\",\"caption\":\"rob\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"RC2025 - Part 8 - Playing Manic Miner with an NES controller - Robert Price","description":"Attaching an NES controller module to a Sinclair ZX Spectrum computer and hacking the classic game Manic Miner to use an NES controller.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.robertprice.co.uk\/robblog\/rc2025-part-8-playing-manic-miner-with-an-nes-controller\/","og_locale":"en_GB","og_type":"article","og_title":"RC2025 - Part 8 - Playing Manic Miner with an NES controller - Robert Price","og_description":"Attaching an NES controller module to a Sinclair ZX Spectrum computer and hacking the classic game Manic Miner to use an NES controller.","og_url":"https:\/\/www.robertprice.co.uk\/robblog\/rc2025-part-8-playing-manic-miner-with-an-nes-controller\/","og_site_name":"Robert Price","article_published_time":"2025-10-31T11:40:32+00:00","article_modified_time":"2025-10-31T12:54:04+00:00","og_image":[{"width":1024,"height":768,"url":"https:\/\/www.robertprice.co.uk\/robblog\/assets\/RC205-Spectrum-NES.jpg","type":"image\/jpeg"}],"author":"rob","twitter_card":"summary_large_image","twitter_misc":{"Written by":"rob","Estimated reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.robertprice.co.uk\/robblog\/rc2025-part-8-playing-manic-miner-with-an-nes-controller\/#article","isPartOf":{"@id":"https:\/\/www.robertprice.co.uk\/robblog\/rc2025-part-8-playing-manic-miner-with-an-nes-controller\/"},"author":{"name":"rob","@id":"https:\/\/www.robertprice.co.uk\/robblog\/#\/schema\/person\/fac6d5b076e0e14e1fb13e15b542a6c5"},"headline":"RC2025 &#8211; Part 8 &#8211; Playing Manic Miner with an NES controller","datePublished":"2025-10-31T11:40:32+00:00","dateModified":"2025-10-31T12:54:04+00:00","mainEntityOfPage":{"@id":"https:\/\/www.robertprice.co.uk\/robblog\/rc2025-part-8-playing-manic-miner-with-an-nes-controller\/"},"wordCount":940,"image":{"@id":"https:\/\/www.robertprice.co.uk\/robblog\/rc2025-part-8-playing-manic-miner-with-an-nes-controller\/#primaryimage"},"thumbnailUrl":"https:\/\/www.robertprice.co.uk\/robblog\/assets\/RC205-Spectrum-NES.jpg","keywords":["Manic Miner","NES Joypad","RC2014","RC2025","ZX Spectrum"],"articleSection":["RC2025","RetroChallenge"],"inLanguage":"en-GB"},{"@type":"WebPage","@id":"https:\/\/www.robertprice.co.uk\/robblog\/rc2025-part-8-playing-manic-miner-with-an-nes-controller\/","url":"https:\/\/www.robertprice.co.uk\/robblog\/rc2025-part-8-playing-manic-miner-with-an-nes-controller\/","name":"RC2025 - Part 8 - Playing Manic Miner with an NES controller - Robert Price","isPartOf":{"@id":"https:\/\/www.robertprice.co.uk\/robblog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.robertprice.co.uk\/robblog\/rc2025-part-8-playing-manic-miner-with-an-nes-controller\/#primaryimage"},"image":{"@id":"https:\/\/www.robertprice.co.uk\/robblog\/rc2025-part-8-playing-manic-miner-with-an-nes-controller\/#primaryimage"},"thumbnailUrl":"https:\/\/www.robertprice.co.uk\/robblog\/assets\/RC205-Spectrum-NES.jpg","datePublished":"2025-10-31T11:40:32+00:00","dateModified":"2025-10-31T12:54:04+00:00","author":{"@id":"https:\/\/www.robertprice.co.uk\/robblog\/#\/schema\/person\/fac6d5b076e0e14e1fb13e15b542a6c5"},"description":"Attaching an NES controller module to a Sinclair ZX Spectrum computer and hacking the classic game Manic Miner to use an NES controller.","breadcrumb":{"@id":"https:\/\/www.robertprice.co.uk\/robblog\/rc2025-part-8-playing-manic-miner-with-an-nes-controller\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.robertprice.co.uk\/robblog\/rc2025-part-8-playing-manic-miner-with-an-nes-controller\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/www.robertprice.co.uk\/robblog\/rc2025-part-8-playing-manic-miner-with-an-nes-controller\/#primaryimage","url":"https:\/\/www.robertprice.co.uk\/robblog\/assets\/RC205-Spectrum-NES.jpg","contentUrl":"https:\/\/www.robertprice.co.uk\/robblog\/assets\/RC205-Spectrum-NES.jpg","width":1024,"height":768,"caption":"A ZX Spectrum with a DivMMC Future card, and NES controller interface attached."},{"@type":"BreadcrumbList","@id":"https:\/\/www.robertprice.co.uk\/robblog\/rc2025-part-8-playing-manic-miner-with-an-nes-controller\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.robertprice.co.uk\/robblog\/"},{"@type":"ListItem","position":2,"name":"RC2025 &#8211; Part 8 &#8211; Playing Manic Miner with an NES controller"}]},{"@type":"WebSite","@id":"https:\/\/www.robertprice.co.uk\/robblog\/#website","url":"https:\/\/www.robertprice.co.uk\/robblog\/","name":"Robert Price","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.robertprice.co.uk\/robblog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Person","@id":"https:\/\/www.robertprice.co.uk\/robblog\/#\/schema\/person\/fac6d5b076e0e14e1fb13e15b542a6c5","name":"rob","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/secure.gravatar.com\/avatar\/6f0eb511179100a4e968abc70403e33686e6ab3e992e392bedd2ccac01da666c?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/6f0eb511179100a4e968abc70403e33686e6ab3e992e392bedd2ccac01da666c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/6f0eb511179100a4e968abc70403e33686e6ab3e992e392bedd2ccac01da666c?s=96&d=mm&r=g","caption":"rob"}}]}},"_links":{"self":[{"href":"https:\/\/www.robertprice.co.uk\/robblog\/wp-json\/wp\/v2\/posts\/3215","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.robertprice.co.uk\/robblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.robertprice.co.uk\/robblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.robertprice.co.uk\/robblog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.robertprice.co.uk\/robblog\/wp-json\/wp\/v2\/comments?post=3215"}],"version-history":[{"count":14,"href":"https:\/\/www.robertprice.co.uk\/robblog\/wp-json\/wp\/v2\/posts\/3215\/revisions"}],"predecessor-version":[{"id":3253,"href":"https:\/\/www.robertprice.co.uk\/robblog\/wp-json\/wp\/v2\/posts\/3215\/revisions\/3253"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.robertprice.co.uk\/robblog\/wp-json\/wp\/v2\/media\/3241"}],"wp:attachment":[{"href":"https:\/\/www.robertprice.co.uk\/robblog\/wp-json\/wp\/v2\/media?parent=3215"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.robertprice.co.uk\/robblog\/wp-json\/wp\/v2\/categories?post=3215"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.robertprice.co.uk\/robblog\/wp-json\/wp\/v2\/tags?post=3215"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}