まどかの 日記

[2004/01/12〜2004/01/18の日記]
[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の日記]
↑過去3ヶ月くらいの日記はこちら↑

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


0933
2004/05/02()
 案の定、面倒なんですね(^^;
 えー、今日は1日のんびりして、ファミコンやったり、昨日からの発展で、MMC上のpexファイルを実行できるようにすべく、P/ECEカーネルの改造&MMC用API追加をやり始めたのですが、新しいAPIの追加って案の定面倒なんですね。

 新しいAPIを作るには、まず、piece\sysdev\pceknフォルダの中にあるvector.hKSNO_で始まるカーネルサービスのベクタ登録No.を新たに追加し(ユーザー拡張用の番号は224から)、そのNo.を使って、どこかでpceVectorSetKs APIを使ってそのAPIの関数をカーネルサービスとして登録します。
 この登録は、ひとつの関数にまとめて、pcekn.cのリセット時エントリー(BootEntry)内で呼ばれるようにします。

 そして、今度は追加したAPIをリンクできるようにpiece\lib内の*.sファイルを参考にAPIのカーネルサービス呼び出しルーチンを作成。APIのライブラリは、そのままpceapi.libに追加してもいいし、独自に???api.libなんてのを作って、piece\sysdev\pceknpcekn.cmに追加してもリンクできます。

 が、ここまでやってなぜか自分の追加したグローバル関数がpcekn.symにシンボルとして追加されない現象が起こり、正常にコンパイルできません(j−j なにか足らないものがあるようです。

 というわけで、今日のこの情報は未確定のため、あくまで参考程度に止めておくようにして下さい(^^;

 本当は今日中にカーネルの改造を終らせたかったのですが、やっぱりすんなりとは行かないものなのですね。
 というところで、今日はおしまい。

 明日もカーネル改造の続きをやる予定で、夜からは仲間内のお誕生日会です(^^

 というところで、今日はおしまい。
 それでは、おやすみなさーい。

0932
2004/05/01()
 すんなりとは行かないようです(−−;
 えー、今日はお昼から嫁さんの友人が家に遊びに来て、同窓会の時間までおしゃべりするというので、私は別の部屋で一人マンガを読んだり、P/ECEのネタをやってたりしました。

 で、6時頃に嫁さんたちはお出掛け。
 私は用意してもらっていたチャーハンを夕飯に食べて、今日は先日買ったサンハヤトCK-29にジャンパピンをハンダ付けし、MMCの接続基板に付け替えて、SDカードの制御を試みました。

 ですが、結果は失敗。
 一応SDカードもMMCとSPIモードでは互換性があるとのことなので、すんなり読めると思っていたのですが、初期化の方法とかが違うのでしょうか。
 SDカードソケットにMMCを入れた場合は、普通に読めたので、配線は間違っていないと思うのですが、うーん(--; やっぱりデータシート探してきて研究しないといけないかな。うん。

 ということで、とりあえずCK-29を使ってのSDカードの利用は失敗に終ったので、次は、MMC上のpexファイルを実行する方法について調べることにしました。

 まずは、P/ECEのサンプルプログラムとして付いて来た"menu2"というサンプル(piece\appフォルダの中にあります)を元に、MMCに対応したランチャーアプリを作ろうと思い、menu2を改造してMMC上のpexファイルをアイコンで一覧表示するところまで作りました。

 ここまでは、サンプルで使用しているpcaFile系のAPIをMMC用に置き換えるだけなので、ほとんど苦労はないのですが、問題はここから先のpex起動の部分です。

 通常のpexの起動はpceAppExecFileというAPIにファイル名を指定するだけでOKで、このpceAppExecFileの内部では、いったんpceAppReqExitを呼び出してアプリを終了状態(次のアプリを起動要求状態にする。appstat = 4)にし、カーネル内のグローバル変数に起動するアプリのファイル名を保存して戻ります。

 そして、pceAppExecFile内で呼び出したpceAppReqExitによって起動元のアプリが終了し、カーネルはグローバル変数に保存されたファイル名のアプリを起動しに行きます。この時、起動するファイルが無い場合はランチャーアプリ(startup.pex)を自動で起動します。

 この手順の中で、MMC上のpexを実行させるためには、P/ECE内蔵のフラッシュメモリからアプリのファイルを読み込む部分をMMC用に置き換えてSRAM上に展開し、カーネル内でSRAMの先頭から実行させるという手順が必要です。

 で、今日はAPI内でやっているファイル読み込みの部分をMMC用に置き換えて、SRAMに展開するところまでは出来たような感じなのですが、それを実行させるには、カーネル内のグローバル変数をいぢらないと、普通にランチャーアプリが再読み込みされて上手くいきません(j−j

 さらに、カーネルのシンボルファイル(*.sym)からいぢりたいグローバル変数のアドレスを調べて、直接値を書き込もうかと思ったのですが、どうもそのグローバル変数が配置されている場所は内蔵RAM8KBの部分に当たるみたいで、実行時にアクセスしようとするとトラップされてエラー扱いにされてしまいます。

 ちなみに、いぢろうと思っているグローバル変数はappstatとappcntとcurappあたりで、pcekn.symでは以下の様に記述されています。

Symbol File Section Type Address
curapp work.o bss global 000006ac
appcnt work.o bss global 000006b4
appstat work.o bss global 000006d2

 私自身がこういうとこまでいぢることはやったことがないので、見当違いの解釈をしているかもしれませんが、どうもMMC上のファイルを実行させるにはカーネルを改造してMMC用のpex実行APIを増設しないといけないみたいですね(^^;

 できればカーネル改造はやりたくなかったのですが、ついに私もカーネルを改造するところまで来てしまったのですね。
 
 というわけで、MMC上のファイルを実行するにはカーネルを改造して新しいAPIを追加するという方向でやることにしました。ちょっとドキドキ(^^;

 明日は特にすることが決まっていないので、のんびり過ごしたいと思います。
 できれば、カーネル改造までやっちゃいたいなぁ(^^

 というところで、今日はおしまい。
 それでは、おやすみなさーい。

0931
2004/04/30()
 プレゼント買ってきました(^^
 はい、今日は午前中から早々と嫁さんとカラオケに行き、2時間歌った後、名古屋駅の方に向かう途中の100円回転寿司で昼食を取り、名古屋駅の周辺を回って今度の誕生日会用のプレゼントを探しました。

 で、その後はまた帰り道の100円ショップと99円ショップによって帰宅。

 家では夕飯食べながらテレビを見たり、マンガを読んだり。のんびりくつろぎました。

 ほんとにのんびりしてたので、もう特にネタはありません(^^;

 一応昨日会社からSDメモリーカードを借りてきたので、この前買ったサンハヤトのCK-29でSDメモリーカード内のデータを読み書きできるのか? とか、MMCorSDカード上のpexを実行できるのか? など、やることはあるので、この連休の空き時間にちょっとやってみようと思います。

 というわけで、今日はここまで。
 明日は嫁さんが同窓会に行くというので、私は一人で遊ぶ予定です(^^; 

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

0930
2004/04/29()
 レイアウト替え疲れました(^^;
 えー、今日は朝から社員みんなで集まって、会社の作業部屋のレイアウト替えと掃除をやりました。

 色々と散らかっている部品や納品したものの保守品を整理したり、いろいろ整理がしやすいように大きな棚を移動させて大掃除並みの掃除をしました。

 朝から夕方までかかってようやく作業は終了し、その後はみんなで飲みに行きました(^^

 今回高卒の新人君の動きが悪かったので、飲みの場でも色々言われてましたが、全体的には楽しく飲めたんじゃないかな。

 で、2時間程飲んで食べて、今日は解散。

 明日から久しぶりのゆっくりできる私のGWが始まります(^^

 早速明日は嫁さんとまたカラオケに行って、またちょっと名古屋駅の方まで遠出して、3日に行われる仲間内の誕生日会用のプレゼントを買いに行きます。

 というわけで、今日はここまで。
 それでは、おやすみなさーい。

0929
2004/04/28()
 フリーソフトがDLされてるって嬉しいですね(^^
 はい、今日はまあ普通に仮称エスパーな仕事のクラス作りの続きをしてました。
 で、仕事の方はちょっとだけ残業してキリの良いところまでやって今日はおしまい。

 と、仕事のことはこれくらいでさらりと置いておいて、今日は(日記には全然書いてませんでしたが)先日Vectorで公開された弊社初のフリーソフトの第1回通算DL記録のメールが届きました。

 今回公開したフリーソフトは、私の母校の専門学校からインターンでうちに来ていた学生への実習課題の一環として、私が前々から作りたかったフリーソフトを私が考えた仕様で作ってもらったもので、今後のことも考えてVectorでの作者登録はうちの会社の名前になっていますが、実際に作ったのはインターン生です。(でも、色々とアドバイスを私が出していたので協作ということになってます)

 そのフリーソフトとは、SlowStarterと言いまして、早い話がスタートアップ管理もできる簡易ランチャーアプリトです。
 通常のランチャーアプリ同様、起動させたいアプリのパスや作業ディレクトリ・コマンドライン引数・起動遅延時間を登録し、ランチャーアプリを実行すると、登録された順番に指定のアプリが起動していくというものなのですが、今回のこのアプリのウリとも言えるのが、その登録アプリの管理方法で、起動するアプリのリストは、その内容別にファイルで管理するため、いわゆるショートカットのグループ化ができるのです。

 そして、そのデータファイルをショートカットの容量でダブルクリックするだけで、自動でそのファイルに登録されたアプリが自動で順番に開いていくというわけです。
 もちろん、登録できるのは実行ファイルだけではなく、フォルダや、個別のファイル単位で登録できるので、お気に入りのURLのショートカットをリストとして登録しておけば、ダブルクリック一発で、巡回先がどーんと開けますし、この登録データファイルのショートカットをスタートアップに登録しておけば、Windows起動時にいつも使っているアプリを順番に遅延設定(前のアプリ起動からの待ち時間を設定できます)付きで起動させることができます。

 さらに、私としてはこれが一番欲しかった使い方なのですが、開発のプロジェクトごとに登録データファイルを分けて作っておけば、そのプロジェクトの開発に必要なフォルダや資料のファイル、VCの開発環境などがダブルクリック一発で自動で用意できるので、私みたいに開発時に色々な資料を参照しながら、またはVCのようなIDE統合環境とコマンドプロンプトを併用して使ったりして、タスクバーにフォルダやファイルがいっぱい並ぶ人にはこのアプリがオススメです。いちいちいっぱいのフォルダやファイルを開かなくて済むようになるので便利ですよ(^^

 実際に、最近では先日のMMC版MP3プレイヤーの開発では、このSlowStarterを使ってダブルクリック一発で開発環境を準備していました。

 と、宣伝はこれくらいにして(^^;
 今日届いた通算DL数の連絡メールでは、公開後約1週間でDL28となっていました。
 まだまだ他のフリーソフトと比べられはしませんが、自分的にはまあまあだと思いました。

 というわけで、今日はここまで。
 明日はお休みなのですが、みんなで会社の部屋のレイアウト替え&掃除をするよていなので出社します。
 そのかわり、30日はお休みです(^^
 
 それでは、おやすみなさーい。

0928
2004/04/27()
 雨はそれ程でも無かったです
 えー、今日は天気予報で大雨の予定だったのですが、終ってみれば全然そうでもなく、まぁ風は強い方でしたが、雨は夜にはほとんどやんで何事も無かったです(^^;

 で、今日は主に、新しい仕事の開発の続き(以後仮称エスパーとでも書きます)をやってました。
 今回の仕事で、ちょっと今までにやったことの無いことをやろうかと思いまして、今回はC++のクラスの継承っていうか、まずは基本となるクラスがあって、それを元に色々な特別な機能を付けた派生クラスを作成し、それを利用するというC++のクラスの特徴となる使い方を初めてまともに使い始めました(^^;

 私の仕事は主に特注仕様のものが多いため、今までのプログラム資産を再利用して、クラスで言う、派生クラスを作るだけで事足りるということは稀だったため(またはC++ではなく、C言語環境だったりした)ため、このクラスを派生させるという設計はほとんど経験がありませんでした。

 一応知識としては理解しているつもりなので、他の人が作ったクラスを利用(MFCとかね)することは、ActiveXを作ったりするときによくやるので、厳密に言うと経験が無いというのは嘘になるのですが、1から自分でクラスを派生させて使うという設計をするのはほとんど無いんですよねぇ。

 で、今回は、自社独自のコントロールをコントロール自身がウインドウを持たずに管理させるというちょっと特殊な設計で作らないといけないので、まぁ、色々とめんどくさいことをして親ウインドウの上で複数のコントロールがあたかもたくさん子ウインドウがあるように振舞うというような、ちょっと説明しづらいことではありますが、まぁ、そんなものを作ってます(^^;

 それにしても、基本のクラスを考えるのって言うのは結構難しいものですね。
 私は、基本クラスから作っていくのに、どのような機能を基本として持たせておけばいいのかが分からなかったので、まずは普通に派生クラスでつける機能を持ったクラスを作成し、その中から他の派生クラスと共通化できそうな部分だけを抜き出して、後から基本クラスを作りました(^^;

 今までまともにこういうクラスの設計をしたことがなかったので今更なんですけど、基本クラスにある機能を追加すると派生クラスでも普通にそれが使えちゃうっていうのは便利ですね。

 で、今まで使ってきたC++BuilderのVCLやVC++のMFCなどのクラス設計を思い出しながら、ここはこういう風にできるように設計した方がいいよねとか、色々優秀なクラスの設計をパクり真似しながら作っていくのは楽しいです(^^

 作っていて感じたのですが、私ってこういうクラスの設計やライブラリの設計をするのって結構好きかも(^^;
 普通にアプリケーションを作り上げるのも楽しいですが、こういうライブラリを使い易いように作って、色んな人に使っていただくって言うのも良いですよね。

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

 明日も主に仮称エスパーの仕事をやる予定です。
 
 それでは、おやすみなさーい。

2004/04/26()
 MMCを使ったMP3プレイヤーできましたぁー \(^o^)/
 えー、今日は昨日の予告どおり、ここ半年くらいずーっと秘密裏(?)にやってきたP/ECE拡張端子ネタの成果を公開します(^^

 開発期間中は常にできるかどうかも微妙な感じで、まずはデバッグ用にと始めたP/ECEとPCとのUSB通信サンプルから始まって、とりあえずのMMC内テキストファイルビューワを作るまで、ずーっと不安な気持ちでいっぱいでした。

 でも、ちゃんと完成できた今だから言えることですが、なんでもチャレンジしてみるものですねぇ(^^;
 テキストファイルビューワを作ってから、すぐにMP3プレイヤーの方に移行したのですが、始めは全然処理が間に合わなくて音が鳴らない状態がかなり続いて、ちょっとテキストビューワ止まりで妥協しようかとも考えましたが、どうしても目標のMP3プレイヤーを完成させたい想いがあり、諦めずに工夫を重ねた結果、ようやく完成に辿り着くことができました。

 ちなみに、今回のMP3プレイヤーは先日nsawaさんが公開されたMP3プレイヤーのソースをnsawaさんに許可を頂いて、改変&再配布します。
 ソースの改変と再配布をご快諾して頂いたnsawaさんには大変感謝しております。ありがとうございます。
 nsawaさんのソースが無ければこのMMC版MP3プレイヤーは完成しませんでしたm(-_-)m

 今回の作品は非2MB改造P/ECEでの大容量メモリを利用してのMP3プレイヤーの実現が私的なメインの目標だったのですが、P/ECEにとっては、MMCという大容量の外部メモリを簡単に使えるようになったということが一番大きいですね。

 一応MMC制御のインターフェースはP/ECEのファイル操作関数と同じ操作で扱えるようにしてありますので、ファイルの削除や新規作成以外(読み込みと検索)はpceFileOpen等のpceの部分をmmcに置き換えるだけで一応使えるようにはなっています。

 MMCはFAT16でフォーマットされており、FAT16の形式で書き込んだりするのはちょっと面倒なので、今回のMMC制御では書き込みは行いません。MMCへのファイルの書き込みは市販のカードライター(1000円〜3000円くらい)で行うことにしました。

 今はMMC上のpexファイルを実行することはできませんが、そのうちそれもできるようなメニュープログラムを作って、いくらでもP/ECEアプリが持ち歩けるようにもしたいです(^^

 オフィシャルの開発者用掲示板でMMCの話題がちょっとあり、nsawaさんのMP3プレイヤーが発表されてから早半年、ようやくこの作品も完成を迎えることができました。
 実のところ、曲によってはまだ処理が追いつかない場合もありますが、それはまぁ置いておいて、今回の達成感は大きいです(^^
 当時はMMCのことがよく分からず話題に参加できませんでしたが、掲示板でMMCの利用を提案された方々には遅ればせながらお礼申し上げます。

 さて、それではまずMMCをつないだP/ECEの姿を見ていただきましょう。
 (クリックすると拡大します)

 
 MMCとP/ECEを接続したMP3プレイヤーの様子です。
 白いソケットにささっているのはSanDiskの64MB。

 
 MMCとそのソケット付き変換基板。
 この基板はサンハヤトCK-16です。だいたい850円くらい。
 
 
 接続に使用する基板のはんだ付けはこれくらい。
 たった7ピンの端子をP/ECEにつなげるだけ。簡単でしょ(^^
 P/ECE側の拡張端子のピン数が9本のため、固定用にピンは9本付いていますが、実際に使用しているのは6本です。
 
 
 MMCが3枚になったので、500円くらいのアルミケースに入れてみました。
 外観はちょっとオシャレですが、中身は所詮500円でした(--;


 今回のMP3プレイヤーを作るに当たって、SanDiskとIODATAの2種類のMMCカードを買って試してみたのですが、動作が確認できたのはSanDiskの64MBのMMCのみで、元にしたnsawaさんのMP3プレイヤーが48MHzモードで動作させているため、MMCとの通信速度が速すぎてMMC側の処理が追いつかない様です。

 2004/05/23 追記:IODATAの128MBに対応しました。
             正しく動かなかったのは、私のMMC制御のプログラム
             にバグがありました。
             IODATAの方、処理が追いつかないなどど勝手に想像
             してしまい、申し訳ございませんでしたm(-_-)m


 かといって、MMCとの通信を遅くすると、今度はMP3プレイヤーが動かないので、ギリギリ処理が間に合っているSanDiskの64MBのみを動作対象としました。
 ただし、SanDiskの64MBも新品のままだと、フォーマットが微妙に違うのか、上手く再生できない様なので一度Windows側でフォーマットしてやる必要があるようです。(Windows2000で確認。XPでは未確認。)

 けど、MP3プレイヤーでは使えなかったIODATAのMMC(128MB)も通常の24MHzモードでは正しくファイルを読み込むことが出来るので、テキストビューワや通常のゲーム等を実行させるのには十分対応できます。
 けど、128MBもP/ECEのアプリを入れようと思ったら結構大変かも(^^;

 ちなみに、SanDiskのMMCはだいたい5000円くらいで、ソフマップ等で買うことが出来ます
 私は一応2枚購入し、それぞれ東京の秋葉原にあるLAOXコンピュータ館のデジカメ売り場と、名古屋駅のところにあるソフマップで買いました。

 今回のMMC版MP3プレイヤーを試せる方はあんまりいらっしゃらないと思いますが、一応音質的には先に発表されたnsawaさんのMP3プレイヤーとほぼ変わらない音質で、処理の遅れから微妙にノイズが乗るくらいです。
 音質にこだわる方で無ければ、イヤホンで聴く限り、普通に聴けます。通常PCで聴くMP3と比べちゃいけませんけど(^^;

 それでは、最後にMMCをP/ECEに接続するための回路図と、MP3プレイヤーとサンプルのテキストビューワ、そしてデバッグ用のUSB通信サンプルが入ったファイルを公開します。

 何度も書いて申し訳ありませんが、これらのファイルのソースコード及び関連情報を元に行う作業は全て自己責任でお願いします。

 というわけで、まずは回路図の紹介。(クリックすると拡大します)
 

 そして、ソースなどが入ったファイルです。
 mmcmp3_2004_0426.zip(997KB)

 2004/05/23 追記:バージョンアップしました。(っていうかバグ修正(^^;)
 mmc_mp3_2004_0519.zip(1.02MB)
 2004/08/29 追記:mmcFileReadSctでのmmcFileReadSctで
              mmcFileReadSct(&pfa, NULL, sct, 0);
              とした場合に、内部の代替バッファに何も読み込まれて
              いなかった不具合を修正。また、mmcFileReadMMCSct
              でも同様に修正。そして、mmcFileReadMMCSctでは代
              替バッファアクセス保証サイズを512バイトに変更。
 mmc_mp3_2004_0829.zip(1.02MB)
 2004/08/30 追記:SDカードと初期化に時間がかかるMMCに対応しました。
              容量の小さいメモリーカードはFAT16で再フォーマットする
              必要があります。詳しくは中の”readme_madoka.txt”を
              読んでください。
              今回の対応に当たって、情報提供してくださったnsawaさん
              には感謝致しますm(-_-)m  
 mmc_mp3_2004_0830.zip(1.02MB)
 2004/09/26 追記:最新版はMMCライブラリサポートページで入手して下さい。

 写真やソースだけではよく分からないと思いますので、一応実行画面も載せておきますね。
 MP3ファイルのファイルサイズがP/ECEのフラッシュメモリに入りきらないことを見て想像してください(^^;

 (クリックすると拡大します)

 ちなみについ最近サンハヤトの方で、SDカード用のソケット付き変換基板(CK-29)が発売され、SDカードはMMCと下位互換性を持っているので、MMCより普及しているSDカードが使えないか、早速昨日変換基板を買ってきて、ちょっともくろみ中(^^; しかし、SDカードを扱う機器の製作には確かライセンスが必要だったかな。うーん。

 さて、次は何しようかな。MMCでのpexファイル起動メニューかな(^^
 というわけで、今日はここまで。
 明日は大雨らしいですね。いやーん(j−j
 
 それでは、おやすみなさーい。