どれが最新版かわけがわからない状態なので、
DOS 用のプログラムの最新版(修正版 Ver0.32)
CDROM イメージの最新版(Ver0.30)
です。
連休中にバグを直そうと思っていたんですが、惨敗。
HD(Ver0.30 に付いてる16進ダンプと逆アセのプログラムです)で RETURN
を押すとハングってしまいます。caetla
でプログラム転送して試すと再現せず、CDに焼くと発病します。
801f0000 から、という狭いところに転送してるので、
最初スタックが溢れてるのかと思ったがそうでもない様子。よくわからんが
caetla なしだと割り込みがないぶん速くなって DMA
がらみでコケてるのかなーと漠然と考え、じゃあ真面目に割り込みと DMA
に立ち向かうかと思ったところまではなかなか良い志しだったんですが、
ついでに CDROM の割り込みも試そうって思って書いてみたら大ハマリ。
ふてくされてポポロクロイスUを始める始末。
おかげでなんの成果も得ることが出来ませんでした。(泣
あ、現象は割り込みがかかったりかからなかったり、しかも不定期。まともとは思えません。
多分しょーもないバグなんでしょうけど、
同じような現象を体験済みのひとがありましたら助言よろしくお願いします。
このページは言い訳のための日記になってしまいそです。
ほんとにそのうちHPをきれいに整理しますんで、しばらくおまちくださいませ。
THUMP!さんからリンクのお許しをいただきました。ここです。PAR3 の通信プロトコルについて記述があります。
実行時改造コードの転送命令なんかもありますのでフリーソフトのネタに最適です。
Kamilion さんが私のインチキ英語を Native な英語に翻訳(笑)してくれました。
ここです。
Herben さんが mfc0 $12 のことを教えてくれました。
bit0 はやっぱり割り込みを許可・不許可のビットだそうで、Doomed の system.txt
に書いてあるそうです。うーむこのテキスト持ってたのに見逃してました。
彼はリバースエンジニア専用ROMの開発計画進行中だそうです。
さそってくれたんですけど私はそんなに知らないんでそんな「だいそれた」ことはよーやりません。
実力がついて、なんかの間違いで自信がみなぎってきたらそのときはよろしくお願いします、て感じです。あと PS2 に穴を開ける計画が挫折したらやってみようか、
とか都合のいいことを考えたりしてます。
そうそう、PS2。やっぱり PSDIS 相当のものが欲しいところですねー。今のうちに
Windows でプロトタイプを書いておけばいいんだろうなーと思いつつ、
足取りは重いっす。そもそも WIndows でプログラムってかれこれ1年ぐらいやってないし、個人的には DOS 用(しかも HP200LX で動くような...)のほうが欲しかったり...
ライブラリを整備して両方で動くモノを作るとかいうのが最高かなあなどと思いつつも
C++ は使いたいし、結局手付かずって結末のような気がします。
2000-01-09
2000-01-19
2000-01-26
2000-01-31
その後は 3.1,3.2 共通で、 PC PS 'G' >>>> <<<< 'g' 'T' >>>> <<<< 't' cmd >>>>というシーケンスになります。通信は 4bit ずつ行われるので 'g' は 6 を送って 7 を 送る、ということになります。 3.1 では
3 >>>> <<<< 0 4 >>>> 'G' の上位4ビット <<<< 6 'g' の上位4ビット 7 >>>> 'G' の下位4ビット <<<< 7 'g' の下位4ビット cmd>>>> <<<< 0 cmd>>>> <<<< 0てな感じだったのですが、3.2 では
3 >>>> これが来てるのを確認しつつスルーして、 <<<< 6 'g' の上位4ビット dummy >>>> (多分 0 とか) <<<< 7 'g' の下位4ビットここで 30 などというありえないコマンド番号を貰った PS 側は再び 'g' を送出 するところにジャンプします。
void Write_Verify_RebootAnyway(destAddress, srcAddress, size) { WriteData() をコール VerifyData() をコール 戻り値に関らずリブート、をいをい。 } void WriteData(destAddress, srcAddress, size) { 割り込みを禁止。 ToggleBit() をコールしビジーでないことを確認。 Unprotect() をコールし、書き込めるようにする。 セクタ先頭バイトに $20(Erace #1)を書く。 セクタ先頭バイトに $d0(Erace #2)を書く。 ToggleBit() コール セクタ数だけループ { for (i = 0 ; i < 256 ; i ++) { セクタ先頭バイトに $10(Byte Program)を書く。 セクタ先頭バイトに srcAddress から順番に書く。 2000-01-19 追記:これはウソ!先頭じゃなくて、 そのまま書き込むところに書いてます。 ToggleBit(); } } Protect() をコール、書き込めないようにする。 割り込みを許可。 } void ToggleBit(sectorAddress) { セクタ先頭バイトを読む。 もう一度読む。 一致するまでループ。 } void Protect(void) { lbu (1f001823) lbu (1f001820) lbu (1f001822) lbu (1f000418) lbu (1f00041b) lbu (1f000419) lbu (1f000410) } void Unprotect(void) { lbu (1f001823) lbu (1f001820) lbu (1f001822) lbu (1f000418) lbu (1f00041b) lbu (1f000419) lbu (1f00041a) } int VerifyData(destAddress, srcAddress, size) { src と dest を size 分比べる。 同じなら 0、違ったら -1 を返す。 }
参考文献:
SST 4 Megabit(512K x 8) SuperFlash EEPROM(www.SuperFlash.com or www.ssti.com だそうです。)
SST28SF040/SST28LF040/SST28VF040