まどかの 日記

[2004/01/19〜2004/01/25の日記]
[2004/01/26〜2004/02/01の日記]
[2004/02/02〜2004/02/08の日記]
[2004/02/09〜2004/02/15の日記]
[2004/02/16〜2004/02/22の日記]
[2004/02/23〜2004/02/29の日記]
[2004/03/01〜2004/03/07の日記]
[2004/03/08〜2004/03/14の日記]
[2004/03/15〜2004/03/21の日記]
[2004/03/22〜2004/03/28の日記]
[2004/03/29〜2004/04/04の日記]
[2004/04/05〜2004/04/11の日記]
[2004/04/12〜2004/04/18の日記]
[2004/04/19〜2004/04/25の日記]
[2004/04/26〜2004/05/02の日記]
↑過去3ヶ月くらいの日記はこちら↑

まどかは「P/ECE Hand Book」を応援しています


0940
2004/05/09()
 コンパイルはできたけど……
 えー、今日はお昼に嫁さんを地下鉄まで送った後、外は雨降りだったけどちょっと大須に買い物に行ってから、会社に行き、明日の出張の準備をちょっとしました。

 で、家に戻ってきてからはP/ECEのMMC対応カーネルの続き。
 ヒープの存在を思い出してから結構経ってしまいましたが、一度削除してしまったMMC制御ルーチンをカーネルにまた組み込んで、ワークエリアはヒープに取るようにしてカーネルを再コンパイル。
 
 今度はメモリ内に収まったので無事コンパイルは終了。そして、make bios でP/ECEにカーネルを転送してアップデート。

 これでMMC対応カーネルのできあがり〜(^^ とか思っていたのですが、現実はそんなに甘くなく、一応メニューは立ち上がるのですが、フォント領域が壊れているのか、文字がぐちゃぐちゃになってしまいました(j−j

 他の部分は正常に動いているっぽいので、問題はフォントの部分なのですが、なぜ?

 で、色々調べたところ、フォントデータはフラッシュメモリの0xC0C000からと0xC26000〜0xC28000までに配置されているようで、カーネルのmapファイルで確認したところ、CodeとBSSの領域が0xC0C000を超えているではありませんか(^^; これではフォントデータを壊して当然ですね。

 というのがわかったのはいいのですが、次の問題はどうやってフォントデータの位置をずらすかで、これまたいろいろ調べていくと、フォントデータは\PIECE\updateフォルダの中にあるlfont16.img・mfont4.img・zfont10.imgという3つのファイルがその実体で、これを\PIECE\update\makefileのmake font1とかでP/ECEに転送できます。

 で、今回再配置の対象になっているフォントは\PIECE\update\makefileの中身を見てみると、-bc0c000 という指定のある zfont10.img だということがわかったので、この-bc0c000 の部分をちょっとずらして-bc0d000 とやってから、make font1 で再配置完了。

 あとは、カーネルのfont.cで即値で設定されている0xC0C000の部分を0xC0D000(再配置のアドレスはmapファイルの状況を見て判断してくださいね。)に変更してカーネルを再コンパイル→転送。
 これで、フォントもちゃんと見えるようになり、万事解決(^^
 ちなみに今やっているカーネルの改造は別フォルダにカーネルソースをコピーしてやってます。
 元ソースは壊さないようにしましょうね。

 と、文章では簡単に書いていますが、これがわかるまでにかなり時間が掛かってしまいました(--; これからカーネルを改造しようとしている人は参考にしてみてくださいね。

 で、カーネルがとりあえず動くようになったので、MMC対応カーネル用にMMC上のpexファイルを表示するメニューのサンプルを作り直したのですが、これまた問題山積みで、ヒープで取得しているワークエリアがなんか変なんですよねぇ(--;

 色々修正していくうちに、だんだん使い方が分かってきましたが、10KBくらい確保しているワークエリアの40バイト目以降に値を書き込もうとするとP/ECEがリブートしてしまうという現象に悩まされて困ってしまいました(j−j

 ヒープを確保する時には正常終了して返ってくるので、領域自体は確保できていると思うのですが、なぜなんでしょうね? 使えるヒープの最大値ってどれくらいなんだろう? 今度調べてみようかな。

 というところで、時間がきてしまったので今日はここまで。
 明日は某歌番組の収録に参加するため、朝早くから東京に行ってきます。
 
 nsawaさんに私信:
 拡張端子追加おめでとうございます(^o^ 

 それでは、おやすみなさーい。

0939
2004/05/08()
 パソコンは満足してもらえたようです(^^
 はい、今日はお昼から嫁さんの友人夫婦のパソコンを選びにみんなで大須に買い物に行きました。

 で、色々と回って、はじめはパーツを集めて自作しようかと思っていたのですが、ツクモで売ってるeMachinesでよさげなのがあったのでそれに決めて、思ったより安く買えてしまうのでついでにプリンタやゲーム用のゲームパッドなど、色々と集めてきました(^^

 それからうちにものを全部持っていって動作確認。友人夫婦は2人ともPCは全然詳しくないので、ドライバのインストールやWindowsのアップデートなど、家ですぐに使える状態にしてあげました。

 色々インストールしている間に紫禁城でまた遊んだり、私のP/ECE作品を見てもらったり、楽しい時間を過ごしました。
 
 友人夫婦にはとても満足してもらえたようで、私たちも大満足です(^^

 というわけで、今日はここまで。
 明日は昼から嫁さんが実家の方に帰るので、昼からちょっと会社に行って、家に戻ってからP/ECEの続きをしたいと思います。
 
 それでは、おやすみなさーい。

0938
2004/05/07()
 また紫禁城やってしまった(^^;
 えー、今日も普通に仕事して、そろそろ今やっている新しい仕事の勉強も本格的にしていかないとダメになってきたので、新人のKくんも巻き込んで、勉強会を開くことにしました。

 こういう勉強はだらだらやってたんじゃ絶対間に合わないので、色々期限やペナルティを設けたりして、楽しく厳しく勉強していくプランを立てました(^^;
 時間的に結構厳しくなってきているのですが、これくらいの方が頑張れると思うので、ちょっと楽しくなってきました。勉強する時は楽しくしていかないとね。

 で、またちょっと残業して家に帰り、ちょっと紫禁城をやってからP/ECEの続きをやろうかと思っていたのですが、紫禁城の魅力には勝てず、結局紫禁城を2時間以上やってそのまま寝ることにしました(笑)

 明日は昼くらいから嫁さんの友人のパソコン選びに付き合う予定です。
 というわけで、今日はここまで。

 それでは、おやすみなさーい。

0937
2004/05/06()
 紫禁城にハマリ始めてきました(^^;
 えー、今日は、普通に仕事して、いったん夕飯食べに家に帰り、その時に大阪で買ってきたファミコンをまた遊んだのですが、その中の紫禁城というゲームにハマリ始めてます(^^;

 紫禁城はブロック移動型のパズルゲームで、シンプルなルールなんですけど、それがまた良く出来ていて、面白いんですよ。

 で、ついついハマってしまい、ちょっと休憩しすぎましたが、また会社に戻って仕事の続き。
 そして、キリのいいところまで進めていったら結構遅くなってしまったので、家に帰ったらもう何もせずに寝ました。

 ほんとはP/ECEのMMC対応カーネルのヒープ取得の部分をやろうと思ってたんですけどね(^^;

 というわけで、今日はここまで。

 それでは、おやすみなさーい。

0936
2004/05/05()
 帰ってきました
 今日は、昨日とは打って変わっての上天気で、9時半頃にホテルを出て、また歩いて今度は通天閣から難波の方まで色々とまたファミコンを探したりしながら難波を目指し、途中お気に入りの和歌山ラーメンの店でお昼を取り、難波駅のところのコインロッカーに荷物を預けて今度は道頓堀→アメリカ村へ。

 アメリカ村では、昔に行ったお店がことごとく閉店か移転してて、特に楽しめるところも無かったので、また日本橋の方に電車で戻って再びファミコン探し(^^;

 で、歩きつかれたので1時間早く難波に戻り、電車の時間を待って、名古屋に帰りました。

 家に帰ってからは、早速買って来たファミコンの一部を遊び、今日はこの日記を書いておしまい。

 明日からはまた普通に仕事ですね(^^;
 週末は嫁さんの友人のパソコンの部品選びを手伝う予定です。

 というわけで、今日はここまで。

 それでは、おやすみなさーい。

0935
2004/05/04()
 子猫を堪能してみました(^^
 えー、今日から雨の降る中、嫁さんと2人で大阪の方へ1泊2日の旅行に出かけました。

 今回の旅行の目的は、まぁ恒例のファミコン探しと、ジャンク屋またはパーツ屋めぐりと、ネットで嫁さんが見つけた、猫と遊べる居酒屋に行くことです(^^;

 で、ちょっと早めに名古屋を出まして、2時間程で大阪に着いて、まずはなんなんタウンの地下で美味しんぼ(77巻)でも紹介されている元祖たこ焼の会津屋で、ちょっとたこ焼を食べて、そのまま歩いて日本橋のでんでんタウンへ。

 でんでんタウンへは何度か来たことがあるので、昔の記憶を思い出しつつ&持ってきた地図を見て電子部品を売っている共立系のお店を探して回りました。
 
 今日の天気は雨が降ったりやんだりで、不安定な1日でしたが、目的のファミコンも色々買えたし、デジットマルツパーツ館にも行けたので、非常に満足な買い物ができました(^^
 やっぱり大阪の日本橋は大須よりも品揃えが豊富で良いですね。品数やお店的には秋葉原の方が多いのかもしれませんが、大阪の方が整理されてて買い物がしやすいと思います。お店の中も比較的広いしね(^^

 というわけで、日中はいっぱい歩いて買い物をし、その足で通天閣を通り越して天王寺動物園の近くにあるビジネスホテルへ。

 今日泊まるホテルは、ツインの部屋ですが、トイレも風呂も共同になっているというちょっと不便なところですが、お値段が一人2000円と超格安なので良しとしました。別に部屋は汚くないし、フローリングでなんか友達の部屋に泊まりに来たみたいでちょっと新鮮。しかもベッドの布団は、他のホテルみたいな薄いシーツみたいなのではなくて、ちゃんとした掛け布団だったのがよかったです(^^

 で、いったんホテルに荷物を置いてから、十三(じゅうそう)という梅田から阪神電車で2駅程の駅の、西口改札を出て、10m程歩き、右に見える細い居酒屋や焼肉屋がいくつも並ぶ通りにある、「えんむすび」という居酒屋に行きました。

 この居酒屋に行った目的はなんといっても「猫」。

 この居酒屋にはいーっぱい猫が居て、しかも自由に触ったり抱っこしたり遊んだり出来るんですよ(^^ しかも最近生まれたばっかりの子猫も居て、猫好きにはたまらーん!! (*’ー’)=3 っていうお店なんです。

 今日は美味しい料理を食べながら、2匹の子猫ちゃんを抱っこさせてもらって、しかも名古屋から来て、今日が嫁さんの誕生日だって言ったら、お店の人も大喜びで、ハモとタケノコをサービスしてくれました(^^

 で、2時間程その居酒屋で楽しんだ後、お風呂の時間が終ってしまうので、ホテルに戻って風呂に入り、テレビを見たりしてのんびり。

 明日は道頓堀やアメリカ村の方に行く予定を立てて今日は就寝。


 と、旅行の話はこれくらいにしておいて、今日の行きの電車の中で考えていたP/ECEのMMC改造カーネルについて。

 昨日の段階で、無念にも惨敗を喫してしまったMMC用の改造カーネルですが、電車の中でよーく考えてみると、カーネルの中にまだ使えるメモリ空間があったことを思い出しました。
 それは、256KBのSRAMの後半、システム用に予約されている0x138000からの領域にある…… そう、ヒープ領域です。

 電車の中で色々悩んでいる最中に、そういやカーネルの他のルーチンはどうやってワークエリアを確保しているんだろう? という疑問を抱き、昨日まで見てたカーネルのソースを思い出してみると、pexをSRAMに展開するpceZlibExpandを呼び出すpceFileLoadという関数の中でバッファをヒープ関数から取得しているところがあったのを思い出しました。

 P/ECEではmalloc関数が使えず、初期のP/ECEのヒープ関数にはバグがあるとのことで、全然ヒープ関連には手を出さずにいましたが、今のVer.のカーネルではヒープ関数のバグも改善されていたと思ったし、せっかくあるヒープ領域を利用しない手は無いですよね(^^

 でも、最初からMMCライブラリ用にヒープ領域を確保するとユーザアプリで使うヒープ領域が少なくなってしまうので、ライブラリ用のヒープ領域確保はMMCライブラリの初期化APIで確保することにして、もしMMCライブラリの初期化で十分なヒープ領域が確保できなかった場合は、MMCライブラリの関数が失敗するという仕様で考えていこうと思います。

 まだ、私は1回もP/ECEでヒープ関連の関数を使ったことがないので、想像でしか話をしていませんが、ライブラリで使用するワークを最小限にしてヒープ領域を使う様にしたら、上手くいけばMMC上のpexファイルが実行できる日もそう遠くはないはず(^^ なんだか楽しみになってきました。

 というところで、今日はおしまい。

 それでは、おやすみなさーい。

0934
2004/05/03()
 MMC用改造カーネル。無念、惨敗(j−j
 はい、今日は午後からまたP/ECEの改造カーネルの続きをやってまして、昨日正常にコンパイルできなかったのは、MMC用のライブラリで取っているワークエリアが、P/ECEの内蔵RAM8KBの領域に入らないため、エラーでコンパイルが途中で中断されていたからでした。
 っていうか、MMCライブラリで使用しているグローバルのワークエリアはpceFileReadSctの互換用に取っている4096バイトとMMC内のディレクトリエントリを1セクタ(512バイト)分格納するところと、MMC上のファイルオープン時に作成するFATチェインテーブル(最大5MBのファイルまで扱える、2×5120バイトの領域)で、合計約14.5KB。

 入るわけねーよ!\(`Д´)/ >自分

 ちなみに出てきたエラーは"Address Mapping Conflict"っていうもので、アドレスMAPが衝突または矛盾しているってことで、まぁグローバル変数が置かれるRAM領域が8KBしかないのに、14.5KBなんて無理ってもんですよねぇ(^^; 今回も512バイトワークに取っただけでエラーになりました。そんなに切迫してるのね。

 ちなみに、カーネル側ではなくて、pex側で取るワークエリアは256KBあるSRAM上に配置されるので14.5KBでも問題なく使用できます。

 で、カーネル側にMMC制御ルーチンを置くのを諦めて、MMC上のpexファイルをSRAMに展開する部分はpex側で用意して、カーネル内のグローバル変数にアクセスできる新しいAPIを作ってSRAM展開を試してみました。

 が、作っている途中で、SRAMに展開するルーチンがSRAM上にあって、それでSRAMにデータを展開すると自分自身を展開したデータで上書きしてしまうことになるので、上手く動かないんじゃ…… と間違いに気付いてしまいましたが、モノは試しとやってみたところ、やっぱり上手く動きませんでした(j−j

 またまたちなみに、カーネルのSRAM展開ルーチンはフラッシュメモリ上に置かれているので、SRAMの内容に関係なく実行できます。やっぱりそういう風にしないと無理だよねぇ(--;

 というわけで、カーネル側でもダメ、pex側でもダメという結果になり、今回のカーネルを改造してMMC上のpexファイルを実行するというネタは無念にも惨敗に終りました(泣


 でも、せっかく7800円も出して買った128MBのMMCが非常にもったいない(デジカメとかには使えるけど、うちのデジカメはスマートメディアとコンパクトフラッシュ(j−j)ので、もう少しあがいてみたいと思います。

 次に調べるべきところは、カーネル側のMMC用ワークエリアを機能限定して必要最小限に抑えて(512バイト以下にできるだろうか(^^;)できるかどうかと、P/ECE内でカーネルから利用できるRAMエリアは無いものか、ということになりますね。難しいなぁ。

 最悪、選択したMMC上のpexファイルをいったんP/ECEのフラッシュメモリにコピーしてから実行するというやり方も考えられますが、そうすると、毎回フラッシュメモリへの書き込みが発生するというのと、すでにP/ECE側のフラッシュメモリにファイルがある場合、大きいpexはコピーできないということになります。これではあまり嬉しくないですよねぇ(--;

 というわけで、今日はここまで。
 あ、そうそう。今日は夕方から仲間内のお誕生日会で、タイ料理屋に行って来ました。ほとんどの料理がピリ辛でしたが、タイ米のカレーは美味しかったです(^^; あと、今日はうちの嫁さんがお誕生日の人の一員だったので、みんなから色々プレゼントを頂きました。ありがとうございます(^^

 明日からは嫁さんと1泊2日で大阪ぶらり2人旅に出てきます。主な目的はファミコン探しとジャンク屋探しと、たこ焼(^^; あと、猫と遊べる居酒屋。

 ヅラchuさんに私信:
 >P/ECEを見捨てた訳ではありませんよ?(^^;
 普段なかなか更新しない&P/ECEネタの進捗が遅い私なので、すぐに気付いて頂けないのは当然の報いなのですが、ちょっと見捨てられたかと思いました。ああ、良かった。まだ見て頂けていたのですね(^^;

 それでは、おやすみなさーい。