出張。
うへぇ、やっと帰れましたよ。でも明日から旅行。そして再び
出張生活。あぁ、
彩の新版やgcc-3.0の正式リリースなど話題は沢山あるのについて
行けなくてとほり。
gcc-3.0のPPCクロスコンパイラを試してみました。POV-Rayを
試しにコンパイルしてppcsimで実行してみました。コンパイラ
としては正しい命令列を出していそうです。コードの質について
はまだよく判らず。-ffast-mathを付けてもちゃんと
コンパイルできました。そんな感じ。
出張。
2001/06/28出張。
2001/06/27出張。
2001/06/26出張。
2001/06/25出張。
2001/06/24出張。
2001/06/23出張。
2001/06/22出張。
2001/06/21出張。age++。
2001/06/20出張。
2001/06/19出張。
2001/06/18出張。
2001/06/17
昼起床。今日は少し暑いです。
ちょっと買い出し。ゲーセンに寄ったら「怒首領蜂II」は無くなってました(^^;
ロケテストの一環だったのかしら。
そんな感じで明日から出張でしばらく更新が止まりますm(_'_)m
触る人などいないと思いますが、以下current版のppcsim(Ver0.59)と
linuxカーネルのバイナリを置いておきます。遊んでみたい人はどうぞ。
ppcsim-0.59.tgz (41396 byte)
linu-arc.tgz (426716 byte)
昼起床。なんか今日は肌寒いです。
キーボードがらみの調査。最終的にIOポートを直接触ることになるようなの
ですが、結構ガードが厚くて、データがうまくセンスできないとしっかりと
エラーになるような仕掛けになっているようです。でも、いまいち
IOポートのアドレス割り当てが判らず。結局、プログラムにメモリパッチを
当てて、チェックを飛ばす様にすると、何気に先に進んでしまいました。
続いてrootファイルシステムのマウントで失敗。そしてカーネルパニック。
うーむ、ファイルシステムと言われましても......。因みに、
「VFS: Cannot open root device "" or 08:02」などとでて、デバイスの
指定がなされていない様だったので、カーネルコマンドラインを使って
RAMDISKを指定してみることにしてみました。コマンドラインの渡し方が
いまいち判らず、結局 変数cmd_lineに直接値を入れるという方法で
渡してみた結果がこれ。
Ramsize from residual data was 0 -- Probing for value Ramsize default to be 8M Total memory = 8MB; using 0kB for hash table (at 00000000) Linux version 2.4.4 (既定@SOTECCOMPUTER) (gcc version 3.1 20010330 (experimental)) #16 Fri Jun 15 02:08:01 2001 PReP architecture On node 0 totalpages: 2048 zone(0): 2048 pages. zone(1): 0 pages. zone(2): 0 pages. Kernel command line: root=/dev/ram2 time_init: decrementer frequency = 464.000480 MHz Warning: real time clock seems stuck! Calibrating delay loop... 57.75 BogoMIPS Memory: 7068k available (544k kernel code, 356k data, 72k init, 0k highmem) Dentry-cache hash table entries: 1024 (order: 1, 8192 bytes) Buffer-cache hash table entries: 1024 (order: 0, 4096 bytes) Page-cache hash table entries: 2048 (order: 1, 8192 bytes) Inode-cache hash table entries: 512 (order: 0, 4096 bytes) POSIX conformance testing by UNIFIX PCI: Probing PCI hardware Setting PCI interrupts for a "Blackhawk (Powerstack)" Linux NET4.0 for Linux 2.4 Based upon Swansea University Computer Society NET3.039 Starting kswapd v1.8 initialize_kbd: Keyboard failed self test keyboard: Timeout - AT keyboard not present? keyboard: Timeout - AT keyboard not present? pty: 256 Unix98 ptys configured block: queued sectors max/low 4610kB/1536kB, 64 slots per queue RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize devfs: v0.102 (20000622) Richard Gooch (rgooch@atnf.csiro.au) devfs: boot_options: 0x2 VFS: Cannot open root device "ram2" or 01:02 Please append a correct "root=" boot option Kernel panic: VFS: Unable to mount root fs on 01:02 Rebooting in 180 seconds..
日付け越え。
先日のデータアクセス例外はシミュで定義したPCI空間が狭過ぎた為。
最終的に0x80000000+16MBの空間を割り当てることでOK。続いてUnknownInst。
バイト反転ロードが未実装でした。で、最終的にこんな感じ。
Ramsize from residual data was 0 -- Probing for value Ramsize default to be 8M Total memory = 8MB; using 0kB for hash table (at 00000000) Linux version 2.4.4 (既定@SOTECCOMPUTER) (gcc version 3.1 20010330 (experimental)) #16 Fri Jun 15 02:08:01 2001 PReP architecture On node 0 totalpages: 2048 zone(0): 2048 pages. zone(1): 0 pages. zone(2): 0 pages. Kernel command line: time_init: decrementer frequency = 464.000480 MHz Warning: real time clock seems stuck! Calibrating delay loop... 57.75 BogoMIPS Memory: 7068k available (544k kernel code, 356k data, 72k init, 0k highmem) Dentry-cache hash table entries: 1024 (order: 1, 8192 bytes) Buffer-cache hash table entries: 1024 (order: 0, 4096 bytes) Page-cache hash table entries: 2048 (order: 1, 8192 bytes) Inode-cache hash table entries: 512 (order: 0, 4096 bytes) POSIX conformance testing by UNIFIX PCI: Probing PCI hardware Setting PCI interrupts for a "Blackhawk (Powerstack)" Linux NET4.0 for Linux 2.4 Based upon Swansea University Computer Society NET3.039 Starting kswapd v1.8 initialize_kbd: Keyboard failed self test Keyboard timed out[1] keyboard: Timeout - AT keyboard not present? Keyboard timed out[1] keyboard: Timeout - AT keyboard not present? Oops: kernel access of bad area, sig: 11 NIP: FFFF2E6C XER: 20000000 LR: C00861C8 SP: C013FD50 REGS: c013fca0 TRAP: 0400 MSR: 00009032 EE: 1 PR: 0 FP: 0 ME: 1 IR/DR: 11 TASK = c013e000[1] 'swapper' Last syscall: 120 last math 00000000 last altivec 00000000last math 00000000 last altivec 00000000 GPR00: FFFF2E6C C013FD50 C013E000 C013FE08 FFFFFFFF C013FDF0 00000000 0000000A GPR08: FFFFFFFF C0093030 C0090EC2 000000FC 24888048 00000000 00000000 00000000 GPR16: 00000000 00000000 00000000 00000000 003FF000 00000000 00000000 00000000 GPR24: 00000100 00000002 C013FE08 00000000 FFFFFFFF C013FE0D C013FDF0 C00DE238 Call backtrace: C013DAA0 C00861C8 C005F238 C005F3B4 C00BA630 C00BA274 C00BA380 C00B91F8 C00B8B34 C00AC820 C00AC8AC C000393C C0006618 Kernel panic: Attempted to kill init! Rebooting in 180 seconds..
日付け越え。先日の日記の日付け、むちゃくちゃだったんですけど(^^;
データアクセス例外時のMSRの設定変更やらSRR1への取りこみやらのチョンボ。
この前、例外系の見直しを行ったときに一緒にやっとけばよかったのに。そんな
感じ。で、随分進んでいるような気がするにも関わらず、一向にシミュコンソール
にメッセージが出力されません。追っかけてみた所、考えチョンボが発覚。
コンソール出力のインプリメントは、(int *)0x8000ff04に出力
文字列領域へのポインタを格納し、(int)0x8000ff00に'1'を書くと、
ppcsim側で0x8000ff04に書かれたシミュメモリ領域の文字列をstdoutに
出力するというようにしました。このとき、実効アドレスとして
0x8000ff00をアクセスした場合はアドレス変換を行わないようにしました。
ところが、文字列領域を指すポインタの方も実効アドレスになっているため、
実際の物理アドレスの領域を知るには、ppcsim内でもアドレス変換を行って、
実体をつきとめる必要があります。しかし、文字列領域を格納するタイミング
と実際に出力を行うタイミングとの間にPTEを変更されてしまうと、メッセージ
出力は行われません。仕様と言えばそれまでですが、それだとあまり用事に
ならないので、0x8000ff00に'\0'以外の値を書くと、1文字をstdout
に出力する様に変更してみました(出力が完了したら、0x8000ff00は'\0'
にppcsimが戻します)。で、バッチリです(^^)v
で、スナップショット。
Ramsize from residual data was 0 -- Probing for value Ramsize default to be 8M Total memory = 8MB; using 0kB for hash table (at 00000000) Linux version 2.4.4 (既定@SOTECCOMPUTER) (gcc version 3.1 20010330 (experimental)) #16 Fri Jun 15 02:08:01 2001 PReP architecture On node 0 totalpages: 2048 zone(0): 2048 pages. zone(1): 0 pages. zone(2): 0 pages. Kernel command line: time_init: decrementer frequency = 464.000480 MHz Warning: real time clock seems stuck! Calibrating delay loop... 57.75 BogoMIPS Memory: 7068k available (544k kernel code, 356k data, 72k init, 0k highmem) Dentry-cache hash table entries: 1024 (order: 1, 8192 bytes) Buffer-cache hash table entries: 1024 (order: 0, 4096 bytes) Page-cache hash table entries: 2048 (order: 1, 8192 bytes) Inode-cache hash table entries: 512 (order: 0, 4096 bytes) POSIX conformance testing by UNIFIX PCI: Probing PCI hardware Oops: kernel access of bad area, sig: 11 NIP: C00BF050 XER: 00000000 LR: C0075BD0 SP: C013FBB0 REGS: c013fb00 TRAP: 0300 MSR: 00001032 EE: 0 PR: 0 FP: 0 ME: 1 IR/DR: 11 DAR: 00000000, DSISR: 00000000 TASK = c013e000[1] 'swapper' Last syscall: -1 last math 00000000 last altivec 00000000last math 00000000 last altivec 00000000 GPR00: 00000000 C013FBB0 C013E000 00000086 8080000F C013FBE8 C013FE98 00000000 GPR08: C013D0A0 00000000 C00A71BC 00000000 84888042 00000000 00000000 00000000 GPR16: 00000000 00000000 00000000 00000000 003FF000 00000000 00000000 00000000 GPR24: 00000000 C00A05F8 C013FC18 0000000E C0005F60 C013FBE8 C013FC18 00000008 Call backtrace: 00000000 C00BBE1C C00BBEE8 C00BC098 C00AD7FC C00BC0C8 C00AC85C C000393C C0006618 Kernel panic: Attempted to kill init! Rebooting in 180 seconds..
日付け越え。
ちょちょっと手を入れて取り合えずSDR1に値の入ることだけ確認しようと
したところ、あっちこっちに手を入れなくてはならないことが判り、
ついでにうまく動かなくなったので考え直し(^^;
で、256MBのセグメントでメモリを管理することにしました。
現状、アドレス変換OFF時に、256MBを越える物理アドレス空間がリニアに
見えなくなるという制限が付いてしまいますが、シミュレータだし、
シミュレータ上でアドレス変換が行えれば物理アドレスのマッピングは
自由に変えられるので大した問題にはならないハズ。
で、SDR1に値が入りました!が、その後ppcsimがcoreダンプ。しょぼ〜ん。
PTEのサーチ時に物理メモリが未割り当てのセグメントに、そのまま
アクセスしてしました。修正&再実行。その先でさらにずっこけ。今度はシミュ
の不具合によるものの予感。
日付け越え。
あぁ、なんか謎が解けた感じ。まず本題であったSDR1に値が入らない件。
arch/ppc/mm/init.c内でのMMU_init()で、_SDR1に値を入れているのですが、
boot時のカーネルの配置がまずくて、load_up_mmu()でSDR1への取りこみ時、
ずれたアドレスから読み出してしまい、レジスタに正しい値が入っていません
でした。
本来は、0xc0000000にboot時のカーネルを配置して、__startから実行を
開始することになるのですが、ppcsimではメモリ空間の都合で0x00c00000
に配置していました。BATレジスタの初期化を行うinitial_bat()で
本来、0xcxxxxxxxを0x0xxxxxxxに変換することで、0xcxxxxxxxで実行される
ようなモジュールも、0x0xxxxxxxの物理アドレス空間で実行される事に
なっているのですが、0x00c00000に配置してしまうと、アドレス変換前と
アドレス変換後が全く同じ空間になってしまいます。所が、
load_up_mmu()で tophys() というマクロを使用して、上位16byteを0
にしたものを物理アドレスだとして変換してしまっています。そのため、
0x00cxxxxxに配置した場合は、BAT変換とtophys()マクロとでは変換結果が
異なってしまい、結果、ずれたアドレスの_SDR1の値がSDR1レジスタに
入ってしまっていたという事の様です。ちぇ。
initial_bat()で、BLを縮めて0x00cxxxxxを0x000xxxxxに変換するように
してみた所、今度は0x00exxxxxをアクセスする部分が、
BAT変換範囲を越えてしまっているためアドレス変換できずに死亡。
PCI空間を実装した方法で不連続空間にメモリを割り当てればOKだとは
思うのですが、ううむ。折角なので、memalの仕様として不連続空間の
メモリ割り当てが可能な様に改良してみようかしら。
今日はパスポート申請のためお休み。また来週取りに行かなくてはならないのが
面倒臭いシステムです。
なにげにダラダラとテレビを見ていたら、便秘薬のCMだかなんだかが流れていて、
その中のカットに女性の完全尻出しカットが挟まってましたよ。最近はあのくらい
の映像でも大丈夫なのでしょうか?
調査の続き。まず、initial_bats()から。ここで勘違い。6/7のValidビットが
落ちているというのは嘘でスーパーバイザモード時はValidになっています。
何を見間違えていたのやら。で、BAT変換時の間違いで、EA0-14と全BATレジスタの
BEPIフィールドを比較するのですが、~(BL)のマスクが抜けていました(^^;
で、ここについては結果的にアドレス変換無しと同じ結果になるという事で
OK。次にMMU_init()内。とりあえずPVR(プロセッサバージョンレジスタ)を
603eにして実行しているのですが、hash_init()内ではHash_sizeもHash_mask
も0に設定している模様。確かに、コンソールメッセージでも
「Total memory = 8MB; using 0kB for hash table (at 00000000)」となって
いるため、良いと言えば良いような。この先でPTEのクリアやら設定やらをやって
いる様なので、ここん所でどのようなPTEを生成しているのかを観察してみる
必要ありといった感じ。
MMU_init()を抜けるとload_up_mmu()でSDR1の設定と全BATレジスタの無効化を
行って、以後、全てのアクセスはページアドレス変換のみで行うという手順の
予感。で、現状load_up_mmu後のページアドレス変換がうまく行われず、
命令フェッチがアクセス例外でずっこけるという状態になっています。
昼過ぎ起床。時の記念日でも関係無しな感じで時間を無駄に使っている予感(^^;
散髪に行ったら思いっきり待たされ状態。結局、3時間居たことになりましたよ。
帰り際に本屋で「G-taste 4 1/2(よんとにぶんのいち)」を買ってみました。
1/2ってなんだ?と思っていたら、ミスターマガジンが無くなった為、云々。
知らんかった(^^;
ページアドレス変換を実装してみました。最初、memory.h内にマクロとして
書こうとしたのですが、BATアドレス変換時にそれをやって、ちょっと変える
度に全コンパイルになってしまうというマヌケな状態に陥ったため、取り合えず
関数で実装してみました。アドレス変換に要する手順の多さもあるのですが、
遅い遅い(^^; で、結論からいうと何の解決にもならず。やっぱりPTEは設定
されていなかった模様。つーか、0x100がマシンチェックの例外ベクタで
すし、スーパーバイザモードでうっかりNULLポインタアクセスしたら死んで
しまうような危険な領域にPTEを置く訳が(多分)ありません。アドレス変換無し
でそこそこ動いたフリをしたことから考えると、MMU_init()辺りで何をやっている
のか良く見てみる必要がありそうです。
起きたら18:00。先週と同じでなのですが(苦笑;
ちょこっとゲーセンに寄ってみたら、「NIGHT RAID」が無くなっていて、
代わりに「怒首領蜂II」が置いてありました! 早速やってみたのですが、
「ほげ〜〜〜ん」そんな感じ(<どんな感じや)。いや、ただのシューティング好き
なので、偉そうな事を言える身分ではないですが、グラフィックは使いまわし
ばかりで、敵の攻撃はなんだかしょぼしょぼ。古臭い昔のシューティングゲームの
ような香りがただよってました。従来型のボンバーと、エネルギーを溜める
事で使用できるようになるレイストーム型のボンバーを選べる様になっていました
が、マキシマムボーナスとどう折り合いを付けているのかイマイチ不明な点が
あります。プロデュースがCAVEなだけで、作ったのはどこか別のところ(英文字
三文字だったので失念)みたいなので、全く別物としたものかも知れません。
SDR0じゃなくて、SDR1の間違い(名前違い)に気づきました。ゲフ。それはさておき、
本当にページアドレス変換が起きていないのかを調査してみた所、そこら中で
起きているような予感(汗; ちゅうか、start_here()でBATUレジスタのvalidビットが
落ちていたのですから、当然といえば当然なのですが(^^;。うーむ、ページ
フォルトすると、SDR1の値などもきちんと設定されるという事なのかしら?
日付け越え。
追跡調査。例外が発生後、レジスタを退避し、実行時間などを更新したのち、
レジスタを復元して、実行の続きを行うような感じになっているようなのですが、
レジスタを復元する際、SRR0に戻すアドレスが4の倍数になっていません。
ハードインプリメント的にはbit30-31は'0'予約となっているため、bit30-31が
立っていても、'0'に落とされてしまうのかも知れません(ppcsimでは仮想の
pcにsrr0の値を戻すときにbit30-31を'0'に落としている)が、そもそも4の倍数
でないアドレスを復元しようとしてしまうのは、動きとしては非常に怪しいと思われます。
で、レジスタの退避と復元の状態を調べてみました。結果、レジスタ保存時には
0x000axxxxに退避しているのですが、復元時には0x00caxxxxから復元して
いました。うーん、何か変な気はしますが、微妙な感じ。
久しぶりに少し早く上がれたのに、自転車がパンクしていて普段の3倍の時間をかけて
帰り着いてブルー。雨が降ってなかった事だけは幸いでした。
いやいや、命令アドレスはアドレス変換ありと無しでは同じかも知れないけど、
データアクセスの方は、一緒にはならんっしょ。という事でBAT変換だけを
実装してみました。所が本当に結果変わらず。で、よーーーく見てみると、
IBATレジスタもDBATレジスタも値は入っていますが、Validビットが落ちている
じゃないですか!しかもBLフィールドがall1ということは、実際に変換がかかった
としても、bit0-3の4bitしか変換されず、結果、変換前アドレスと変換後とでは同じに
なってしまうという(^^;。ちゅうか、すぐ気づけよって感じですね。因みに、
SDR0は0x00000000のままというのには変わりないので、この状態だとページアドレス
変換の方は行われていないハズ。
という訳で、ちゃんと追っかければどこかに原因があるという事がわかりました。
今日のはまり事。#defineによるマクロ定義で、複数行にまたがるために'\'を使用する際、
'\'の後ろに不要な空白を入れてしまうとparseエラーになってしまう。改行文字を
目に見える形で表示するエディタならすぐに気づくのかも知れませんが、
Meadowを使っている私は気づくのにえらく時間がかかりました(^^;
日付け越え
トレースはやっぱり終わりませんでした。で、取れている部分だけで
変化点を調べてみると、start_here()実行時に変換をONにしている模様。
まずはアドレス変換に使用するレジスタ群がどのように設定されている
のかを調べるために、ダンプコマンドに機能追加。で、start_here()で止めると、
MSR : 00000030 SDR0 : 00000000 BAT0U : 00c01ffe BAT1U : 00000000 BAT2U : 00000000 BAT3U : 00000000 BAT0L : 00000002 BAT1L : 00000000 BAT2L : 00000000 BAT3L : 00000000 DBT0U : 00c01ffe DBT1U : 00000000 DBT2U : 00000000 DBT3U : 00000000 DBT0L : 00000002 DBT1L : 00000000 DBT2L : 00000000 DBT3L : 00000000 SR00 : 00000000 SR01 : 00000000 SR02 : 00000000 SR03 : 00000000 SR04 : 00000000 SR05 : 00000000 SR06 : 00000000 SR07 : 00000000 SR08 : 00000000 SR09 : 00000000 SR10 : 00000000 SR11 : 00000000 SR12 : 00000000 SR13 : 00000000 SR14 : 00000000 SR15 : 00000000
pc=0x00009030 inst=0x809b0004 c09030: 80 9b 00 04 lwz r4,4(r27) d r PC : 00009030 MSR : 00002e40 SPRG0: 003ff000 DEC : 00459d08 CR : 00000000 SRR0 : 00009032 SPRG1: 00000000 TBU : 00000000 XER : 000f2e40 SRR1 : 000f2e40 SPRG2: 00000000 TBL : 6fde4100 LR : 00000000 HID0 : 00008000 SPRG3: 0009e6b8 CTR : 00000000 HID1 : 00000000 GPR : 00-07: 00ca0410 00c13fbc 00000028 00000000 00000000 00ca0418 00ca17b8 00000040 08-15: 00ca0000 00000f60 00001032 00ce3c50 00ca8110 00c05f60 00cc9504 00ca99e0 16-23: 030003d0 00ca03e8 00ca0338 00000000 00001032 000f2e40 00000000 00000000 24-31: 01000000 00ca0408 00ca0358 1c9d4b30 01001032 00ca0418 00ca0368 00000000 d t MSR : 00002e40 SDR0 : 00000000 BAT0U : 00000000 BAT1U : 00000000 BAT2U : 00000000 BAT3U : 00000000 BAT0L : 00000000 BAT1L : 00000000 BAT2L : 00000000 BAT3L : 00000000 DBT0U : 00000000 DBT1U : 00000000 DBT2U : 00000000 DBT3U : 00000000 DBT0L : 00000000 DBT1L : 00000000 DBT2L : 00000000 DBT3L : 00000000 SR00 : 00000000 SR01 : 00000000 SR02 : 00000000 SR03 : 00000000 SR04 : 00000000 SR05 : 00000000 SR06 : 00000000 SR07 : 00000000 SR08 : 00000000 SR09 : 00000000 SR10 : 00000000 SR11 : 00000000 SR12 : 00000000 SR13 : 00000000 SR14 : 00000000 SR15 : 00000000
日付け越え
TRACE例外が上がっているという事みたいなので、その周辺を調べてみたのですが、
UnknownException()の前はTrap_0fを通過しているようでした。ベクトル命令関連
臭い気がした(本当に直感)ので、なにげにCONFIG_ALTIVECをnoにして再コンパイル
してみました。所が、
今度は全く動きが変わり、Memアクセスエリア越えで、全然手前でずっこけるように
なりました。どうも、calibrate_delay()でのループをデクリメント例外を使用して
脱出する際、例外ベクタに飛ぶところで何かSRR0,SRR1の値がおかしかったので、
先日のrfiも含め、例外ベクタにブランチする際のSRR0,SRR1に保存するべきビット
と、落とさなくてはならないMSRのビットを確認してみたところ、
全然間違っていましたよ(^^; 修正して再び実行してみた
ところ、やはり同じような所でこけるのですが(というのは一番最初に実行される
例外処理がデクリメント例外だから)、MSRの値が今までと少し違っていました。
そこで判った驚愕の事実。アドレス変換が有効(MSR.IR=1,MSR.DR=1)になってますよ!
あう、それでアドレス越えですか。どうしよう。
取り合えず、どこでアドレス変換がONになるのかを調べるため、一番最初から
MSR値のトレースを取ってみることにしました。さて、朝起きるまでに終わる
でしょうか?
日付け越え
調査の続き。なぜ single step 例外が上がることになったのかを追っかけて
いたところ、どうも期待しない所にブランチしているような予感。で、
よーくみてみると、rfi実行時のSRR1からMSRに復帰するビットフィールドが
思いっきり間違えてますよ(^^; なもんですから、一度セットしたら落ちなく
なってしまうビットが多数。その中にSEも含まれていて、クリアできなかったり
した場合におかしな事になっていたというのが原因でした。で、修正した
ところ、以下のような感じ。
Ramsize from residual data was 0 -- Probing for value Ramsize default to be 8M Total memory = 8MB; using 0kB for hash table (at 00000000) Linux version 2.4.4 (既定@SOTECCOMPUTER) (gcc version 3.1 20010330 (experimental)) #11 Sat Jun 2 01:42:06 2001 PReP architecture On node 0 totalpages: 2048 zone(0): 2048 pages. zone(1): 0 pages. zone(2): 0 pages. Kernel command line: time_init: decrementer frequency = 464.000480 MHz Warning: real time clock seems stuck! Calibrating delay loop... Bad trap at PC: 0, SR: 0, vector=0 Oops: Exception in kernel mode, sig: 5 NIP: 00000000 XER: 00000000 LR: 00000000 SP: 00000000 REGS: 00cf2e50 TRAP: 0000 MSR: 00000000 EE: 0 PR: 0 FP: 0 ME: 0 IR/DR: 00 TASK = 00c9e460[0] 'swapper' Last syscall: 0 last math 00000000 last altivec 00000000last math 00000000 last altivec 00000000 GPR00: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 GPR08: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 GPR16: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 GPR24: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 Call backtrace: Kernel panic: Attempted to kill the idle task! In idle task - not syncing Rebooting in 180 seconds..
今日は休日。いや、昨日も休日でしたが(汗;
ゲーセンとか。「NIGHT RAID」をやってみました。TAITO+タクミの
組み合わせになっているのは、CAPCOMがアーケードを辞めたからでしょうか。
これ、意外と長い時間遊べるかも(^^; 1,2面は全然弾幕ではないのですが、3,4面
辺りから急に難しくなるような感じです。自機をヒモを付けて飛ばして、
レバーをガチャガチャやってるとクラッカーみたいに敵機を破壊して回ると
いう変な溜め攻撃ができます。これが見た目がハデな上、出すのが難しい
訳ではないので、気分が良いです。ただ、得点のシステムがいまいちよく
判らない。何故かマイナス得点から始まったりするようで、プラスになって
いるのが良いのかどうか、よくわかりませんでした。
そんな感じで「CRAZY TAXI 2」を買ってみました。「GIGA WING 2」から
4ヶ月ぶりのソフト購入ですよ。で、これ、なかなか良いんですが、
なんか難しいっす(^^;ノーマルプレイだとDランクしか取れないです(ダメすぎ)。
ゲームの方はノリノリなので、ずっとやってられそうな感じなのですが、
先に右手人指し指の方が痛くなりました(^^; これから思うに、伊集院光
は上手すぎ。
先に「Warning: real time clock seems stuck!」の方を調べてみました。
原因は、時刻レジスタの読み出しを二度行い、その時間の差を調べると
いうものだったのですが、メモリマップドな時刻レジスタのアドレスの
内容は変化するような仕掛けになっていませんので、その差が0で結果、
時間が止まっているように判断されているというものでした。
起きたら18:30でびっくりですよ(激汗;;
「これマジ」などを見てみました。宇宙人格闘映像って......宇宙人も
飛んだり光ったりしているわけではなく、普通に地面を歩いたり、
普通の生き物の様にこっちに気づくサマが、あまりにも普通過ぎて
逆にシュールで笑えたかも。でも番組的になんかひっぱり過ぎですよ。
つい最後まで見てしまいましたよ(^^;
タイムベースレジスタの値をカウントアップするようにしたら、
「time_init: decrementer frequency = 261.000270 MHz」のような
感じになりました。「++9カウント/1命令」でこの周波数という感じ。
また、例外処理が間違っていて、デクリメント例外が起こった時に
外部割込みのベクタにブランチしてました(^^; それを直すともっと
手前でずっこける様になったりして。間違えていて先に進むという
のは珍しいです。折角なので、外部割込みが発生するようにしてみました。
すると、calibrate_delay()は通過する様になりましたが、その先で
つまづき。singleステップ割り込みを期待している所、割り込みが
かからずそのままオーバーランしているような予感。
日付け越え。
ちょこっとprintk()にバイパスを付けてメッセージ出力を横取り。
以下スナップショット(笑)
Ramsize from residual data was 0 -- Probing for value Ramsize default to be 8M Total memory = 8MB; using 0kB for hash table (at 00000000) Linux version 2.4.4 (既定@SOTECCOMPUTER) (gcc version 3.1 20010330 (experimental)) #11 Sat Jun 2 01:42:06 2001 PReP architecture On node 0 totalpages: 2048 zone(0): 2048 pages. zone(1): 0 pages. zone(2): 0 pages. Kernel command line: time_init: decrementer frequency = 0.000000 MHz Warning: real time clock seems stuck! Memory: 7068k available (544k kernel code, 356k data, 72k init, 0k highmem) Dentry-cache hash table entries: 1024 (order: 1, 8192 bytes) Buffer-cache hash table entries: 1024 (order: 0, 4096 bytes) Page-cache hash table entries: 2048 (order: 1, 8192 bytes) Inode-cache hash table entries: 512 (order: 0, 4096 bytes) POSIX conformance testing by UNIFIX