R
i
O
500
R
e
W
O
R
K
Intermission / Palm

WorkPadC3-50Jで遊んでいます。
遊びが過ぎてフラッシュROMを飛ばしてしまいました。

いや正確にはPalm用のLinuxDAを軽い気持ちで入れた後、日本語PalmOSに戻すことができなくなって、あがいていたんですが。
ようやっと元に戻せる方策ができましたので、ここでお披露目です。

WorkPadC3を展示品処分価格で手に入れた私は、もーそりゃサルのようにいじり倒していました。
CASSIOPEIAは部屋の角の篭に退役しました。

なにが?と言われても答えきれませんが、なーんとなく面白いんです。
身近に置いてポッと使うには最適です。WinCEのCASSIOPEIAでは情熱が冷めてくると、持ち歩く頻度もさがりましたが、こっちは持ってるのが当たり前の気分になります。不思議ですなー。

さて、gccで開発環境もロハで整え、仕事でいつも使う(ちと電卓ではめんどい)計算をやらせようとすると、「このっなんでゆーこと聞かない!」ってな気持ちにもなってきました。

見掛けとは裏腹に薄いOSのレイヤー。んーむ。

ある日の事件
ネットを散策していますと、どうやらLinuxをPalmに載せるプロジェクトがあると聞きつけ、早速覗きに。
見るとPalmVx版(WorkPadC3のOEM元本家版)があるじゃないですか。

POSE用のROMイメージも抜いてあるし、いっちょやってみるか。と軽い気持ちでインストール。
感想といえば、確かに動いている。でもまだまだ煮詰めなきゃいけない部分だらけ・・。

やる気がある人ならLinuxDAの日本語化に手を染めるところでしょうが、とりあえず満足した私ははたと気がつきました。「ROMイメージはあるがどーやって書き戻すのだ?」

あがきの日々
検索してみると、OS ROMイメージを書き込むアップデータがPalmから提供されているらしい。
さっそく適用してみるが、英語版になっただけ。オプションを探るとROMイメージを選択して書き込むこともできるのだが、日本語版ROMイメージはデカすぎると断られる。
むむ。

ならばと、バイナリエディタ片手にアップデータを覗いてみるが、どーにもサイズを特定しているルーチンは発見できず。
したらばと、アップデータとC3のシリアルポートの遣り取りをモニターしてみるが、なかなかに面倒くさいハンドシェイクで挫折。

検索範囲を海外サイトまで広げてみると、Palm-Debuggerとその前身PilotDebuggerにはFlashコマンドがある・・・らしいのだが、BigROMが扱えるというPilotDebuggerはついに発見できず。

八方ふさがり。むう。小癪なり我がC3。

一筋の光明
検索範囲をLinux絡みまで広げてみるとPalmOSに組込まれているプログラムのうち、不要なものを切り離して、必要なアプリを追加するRomeoを発見。
フラッシュ絡み。ピーン。

Romeo編集し最終的にフラッシュROMに書き込のにTill Harbaum氏が製作されたツールosflashが使用されていた。GPLライセンスでソースも公開されている。これだ・・・。
今までフラッシュをどうこうするというアプリはいくつもあたってきたのだが、どうにも何をしてるか判らないし、いっそそれを作ろうと思っても具体的な書き込みルーチンが思い浮かばない。(そこまでつっこんで読み漁ってないし)

喜び勇んでバイナリとソースを頂く。が、「日本語ROMイメージは大きすぎてダメ」。つれないなぁ。
仕方なくソースを読み始める。
ROMイメージをPalmに持ってゆくためのPalmデータベースへの格納は単にレコード数を増やせば対応できそうだ。レコード数も定数として持っているのでこれは簡単にクリア。(115レコードへ)

問題は、、オリジナルソースのコメントにもある日本語版で使われているフラッシュROMチップAMD AM29DL323DB(32Mbit/8bit=4Mbyte)のレコード構成が他のチップと違うらしい。

フラッシュを書き換えるにはまず消さなければならないから、これはちょっと問題。

AMD,FUJITSU,TOSHIBAのデータシートを眺めてみる。
他のチップは若い方から8,4,4,16Kwords(以下32Kwords)なので、Palmのデバッグモニタやシリアル番号が書かれている最初の8Kwordsを除いて4,4,16,32,32,32・・・単位で消去。
AM29DL323DBは4,4,4,4,4,4,4,4Kwords(以下32Kwords)と細かい。
最初の4×2はオリジナルでも手を付けないので、後ろの4×4=16Kwordsの消去を弄れば良い・・はずだよなー。

単純にROMのIDを拾ってAM29DL323DBだったら細かく消去するようにして、ここは逃げる。

なぜっ?
知識は無いながらもcygwin組込みのgccを使ってos2pdbも自前でメイク。
レコード数が書かれたヘッダファイルが共有なので、osflashで変更したレコード数変更はこちらにも素直に反映されたみたい。
でも、他の環境で動かすとcygwin1.dllが無いと怒られる。またまた検索して、gccに-mno-cygwinを与えてリンクされるライブラリを変えれば大抵cygwin1.dllは要らなくなる。らしい。

では、そのようにMakefileを書き直してつくりなおしたos2pdbでROMイメージをpdbに変換してみる。
無事にチェックサムも出て来たし、サイズも妥当なところ。

ではWorkPadC3に送って緊張の一瞬。あれ?チェックサムが合わない・・・。

そーゆーことかぁ
唯一の指標であるチェックサムが合わないのではヤバすぎる。
心当たりをずっと見てみる・・・見てみる・・・見てみる・・・。
解らない。なんで?

POSEで動かすため現フラッシュROM内容のチェックサムを取るルーチンを外してPOSEに掛けてみる。
あれ?なんでこっちだとチェックサムが一致するの?
fjの教祖様のページWorkPad 用プログラムの組み方(4)を見ながらpdbファイルをバイナリエディタで検分。
オフセット値が違うじゃないか・・・。record header 領域の最後に2byteの0x00が無ければいけないはずが、その部分が奇麗に無い。

その2バイト分各レコードのオフセット値が違っていました。
c初心者は単純に2を足して、fseekで2進めるくらいしか思い浮かばなかった・・・でも・・・実機でもチェックサムは一致。

でもコレ。オリジナルにある問題なんだけど、英語版だと問題ないのかな?

てなことで
都合3週間もかかったのですが、WorkPadC3は無事に日本語を思い出してくれました。
もしかしたら、ニーズがあるかもしれないので、ここに置いておくことにします。

ただし、プログラムの性格上(&改造者のスキルの問題)万人にお薦めするものではありません。
復帰不能になることを覚悟で、復旧の為の最終手段としてお使いくださいますようお願いいたします。

なお、この件については私は一切の責任を負わないものとし、問い合わせにも答えないかもしれません。
8MのVx,C3以外ではきっとリカバリ不能かと思います。

Download flashos & os2pdb(include source)
R
i
O
500
R
e
W
O
R
K