[{"data":1,"prerenderedAt":281},["ShallowReactive",2],{"project-37444683":3},{"id":4,"name":5,"line":5,"line_source":6,"title":7,"url":8,"domain":9,"maker":10,"posted_at":11,"year":12,"points":13,"comments":14,"rank_in_year":15,"shown_in_year":16,"top":17,"tier":18,"category":19,"subcategory":20,"format":21,"keywords":22,"reception":27,"sentiment":28,"stance_mix":29,"scored_comments":32,"aspects":33,"strip":42,"post_text":44,"what":45,"said":77,"maker_in_thread":151,"shape":161,"grid":164,"attempts":244,"same_week":245,"maker_shows":37,"maker_hidden":273,"reader_version":274,"card":275},"37444683","Ghidra Plays Mario","title","Show HN: Ghidra Plays Mario","https:\u002F\u002Fgithub.com\u002Fnevesnunes\u002Fghidra-plays-mario","github.com","0d0a",1694263351,2023,207,29,267,3109,9,"notable","dev_tools","processor module testing","other",[23,24,20,25,26],"ghidra","6502 emulation","nes emulator","reverse engineering","loved",0.462,{"positive":30,"neutral":30,"mixed":31,"critical":31},8,0,16,{"execution":34,"idea":36,"performance":38,"design":40,"docs":41},{"positive":35,"critical":31},3,{"positive":37,"critical":31},2,{"positive":39,"critical":31},1,{"positive":39,"critical":31},{"positive":31,"critical":31},[43,43,31,31,43,35,31,35,43,35,35,35,31,31,43,31,43,31,43,31,35,31,35,43,35,31,31,31,31,31],5,null,{"problem":46,"audience":53,"pricing":44,"motivation":62,"time_to_build":44,"stack":66,"openness":75,"stage":76,"team_size":76},{"value":47,"source":48,"evidence":49},"Ghidra's CPU emulation lacks the hardware needed to run console test ROMs, so processor modules are hard to validate","maker",[50],{"id":51,"by":10,"text":52},"37444687","I've been exploring new ways of testing Ghidra processor modules. In this repo, I was able to emulate NES ROMs in Ghidra to test its 6502 specification, which resulted in finding…",{"value":54,"source":55,"evidence":56},"Reverse engineers and processor module developers","inferred",[57,58],{"id":51,"by":10,"text":52},{"id":59,"by":60,"text":61},"37490470","pjsoberoi","Thanks for sharing, I enjoyed your project. I'm also interested in processor module verification. May I offer some performance suggestions: - You don't need Ghidra to use…",{"value":63,"source":48,"evidence":64},"Test Ghidra processor modules using existing console test ROMs and find bugs",[65],{"id":51,"by":10,"text":52},[67,71],{"value":68,"source":48,"evidence":69},"Ghidra",[70],{"id":51,"by":10,"text":52},{"value":72,"source":48,"evidence":73},"SLEIGH",[74],{"id":51,"by":10,"text":52},"open_source","unknown",{"praise":78,"objections":91,"requests":98,"questions":106,"alternatives":129},[79],{"value":80,"source":81,"evidence":82},"Interesting approach to validating Ghidra processor modules","commenter",[83,87],{"id":84,"by":85,"text":86},"37469377","ipnon","Excellent results. As I’m sure you’ll agree there are many stones left to overturn in researching how to play video games without direct human input. I’m looking forward to your…",{"id":88,"by":89,"text":90},"37469934","mohn","Cool project! I'm very interested in accurate preservation of the behavior of these old systems (chip decapping and scanning, FPGA reimplementation, accuracy-focused emulators)…",[92],{"value":93,"source":48,"evidence":94},"Demo uses pre-recorded inputs, not an AI playing the game",[95],{"id":96,"by":10,"text":97},"37473291","Thanks, but I think I'm going to disappoint you: the demo is using pre-recorded manual inputs, which are then replayed when emulating in Ghidra. The only logic involved is…",[99],{"value":100,"source":81,"evidence":101},"Explain whether bugs are in Ghidra's processor model or the emulator",[102],{"id":103,"by":104,"text":105},"37469501","ComputerGuru","This is great. I’m not clear on if the bugs you are finding are in Ghidra’s processor model or in the emulator? (Though I think it’s the latter?) Also, why would Ghidra have the…",[107,117],{"value":108,"source":81,"evidence":109},"Is the processor model 6502 or closer to the NES 2A03 without BCD",[110,114],{"id":111,"by":112,"text":113},"37471283","msla","Is it a 6502 processor model in specific? Because the NES used the 2A03 in NTSC regions: https:\u002F\u002Fwww.nesdev.org\u002Fwiki\u002F2A03",{"id":115,"by":10,"text":116},"37473334","I think it's closer to the 2A03. Unless I missed something, there isn't any support implemented for binary-coded decimal mode.",{"value":118,"source":81,"evidence":119},"Why the Goomba reverses direction in the demo",[120,121,125],{"id":88,"by":89,"text":90},{"id":122,"by":123,"text":124},"37470025","cylon13","I think that goomba bumped into the squished goomba Mario had just squished. Mario was just a bit to the left so the flat goombas hit box stuck out to the right a bit and the…",{"id":126,"by":127,"text":128},"37474350","metadat","At 17 seconds into the demo video, Mario appears to run into a Goomba horizontally without being harmed, and it just changes course to head in the other direction as if it…",[130,137,144],{"value":131,"source":81,"evidence":132},"Klaus Dormann's 6502 functional tests",[133],{"id":134,"by":135,"text":136},"37475199","masfuerte","Klaus Dormann's 6502 tests don't rely on a particular emulator environment. They could be used with Ghidra. https:\u002F\u002Fgithub.com\u002FKlaus2m5\u002F6502_65C02_functional_tests",{"value":138,"source":81,"evidence":139},"OpenAI Gym Retro",[140],{"id":141,"by":142,"text":143},"37475761","westurner","The latest on winning Atari with RL+ FWIU: https:\u002F\u002Fgithub.com\u002Fopenai\u002Fretro: > Gym Retro lets you turn classic video games into Gym environments for reinforcement learning and…",{"value":145,"source":81,"evidence":146},"Tom7's NES learning project",[147],{"id":148,"by":149,"text":150},"37469692","JohnMakin","Very old ML project from a master's student's thesis which is what originally got me into CS. He taught it to play NES games other than mario and had a good breakdown of his…",{"comments":152,"answered":37,"key":153},6,[154,157,160],{"id":155,"text":156},"37473203","From what I've seen, it's usually read at the vblank interrupt. The input recording has entries in format \"\u003Cinstruction_number> \u003Cbuttons_bitmask>\". If I press a button and it's…",{"id":158,"text":159},"37537565","Nice, I'll give it a closer look. My only concern so far is memory hooking (still needed for hardware registers), which on Java side was called by FilteredMemoryState [1]. In…",{"id":96,"text":97},{"commenters":162,"max_depth":35,"maker_replies":152,"first_comment_mins":31,"lifespan_hours":163},22,174,[165,167,171,173,176,178,180,182,186,190,193,196,197,200,203,206,207,208,210,214,217,219,221,224,226,228,233,236,239,242],[103,31,43,166,104,31],"maker\u002Fpositive\u002Fexecution",[168,31,43,169,170,31],"37470050","project\u002Fpositive\u002Fexecution","wgjordan",[155,31,31,172,10,39],"maker\u002Fneutral\u002Fexecution",[174,31,31,175,104,31],"37475491","commenter\u002Fneutral\u002Fnone",[88,39,43,177,89,31],"maker\u002Fpositive\u002Fidea",[122,39,35,179,123,31],"project\u002Fneutral\u002Fexecution",[181,39,31,175,89,31],"37470084",[183,39,35,184,185,31],"37480046","maker\u002Fneutral\u002Fnone","quickthrower2",[187,37,43,188,189,31],"37472230","maker\u002Fpositive\u002Fnone","dlandau",[191,37,35,184,192,31],"37473849","askiiart",[194,37,35,184,195,31],"37474552","ktm5j",[126,35,35,179,127,31],[198,35,31,175,199,31],"37474470","tiahura",[201,35,31,175,202,31],"37474510","h0l0cube",[59,204,43,205,60,31],4,"maker\u002Fpositive\u002Fperformance",[158,204,31,172,10,39],[84,43,43,177,85,31],[96,43,31,209,10,39],"project\u002Fneutral\u002Fidea",[211,152,43,212,213,31],"37471575","project\u002Fpositive\u002Fdesign","nneonneo",[215,152,31,216,10,39],"37472871","maker\u002Fneutral\u002Fdesign",[111,218,35,179,112,31],7,[115,218,31,220,10,39],"project\u002Fcritical\u002Fexecution",[222,218,35,179,223,31],"37477167","djmips",[225,30,43,169,223,31],"37477179",[134,17,35,227,135,31],"project\u002Fneutral\u002Fdocs",[229,230,31,231,232,31],"37469883",10,"other\u002Fpositive\u002Fpricing","hatsunearu",[51,234,31,235,10,39],11,"project\u002Fpositive\u002Fidea",[148,237,31,238,149,31],12,"other\u002Fneutral\u002Fnone",[240,237,31,238,241,31],"37472667","_joel",[141,237,31,243,142,31],"other\u002Fneutral\u002Fidea",[],[246,251,256,261,265,269],{"id":247,"name":248,"points":249,"category":250},"37427127","HackYourNews",335,"ai",{"id":252,"name":253,"points":254,"category":255},"37470611","splat",309,"languages",{"id":257,"name":258,"points":259,"category":260},"37499375","Lantern",196,"data",{"id":262,"name":263,"points":264,"category":255},"37438028","cursed-typescript",186,{"id":266,"name":267,"points":268,"category":250},"37433218","Rivet",176,{"id":270,"name":271,"points":272,"category":255},"37448914","view.py",173,false,"v2",{"id":276,"name":5,"line":5,"ai":273,"cat":19,"year":12,"points":13,"comments":14,"rec":27,"s":277,"top":17,"kw":278,"maker":10,"domain":9,"tier":18,"attempts":31,"strip":279,"url":8,"mix":280,"praise":80,"objection":93,"sub":20},37444683,0.46,[23,24,20,25,26],"550053035333005050503035300000",[30,30,31,31],1794036641514]