- OFRAK Tetris เป็นเกมสไตล์เททริสในเบราว์เซอร์ที่มีคำสั่ง ARM ร่วงลงมา โดยแทนที่จะต่อบล็อก ผู้เล่นจะวางคำสั่งเพื่อสร้างลำดับการทำงานของโปรแกรม
- instruction gadget ที่ร่วงลงมาจะถูกหมุนแล้วล็อกเข้าที่ และในบรรดาคำสั่งที่ถูกล็อกไว้ จะมีเพียงคำสั่งที่อยู่บนสุดของหน้าจอเท่านั้นที่ถูกประมวลผล
- คะแนนจะถูกเก็บไว้ที่ ที่อยู่หน่วยความจำที่ R12 ชี้อยู่ และสามารถติดตามสถานะได้โดยดู R0~R12, LR, PC, SP และ memory dump
- หากหมดเวลา หรือเกิดการเข้าถึงหน่วยความจำผิดพลาด หรือกระโดดไปยังที่อยู่ที่ไม่ถูกต้อง จะกลายเป็น Game over และการทำงานจะสิ้นสุดลง
- สามารถปรับความยากและวิธีการทำงานได้ด้วยตัวเลือกอย่าง single-step execution, สลับเพลง, logical instructions, โหมดไม่สิ้นสุด, ช่วงเวลาระหว่างการร่วง และขนาด gadget สูงสุด
เททริสที่ดำเนินไปด้วยคำสั่ง ARM
- OFRAK Tetris เป็นเกมสไตล์เททริสที่มีกาเจ็ต (gadget) ซึ่งประกอบด้วยคำสั่ง ARM ร่วงลงมา
- ผู้ใช้จะหมุนคำสั่งที่กำลังร่วง แล้วล็อกไว้ทางด้านซ้ายเพื่อสร้างลำดับการทำงาน
-
กติกาการทำงาน
- คำสั่งจะร่วงจากบนลงล่าง
- ผู้ใช้สามารถหมุนและล็อกคำสั่งได้
- ในบรรดาคำสั่งที่ถูกล็อกไว้ จะประมวลผลเฉพาะคำสั่งบนสุดเท่านั้น
สถานะการทำงานที่ตรวจสอบได้บนหน้าจอ
- จะแสดงคำสั่งที่กำลังถูกประมวลผลพร้อมที่อยู่
- ตัวอย่าง:
add PC, PC, #61 - ตัวอย่าง:
00010000,00010004,00010008
- ตัวอย่าง:
- สามารถติดตามผลการทำงานได้จากสถานะของรีจิสเตอร์และหน่วยความจำ
- จะแสดงค่า R0~R12, LR, PC, SP
- พื้นที่หน่วยความจำจะแสดงเป็นที่อยู่แบบเลขฐานสิบหกและค่าที่ถูกเติมด้วย 0
- คะแนนจะแสดงในรูปแบบ
Score: 0
การเก็บคะแนนและเงื่อนไขจบเกม
- คะแนนจะถูกเก็บไว้ที่ ที่อยู่หน่วยความจำที่ R12 ชี้อยู่
- เกมจะจบลงเมื่อเกิดข้อใดข้อหนึ่งต่อไปนี้
- หมดเวลา
- เข้าถึงหน่วยความจำที่ไม่ถูกต้อง
- กระโดดไปยังที่อยู่ที่ไม่ถูกต้อง
- หน้าจอจบเกมจะแสดง
Game over.และพื้นที่สำหรับกรอกคะแนนสูงสุด
การควบคุมและการตั้งค่า
- การควบคุมพื้นฐานประกอบด้วย single-step execution, การล็อก gadget, การหมุนรีจิสเตอร์, เล่น/หยุดเพลงชั่วคราว และแสดง/ซ่อนคำอธิบาย
- ยังมีการตั้งค่าปุ่มสำหรับเกมแพดด้วย
-
Single Step
-
Toggle Music
-
Lock In
-
Rotate Instructions Up / Down / Left / Right
- Toggle Game Instructions
- สามารถปรับเงื่อนไขการทำงานและความยากได้ในการตั้งค่าเกม
- Score multiplier
- Enable Logical Instructions
- Infinite mode
- Seconds between drops
- Maximum gadget size
-
อีเวนต์ภาคสนามที่ DEF CON
- ผู้ที่อยู่ในงาน DEF CON สามารถแวะไปที่บูธ Red Balloon Security เพื่อเล่น Tetris ร่วมกันได้ที่ Car Hacking Village
- ผู้ที่ทำคะแนนได้สูงพอจะได้รับรางวัล
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ในฐานะโปรแกรมเมอร์ที่แทบไม่มีประสบการณ์ทำงานกับ assembly เลย นี่เป็นเครื่องมือเจ๋งๆ ที่เหมาะมากสำหรับการเรียนรู้
ผมเปิดชีตสรุปคำสั่งไว้ในแท็บอื่นเพื่อดูว่าแต่ละคำสั่งทำอะไร
แต่ก็ผิดหวังนิดหน่อยที่ segfault ครั้งแรกทำให้คะแนนสูงสุดออกมาเป็น -4.8 พันล้าน :-P
เจ๋งมาก! คะแนนสูงสุดที่ทำได้จนถึงตอนนี้คือ 65612
ถ้าจะให้ฟีดแบ็ก ตอนเปิดเมนูช่วยเหลือ วิธีปิดยังไม่ชัดเจน และดูเหมือนจะทำได้แค่กด
?อีกครั้งชอบเพลง Goblin และอินเทอร์เฟซกับการแยกสีที่เหมาะกับการลองเล่นกับคำสั่งก็ทำได้ดี
ถ้ามีโหมด sandbox ที่ให้ดูผลของการรันคำสั่งล่วงหน้าได้ และแก้โปรแกรมได้หลังเกมจบ น่าจะมีประโยชน์มากสำหรับคนที่กำลังเรียน ARM assembly
หลังจากเล่นไปหลายชั่วโมงระหว่างทำเกมนี้ ผมรู้สึกชัดเจนว่าอ่าน ARM assembly ได้เร็วขึ้น
เห็นประโยค “คะแนนถูกเก็บไว้ในหน่วยความจำที่อยู่ตาม address ที่ R12 ชี้ไป” แล้วอดขำไม่ได้
ขอบคุณที่แชร์ ทำให้คิดถึง DEFCON คงได้ไปอีกทีปีหน้า
ผมเปิดหน้าไว้ก่อนที่จะมีคนตอบ เลยไม่เห็นคำตอบจนกว่าจะรีเฟรชหน้า
กลยุทธ์ดีๆ ที่ลองใช้มาจนถึงตอนนี้มีสองแบบ
แบบแรกคือกระจาย PC ไปยัง register ให้มากที่สุดเท่าที่ทำได้ แล้วเอา register เหล่านั้นมาบวกซ้ำให้ได้มากที่สุด จากนั้นเก็บผลรวมไว้ที่ address 0 หรือที่ตำแหน่งของคะแนน
แบบที่สองคืออ่านคำสั่งที่ประกอบขึ้นจากค่า PC ก่อนหน้าเข้ามาใน register ในรูปจำนวนเต็ม ซึ่งโดยมากจะดูเหมือนเป็นค่าติดลบ แล้วใช้การลบทำให้ไม่ติดลบ จากนั้นเก็บไว้ที่ตำแหน่งคะแนน
อยากรู้ว่าคนอื่นลองกลยุทธ์อะไรกันบ้าง
คอนเซปต์เจ๋งจริงๆ แต่ความเข้าใจ assembly ของผมต่ำเกินไป :)
บอกว่าคะแนนถูกเก็บไว้ที่ R12 แต่ R12 เป็น 0 แล้วทำไมคะแนนถึงเป็น 16 ก็ไม่เข้าใจ
https://imgur.com/a/RY5jhTu
ในกรณีนี้คือ address 0 หรือจุดเริ่มต้นของ data segment
register คะแนนเป็นสีเหลือง และพื้นที่หน่วยความจำที่ register นั้นชี้ไป ซึ่งก็คือ byte คะแนนจริงๆ ก็ถูกไฮไลต์เป็นสีเหลืองด้วย
ผมคุ้นเคยกับคอมพิวเตอร์และรู้ assembly พื้นฐานอยู่นิดหน่อย แต่โอ้โห อันนี้ไม่เข้าใจเลย
ในภาพกว้างกว่านั้น ก็อยากฟังความคิดว่าควรทำให้เกมชัดเจนขึ้นได้อย่างไร
รู้ว่าคู่มืออธิบายคำสั่งคงช่วยได้ แต่ยินดีรับไอเดียอื่นๆ ด้วย
เป็นbrutalist UI/UX ที่งดงาม
ก่อนลองเล่น ผมกด “About” แล้วมีหน้าใหม่เปิดขึ้นมาพร้อมข้อความแบบนี้: “การใช้ไซต์นี้ต่อไปถือว่าคุณยินยอมให้ใช้คุกกี้”
ดูเหมือนละเมิด GDPR การปฏิเสธคุกกี้ควรทำได้ง่ายพอๆ กับการยินยอม
โดยเฉพาะคุกกี้พวกนี้ก็ดูไม่จำเป็นต่อการทำงานของไซต์ด้วย
“บริการใช้คุกกี้และเทคโนโลยีที่คล้ายกัน เช่น pixel tags, web beacons, clear GIFs และ JavaScript เพื่อให้เซิร์ฟเวอร์รู้จักเว็บเบราว์เซอร์ของคุณ ทราบเวลาเข้าชมและใช้งาน วิเคราะห์แนวโน้ม ทำความเข้าใจฐานผู้ใช้ และดำเนินงานรวมถึงปรับปรุงบริการ … เราอาจเสริมข้อมูลที่เก็บรวบรวมด้วยข้อมูลที่ได้รับจากบุคคลที่สาม รวมถึงคุกกี้ที่บุคคลที่สามวางไว้บนอุปกรณ์ของคุณ”
https://ofrak.com/privacy/#tracking-tools-and-opt-out
การบอกให้ลบคุกกี้ด้วยการตั้งค่าเบราว์เซอร์ที่ด้านล่างของหน้าไม่ใช่วิธีแก้ที่ยอมรับได้
https://www.cnil.fr/en/refusing-cookies-should-be-easy-accep...
สงสัยว่า build เกมนี้ยังไง
ลองดู https://ofrak.com/docs/environment-setup.html แล้ว แต่ไม่เจอรายละเอียดเฉพาะของเกม Tetris
อาจเป็นผมที่พลาดไปก็ได้
ชอบคอนเซปต์นี้มาก
หัวใจของการทำคะแนนสูงดูเหมือนจะเป็นการเขียน 0 ลงใน PC
เพราะ binary code ของคำสั่งใหม่จะถูก “เพิ่ม” เข้าไปในพื้นที่หน่วยความจำที่เห็นทางขวา จากนั้นก็สามารถจัดการ R12 เพื่อทำคะแนนให้สูงสุดได้
เพราะคำสั่งทั้งหมดมีขนาด 4 byte และบิตบนสุดเป็น 1 เสมอ
บางครั้งขึ้นไปได้ถึงประมาณ 2 พันล้าน แต่ค่าเฉลี่ยค่อนข้างต่ำ ;)