ミンサガやりたい!というわけで弟から使っていないPlayStation2をせしめることに成功したが、長年にわたる放置のためディスクが読めなくなっていた
……ので、このサイトを参考に開けてみました。
http://www1.plala.or.jp/evolution/ps2scph10000.html
ちなみに型番はSCPH-18000、封印シールが貼ってありましたが、剥がすと修理に出せなくなりますので切りました。
振ってみるとドライブの口から結構ほこりが出ていたのですが、いざ開けてみるとほこりの量は大したこと無かったです。しかし臭いが……カビなのか剣道のお面なのかそんな。とりあえずセロテープでざっと取りました。
さて、プレステがディスクを読まなくなる要因はほとんど次のふたつだそうです。
1. レーザーの出力不足。
2. レンズの汚れ。
症状としてはCD、DVD共に、ゲームは起動できず、音楽CDやビデオDVDは最初の方だけ再生できるというもの。
出力調整ねじは調整ドライバーで回すと回りすぎたので、ラジオペンチで微調整。時計回りが出力UPで+15度が限界とのことですので、CD、DVD共に+15度ぐらいまで回しておきます。
レンズは汚れているようには見えませんでしたが、とりあえず眼鏡拭きで拭いておきました。
ついでにヘッダの可動部からは、完全にほこりと同化して白くなっているグリスを拭いて、一年半以上前に組み立てたミニ四駆の余りのグリスを塗っておきました。
さて挑戦……ダメです。第3の要因を疑います。
3. 使っているうちに最適なピックアップの高さがずれてきた。
蓋を開けた状態のまま、ピックアップの調整ダイヤルを1クリックずつ回してテスト。蓋を開けたままですとCDが暴れて傷つく恐れもありましたので、テストに使ったCDはこれまた弟からせしめたSecret&Liesです。同じ曲ばっかり聴いたのでGraduation好きになりそう。唐突に同じ箇所のリピートを繰り返すDJ the jammed PS2 versionですが……後で普通に聴いたら物足りない。
ダイヤルの位置毎にどこまで再生できたかをメモっていたのですが……かなりの回数試行してCDもいい具合に傷物になったあたりで、なんか相関なんて無いんじゃね?ということに気付きます。
いい加減PS2のディスクドライブのオープン・クローズやクローズでドライブが持ち上がる物理的な機械仕掛けにも慣れてきましたので、ヘッダを触ってみます。
ヘッダの位置を動かすモーターの動きを伝えるギア?(形状は凸が付いているだけの板、信じられないことにプラスチックいやまあ強化樹脂かもしれません)が随分緩んでいます。手でモーター軸直結のネジ状ギアを回してみると、見事に空転してます。こいつか……。
一旦ネジを外して、ラジオペンチでぐいぐい逆方向に曲げてでも全然曲がらなかったのですが気分的に曲がったことにして取り付け直したところ、しっかり噛み合って動く気分になったっぽいので、この状態でミンサガのDVD入れて電源を入れてみました。
結果!!奇跡的にミンサガのロードに成功!!
やー、やってみるもんです。ハードウェアクラッシャーの私にしては上出来です。というわけで現在私の部屋には、蓋の開いたままのPlayStation2があります。ちなみにWiiは弟に貸してしまっています。
なおプレステはネジが多くて開け閉めが面倒です。持ってて良かった電動ドライバー。一年に一度ぐらいは役に立ちますよ。
問題です。
次のプログラムはなんと出力するでしょう。
with Text_IO; procedure eq is package pr is type T1 is record M : Integer; end record; function "=" (X, Y : T1) return Boolean; type T2 is tagged record M : Integer; end record; function "=" (X, Y : T2) return Boolean; end pr; package body pr is function "=" (X, Y : T1) return Boolean is begin Text_IO.Put_Line("primitive of T1."); return X.M = Y.M; end "="; function "=" (X, Y : T2) return Boolean is begin Text_IO.Put_Line("primitive of T2."); return X.M = Y.M; end "="; end pr; package co is type C11 is record A : pr.T1; end record; type C12 is tagged record A : pr.T1; end record; type C21 is record A : pr.T2; end record; type C22 is tagged record A : pr.T2; end record; end co; use type co.C11, co.C12, co.C21, co.C22; O11 : co.C11 := (A => (M => 1)); O12 : co.C12 := (A => (M => 1)); O21 : co.C21 := (A => (M => 1)); O22 : co.C22 := (A => (M => 1)); begin Text_IO.Put_Line("11"); declare Dummy11 : Boolean := O11 = co.C11'(A => (M => 1)); begin null; end; Text_IO.Put_Line("12"); declare Dummy12 : Boolean := O12 = co.C12'(A => (M => 1)); begin null; end; Text_IO.Put_Line("21"); declare Dummy21 : Boolean := O21 = co.C21'(A => (M => 1)); begin null; end; Text_IO.Put_Line("22"); declare Dummy22 : Boolean := O22 = co.C22'(A => (M => 1)); begin null; end; end eq;
委員会も統一と互換性の間で揺れているらしい。
http://www.ada-auth.org/cgi-bin/cvsweb.cgi/AI05s/AI05-0123-1.TXT
O'Camlのソースを出力する時の無難なFormat
どっかに一覧無いですかね。
試行錯誤したところmatchならこんな感じで上手くいくようですが、マイナスのインデント幅を指定しているのがどうにも。
@[match @[...]@ with@] @;<1 2> @[<b2>@[<hov-2>... ->@]@ @[<hv>...@]@] @ | @[<b2>@[<hov-2>... ->@]@ @[<hv>...@]@]