プラットフォームビルダー4.1日本語版のCEPCで遊ぶページ。

PlatformBuilderのインストール

必ずAdmin権限で、NTFSにインストールします。 実際に使うCPUだけ選べばいいです。 CEPCなのでx86とエミュレーションで十分ですが、 MIPSII、ARMV4、SH3も選択しておくとよいです。
MIPSIVは拡張、 FPは浮動小数点演算のハードサポート、 MIPS16はARMV4Tと同じくコード長の短い命令セットです。 MIPSIIでコンパイルしたアプリケーションは どのMIPS系プラットフォームでも動作します。
ARMV4Tはサムコード用、 ARMV4Iはサムコードサポートした通常コードビルドです。 ARMV4でコンパイルしたアプリケーションは どのARM系プラットフォームでも動作します。
SH3でコンパイルしたアプリケーションはリンク時に/align:4096を付けると どのSH系プラットフォームでも動作します。

PBのインストール終わったら cdrom:\eVC\setupallでeVC4.0+SP1+Standard_SDKもインストールします。 eVCのコモンフォルダ名はc:\program files\Windows CE Tools で、 再インストール時に\eVC4が付いていたら削除します。 SDKはCE.NETからはStandard_SDKという共通タイプができたので、 これでコンパイルしたバイナリは、 Standard_SDKをサポートするように作成したプラットフォームならどれでも動きます。

チュートリアル

PB4.1を起動して、まずQFEやアップデートを当てます。 .NET CompactFrameWorkはBetaのままだとビルドエラーになるので 必ずアップデートします。日本語版は英語ページにあります。 あとは、ヘルプ→目次、はじめに→Platform Builderチュートリアル→ Platform BuilderとCEPCを併用する、の通りにします。
CEPCのデバッグイーサドライバは特定のカードしかサポートしません。 おすすめ順にDP83815のカード、RTL8139のカード、そしてISA上のNE2000です。 Autoexec.batのIOとIRQは、PCIカードの場合は両方0でかまいません。

CEPCのデバッグ実行では、フロッピーでDOS起動して、 loadcepc.exeでカーネルローダ(eboot.bin)を読み込み、 デバッグイーサ経由でカーネル(nk.bin)をホストからダウンロードします。 CE起動後はデバッグイーサの上のKITLによりホストと通信しながらかつ、 CEOSからは仮想ミニポートとして共用されることになります。
なお、CEPC上のReleaseディレクトリはホストマシンのリリースディレクトリが 見えているのでファイルの受け渡しはここでも可能です。

※カーネルがロードされるのにデバッガが接続できない場合、 デバイスのリセットをダミーで選ぶ(実行はしない)と接続してくれることがあります。 また、カーネルロード中にIEで他のサイトとか見て回っていると この現象が起きにくいようです。ってうちの環境だけ?
※他で使用されているためダウンロードが開始できない、とか言われた場合は、 たいてい古いcepb.exeです。 Platform builderを終了してもある程度時間がたたないと cepb.exeが死なないようです。 ずっと死なないようならタスクマネージャから殺しましょう。

CEPCのハードウェア

CEPCマシンのBIOS設定はACPIなし、PnP非サポート、 その他のSerialポートなどもAuto割り当てでなく アドレス、割り込みの標準的なものを指定しておくようにします。

デバッグ実行している場合は、
仮想ミニポートドライバ→KITL →eboot.bin中のデバッグイーサドライバ(DP83815/RTL8139/NE2000)
となっているためCEPCからちゃんと直接パケットが出ますが、 このままリリースビルドしてもDP83815やRTL8139のドライバは入っていないので 動きません。カタログから追加しておきます。

ISA接続のPCMCIAコントローラはカタログから追加すれば使えますが、 BIOSでIRQ11をISAにして、D0000-DFFFFを空けておきます。これは固定値で、 修正するにはplatform.bibとかC:\WINCE410\PUBLIC\COMMON\OAK\DRIVERS\PCMCIA\I82365\i82365.regとかです。

ローカルのハードディスクを見たい場合は記憶域デバイスのATAPI、PCMCIAのフラッシュを見たいならATADISKをカタログから追加します。 コアOSのファイルシステムの記憶域マネージャの中のFATもないなら追加します。 FATはFAT32もサポートしているようですが、 下の単体起動時の場合はBLDRのサポートがFAT16なので2GBまでです。 なおLinuxとかがハードディスクに入っていると飛ばしてくれたりするので注意しましょう。

通信ポートはSerial-Aは38400bpsのデバッグ出力。Serial-BがCEからCOM1ポートとして見えます。

ハードディスクからCEPCを単体で起動

MS-DOSをハードディスクに入れて、MBR→ブートセクタ→IO.SYS→MS-DOS→loadcepc.exe→nk.binという形でも 起動できますが、スマートじゃないので直接CEPCを起動するには、 ヘルプのOperating system development→Designing OS Elem→Creating Boot loader→Specialized Boot loaders→x86 BIOS Boot Loaderの通りにします。 ここで作られるフロッピーにはFAT16対応のFDISK、FORMATがあるので これでHDDをフォーマットします。fdisk /mbrも実行しておきます。 mkdisk.bat c:を実行し、そのハードディスクにnk.binを転送すればおしまいです。 MBR→BSECT.IMG→BLDR→nk.binという流れでブートできます。
内蔵ハードディスクだとnk.binの転送が大変なので、 CF-IDEアダプタを使ってコンパクトフラッシュを使うとか、 MS Workgroup Connection等を使うと楽です。

BLDRは標準では640x480の256色固定なので、変更するには、

  1. C:\WINCE410\PUBLIC\COMMON\OAK\CSP\I486\BIOSLOADER\LOADERを c:\myproj\mycepc\LOADERにコピーします。 ここでc:\myproj\mycepcはCEPCのプロジェクトディレクトリです。
  2. 次のバッチファイルc:\myproj\mycepc\LOADER\do.batを作成します。
    set _WINCEROOT=c:\WINCE410
    set _FLATRELEASEDIR=c:\myproj\mycepc\RelDir\LOADER
    set _PROJECTROOT=c:\myproj\mycepc\WINCE410\CEPC
    call c:\wince410\public\common\oak\misc\wince x86 mycepc CEPC
    cd c:\myproj\mycepc\LOADER
    c:\wince410\public\common\oak\bin\i386\build
    
    パス名とかプロジェクト名(mycepc)は適宜読み替えてください。
  3. コマンドプロンプトからdo.batを実行すると c:\myproj\mycepc\RelDir\LOADER\bldr が作成されます。
  4. これを先ほどのフロッピーに入れて、CEPCでmkdisk.batを再実行します。 BLDRはディレクトリエントリの最初のエントリで、かつ連続したブロックに 格納されている必要があるのでmkdiskの再実行が望ましいですが、 占有セクタ数が変わらないのなら ハードディスク自体に直接コピーしても大丈夫でした。
たとえば800x600の6万色に変更するには、 main.cの223行めあたり、
#ifndef NOVIDEO
    pBootArgs->ucVideoMode         = 0xff;
    pBootArgs->pvFlatFrameBuffer   = minfo.dwPhysBasePtr;
    pBootArgs->vesaMode            = 0x114;
    pBootArgs->cxDisplayScreen     = minfo.wXResolution;
    pBootArgs->cyDisplayScreen     = minfo.wYResolution;
    pBootArgs->cxPhysicalScreen    = minfo.wXResolution;
    pBootArgs->cyPhysicalScreen    = minfo.wYResolution;
    pBootArgs->cbScanLineLength    = minfo.wBytesPerScanLine;
    pBootArgs->bppScreen           = minfo.ucBitsPerPixel;
    pBootArgs->RedMaskSize       = minfo.ucRedMaskSize;
    pBootArgs->RedMaskPosition   = minfo.ucRedFieldPosition;
    pBootArgs->GreenMaskSize     = minfo.ucGreenMaskSize;
    pBootArgs->GreenMaskPosition = minfo.ucGreenFieldPosition;
    pBootArgs->BlueMaskSize      = minfo.ucBlueMaskSize;
    pBootArgs->BlueMaskPosition  = minfo.ucBlueFieldPosition;
#endif  // NOVIDEO.
に変更し、startup.asmの400行目あたり、
    ; Check for video mode support
    ;
    mov    eax, 4f01h
    mov    ecx, 114h
    OpPrefix
...
    ; Switch video mode
    ;
    mov    eax, 4f02h
    mov    ebx, 114h
    or     ebx, VESALINEAR
に変更します。114hは800x600x16bitのVESAモードです。 どの値がどんな画面モードかはgoogleで検索するか、 VESATESTを改造してvesaModeも表示するようにして調べてください。

PB4.1J+eVC4.0JSP1

PB4.1JでSDKをエクスポートして、 それをインストールすると、 eVCのプラットフォームに mycepc と mycepc_STANDARDのプラットフォームが出現します。

PB4.1Jでデバッグカーネルを実行し、 eVCでプラットフォームmycepc_STANDARDを選択、 コンパイル、デバッグ実行すると、PB4.1Jで起動中のCEPC上でデバッグ実行可能です。 Platform Managerの設定はKITLトランスポートとCESHを選択します。 SDKの作成時にデフォルトも指定できます。

※eVCでのデバッグ開始時に「既定のデバイスがインストールされていません」とか出る (リモートズームインとかは問題なく接続できる)場合は、 「WCE構成」ツールバー(のデバイス選択ドロップリスト)を 画面上に表示しておいてください。 これ、WCEToolkit+VC5の時代からあるしょーもないバグなんだよなあ…

→DCOMで遊ぶ