ゲーム

2017.12.17

元アセンブラプログラマの見るHuman Resource Machine その1 アーキテクチャ

皆さん、お久しぶりです。
AliceSystemのインフラエンジニアの毒舌な妹です。
今回、AliceSystemはC93 落選しました。blog更新とかしばらくさぼってたり、技術書典3で新刊が出なかったので落とされたかな?
今度の冬は0o10年記念か0x10回参加記念でタオルでも配ろうかと思っていたのですが、ままならないものです。


では、今日のお題はいつもと少し違って、ゲームの話です

今日は、最近話題のゲーム、Human Resource Machineを、とりあげることにします。
主催が元アセンブラプログラマなので、結構ノリノリで解いてました。
ソートは実装が「面倒」だけど難しいことは無かったって言ってたけど、本当かな?

どんなゲームなのかは他所で語り尽くされているところがあるので、そちらを参照してください。
ごく簡単に言えば、社畜ちゃんにアセンブラっぽく適切な命令を与えてステージごとの目的を達成するパズルゲームです。

ここでは、元アセンブラプログラマの目で、Human Resource Machineを見て行くことにします。
まずはアーキテクチャについてです。

結論言っちゃおう、これ、ハーバードアーキテクチャのアキュムレータマシンだよね。


Human Resource Machineのアーキテクチャ

コード領域とデータ領域が分離しているハーバードアーキテクチャです。メモリの内容操作は、データ領域に対してのみ行うことが可能です。
ノイマンアーキテクチャと比較したとき、コード領域はデータを含まないので、先読みキャッシュが容易になるという利点があります。
human Resource Machineでは、コードとデータの分離は徹底していて、メモリやレジスタに直接値を設定する命令が存在しません。
直値指定が必要な場合は、初期値をメモリにハードコーディングしておいてつかうというやりかたをしています。


社畜ちゃんの役割は何?

社畜ちゃんは、CPUでいうところのアキュムレータです。簡単に言うと、計算をやるための専用のレジスタをアキュムレータといいます。
床のタイルはレジスタじゃないよ。
全てのデータは、どこかにあるものを社畜ちゃんが持ち、それをどこかに置きます。
つまり、Human Resource Machineは、アキュムレータマシンでもあります。

アキュムレータマシンってなに?

全ての計算を、アキュムレータという計算用の特別なレジスタでのみ行うCPUアーキテクチャです。計算結果は、暗黙のうちにアキュムレータに上書きされます。
理論上のアキュムレータマシンは、レジスタはアキュムレータとププログラムカウンタ、フラグレジスタ
演算回路を簡単にできるという利点があり、Z80など昔のCPUは、演算に関してはアキュムレータマシンとして実装されていました。
計算はアキュムレータとメモリの中身、もしくは、このゲームでは存在しませんが、アキュムレータと他のレジスタとの間で行い、暗黙の家にアキュムレータに格納されます。

データの入出力

メモリとは別に、データの入出力を行うためのデバイスがあります。

処理すべきデータがやってくるところと、処理したデータを送り出すところは、それぞれ独立したFIFOです。
データは非同期に取り出し、送り出すことができます。

フラグ

フラグレジスタやフラグビットという形で明示されていませんが、フラグが存在します。
フラグは、ゼロフラグとネガティブフラグの二つだけです。
社畜ちゃんが今手に持っているもの、つまりアキュムレータの中身が数値の0であればゼロフラグが立ちます。
同様に、社畜ちゃんの手の中、アキュムレータの中身がマイナスの数値であれば、ネガティブフラグが立ちます。

ネガティブフラグは一般にはサインフラグと呼ばれ、直前に操作れたレジスタ(Human Resource Machineでは必ずアキュムレータ)の先頭ビットと同じ値になります。

一見足りないようですよね。特にキャリーフラグ。
多分、キャリーフラグはゲームでは使わないから省略されたと思われます。


プログラムカウンタ

明示的ではないですが存在します。ただし、PCの値を変更できるのはジャンプ命令だけです。なので、テクニックを使って悪いことをしたりはできません。


メモリ

お題によってサイズが異なります。お題に対して、あり余る領域が設定されています。といっても、20byteもなかったりするのですが。

間接アドレッシング

Human Resource Machineは間接アドレッシングをサポートしています。高級言語でいうところのポインタです。
あるメモリの中身を、メモリのアドレスと見て、その値のアドレスにアクセスすることができます。
スタックマシン以外のアーキテクチャでは、配列や文字列と言った連続したデータを眺めていくときに必要な概念です。

human Resoure Machineにはアドレスレジスタがないので、レジスタ間接アドレッシングはありません。

では、次回はこの情報をもとに、インストラクションセットを見て行くことにしましょう。


2005.04.08

ゆんゆんよんよんやんやん(ぉ

前回は全開に電波を飛ばしていました。
電波で全壊した今日この頃です。でも、心と身体はすっきり全快、みたいな。

…って、前回は4月1日だからね。
おねえさんは、ネタにマヂレスする子は嫌いです。

株をはじめました。
といっても、野村のバーチャル証券だけどね。
バーチャルとはいえ投資先は身近な企業へ、これは投資のセオリーらしい。

リンクシス…上場してねぇ
身近な会社ということでネットギアとかシスコとかサンとか…日本では上場してなかったのね。
結局、ヤマハとかベリサインとか、上場している中で身近な
企業にしてみました。

…ネットワーク屋には身近な企業ということで一つ(汗

2005.04.01

rogue世界大会

rogueというゲームを知っていますか?
/usr/game以下がちゃんとあるU*IXなら入っていないといけないゲームです。
おねえさんなんか、前の会社ではFreeBSDのサーバを/usr./game以下もきちんとインストールして、
SShでログインして遊んでました。
RHEL3は、GNOMEやKDEのゲームは入っているくせに、rogueが入ってないのが…

rogueがどんなゲームかというのは、rogue likeでググってください。テキストベースの
nCurse使ったゲームで、シレンやトルネコの元となったゲーム…なんて説明をされることも
あるゲームです。

さて、このゲームのプロリーグが、今日から開催されることを知っていますか?
e-sportsとも呼ばれる対戦型ゲームの世界大会ですが、ついに、伝統あるこのrogueの
プロリーグができることとなったのです。
さて、シングルプレイが基本のローグでプロリーグも対戦もないんじゃないかと思うあなた、おねーさんも
最初はそう思いました。

rogueリーグ世界ルールでは、12時間という制限時間で、一番最初にイェンダーの魔除けを持ち帰った
プレイヤーの勝利となります。もっとも、12時間かかってもイェンダーの魔除けを持ち帰るどころか、
ラスボスの、イェンダーのいるフロアまでたどり着けないことも多いのです。
ではどうやって勝敗を決めるかというと、12時間終了時点で居るフロア、経験値、正体が判明した
アイテムの数などで判定が行われます。
このあたり、ポイントを算出する計算式があるのですが、それは、公式ルールブックを参照してください。

日本人からも、数名のプロのrogueプレイヤーが出ました。中学生の頃にイェンダーの魔除けを持ち帰る
ことに成功していたり、rogue攻略本のライターだったり、というそうそうたるメンバーです。
そういえばコロコロでrogueを題材にしたコミックがはじまるとかいう話もあったなあ…
今年は、rogueから眼が離せません。

My Photo
無料ブログはココログ
December 2018
Sun Mon Tue Wed Thu Fri Sat
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31