皆さん、ゲームしていますか?
自分もSteamで150本以上のゲームを持っています(積んでるゲームばかりとか言わない)が、その中でも「普段の業務を思い出すようなゲーム」というのはそう多くはありません。
今回は、普段の業務を思い出すようなゲームの一つである「SHENZHEN I/O」の話です。
SHENZHEN I/Oとは?
ゲームの概要はこんな感じです。
あなたは、今日から深セン市の企業でエンジニアとして働くことになりました。
マニュアルや送られてくるメールなどを参考に、仕様通りに動くデバイスを作成しよう。
タイトルの「SHENZHEN」は、中国のシリコンバレーなどと呼ばれている深セン市のことです。
「回路を作り、コードを書き、マニュアルを読め」という感じのゲームになります。
今更?
このゲーム、発売されたのが2016年11月なのでこの記事を書いている時点で2年以上経っています。
また、有名サイトでのレビューもされています。
ハロー!Steam広場 第136回:我がプログラムを見よ! こだわりのアセンブリで製品を動かす電子回路シミュレーション「SHENZHEN I/O」
https://www.4gamer.net/games/282/G028219/20161202085/
この記事では、ゲームの攻略の話をするのではなく「普段の業務といかに似ているか」という話をしようかなと思います。
普段の業務との類似性
普段、自分は以下のサービスに関わっています。
これらのサービスでは、実際の機器から抜き出したファームウェアを逆アセンブラで解析したりしています。
このゲームもコードを書く必要がありますが、MCxxxxファミリと呼ばれる仮想のマイコンのアセンブリ言語のコードを書く必要があります。
また、ゲーム中のメールや付属のマニュアルを読む必要もあります。
このマニュアルも本格的で、現実の世界で言うところのデータシートを模したものになっています。
この「データシートを読み、アセンブリ言語でコードを書いたりする必要がある」という点が普段の業務とよく似ています。
また、制約をクリアした上で回路を作成しなければならないという点も似ています。
各問題にはテストケースが設定されており、これをクリアすることで初めて問題を解いたと判定されます。
マイコンも上位のモデルになるとacc
レジスタに加えてdat
レジスタが増えるのですが、このレジスタに対しては直接算術演算を実行することができません。
これは現実のCPUでも
6502のような例があるので制約というより仕様に近いですが、現代的なアーキテクチャに慣れていると苦しむことになります。
さらにゲームを進めていくと、同期バスであるXBusが登場します。
同期バスのため送信側が値を送出すると同時に受信側が値を読み込まないといけないという仕様になっています。
さもないと、送受信がブロックされて停止してしまいます。
また、一度値を読んだら同じ値をもう一度読むことができません。
そのため、読んだ値を別の場所で使うためには必然的にレジスタにセットする形になります。
ちなみにXBusから値を読めるようになるまで待つslx
命令があるので、イベントドリブンな使い方もできます。
最後に
SHENZHEN I/Oは、電子回路やアセンブリ言語が好きな人にはおすすめです。
ウィッシュリストに入れておけば、セールで安くなったりしたときに通知が飛んできます。
また弊社ではセキュリティエンジニアとして働きたい方を募集しています。
(SHENZHEN I/Oが好きな人には、向いていると思います。)
採用についての詳しい情報は、こちらのページをご覧ください。