DB-Z, PV-F1, PI-3000(ZAURUS) BASIC Tips Volume 2 Copyright(c)1994 E.Kako 【1】 はじめに 電子手帳にはICカードのスロットがあり、ここにICカードを差込むことでメモリを 増設したり様々なICカードソフトを使うことができます。数あるカードの中でも特に BASICカードは、自分にニーズに合わせて自由にソフトを作ることができるという大 きな可能性を秘めております。 特にパソコン用にプログラムを開発をしているような腕に覚えのあるユーザー層の 方々の中には、電子手帳本体の機能だけに留まらず、更に自作のソフトで電子手帳を 何倍も活用している方々が少数ですが頑張っておられます。 本文ではそんな方々からの情報をまとめて紹介します。これから開発を始めようと 考えている方や既に開発している方の参考になりましたら幸いです。 【2】ポケコンから電子手帳への機械語の移植 電子手帳DB-Z,PV-F1およびZAURUSのCPUは、シャープのポケットコンピュータPC-E5 00シリーズ(PC-E500/E550/E650/PC-1480U/1490U/U6000)と同じシャープの8ビットCPU 「ESR-L」が使われております。 シャープのポケコンPC-E500シリーズ用にいままでに非常に多くのソフトウェアが 開発されており、これらの資産を電子手帳上でも継承し利用したいというニーズがあ ります。 電子手帳とポケコンではシステムの構成が異なっており、ポケコン用の実行形式を そのまま電子手帳に持ってきても動きません。その原因には以下のようなものがあり ます。 (1)プログラムのアドレスが違う これは、ESR-Lの機械語でリロケータブルなコードが事実上書けないため、プロ グラム作った時点でそのコードをロードすべきアドレスが固定されてしまい、ポケ コンのフリーエリアとは異なるアドレスの電子手帳のフリーエリアにロードできな いからです。 対策として、ソースリストの先頭のほうのORG命令に書かれたアドレスを変更す るだけで済みます。 (2)システムコールのエントリアドレスが違う これは一応は変更しなくても動く場合があるようですが、詳しくは不明です。 BASICカード用にエントリアドレスを直すのが無難なようです。 (3)ハードウェアの構成が違う 特に、画面のサイズが異なることが問題となることが多いです。ポケコンの画面 は240×32ドットと横長の画面です。BASICカード上で使用できる画面は192×145ド ットです。また、ドットの縦横の比もポケコンは1対1.5で電子手帳が1対1と異なり ます。同じプログラムで絵を書いても歪んだり画面からはみ出したりします。 また、キーボードについてもあまり互換性がありませんし、特にZAURUSの場合に は画面下部の極めて面積の狭いソフトウェアキーボードによる入力を強いることに なり、プログラムの実用性を大きく損なうことになります。 これら場合、プログラムを根本的な部分から大幅に変更しなければならないこと が多いです。 具体的な対策の手順について次章以降で説明していきます。 【3】アドレス/メモリマップの違い (1)メモリマップ プログラムをロード/実行するためのメモリの場所の違いについて説明します。 ポケコンおよび電子手帳のメモリマップは、おおざっぱに次のようになってお ります。電子手帳のROMはバンク切り替えとかありますけど、詳しくは不明です。 ポケコン 電子手帳 + PA-9C3 00000 ---------------- 00000 ---------------- | | | | | | | | ---------------- ---------------- | ROM拡張用? | | カードRAM領域| | | | | 40000 ---------------- 40000 ---------------- | | | | | RAMカード領域| | カードROM領域| | | | | | | | | 80000 ---------------- 80000 ---------------- | | | | | 本体RAM領域 | | 本体RAM領域 | | | | | | | | | C0000 ---------------- C0000 ---------------- | | | | | 本体ROM領域 | | 本体ROM領域 | | | | | | | | | FFFFF ---------------- FFFFF ---------------- BASICの部分のメモリマップは次のようになります。 ポケコン(32KB/64KB) 電子手帳 + PA-9C3(32KB) B0000 ---------------- 38000 ---------------- or | | | | B8000 | RAMスロット | | RAMスロット | | "S1:" | | "S1:" | | | | | BFC00 ---------------- 3F600 ---------------- | BASICワーク | | BASICワーク | | 領域 | | 領域 | BFFFF ---------------- 3FFFF ---------------- E0000 ---------------- 40000 ---------------- | | | | | | | | | BASIC ROM領域| | BASIC ROM領域| | | | | | | | | | | | | FFFFF ---------------- 5FFFF ---------------- この中のRAMスロット"S1:"から機械語領域を確保し、そこに機械語プログラムを ロードして実行します。この部分の詳しいメモリマップを示します。 ポケコン(32KB/64KB) 電子手帳 + PA-9C3(32KB) B0000 ---------------- 38000 ---------------- or | | | | B8000 | RAMスロット | | RAMスロット | | "S1:" | | "S1:" | | | | | [BFCDE]---------------- [3FA57]---------------- | スタックや | | スタックや | | ワークエリア | | ワークエリア | [BFD1A]---------------- [3FA92]---------------- | 機械語領域 | | 機械語領域 | | | | | BFBFF ---------------- 3F5FF ---------------- (2)PA-9C3とそれ以外のカードのメモリマップの違い PA-9C3のみ一般に市販されております。それ以外のカードは一般に市販されてお りません。 PA-9C3は一般の人がそれ単体でプログラム作成することを考慮して、操作性を改 善するためにファンクションキーが画面にポップアップし画面上でタッチすること であらかじめ定義した任意の文字列を入力する機能があります。それ以外のカード にはこの機能がありません。このためファンクションキーの内容を記録するための BASICワーク領域がフリーになっています。つまりBASICワーク領域の先頭アドレス は&3FA00となります。 128KB以上の容量のBASICカードでは、128KBを超える部分のRAMが&60000〜&7FFFF の空間にバンクメモリとして実装されています。この部分はプログラム用のメモリ としては使用できず、ラムファイルとしてファイルの記録にのみ用いることができ ます。 (3)機械語領域の確保 ポケコンの場合、 POKE &BFE03,&1A,&FD,&B,xx,yy,zz:CALL &FFFD8 とすると、(xx+yy×256+zz×65536)バイトの機械語領域が確保されます。 電子手帳+BASICカードの場合、 POKE &3FE03,&92,&FA,&3,xx,yy,zz:CALL &5FFE0 とすると、(xx+yy×256+zz×65536)バイトの機械語領域が確保されます。 または、"S1:EXEC.SYS"というファイルに、 OBJ=&zzyyxx と書き込んでリセットすると(xx+yy×256+zz×65536)バイトの機械語領域が確保 されます。 PA-9C3にはPOKEとCALLがありませんので、RESERVED命令を用いて代用して下さい。 EXEC.SYSの設定のほうが優先されます。 (4)プログラムの修正方法 ソースリストの先頭に、「ORG」命令で機械語プログラムの開始アドレスが書かれ ております。これを上記メモリマップを踏まえて書き換えてください。大抵の場合 &80600を引いてやるだけでいいはずです。 【4】システムコールの違い シャープの8ビットCPU「ESR-L」を用いたシステムの特徴は、デバイスドライバ により構成されるIOCSによる入出力制御と、それらのデバイスをファイルとして管 理して制御するFCS(ファイルコントロールシステム)があります。 電子手帳本体のIOCSは、ポケコンのそれとは全くと言っていいほど仕様が異なり ます。しかし、BASICカード自体にポケコンの仕様とほとんどまったく同じ仕様の IOCSが搭載されており、従来のソフトが容易に移行できるように設計されています。 これらのシステムコールを使用する方法は、ポケコンと電子手帳では異なります。 以下のように対応しています。 ポケコン 電子手帳BASICカード ------------------------ ------------- ---------------------- IOCSエントリアドレス &FFFE4 &5FFF0 FCS エントリアドレス &FFFE8 &5FFF4 これは以下のような形の機械語コードで使われています。これを修正する必要が あります。 修正前: CALLF 0FFFE4h ;IOCS CALL (PC-E500) 修正後: CALLF 05FFF0h ;IOCS CALL (電子手帳) 修正前: CALLF 0FFFE8h ;FCS CALL (PC-E500) 修正後: CALLF 05FFF4h ;FCS CALL (電子手帳) 上記の変更により、特にFCSレベルで作成されたソフト(例えば、PC-E500用のISHや LZH解凍ソフトなど)は容易に電子手帳用に移植することができます。 【5】ハードウェアの構成の違い ハードの構成が多少異なっても、基本的なIOCSの使い方は同じまたは類似です。 これについては非常に書くべきことが多く、またまだ佐藤氏の最近のペン関係の解 析情報についてチェックが済んでいませんので、またのこの次の機会に書きたいと 思います。 【6】メモリの散策 (1)BASICカードでマシン語モニタを使う 多分、今までにBASICでプログラムを作ったことのある人は、PEEK文やPRINT文を 組み合せて簡単にメモリを覗くためのソフトを作ることができるでしょう。ただし BASICカードのPEEK文には落し穴がありまして、&80000〜&BFFFFまでの本体RAMのメ モリをPEEKすることができません。そこで、機械語でモニタを作成する必要があり ます。 すでに、Knife DB-Zという小型なモニタがフリーソフトウェアで出ております。 元々は小笠原氏がポケコン用に作成されたもので、佐藤氏によりDB-Zに移植され、 最近ZAURUS対応版も出ているようです。 (2)電子手帳DB-Z本体に内蔵されているモニタを使う DB-Zで、[入]キーと[9]キーを押しながらリセットすると電子手帳本体の自己診 断プログラムを起動することができます。自己診断メニューの中の「ダイアグ」を 選ぶとまたいくつかメニューがでてきます。ここで[▼]キーで次のメニューを出し てやると「MEMORY DUMP」を選択できます。これが機械語モニタです。 起動すると最初にアドレスを聞いてきますので、入力します。これでメモリの内 容を覗くことができます。 また、メモリにデータを書き込むこともできます。[機能]キーを押して[↓]キー を押すとデータ入力になります。 【7】 参考資料 シャープ ハイパー関数プログラムカードPA-9C3取扱説明書 シャープ CE-151D プログラムBASICカード開発マニュアル シャープ PC-E500取扱説明書 工学社 PC-E550*PC-1490U活用研究 工学社 ポケコンジャーナル 1988年1月号〜1994年5月号 その他 出所不明の資料のコピー各種