/var/log/messages

debugging with sixth sense

Machine Language

Hack 機械語の章、一昨日のもくもくでさくっとヤッツケる予定だったのですが、間接参照な書き方でハマッておりました。

画面なピクセルのメモリマップに白黒な情報を転送したくて

ptr = ADDRESS + i;
*ptr = color;

みたいな実装を、だったのですが思ったとおりに動いてくれず。

かなりの紆余曲折の末にメモリマップのベースアドレスに現在処理位置なインデクスを加算したナニをメモリに持ておけ、というあたりは承知していたのですが

// ptr = SCREEN + i
@SCREEN
D=A
@i
D=D+M
@ptr
M=D

このポインタ位置に書込む、というソレを以下のようにしてたりとかしていたのですが

// *ptr = color
@color
D=M
@ptr
A=M
M[A]=D

どうも上手く機械語に翻訳されなくてメモリマップには何も出力されず。もしかしてインデクスしなければ良いの? ってことで試してみたら

@ptr
A=M
M=D

正常動作しました。簡単に書いてますがこの答えに至るまで (あるいはこの前段からここに至るまで) 相当な時間を要してて、ちょっと色々な意味での微妙さを感じている次第です。

Comments