実際にメモリカードにアクセスするためには、 秋月電子通商で発売されている 「PlayStationメモリカードリーダ」の接続キットが必要です(\2,800)。 このキットはハンダごての使える人なら簡単に製作できますし、 同等の回路が えるむさんのところで公開されていますので、 根性のある方は自作することもできます (根性のない人用に「トライステート」から完成品が販売されているようです)。
なお、PlayStation2用のメモリカード・ポケットステーション・ バンク切替え方式のメモリカードは使用できません。 今のところ私のところでは、SonyのSCPH-1020(基板にはSPC02K1020Bのシルク)、 KARATのKARAT15(基板にはPS1R14のシルク)で動作しています。 SMPマシンでの動作は不明です。
http://www.akizuki.ne.jp/ 秋月電子通商
http://elm-chan.org/reports/psmif/report.html えるむ - Electronic Lives Mfg.
このパッケージは、カーネルモジュール、 起動スクリプト、メモリカード操作プログラムからなります。 起動スクリプトが実行されるとカーネルモジュールがOSにロードされ、 デバイスファイル/dev/linpsmが作成されます。 プログラムはこのデバイスファイルをread/writeすることによって メモリカードにアクセスすることができます。
ddコマンドを使ってメモリカードのダンプ処理を行うこともできますし、 同梱のulpsmというプログラムを使ってデータブロック単位での コピーや削除などの操作を行うことができます。
ある業者が「ときめきメモリアル」の改造データをいれて メモリカードを販売した行為が、 著作権侵害であるとの判決が下されています。 いまさら判決の妥当性についてどうこう言っても仕方ない面もありますが、 私的利用の範囲を超えた改造データの配布は明確に違法になってしまいました。
作者としては、(判決の妥当性はどうであれ、)法規を逸脱するような行為に
このソフトを使用することを禁止させていただきます。
なお、私的利用のためと、バックアップ作成のために
複製を作ることは著作権法で認められていると考えております
(ただし、本当に大丈夫かは裁判所が決めるということはお忘れなく)。
以下に、著作権法の関連条項を示します:
(私的使用のための複製)
第三十条 著作権の目的となつている著作物(以下この款において単に「著 作物」という。)は、個人的に又は家庭内その他これに準ずる限られた範囲内 において使用すること(以下「私的使用」という。)を目的とする場合には、 公衆の使用に供することを目的として設置されている自動複製機器(複製の機 能を有し、これに関する装置の全部又は主要な部分が自動化されている機器を いう。)を用いて複製するときを除き、その使用する者が複製することがで きる。(プログラムの著作物の複製物の所有者による複製等)
第四十七条の二プログラムの著作物の複製物の所有者は、自ら当該著作物を電 子計算機において利用するために必要と認められる限度において、当該著作物 の複製又は翻案(これにより創作した二次的著作物の複製を含む。)をするこ とができる。ただし、当該利用に係る複製物の使用につき、第百十三条第二項 の規定が適用される場合は、この限りでない。第百十三条 2 プログラムの著作物の著作権を侵害する行為によつて作成され た複製物(中略)を業務上電子計算機において使用する行為は、これらの複製 物を使用する権原を取得した時に情を知つていた場合に限り、当該著作権を侵 害する行為とみなす。
このパッケージおよびパッケージをコンパイルしたものは、 使用される地域の法規を侵さない範囲で どなたでも自由に使用・改変・再配布することができます。 ただし、再配布に際しては、再配布を受ける人がソースコードを 得る手段を保証しなければなりません。
このパッケージを使用して発生する事態に対して、 作者は一切の責任を負いません。
Copyright © 2001 Card Captor
オリジナルの配布は、 http://geocities.datacellar.net/card_captor/で行っています。
今のところバイナリ配布はDebianパッケージのみです。 カーネルのバージョンとの整合性をチェックしないようにコンパイルしてあるため、 多分どのカーネルでもOKなはずです。
./configure [--prefix=PREFIX] [--kernel-dir=KENERLDIR] [--linpsm-module=MODULE] [--linpsm-file=DEVICE] [--lpt-port=PORT] [--linpsm-perm=PERM] [--linpsm-owner=OWNER] [--linpsm-group=GROUP]ここでPREFIXは、インストール先を指定します。デフォルトは/usr/localです。 KERNELDIRは、使っているカーネルのソースが入ったディレクトリを指定します。 もし、カーネルのソースがない場合は/usrを指定してください。 デフォルトは/usr/src/linuxです。 MODULEはlinpsmモジュールの名前を指定します。デフォルトはlinpsmです。 DEVICEはlinpsmデバイスのファイル名を指定します。デフォルトは/dev/linpsmです。 PORTはプリンタポートのI/Oアドレスのデフォルト値を指定します。 デフォルトは0x378です。 PERM, OWNER, GROUPはlinpsmデバイス作成時の モード、所有者、所有グループを指定します。 デフォルトはそれぞれ666, root, rootです。
initスクリプトの実行は、起動時に自動的に行わせることもできますし、 linpsmを使う前に手動で行うこともできます。 面倒ならば、起動時に自動的に実行するようにしておけば良いでしょう。 少しでもメモリを節約したいとか、不審なモジュール(f^^)はなるべく 使わないでいたいという場合は、手動で実行するよう設定を行ってください。
カーネルモジュールは以下のようなオプションを受け付けます:
# insmod /full/path/to/linpsm.o [io=0xNNN] [verbose=N]プリンタポートのポート番号を変更したい場合は、 io=0xNNNをinitスクリプトのINSMOD_ARGの行に追加してください。 メッセージの冗長度を変更したい場合は、verbose=Nを追加してください (N=0の時は何も出力しません。 N=1の時は簡単な動作メッセージを表示します(デフォルト)。 2の時は、動作を逐一表示します。 3以上の時は、メモリカードとの通信のログを表示します)。
# update-rc.d linpsm defaults 99 00起動スクリプトは/etc/init.d/linpsmになります。
# cd /etc/rc.d # ln -s ../init.d/linpsm rc2.d/S99linpsm # ln -s ../init.d/linpsm rc2.d/K00linpsm起動スクリプトは/etc/rc.d/init.d/linpsmになります。 (っていうか、chkconfig使うの?)
# cd /etc/rc.d # ln -s ../init.d/linpsm rc2.d/S99linpsm # ln -s ../init.d/linpsm rc6.d/K00linpsm起動スクリプトは/etc/rc.d/init.d/linpsmになります。
# /etc/init.d/linpsm start
カーネルモジュールをOSからアンロードしたい場合は、 以下を実行してください。
# /etc/init.d/linpsm stop
このファイルに対してddコマンドなどを使うことができますが、 読み書きのサイズは128bytes単位でなければなりません。 中途半端なサイズでのアクセスを要求するとエラーENXIOが帰ります。 このデバイスファイルをmmap(2)することはできません。
例: メモリカードのバックアップ
# dd bs=128 if=/dev/linpsm of=backup.ps
このままではメモリカードまるごとでしか扱えないので、 メモリカード上のデータをブロック単位で 操作可能なプログラムulpsmが用意してあります (といっても、全ダンプ機能以外はめったに使いませんが ^^;)。
なお、こちらではHDDやXがガリガリ動いている最中に メモリカードを読み書きしても特にデータが化けたりということは (今のところ)ありません。 もともとメモリカードとの通信にはXORチェックサムが含まれていますので、 仮にデータを取りこぼしてもたぶん検出できるはずです。
形式 ulpsm [-f SRCDEV] dir ulpsm [-f SRCDEV] lsSRCDEVで指定されるメモリカードファイルに含まれる データブロックに関する情報をカンマ区切りで表示します。 SRCDEVを指定しなかった場合、/dev/linpsmが使用されます。 表示内容は
表示内容のうち、使用状態は以下のアルファベットであらわされる状態のうちのどれかになります。
表示例
- r
- 予約状態。よくわかってません。
- f
- 未使用。
- d
- 一度使われて、その後削除されたブロック。
- s
- データブロック先頭。
- c
- データブロック。複数のブロックからなる場合だけ出現します。
- e
- 最終データブロック。複数のブロックからなる場合だけ出現します。
- E
- エラー状態。ディレクトリフレームのチェックサムが 異常な場合など、この状態になります。
01,s,51,,2000,SLPS-01751-0,1,1,エリーのアトリエ・セーブデータ1 02,s,51,,2000,SLPS-01751-1,1,1,エリーのアトリエ・セーブデータ2 03,s,51,,2000,SLPS-01751-2,1,1,エリーのアトリエ・セーブデータ3 04,s,51,,2000,SLPS-01751S,1,1,エリーのアトリエ・おまけ用データ 05,s,51,,2000,SLPS-02886,3,1,☆カードキャプターさくら エターナルハート 06,s,51,,2000,SLPS-00970MYANGEL,3,1,子育てクイズ「マイエンジェル」 07,s,51,,2000,SLPSP01830CCSAKURA,3,1, カードキャプターさくら 第11話 さくらとゾウの力比べ 08,s,51,9,6000,SLPS-03154SISPRI,1,3,シスタープリンセス・ゲームデータ 09,c,52,10,2000,,0,0, 10,e,53,,2000,,0,0, 11,f,a0,,0000,,0,0, 12,f,a0,,0000,,0,0, 13,f,a0,,0000,,0,0, 14,f,a0,,0000,,0,0, 15,E,ee,,,,,dir_csum_mismatchなお、データのタイトルはSJISで符合化されており、 そのまま表示するとたぶん文字化けします。 nkfなどを適宜使用してください。
ulpsm [-f SRCDEV] copyall DSTDEV ulpsm [-f SRCDEV] dump DSTDEVDSTDEVで示されるファイルにカードの中身をそのままコピーします。
ulpsm [-f SRCDEV] geticon BLOCKBLOCKから始まるデータブロックのアイコンを取り出し、 XPMフォーマットで書き出します。 ファイル名はブロック番号をN、アイコン番号をMとすると 「psmN-M.xpm」に決めうちですので、 既存のファイルの上書きや、/tmp等のだれでも書き込めるディレクトリ上での 実行には十分気を付けてください。
ulpsm [-f SRCDEV] copy BLOCK DSTDEV ulpsm [-f SRCDEV] cp BLOCK DSTDEVBLOCKから始まるデータブロックを、 DSTDEVで示されるメモリカードファイルにコピーします。 BLOCKがデータの先頭ブロックでない場合はエラーになります。
ulpsm [-f DSTDEV] delete BLOCK ulpsm [-f DSTDEV] rm BLOCKBLOCKから始まるデータブロックを削除します。 BLOCKがデータの先頭ブロックでない場合はエラーになります。
ulpsm format DSTDEV ulpsm newfs DSTDEVDSTDEVで示されるメモリカードファイルを初期化します。 もちろん、データブロックはすべて使えなくなります。
あと、ハードウェアの故障の場合もこれになるかもしれません。 ロジアナかオシロを持ってる人なら、CLK・COM・DATあたりを見てみてください。
http://www.vector.co.jp/soft/data/game/se020797.html藤田さんのVectorのページ
http://member.nifty.ne.jp/TAKAYAMA/program_j.htm WINPSM
お二人の作者に感謝いたします。