?「インドリおきて・・・」
インドリ「(ああ誰かの可愛い声がする)」
?「インドリおきて・・・」
インドリ(あれ、ドリィちゃん?僕を看病してくれたのかな?もしかして僕のこと・・・)
インドリィちゃん「早く・・・」
インドリ(そうならそうともっと早く言ってくれればよかったのに。ドリィちゃんはツンデレなのかな?)
インドリィちゃん「足りない・・・」
インドリ(前にも同じこと言われたような・・・)
インドリィちゃん「早く起きなさい!レジスタが足りなぃ。」
インドリ「えっもうレジスタは実装したよ。」
インドリィちゃん「イベントにレジスタが足りないぃ。」
インドリ「何?何?何?何?何?何?何?何?。」(あたふた)
インドリィちゃん「この鳥頭!ReceivesDataEventにレジスタプロパティがないと、あとでレジスタに値を反映できないでしょうが!」
インドリ「ごめん。」(あたふた)
インドリィちゃん「さっさと実装しない。」
幽霊のような怖さを感じてインドリはあわてて、
ReceivesMemoryDataEventArgsを実装した。
実装したコードは次の通りだ。
public class ReceivesMemoryDataEventArgs : MemoryAccessEventArgs
{
private RegisterName target;
public ReceivesMemoryDataEventArgs(
uint startAddress, byte dataLength,
ValueType value, RegisterName regName )
: base( startAddress, dataLength, value )
{
this.target = regName;
}
}
新しいイベントにすることも出来たが共通要素も多いし、まだ
MemoryAccessEventArgsの実装が不完全だったので、インドリはひとまず継承することにした。
インドリ「さてリファクタリングするぞ」
//メモリーからデータを受信する。
public event MemoryAccessEventHandler ReceivesDataEvent;
private void OnReceivesDataEvent( ReceivesMemoryDataEventArgs e )
{
MemoryAccessEventHandler temp = SendDataEvent;
if ( temp != null ) temp( this, e );
}
private void ReceivesData(
uint startAddress, byte dataLength,
ValueType value, RegisterName regName )
{
MemoryAccessEventArgs e =
new MemoryAccessEventArgs( startAddress, dataLength,
value, regName );
OnReceivesDataEvent( e );
}
インドリィちゃん「油断禁物。」
インドリ「ピぇー」
インドリ「さっきのイベントの実装で、CPUがメモリデータを要求することは出来るけど、今のままじゃ受け取れないから、
まずはCPUオブジェクトのイベント登録だ!」
//自分を保持するPCを記憶する。
private Machine owner;
public Machine Owner {
get { return owner; }
}
public ControlProcessingUnit( Machine owner ) {
this.owner = owner;
//自分を保有するマシンからメモリデータが送られてきた時の処理
this.owner.SendDataEvent +=
new Machine.MemoryAccessEventHandler
( ReceivesMemoryDataEvent );
}
インドリ「続いて前回作ったMachineオブジェクトもイベントを登録だ!」
public Machine( )
{
this.cpu = new ControlProcessingUnit( this );
//データがCPUから送られてきた事が一目でわかる名前にする
this.cpu.SendDataEvent +=
new ControlProcessingUnit.MemoryAccessEventHandler
( ReceivesMemoryData );
//CPUがデータを要求していることが一目でわかる名前にする
this.cpu.ReceivesDataEvent +=
new ControlProcessingUnit.MemoryAccessEventHandler
( NotifyMemoryDataEvent );
}
インドリ「はぁはぁ・・・今回の記事やたら長いぞ。僕もう疲れたよ。」
インドリィちゃん「今日はもう休みなさい。」
インドリ「!!?インドリィちゃんが初めて優しい言葉を」
インドリィちゃん「うるさい!」
ドリィちゃんは素早くインドリの背後に回ると、首に手刀を振り落とした。
インドリ「きゅう!!」(バタ)
いいところだけど長すぎるから今回はおしまい。
ドリィちゃんは果たしてツンデレなのか?
そもそもインドリとドリィちゃんの関係は?
MOVE命令の実装は何時になったら終わるのか?
色々な謎を残したまま次回へ続く。