[{"data":1,"prerenderedAt":382},["ShallowReactive",2],{"project-37083309":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":29,"sentiment":30,"stance_mix":31,"scored_comments":36,"aspects":37,"strip":44,"post_text":46,"what":47,"said":79,"maker_in_thread":196,"shape":208,"grid":213,"attempts":344,"same_week":345,"maker_shows":197,"maker_hidden":374,"reader_version":375,"card":376},"37083309","OFRAK Tetris","Tetris, but the blocks are ARM instructions that execute in the browser","title","Show HN: Tetris, but the blocks are ARM instructions that execute in the browser","https:\u002F\u002Fofrak.com\u002Ftetris\u002F","ofrak.com","jstrieb",1691711763,2023,472,53,61,3109,2,"legend","games","puzzle game","web_app",[24,25,26,27,28],"arm assembly","tetris","learn assembly","browser emulator","unicorn wasm","loved",0.389,{"positive":32,"neutral":33,"mixed":34,"critical":35},15,17,0,1,33,{"idea":38,"design":40,"docs":42,"privacy":43},{"positive":39,"critical":34},7,{"positive":41,"critical":34},5,{"positive":35,"critical":34},{"positive":34,"critical":35},[41,41,34,41,41,45,41,34,45,45,41,45,45,45,34,41,34,34,41,41,35,34,34,34,45,45,45,41,45,45,41,45,34,34,45,41,41,41,41,45],3,"OFRAK Tetris is a project I started at work about two weeks ago. It's a web-based game that works on desktop and mobile. I made it for my company to bring to events like DEF CON, and to promote our binary analysis and patching framework called OFRAK.\n\nIn the game, 32-bit, little-endian ARM assembly instructions fall, and you can modify the operands before executing them on a CPU emulator. There are two segments mapped – one for instructions, and one for data (though both have read, write, and execute permissions). Your score is a four byte signed integer stored at the virtual address pointed t",{"problem":48,"audience":54,"pricing":62,"motivation":63,"time_to_build":67,"stack":71,"openness":76,"stage":77,"team_size":78},{"value":49,"source":50,"evidence":51},"Learning ARM assembly through a game; promoting OFRAK binary analysis framework","maker",[52],{"id":53},"post",{"value":55,"source":56,"evidence":57},"People learning ARM assembly and DEF CON attendees","inferred",[58,59],{"id":53},{"id":60,"by":11,"text":61},"37085719","Hey, any specific questions? I'd be happy to explain anything that needs clarification. More broadly, any thoughts on how to make the game clearer? I know that a manual…",null,{"value":64,"source":50,"evidence":65},"Built for the company to bring to DEF CON and promote OFRAK",[66],{"id":53},{"value":68,"source":50,"evidence":69},"About two weeks",[70],{"id":53},[72],{"value":73,"source":50,"evidence":74},"Unicorn CPU emulator cross-compiled to WebAssembly",[75],{"id":53},"unknown","launched","company",{"praise":80,"objections":104,"requests":142,"questions":162,"alternatives":181},[81,97],{"value":82,"source":83,"evidence":84},"Fun and clever way to learn assembly","commenter",[85,89,93],{"id":86,"by":87,"text":88},"37086140","once_inc","As a programmer with practically 0 experience in working with assembly, this is a pretty cool tool to learn! I've been holding a cheatsheet in another tab to find out what each…",{"id":90,"by":91,"text":92},"37083678","LoganSnow","This is really cool! So far I have a high score of 65612 :) Some feedback: - When opening the help menu, it wasn't obvious how to close it (I think the only way is by pressing…",{"id":94,"by":95,"text":96},"37099758","runlaszlorun","omg, this is awesome. i’d been meaning to pick up some ARM assembly. and the fact that you managed to link game mechanics with working opcodes is great. love it!",{"value":98,"source":83,"evidence":99},"Nice brutalist aesthetics",[100],{"id":101,"by":102,"text":103},"37085443","shaunxcode","Beautiful brutalist ui\u002Fux!",[105,120,131],{"value":106,"source":83,"evidence":107},"Hard to understand without assembly knowledge",[108,112,116],{"id":109,"by":110,"text":111},"37085076","personjerry","I'm computer literate (and know some basic assembly) but wow I did not get it",{"id":113,"by":114,"text":115},"37086261","tiborsaas","Very cool concept, but my assembly understanding is really poor :) It says that my score is stored in R12, but then why do I have a score of 16 of R12 is zero?…",{"id":117,"by":118,"text":119},"37096749","joshxyz","i code frontend and backend web apps in javascript and typescript, very comfy with cloud stufd but oh boy these assembly stuff these are heiroglyphs to me haha",{"value":121,"source":83,"evidence":122},"Rotate keys unclear and confusing",[123,127],{"id":124,"by":125,"text":126},"37085965","ithkuil","I don't understand what \"rotate the instruction order\" keys do. I tried pressing them in many circumstances and nothing happens",{"id":128,"by":129,"text":130},"37086020","rft","Just figured it out. If you select \"Adjust Difficulty\" and increase the max gadget size (number of instructions that can fall at once) you change their order with these keys.…",{"value":132,"source":83,"evidence":133},"Cookie banner raises GDPR concerns",[134,138],{"id":135,"by":136,"text":137},"37086186","latexr","Before trying it I hit “About” and it opened a new page which says: > By continuing to use this site, you agree to the use of cookies. You seem to be in violation of the GDPR.…",{"id":139,"by":140,"text":141},"37086421","hooch","Telling site visitors to disable cookies via their browser is precisely how apple.com does it.",[143,151,155],{"value":144,"source":83,"evidence":145},"Sandbox mode to try instructions",[146,147],{"id":90,"by":91,"text":92},{"id":148,"by":149,"text":150},"37085956","rpgwaiter","Maybe a way to break down a game after it happened, or maybe a sandbox mode to try arbitrary things",{"value":152,"source":83,"evidence":153},"Manual or instruction reference",[154],{"id":60,"by":11,"text":61},{"value":156,"source":83,"evidence":157},"RISC-V version",[158],{"id":159,"by":160,"text":161},"37111774","thegeek108","Very interesting game! Do you have any plans to make the RISC-V version? Thank you for sharing this game!",[163,170],{"value":164,"source":83,"evidence":165},"How to build the game",[166],{"id":167,"by":168,"text":169},"37118353","anta40","How to build the game? I tried navigating https:\u002F\u002Fofrak.com\u002Fdocs\u002Fenvironment-setup.html, but couldn't find anything specific about the tetris games. Perhaps I miss that?",{"value":171,"source":83,"evidence":172},"Why R12 score mechanic matters",[173,177],{"id":174,"by":175,"text":176},"37087277","mpeg","This is so clever, I couldn't help but smile when I saw \"Your score is stored in memory at the address pointed to by R12\" :) Thanks for sharing, it does makes me miss DEFCON,…",{"id":178,"by":179,"text":180},"37088169","velosol","Is the reason for R12 making you smile something you could share?",[182,189],{"value":183,"source":83,"evidence":184},"Zelda OoT get-item manipulation speedruns",[185],{"id":186,"by":187,"text":188},"37103556","__s","That game is Zelda on N64 https:\u002F\u002Fwww.zeldaspeedruns.com\u002Foot\u002Ftech\u002Fget-item-manipulation https:\u002F\u002Fwww.zeldaspeedruns.com\u002Foot\u002Fba\u002Freverse-bottle-adventure",{"value":190,"source":83,"evidence":191},"Emu86 Jupyter kernel and iarm interpreter",[192],{"id":193,"by":194,"text":195},"37086102","westurner","ASM years ago. MOV'ing without any initial data feels unnerving. WASM and JupyterLite would be cool, too. Category:Instruction_set_listings has x86 but no aarch64:…",{"comments":197,"answered":45,"key":198},9,[199,202,205],{"id":200,"text":201},"37086086","I like the idea of sandbox mode! I'm definitely much quicker at reading ARM assembly after playing a few hours of this game over the course of making it.",{"id":203,"text":204},"37089598","So far, I've used two good strategies: - Spray PC into as many registers as possible, try to add those registers together as many times as possible, and store the sum at zero (or…",{"id":206,"text":207},"37086310","R12 contains the address of your score. In this case, that is address 0 - the start of the data segment. The score register is yellow, and the corresponding memory region it…",{"commenters":209,"max_depth":210,"maker_replies":197,"first_comment_mins":211,"lifespan_hours":212},38,6,48,268,[214,216,218,220,221,223,225,229,232,234,235,238,241,243,246,248,249,251,252,254,256,257,259,260,263,264,267,269,273,276,277,279,282,286,288,291,293,297,301,303,306,308,311,313,316,318,321,325,326,330,334,338,342],[86,34,41,215,87,34],"project\u002Fpositive\u002Fidea",[90,35,41,217,91,34],"project\u002Fpositive\u002Fdesign",[200,35,34,219,11,35],"maker\u002Fneutral\u002Fnone",[174,18,41,215,175,34],[178,18,34,222,179,34],"commenter\u002Fneutral\u002Fnone",[224,18,41,215,175,34],"37088558",[226,18,45,227,228,34],"37088749","project\u002Fneutral\u002Fnone","Jerry8538",[230,18,41,215,231,34],"37090913","justsid",[186,18,34,233,187,34],"other\u002Fneutral\u002Fnone",[203,45,34,219,11,35],[236,45,45,227,237,34],"37101344","stavros",[113,239,45,240,114,34],4,"project\u002Fneutral\u002Fdesign",[206,239,34,242,11,35],"maker\u002Fneutral\u002Fdesign",[244,239,41,245,114,34],"37087346","maker\u002Fpositive\u002Fdocs",[109,41,45,247,110,34],"project\u002Fneutral\u002Fdocs",[60,41,34,219,11,35],[148,41,45,250,149,34],"project\u002Fneutral\u002Fidea",[124,41,45,240,125,34],[253,41,34,242,11,35],"37086017",[255,41,34,242,11,35],"37086044",[128,41,41,217,129,34],[258,41,34,219,11,35],"37086076",[117,41,34,233,118,34],[261,41,45,250,262,34],"37105317","LLyaudet",[101,210,41,217,102,34],[265,210,41,217,266,34],"37085872","Lapsa",[135,39,35,268,136,34],"project\u002Fcritical\u002Fprivacy",[270,39,34,271,272,34],"37086299","commenter\u002Fneutral\u002Fprivacy","fuomag9",[274,39,34,222,275,34],"37086913","sabas123",[139,39,34,271,140,34],[278,39,34,271,136,34],"37086537",[280,39,34,271,281,34],"37093725","matsemann",[283,39,45,284,285,34],"37088061","project\u002Fneutral\u002Fprivacy","chronogram",[167,287,45,247,168,34],8,[289,197,45,227,290,34],"37095664","hnpl",[292,197,45,227,290,34],"37218469",[294,295,41,215,296,34],"37096052",10,"diydsp",[298,299,45,227,300,34],"37096924",11,"cushpush",[159,302,45,250,160,34],12,[304,305,41,217,125,34],"37085943",13,[307,305,34,217,11,35],"37086093",[309,305,45,242,310,34],"37086291","murkle",[312,305,34,242,11,35],"37086322",[314,305,34,315,310,34],"37086372","commenter\u002Fneutral\u002Fdesign",[317,305,34,315,310,34],"37102231",[319,305,45,240,320,34],"37087312","thisOtterBeGood",[322,323,41,215,324,34],"37090628",14,"alex_suzuki",[94,32,41,215,95,34],[327,328,45,240,329,34],"37087821",16,"ant6n",[331,33,41,332,333,34],"37089658","project\u002Fpositive\u002Fnone","xtracto",[335,336,41,332,337,34],"37085287",18,"gmerc",[339,340,45,240,341,34],"37085891",19,"foota",[193,343,34,233,194,34],20,[],[346,351,356,360,365,370],{"id":347,"name":348,"points":349,"category":350},"37125118","Outlines",854,"ai",{"id":352,"name":353,"points":354,"category":355},"37119942","Little Rat",555,"security_privacy",{"id":357,"name":358,"points":359,"category":350},"37128293","AI-town",429,{"id":361,"name":362,"points":363,"category":364},"37114141","learndb-py",371,"learning_science",{"id":366,"name":367,"points":368,"category":369},"37075730","Applite",280,"dev_tools",{"id":371,"name":372,"points":373,"category":350},"37148210","LlamaGPT",225,false,"v2",{"id":377,"name":5,"line":6,"ai":374,"cat":20,"year":13,"points":14,"comments":15,"rec":29,"s":378,"top":18,"kw":379,"maker":11,"domain":10,"tier":19,"attempts":34,"strip":380,"url":9,"mix":381,"praise":82,"objection":106,"sub":21},37083309,0.39,[24,25,26,27,28],"5505535033533305005510003335335300355553",[32,33,34,35],1794036639824]