Member-only story

Shenzhen I/O玩後感

難到核爆

趁住Steam夏日大酬賓買咗2016年出嘅Shenzhen I/O玩。

結論: 難到核爆級,高Human Resource Machine一個量級🤯,我諗主要原因係program code size有好大限制。

玩法介紹

故仔講玩家係一個embedded application developer,喺舊公司搵唔到人生嘅意義 (因為都外包哂俾中國),所以就隻身來到大灣區深圳廠返工,而華強北路嘅產品當然如同現實一樣,係成本優先見稱。遊戲關卡以product design/implementation形式出現,而結果總之work就得,不問方法,corners有幾多可以cut幾多。

遊戲同時有一個幾十紙頁嘅datasheet pdf用來參考產品特性,同真嘅各種產品datasheet真係似,可以以假亂真。成個鋪排可以真係可以令玩家有返工嘅沉浸式體驗😂。

每一關卡會有一個PCB,佢會限制可以放嘅零件數量(而且飛線都有限制)。手上最常用到嘅零件係兩款MCU(下述),同埋一啲RAM呀ROM呀噉,logic gates有但並冇任何一關必須要用。解題過程主要喺MCU上面寫一款好簡單嘅assembly。

難處喺邊

就係嗰兩款MCU簡單到一個點,可以用嘅有兩款MCU一隻細、一隻大。細嗰隻只可以寫9行code,得一個ACC register,仲慘過x86。大嗰隻都只係14行,俾多一個DAT register。

大佬,一個for-loop都最少三行啦 (add/substract, test, jmp)。MCU嘅程式容量大細限制咗一定要將個問題切到細過”byte-size”,好好規劃每粒MCU只係解一個好細嘅部分。如果一粒解唔哂就要用I/O send去另外一粒MCU,但一發一收都要食兩行code,而且會有timing issue要考慮。

遊戲最大難處就係用平時寫開program嘅解決一定會爆。每條題目用細如8051、AVR Tiny等陽春MCU都會係easy job,但Shenzhen I/O嗰粒MC4000/MC6000嘅能力真係仲細過飛魚籽。

好多時候scenario嘅input data都係有某種沒有明言嘅pattern,要好好利用呢啲特性去cut corners,例如input range係個位數定百位數、幾時用lookup table、幾時branch hardcode之類要花時間諗一諗,千祈唔好諗寫一個generic嘅program for generic嘅input,死硬。

每解完一題之後會出有一個histrogram成績表,係同全世界比較hardware cost (用咗幾多component)、energy、line of code三個指標,幾乎每次都只可以做到中游位置,每次都好驚訝有竟然仲有得細啲同快啲…。

去到bonus stage嘅關卡,think out of the box可以話係必須,否則唔只係跑分差,而係根本塞唔落做唔到,絕對要切換一套華強北路式嘅解題思考方式。

而每當解完一題再回頭睇,都會好驚訝原來咁少code可以做咁多嘢。(當然亦因為係佢input data size set得啱啱好)

P.S. 喺遊戲途中,老闆email會話你知粒MCU仲有一個gen instruction可以用,因為未翻譯所以未document上面冇。一句gen喺某啲場合可以頂十幾行code,如果好似我噉跳哂啲劇情唔睇嘅話可能會唔覺意miss咗。

--

--

I.T. 9 遊戲日誌
I.T. 9 遊戲日誌

Written by I.T. 9 遊戲日誌

「IT9,你的資訊真的很有用」 你好 我就係IT9 Trust me I am IT9 // fb@it9gamelog, youtube@it9gamelog

No responses yet