日記 (2012年01月)。
$Id: 201201.php,v 1.36 2012/02/20 08:37:17 isaki Exp $

2012/01/01 (日)
あけおめ。
[XM6i] Linux 方面で 208.5日問題が発覚したっぽい。 CPU の TSC 使ってて演算途中の桁溢れだそうな。 あれ、XM6i もどきどき…。 まーこっちのはたぶん桁溢れしても、 ホストスケジューラがリセットして多分何も起きないとは思うけど。(未確認)
[宇宙とか] 正月らしく録り溜めてた番組を消化中。 コズミックフロントのボイジャーの回をやっと見てみる。 ボイジャーはリアルタイムで知ってるし、 ボイジャーが撮った新しい映像が送られてきたというニュースも おぼろげながらに覚えてるけど、それより前には どういう映像が限界だったのかという比較対象のほうを知らなかったので、 今となっては当たり前のようによく見る木星や土星のあの鮮明なカラー写真は 実はボイジャーが初めて撮影したというのを知って衝撃だった。
[宇宙とか] ボイジャー 1号は未だに健在で、 2号は2010年に起きた通信障害 (2010/05/11の日記参照) を回復したらしく こちらも健在。 1号は地球(太陽)から光の速さで往復 33時間 (片道約 0.7光日?) かかるところを飛行中なわけだけど (2012年1月現在)、 そもそも打ち上げから約35年、設計製造レベルから考えるとおよそ40年前の 電気電子機器が一度も物理メンテナンスをすることなく、 150億km の彼方から地球と交信できるレベルで稼働し続けてるとかいうところに、 もっとみんな最上級に驚愕していいと思う。
[NetBSDとか] NetBSD/amd64 は地味ーに NetBSD/i386 で動いてたものが動かなかったりするな。 i386 と amd64 がアセンブラレベルでどのくらい違うのかとかはいまいち分かってない。
[XM6i] XM6i は NetBSD 5.1 をインストールしなおして、 年越しビルドで tcsh も作れたので、 ここからいよいよ perl のビルドを開始してみる。

2012/01/02 (月)
[XM6i] XM6i で perl ビルド2日目。 夜中に走りはじめた daily script が加わって全員でスラッシングしてたので cron ごと全員終了させて perl のビルドに専念。
親戚の集い。 そして喋ったことどころか 名前も人数も誰が誰の子かも知らない子供にお年玉をあげるなど。
[NetBSDとか] W-ZERO3 にクリーンインストールした NetBSD 5.1 上でパッケージビルドしてるけど、 SD カードが 2GB のやつなのでディスク容量が厳しすぎる…。 依存関係を含んだものを一気に作るとかが出来ないので、 一つパッケージ作るたびに clean して distfile 消して、の繰り返し。 もう一度環境を考え直したほうがいいか…。
[宇宙とか] 国際宇宙ステーション (ISS) 見えたー!(たぶん)。 時刻と方位はおおよそ合ってるところを音もなく飛んでいくのが見えた。 仰角を測る方法がないから仰角が正しいかは分からないけど、 たぶん間違いないと思う。 こないだガラクタの中から方位磁石を見つけたおかげで、 そこそこの目視精度で方位が測れるようになったのは大きい。 国際宇宙ステーションを視認したのは実はたぶん初めてくらいじゃないかなあ。 昔、小学生か中学生の頃、TBS の秋山さんの乗ったミールを見たことはある (見たと思っているあの光がミールだったとして)。
[XM6i] というか MAME の 68000 バスエラースタックの I/N ビットの実装にバグがあるような気がしてきたけど、 こんなん誰得…。

2012/01/03 (火)
[XM6i] と思ってテストプログラム書いてみたら、 データシートから想像される期待値と、 XM6i (MAME コア) の挙動と XM6 (Starscream コア) の挙動と実機の挙動が全部違う件。どうしたらええんじゃ。orz

2012/01/05 (木)
[XM6i] XM6i で perl ビルドは5日目。 miniperl がコア吐いて終了してた…。 しかしおおしまさんの報告症状とは違うなあ。 どうしたもんだか。
[XM6i] 68000 バスエラーの実装が (MAME の時点から) 厳密には盛大に間違えてるような気がしてきた…。

2012/01/06 (金)
甥っ子帰省イベント終了。
年末あたりから QEMU の動的コンパイルってのが気になって、 気分転換がてらにちらちら眺めてた TCG (Tiny Code Generator) の抜き出し作業が、 無理やりリンカ通して、 無理やり用意したメモリの最初の1命令をフェッチして i386 アセンブラを出力するところまで来た。まだ実行は出来ない。 しかし、この状態からではきっと何者にもなれない気がするな…。
QEMU はターゲットとして m68k もサポートしてると書いてあるけど、 これ、実は ColdFire のことで、 うちらが思っているあの m68k ファミリのことではない。 眺めてたら DBRA 命令とかなくてびっくりした。 m68k とか言うなよ。JARO に電話級。 と思ったら QEMU から派生して m68k サポートをやってるプロジェクトがいくつかあるようだ。

2012/01/07 (土)
[X680x0] [XM6i] 今日は 68000 バスエラースタックの I/N ビットについての解説をするよ (ここだけキャプテン渡辺風に)。

それはさておき、 まずよく見る 68000 のバスエラースタックはこんな感じ。 おそらく I/N ビット以外は説明不要。

  FEDC BA98 7654 3210
SP+0     R/W I/N FC
SP+2   例外の原因になったアクセスアドレス(上位)
SP+4   例外の原因になったアクセスアドレス(上位)
SP+6   例外の原因になった命令ワード(1語目)
SP+8   例外発生前の SR
SP+10   現在の PC (上位)
SP+12   現在の PC (下位)
正式名称は知らないけど、I/N ビットは Instruction(0) or Not(1) で、 グループ0、1 例外処理中なら 1、 それ以外(通常処理中とグループ2例外処理中)なら 0、 という説明が書いてあればマシなほうというレベル。 ちなみに例外のグループ分けは次の通り。
グループ0  リセット、アドレスエラー、バスエラー
グループ1トレース、ハードウェア割り込み、不当命令、未実装命令、 特権命令違反
グループ2TRAP、TRAPV、CHK、ゼロ除算
と言われても具体的にどういう意味だか分からなかったけど、 ここでいう例外処理中とは、例外が発生してから (MPU の状態定義的に「例外状態」に入ってから)、 (MPU の状態的に) 例外処理を終えるまでのこと。 つまり、例外が発生してから例外ハンドラに処理を移すまでの間のこと。 この間、MPU 内部では SR を変更して必要な情報をスタックに積んで例外ベクタを内部で発生させて、 そのベクタの内容を PC に取り込んで、 さらに PC と PC+2 の内容をプリフェッチして、 そいつらがバスエラー/アドレスエラーにならないことを確認している (例外によっても違うけど)。 ソフトウェアプログラマが思わず想像する 例外が発生≒ハンドラに処理が来てから RTE 命令で例外ハンドラから戻るまでではない

以下のサンプルコード (の断片)、テスト1 では、 グループ1 例外である不当命令例外の例外ハンドラ中でバスエラーを起こしているが、 例外ハンドラに処理が移った後というのは MPU 的には例外状態ではなく 通常状態なので I/N ビットは 0 になる。

テスト1
       lea.l   illegal_handler,a0
       move.l  a0,$0010             ; 不当命令ハンドラを設定
       lea.l   buserr_handler,a0
       move.l  a0,$0008             ; バスエラーハンドラを設定
       trapf                        ; 68000 不当命令
~ ~ ~

illegal_handler:
       clr.w   $ed4000              ; バスエラーを起こす
       rte

buserr_handler:
       move.w  (sp),d0
       andi.w  $0008,d0             ; d0 は 0 になるのが正しい
       :
一方次のサンプルコード (の断片)、テスト2 では、 例外処理中であるベクタワード取り込みの時点でバスエラーを起こしてある。 この場合、 MPU はこの例外処理を終えてバスエラー例外処理へ移るようになっており、 バスエラー発生時がグループ1例外処理中だったので I/N ビットは 1 になる。
テスト2
       lea.l   $ed4000,a0           ; バスエラーになるアドレスを
       move.l  a0,$0010             ; 不当命令ハンドラにセット
       lea.l   buserr_handler,a0
       move.l  a0,$0008             ; バスエラーハンドラを設定
       trapf                        ; 68000 不当命令
~ ~ ~

buserr_handler:
       move.w  (sp),d0
       andi.w  $0008,d0             ; d0 は $0008 になるのが正しい
       :

MAME (0.144) の 68000 MUSASHI コアは見事に勘違いしていて、 例外が起きた時に I/N ビットを作るための内部変数を 0x0008 に設定して、 RTE でこれを 0 に戻している。 そう思っていた時期が俺にもありました…。 しかも未実装命令例外もグループ 1 なのにこの例外の入り口ではこのビットを立て忘れているようだ (が逆に、バグが重なってこっちのほうが正しい挙動になってしまっているw)。

手元にあった UAE 0.8.29 コアのソースをちら見したところ、こいつは、 バスエラーの原因が命令アクセス中かデータアクセス中か と勘違いしてるようなコードに見える。 そう思っていた時期が俺にもありました…。
(01/24 追記:WinUAE 2.3.3 では I/N は未実装で 0 になっているようだ)

XM6 の Starscream コアは NASM なんで読めないんだけど、 グループ0、1 例外に何かしら対処はしているものの、 いずれにしても実機とは違って、例外ハンドラ中で I/N=1 になるケースがあるので、 これも間違っている。 (01/08 追記:追試したところテスト1は実機と同じでした)

XM6i では、テスト1が正しく動作するようには修正したけど、 テスト2 のような挙動にはまだ対応していない。 というかこれ対応するには例外処理全体をかなり大幅に書き直さないといけなくて、 68000 だけならまあ力任せって手もあるけど、 68000 と 68030 の例外処理が混ざってて今動いてるものは触るなキケン! 状態なわりに、こんな重箱、完全に誰得なので…。 他のエミュレータが対応するか、 XM6i 動かないねプギャーって言われるとムキになって対応するかも知れませんw

[アニメとか] あいぽん(野中藍さん)かわゆし。(*´Д`*)

2012/01/08 (日)
[X680x0] [XM6i] 続きまして、68030 のフォーマット $B スタックフレームについて調査中。
07182C: 23C0 00FF 0000           MOVE.L  D0,$FF0000
071832: 21D5 0008
この $07182C にある MOVE 命令を実行してバスエラーを起こした時の スタックフレームの主な内容は次の通り。 いくつかのフィールドの値が固定なのか一過性なのかは評価してない。
SP+$00   SR
SP+$02 0007182C PC
SP+$04
SP+$06   ベクタとオフセット
SP+$08   内部レジスタ
SP+$0A 070D SSW
SP+$0C 21D5 命令パイプ、ステージ C
SP+$0E 0839 命令パイプ、ステージ B
SP+$10 00FF0000 データサイクルフォールトアドレス
SP+$12
SP+$14   内部レジスタ
SP+$16   内部レジスタ
SP+$18 00008364 データ出力バッファ
SP+$1A
SP+$1C   内部レジスタ
SP+$1E   内部レジスタ
SP+$20   内部レジスタ
SP+$22   内部レジスタ
SP+$24 00071834 ステージ B アドレス
SP+$26
SP+$28   内部レジスタ
SP+$2A   内部レジスタ
SP+$2C 02FF0540 データ入力バッファ
SP+$2E
SP+$30   内部レジスタ
SP+$32   内部レジスタ
SP+$34   内部レジスタ
SP+$36 F1DE バージョン#、内部情報
この命令実行時点で D0 には $00008364 が入っているので、 それがデータ出力バッファに見えているということらしい。 書き込もうとした値はこれなので、 自前でなんとかする場合はこの値を使えということのはず。 今は書き込みでバスエラーなのでデータ入力バッファのほうはゴミかな。 命令パイプステージ C には次の命令の先頭ワードが入って待ち構えているわけだけど、 ステージ B のワードはなんだろう。

2012/01/09 (月)
風邪気味3日目。病院があくのはまだか…(注:3連休の3日目)。
きっと何者にもなれないような気はするけど、 QEMU の TCG が m68k 命令1つを i386 コードに変換して実行したっぽい。 けど、その次のブロックを実行しようとして死んだwww。 てか i386 アセンブラのデバッグとか無理ゲーすぎるわ。orz
2ブロック目は C 側の問題だったので解決できたけど、 今度は3ブロック目のアセンブラの中で死んだ。 だから無理ゲーだってばよ。

2012/01/10 (火)
[アニメとか] コンビニの雑誌の表紙、 山本梓っていうベテラングラビアアイドルさんの懐かしい名前が目に入って、 ふと、やまもとあずにゃんと発音してしまった私はもうだめですかね? (Y/y)
QEMU の TCG (m68k → i386) で遊んでみたメモ。 内部解説についてはとりあえずこの辺。 TCG はブロック単位でターゲット命令のコンパイルを行う。 ブロックとは、ざっくり言うと、分岐命令までとか状態が変わる命令まで、 みたいな感じ (他にも当然いろいろあるけど)。 この辺はコンパイラ方面の用語とか理論らしい。 学部の授業で習った時もなんじゃらほいだったけど、 まさかこの辺で再会するとは…。 それはさておき、とりあえず、QEMU から抜き出してリンカ通してでっちあげた TCG に X68000 IPLROM を食わせてみた。

まず1命令目でいきなりステータスレジスタが変化するので、 1ブロック目はこの1命令だけ。

FF0010: 46FC 2700                MOVE.W  #$2700,SR
これを中間コードに変換したものがこちら。 なんか RISC っぽいもの。 左が生出力で、そのコードを最適化して右のようにする。 ここでは元が1命令だけなこともあって 1つの命令が nop に置き換わっただけだけども。
movi_i32 CC_DEST,$0x0
movi_i32 CC_X,$0x0
movi_i32 tmp0,$0x2700
movi_i32 tmp1,$set_sr
call tmp1,$0x0,$0,env,tmp0
movi_i32 CC_OP,$0x1
movi_i32 PC,$0xff0014
movi_i32 CC_OP,$0x1
exit_tb $0x0
movi_i32 CC_DEST,$0x0
movi_i32 CC_X,$0x0

movi_i32 tmp0,$0x2700
movi_i32 tmp1,$set_sr
call tmp1,$0x0,$0,env,tmp0

nopn $0x2,$0x2
movi_i32 PC,$0xff0014
movi_i32 CC_OP,$0x1
exit_tb $0x0
PC というのが m68k の PC にあたるレジスタ。 tmp0、tmp1 みたいなのが TCG 仮想マシンの内部レジスタ(というのかな)。 CC_* というのが CCR 計算用の内部レジスタ。 QEMU ではフラグ(CCR)は遅延評価を行っている。 CC_X レジスタがあることから X フラグだけ他の NZVC とは独立して動いているようだ (自分でもそうする)。

この MOVE to SR 命令でやっていることは3つ。 青いところで CCR をクリアしている。 CC_OP ← 0x1 は「NZVC として CC_DEST の値をそのまま使う」という意味で CC_DEST は 0 にしているし CC_X も 0 にしている。 緑のところはサブルーチンコール。 この仮想マシンだけでは処理できない特殊な部分を外部関数に依頼する。 ここでは set_sr() という C で書いた別関数をコールしている。 赤いところはこの命令を実行したことによって PC を更新する処理。 この命令が PC=0xff0010 にあることが分かっててコンパイルしてるんだから、 現在値を +4 するのではなく即値入れたほうが速いってことなんだろうか。 こういう内部の動作が分かるのも面白い。

でこの中間コードをホストコード (ここでは i386) に変換したものがこれ。

0x080f2200:  mov    %ebp,(%esp)
0x080f2203:  mov    $0x2700,%ebx
0x080f2208:  mov    %ebx,0x4(%esp)
0x080f220c:  xor    %ebx,%ebx
0x080f220e:  mov    %ebx,0x58(%ebp)
0x080f2211:  xor    %ebx,%ebx
0x080f2213:  mov    %ebx,0x60(%ebp)
0x080f2216:  call   0x8049ba4
0x080f221b:  mov    $0xff0014,%ebx
0x080f2220:  mov    %ebx,0x40(%ebp)
0x080f2223:  mov    $0x1,%ebx
0x080f2228:  mov    %ebx,0x54(%ebp)
0x080f222b:  xor    %eax,%eax
0x080f222d:  jmp    0x80f1dee
ちなみに、実行時コンパイルなので、 中間コードからホストコードへのコンパイル (クロスアセンブル?) は、 ここで表示されてるようなアセンブラソースを吐き出すのではなく、 本気でバイトコードを吐き出すプログラムが書いてある。 これは QEMU のデバッグ機能を使って、 そのバイトコードを逆アセンブルして表示したもの。

続いて2ブロック目。 今度はターゲットコードを命令ごとに色分けして、 最適化後 nop を除いた中間コードと比較してみる。 ちなみに RESET 命令は空気扱い。ヒドス。
FF0014: LEA.L   $002000,A7
FF001A: RESET
FF001C: SUB.L   A0,A0
FF001E: MOVE.L  #$00FF0540,D0
FF0024: BSR.W   $FF0510
movi_i32 A7,$0x2000
sub_i32 A0,A0,A0
movi_i32 D0,$0xff0540
movi_i32 CC_DEST,$0xff0540

movi_i32 tmp2,$0xff0028
movi_i32 tmp3,$0x1ffc
qemu_st32 tmp2,tmp3,$0x0
movi_i32 A7,$0x1ffc

movi_i32 CC_OP,$0x2
movi_i32 PC,$0xff0510
exit_tb $0x0
CC_OP = 0x2 は MOVE 命令とかでよく見られる N,Z を評価して V,C はクリアってやつを示している。 緑のところ、BSR 命令がスタックに戻り番地をプッシュしている様子が面白い。 qemu_st32 命令はメモリへのストアで (tmp3 + 0) 番地に tmp2 の値を書き込むもの。

3ブロック目。
FF0510: MOVE.L  #$01000000,D1
FF0516: MOVE.W  #$00FF,D2




FF051A: MOVE.L  D0,(A0)+



FF051C: ADD.L   D1,D0








FF051E: DBRA.W  D2,$FF051A















movi_i32 D1,$0x1000000
movi_i32 tmp2,$0xffff0000
and_i32 D2,D2,tmp2
movi_i32 tmp2,$0xff
or_i32 D2,D2,tmp2
movi_i32 CC_DEST,$0xff

qemu_st32 D0,A0,$0x0
movi_i32 tmp3,$0x4
add_i32 A0,A0,tmp3
mov_i32 CC_DEST,D0

add_i32 tmp3,D0,D1
movi_i32 tmp4,$xflag_lt
call tmp4,$0x0,$1,CC_X,tmp3,D1
mov_i32 CC_DEST,tmp3
mov_i32 CC_SRC,D1
mov_i32 D0,tmp3
movi_i32 CC_OP,$0x3

movi_i32 tmp4,$flush_flags
call tmp4,$0x0,$0,env,CC_OP
ext16s_i32 tmp4,D2
movi_i32 tmp5,$0xffffffff
add_i32 tmp4,tmp4,tmp5
movi_i32 tmp5,$0xffff0000
and_i32 D2,D2,tmp5
ext16u_i32 tmp5,tmp4
or_i32 D2,D2,tmp5
movi_i32 tmp6,$0xffffffff
brcond_i32 tmp4,tmp6,eq,$0x0
goto_tb $0x1
movi_i32 PC,$0xff051a
exit_tb $0x80f1d81
set_label $0x0
goto_tb $0x0
movi_i32 PC,$0xff0522

exit_tb $0x80f1d80
X フラグの計算は外部関数任せなのかよw。まあ分かるけど。 中間コードにコンパイルしてそれを最適化してるというわりには、 もう少し出来そうな気もするんだけど、 単にアルゴリズム面倒だからとかそういうことなんかしら。 その辺の事情は(も?)よくシラン。 特にこのブロックなら、最初の3つの MOVE のフラグは一切不要なので CC_OP への代入は省いてるけど CC_DEST への代入も不要だよね (赤と緑)。 さらにフラグを参照してる人はいないので DBRA の手前の黒字のところでフラグを確定させなくてもいいはずだし、 ソースもちょろっと追ってみたけどよく分からんかった orz。 あと、PC レジスタの書き戻しはブロックの最後でしか行っていないけど、 ブロック途中でバスエラーが起きた時にはどうなるのかとか、 その辺も調べてはいない。

2ブロック目までは実際に i386 コードを走らせることが出来たけど、 3ブロック目のアセンブラがぬるぽで動かなかったのでさっさと諦めた。 ということで、興味深いし、面白かったけど、ツッコミどころも満載な感じ。


2012/01/11 (水)
[アニメとか] ワロタ。某 Angel Beats! 系スレより。
386 :名無しさん@お腹いっぱい。 :2012/01/06(金) 19:48:53 ID:741oYQx00
ユイにゃんをぼっちキャラみたいに扱うのはやめろ。
そういうのはデブさんの役だろ
 
387 :名無しさん@お腹いっぱい。 :2012/01/06(金) 23:41:22 ID:nnswW6Rz0
デブさんをマミさんとか言うのやめろよ
[AngelBeats!] Angel Beats! Heaven's Door 3巻、2/27 発売予定キターー。 まだしばらく Angel Beats! で暮らしていける。
こないだ野田総理が福島訪問した時に、どっかの首長が 「私たちを日本国民と思っていますか?」とか聞いたらしいけど、 この人今さら何言ってんだろうねー。 関東と中央の人間は最初から関東以外を日本だとなんか思ってないよ。

2012/01/12 (木)
風邪気味6日目。薬のおかげもあってだいぶ楽になってきた。
[アニメとか] マミさん (2011/12/09 の日記参照) の新刊が出る…だと…。
[アニメとか] アニメ「あの夏で待ってる」#1 を見てみた。 放送開始前から思ってることだけど「あの花」感がハンパない。 そして放送開始10分くらいまでも(1シーンを除いて)「あの花」感がハンパないイントロ。 と思ったら SF 展開…。え、そういう話なん?

2012/01/13 (金)
[アニメとか] アニメ「パパのいうことを聞きなさい!」#1 を見てみた。 今期のキタエリアニメ。 まず、どうでもいいけど、幼女の喋り方がいらつく。 あと長女のキャラデザが完璧ハルヒ。 ゆりっぺがハルヒに似てるとか言ってすみませんでした、くらい (まー、ゆりっぺの場合は台詞や性格も込みだったけども)。 で、この3姉妹だけだったら幼女気持ち悪いし面白くなさそうだと思ってたけど、 莱香(らいか)さんの存在はちょっと面白いかも知れない。 が、このノリで2クールもやるのか…。
(2/17 追記:1クールらしい)
[アニメとか] アニメ「モーレツ宇宙海賊(パイレーツ)」#1 を見てみた。 タイトルがアレげなわりに、 そして主題歌がももクロZ なわりにw、 内容はしっかりしてるというか、 今のところわりと普通に面白そう。 主人公が妙に ARIA の灯里ちゃんっぽいのは気のせいか。

2012/01/15 (日)
[XM6i] 先週の QEMU に触発されて、XM6i の MAME コアの CCR も遅延評価にしてみた。 500個ほどある命令パターンを一つずつ書き換えながら一週間かけて書き上げて 動かしてみると、わりとあっさり動いた。 数百はあるフラグ変化が一つでもミスってると、 どこで起きてるか突き止めるのは非常に困難なので、 これだけの規模の修正をしてわりとあっさり動いたことは驚愕に値する。 けども、パフォーマンスは前よりほんの僅かに落ちた orz。 QEMU の場合はブロック単位の動的コンパイルなのでやろうと思えば、 必要のないフラグオペレーションは削除出来るんだけど (あまりしてるようには見えなかったけど)、 こっちはインタプリタなので、 このフラグ変化がいつ使われるか使われないかはその時点では判断できない。 そのため、フラグを変化させる命令のたびに、 フラグ4つ (NZVC の4つ、Xは独立) の再現に必要なパラメータ 2つないし3つを毎回ストアするようにしたんだけど、 その場で演算してしまったほうがアドバンテージがあるということらしい。 レジスタ演算爆速というわけか…。 あと、割り込みなど例外発生のたびに結局フラグを確定させないといけない というのも無駄っぽいし。 ちょっとこの方向に光が見えなかったので、 結局何が響いたのかというちゃんとした考察はしてないけどね。
[アニメとか] アニメ「輪廻のラグランジェ」#1 を見てみた。 というか、1週間で4本新番組見るとどれがどれか分からんくなってきた。 あの夏とモーレツ宇宙海賊とラグランジェは日常 + SF ってところが全部似てるし、 いちかさんとらいかさんが先輩なのもあるし。

2012/01/16 (月)
[AngelBeats!] Angel Beats! ゲーム化企画は絶賛 sage 進行中らしい。 VAVA 社長のツイッター情報。 話が消えていないというだけでも大きな情報。
[アニメとか] マミさんの新刊を買いに定時ダッシュでメロンへ。なんかもうだめなきがする。 そして今回も残念なマミさんwww
[アニメとか] 「LASTEXILE -銀翼のファム-」では、 「言葉の通じない異国(グラキエス)の兵士」の台詞は、ちゃんと声優さんが外国語 (ここではロシア語) を喋ってて、それに字幕をつける演出がしてあった。 ファムではこれまでのところ 特に二ヶ国語にしなければならないまでの必要性はないように思うので、 単に雰囲気というか演出のためだと思うけど、 それに比べて数年前に NHK でやった「アリソンとリリア」 は二ヶ国語を使い分ける妙があって初めて成立する物語だったのに、 NHK が一ヶ国語のみに丸めてストーリーを改変しちゃったので、 誠に残念な出来栄えだったのがアリソン原作ファンとしては悔やまれる、 というのをファムを見てたら言わずにはいられない。 (2009年2月1日の日記参照)

2012/01/18 (水)
都知事閣下www。今度から使わせてもらうわ。 芥川賞がどんな賞かは知らないけど、 この度の選考委員とやらの発言や態度を見てると 実にくだらない賞であるような気がしてきた。
メイドカフェ行ってみたら今日はコスプレの日だった。 これはいいのか悪いのかwww
[アニメとか] NHK で4月から「ふしぎの海のナディア」デジタルリマスター版放送キターーー!!。 2012年のベストアニメ決定だな。

2012/01/20 (金)
[X680x0] [XM6i] 今週は 68030 の BCD 加算命令 ABCD.B -(Ax),-(Ay) でバスエラーがおきた時の動作を調べてみた。 (1) ソース Ax - 1 (の読み込み) がバスエラーになるケース、 (2) デスティネーション Ay - 1 の読み込みがバスエラーになるケース、 (3) デスティネーション Ay - 1 への書き込みがバスエラーになるケース、 の3パターン。

(1) の場合、バスエラー発生時の Ax は命令開始前の Ax より1つ減っている。 つまりバスエラーが起きたのはデクリメントより後で この2つの操作は分かれていると。 さらに Ay は変化してないので、 デスティネーションについての操作はこの時点ではまだ行われていないようだ。

(2) の場合、バスエラー発生時の Ax も Ay も命令開始前のそれよりそれぞれ1つ減っている。 これについては (1) の結果からすると想像は難くない。

(3) の場合、バスエラー発生時の Ax も Ay も (2) と同様だった。 デスティネーションのプリデクリメントはすでに読み込みの前に行われているので、 結果を書き戻すバスアクセスについては特筆すべき点はないというところか。

一方、ABCD 命令ではフラグ (CCR) は演算結果によって変化する。 (1) および (2) のケースでは いずれも演算に必要な値が取得できなかったのだから、 CCR は変化のしようがないと考えられる (試してはいないけど)。 これに対し (3) のケースでは、 演算結果をデスティネーションに格納出来なかったにも関わらず バスエラー発生時の CCR (スタックに積まれた SR) は演算後のものだった。

という観測結果から、内部の操作順序は以下のように確定できる。

  1. Ax をデクリメント
  2. Ax の示す番地の内容を読み込み (バスアクセス)
  3. Ay をデクリメント
  4. Ay の示す番地の内容を読み込み (バスアクセス)
  5. 演算して CCR に反映
  6. Ay の示す番地に結果を書き込み (バスアクセス)
この順序のいずれかでも誤る、入れ替える、あるいは端折ると、 どこかに実機と違う挙動が確認できてしまうため、 エミュレータとしては正しくないということ。 この順序も分かってしまえば至極当たり前の結果のような気もするけど、 それを実際に確認するという作業は重要。 で、これをどうしろと…。

(02/10 追記:全部嘘のような気がしてきた)
[XM6i] ちなみに MAME (0.144) では、演算結果を書き戻した後 CCR を計算している命令と、 CCR を計算した後書き戻しを行っている命令が混在していてわりと unko なので (命令によって実装しやすい方で実装してあるように見える)、 おそらく前者で実装してある命令が結果の格納時にバスエラー起こすと 実機と違う挙動になるはず (まさか実際にそれが混在してるのをエミュレーションしてるのでなければ)。 まあ、ゲーム向けだからかバスエラーを真剣に考慮する必要はないんだろうし、 実際考慮してるようにも見えない。
[X680x0] [XM6i] もう一つ、こっちはよく知らないから想像だけど、68030 の -(An) のリードアクセスは前述の実験結果から 次の3つの操作に分解されるんだと思う。
  1. An をデクリメント
  2. An の示す番地の内容を読み込んで
  3. アキュムレータ (Acc) にセット
バスエラーハンドラの RTE 命令実行時に SSW の DF ビットが立っていたら バスアクセス再試行なので 2. に戻る。 DF ビットがクリアされていたら、 ハンドラが何らかバスアクセスをエミュレーションして結果を DIB に格納したことを示しているので、 DIB を取り出して 3. に戻る。 ということのような気がしてきた。 で、だとして、これをどうしろと…。

2012/01/21 (土)
[NetBSDとか] NetBSD の IPsec 実装 (のデフォルト) が KAME から FAST_IPSEC に変わったようだ。 って KAME とかもう10年以上前になるのか…(遠い目
[NetBSDとか] 去年11月頃の pow(4) デバイス削除の際の忘れ物も commit して、 ついでに自分の広告条項がまだ残っていたのも全部削除した。
[アニメとか] なぜか時々、キディ・ガーランド話がバーストする素敵な TL (何。
[XM6i] XM6i で (NetBSD を動かす場合に) フルスピードモードで時間がどんどん進んでいく場合とか、 コンパイル中とかで時間がどんどん遅れていく場合とかに、 こういうのがなんかもうちょっと汎用的に利用できないだろうか。→ KVM pvclock - Richard WM Jones

2012/01/23 (月)
[アニメとか] NHK 高校講座(書道)に「人気声優にして毛筆3段」の日笠陽子さんが出てると聞いて、 速攻で録画しといて見てみた。 なんか番組の作りとしては終わってる感じがするけど、 日笠さんが見れればそれでいいです。(・ω<) てへぺろ

2012/01/24 (火)
[アニメとか] アニメ「妖狐×僕SS(いぬ×ぼくシークレットサービス)」#1 を見てみた。 どう見ても澪ちゃんが関東奴良組高級マンションに住んでるという話です、 ありがとうございましたw。 あと、 そもそもシークレットサービスって警備とか護衛って感じだと思ってたんだけど、 なんか澪ちゃんの下僕にしか見えないんだけど…。
[アニメとか] 銀翼のファム #13。グラキエスの兵器いろいろスゲーwww。 てかこの世界の規模感が分からんわ。

2012/01/25 (水)
[アニメとか] [宇宙とか] 完全に一致www。

上は sorae.jpプログレス補給船(46P)、発射台へ (2012/01/25) の記事より勝手に魚拓。 発射台に向けて鉄道輸送中のソユーズロケットの写真。 プログレス補給船は、国際宇宙ステーション (ISS) に補給物資等を運ぶロシアの定期便みたいなやつ (のはず) で、 それを載せたソユーズロケットが発射台に向けて鉄道で移送されているところ (のはず)。 確か組立工場から発射台まで鉄道一本で輸送するはずなので。

下は LASTEXILE -銀翼のファム- #13 より、グラキエス国の戦闘機。 真ん中のよく分からない構造物が「戦闘機」本体で (ただし、この世界の「飛行機」はうちらの世界のものとは物理法則が違う感じ)、 ロケットブースターを4本つけている。 このロケットブースターで軌道(線路)を水平に走り始めて、 その線路が途中からジェットコースターみたいに垂直になってて、 垂直離陸後ブースター切り離すという、まるでアニメのような飛行機 (いや、アニメだけど)。 しかもこの形態で離陸する戦闘機が結構な編隊を組めてるとかハンパない。 ロケットブースターは地表に落下するっぽいけど、使い捨てですかね、 回収して再利用するんすかね、 つか線路には当たらないんすかね、みたいな。

ちなみにグラキエスは北の国で、 グラキエス語として使われているのはロシア語。


2012/01/26 (木)
[アニメとか] なつまち #3、ちょっと面白くなってきたかも。

2012/01/27 (金)
[アニメとか] パパ聞き #3 まで見たけどそろそろ離脱の予感。 幼女の喋り方が気持ち悪くて受け付けないので早送りしながら見たレベル。 長女はハルヒっぽくていいんだけどねー(ぉ。 しかし、迷い猫オーバーラン! といいこれといい、この人の作品はだめだな。 とりあえず孤児にしてみるものの後はノープランって感じだし、 迷い猫は一度本屋で手にとって見たけど 立ち読みする気も失せるくらいの文章だったし。 2010/07/03 の日記 参照。

2012/01/28 (土)
[アニメとか] ソウルジェムの取説。こういうの好きだわ。

「※商品を橋の上から投げるなど、危険な行為はしないでください」www

[アニメとか] アニメ「タイタニア」 見終えた。 2008/11/04の日記 参照。 いかにも NHK のアニメっぽいという意味でまあ面白かった。 星の名前と国の名前と登場人物が多すぎてどれが何やら… というのはちょっとあるけど。 星間文明モノなので規模感に突っ込むのは野暮だけど、 地球クラスの惑星内での国同士の争いだと思うとまあそのほうがしっくりくる。

2012/01/29 (日)
[XM6i] 先の ABCD -(Ax),-(Ay) のテストを踏まえて、 -(An)/(An)+ でのバスエラー時の挙動が見た目実機と同じになるように修正してみた。 一体誰得なんだか…。
[アニメとか] はがない #13。理科の回想ならぬ妄想内のコミケ会場に俺妹www。 まあなんというかいるような気はしたわけだが。
[アニメとか] アニメ「僕は友達が少ない」 (はがない) を見終えた。 最初っから終盤までどう見てもただのリア充のハーレムアニメだし、 なぜか顧問の先生という設定の幼女は気持ち悪いし、 一体どうしたもんかと思ってるうちに最終話まで来てしまったわけだが、 最後にようやくオチがついたので、 まあなんというかこれまでのマイナスを全部チャラにしようかという気にはなった。 で、学園モノなのにむりやり幼女属性を入れる必要はあったのか? ストーリーになんら必要なかったと思うんだけど…。 てか、おまいら、どんだけ幼女の需要が高いんだよ。 幼女以外、夜空と星奈と理科と幸村はそれぞれキャラデザもいいと思うけど、 それは原作イラストさんの功績だしなあ。 あと、どうでもいいけど、OP でおしりを振ってる理科がかわいいです。

2012/01/30 (月)
[XM6i] なんとなく昨日あたりから書いてみてたハイメモリエミュレーションが動いたっぽい。 しかし、実機をまったく知らずになんとなくエミュレーションしてるもんだから、 一体何のエミュレーションをしてるんだかさっぱり分からん状態になってきたな…。 それに、まだ肝心の音も出てないというのに、 ネットワークは使えるわメモリは増えるわ、何なのこれ…という気もしなくはない。

井崎のホームページへ戻る
isaki@NetBSD.org