2005/08/01 更新
SETRTC Ver.1.02 Copyright (C) 2005 K.Takata 1.概要 PC-98 のカレンダ時計(AT 互換機風にいえば RTC)がリセットされてい ないかをチェックし、リセット時に日時をセットするための IPLware (*1) アプリケーションです。 バックアップ電池が切れたり、あるいは本体を分解した際にバックアップ 電池を外たことなどが原因で、カレンダ時計がリセットされてしまうと、 PC-98 の Windows 2000 は起動途中で止まってしまうという問題が発生しま す。こうなった場合、わざわざ DOS を起動して、date コマンドなどを使っ て日時を設定し直す必要があります。また、Win2k 以外の OS では、カレン ダ時計が狂っていることに気付かずに作業をしてタイムスタンプの狂ったフ ァイルが大量に生成されてしまうということも起こりえます。SETRTC を使 えば、このようなトラブルを未然に防ぐことができます。 (*1) http://hp.vector.co.jp/authors/VA012947/iplware.html 2.動作環境 ・PC-98 3.インストール・アンインストール インストールするには、iplware.exe と setrtc.com を同じディレクトリ に置いてから、 > iplware setrtc.com と入力してください。 アンインストールするには、 > iplware /r setrtc と入力してください。 詳しくは IPLware のドキュメント(*1)を参照してください。 4.使用方法 4.1. 起動 メモリーカウントが終わって IPLware が起動すると、SETRTC はカレンダ 時計がリセットされていないかをチェックします。もし、カレンダ時計がリ セットされておらず正常に動作している場合は、SETRTC は何もせず、残り の起動処理が行われます。 もし、カレンダ時計がリセットされている場合には、日時をセットするた めの画面が表示されます。 IPLware の起動時に [T] キーを押していると、強制的にカレンダ時計の 設定画面が表示されます。 4.2. 設定画面での操作方法 日時設定画面では、日時が2つ表示されます。上の段は、カレンダ時計の 現在の日時です。下の段は、新しい日時の入力欄です。 カレンダ時計がリセットされている場合には、上の段の現在の日付は 0000-00-00 と表示されます。 日時の入力欄では、数字キーを使って数値を入力することができます。ま た、カーソルキーの [←], [→] で1桁ずつカーソルを移動することができ ます。カーソルキーの [↑], [↓] でカーソルがある入力欄の数値を1ずつ 増減することができます。 [CTRL] または [SHIFT] を押しながら [←], [→] を押すと、1桁ごとで はなく一気に隣の入力欄に移動します。 入力が終了したら [RETURN] を押してください。入力した日時がカレンダ 時計に設定され、設定画面を終了します。ただし、入力した日時が不正な場 合には終了できません。正しい日時を入力し直してください。 [ESC] を押すと、日時を設定せずに設定画面を終了します。(カレンダ時 計がリセットされている場合は、このままでは Win2k は起動できないこと に注意してください。) 年は 1980〜2079 の間で入力する必要があります。 4.3. その他 カレンダ時計のリセットによるトラブルを減らすためには、IPLware とし て使うだけでなく、Win9x の起動ディスクにも setrtc.com を入れておき autoexec.bat で起動するようにしておくのも有効でしょう。 5.技術的事項 カレンダ時計がリセットされた状態で、INT 1Ch - Function 00h を使っ て日付を取得すると年月日の全てが 0 となるようです。ただし、INT 1Ch - Function 00h では年は下2桁でしか管理していませんので、0 となってい る場合にはリセットされて 0 になっているのか、2000年なのかは区別が付 きません。SETRTC では、月または日のいずれかが 0 になっていればカレン ダ時計がリセットされたと判断しています。 また、SETRTC では、年月日から曜日を算出し、それが INT 1Ch - Function 00h の返す曜日と一致していない場合にもカレンダ時計がリセッ トされたと判断しています。 Ver.1.02 からは、月日が普通の値よりも大きいとき(例えば 13月など) もエラーと判断し、設定画面を表示します。 前述のように、PC-98 のカレンダ時計は年を下2桁でしか管理していませ ん。MS-DOS や Win9x では、これを 1980年から 2079年の 100年間に当ては めて扱っているようです。SETRTC も MS-DOS の仕様に合わせて、年を 1980 〜2079 の範囲で扱うようにしてあります。(Win2k でどう扱われているか は未確認) カレンダ時計がリセットされた状態では、MS-DOS や Win9x では日付が 2056-03-29 などのとんでもない値になってしまいますが、前述のように BIOS 上では 00-00-00 として扱われています。00-00-00 という日付がどの ようにして、2056-03-29 などとして扱われるのかは不明です。 6.コンパイル方法 コンパイルには LSI C-86 3.30c 試食版と MASM 3.0 以上が必要です。ま た、// 形式のコメントを使用できるようにするために cppb (*2) が必要で す。コマンドラインから以下のように入力すればコンパイルできるはずです。 > make -f setrtc.mak (*2) http://hp.vector.co.jp/authors/VA037191/Pt/ 7.更新履歴 2005/07/27 Ver.1.00 ・最初の公開バージョン。 2005/07/30 Ver.1.01 ・sprintf() の使用を止めることでサイズを削減。 2005/08/01 Ver.1.02 ・isdigit() の使用を止めることでサイズを削減。 ・カレンダ時計のリセット判定条件を厳しくした。 8.参考文献など ・PC9801 BIOSとCプログラミング 工学図書株式会社 ・UNDOCUMENTED 9801/9821 Vol.1 BIOS・割り込み編 インプレス ・PC98プログラミング http://www2.muroran-it.ac.jp/circle/mpc/old/pc98dos/title.html ・初期設定の天使たち http://www.vector.co.jp/soft/dos/prog/se020304.html LSI C で com ファイルを作成する方法の参考にしました。 9.注意事項、その他 ・このプログラムはフリーソフトウェアです。 ・このプログラムの著作権は作者である私 K.Takata(高田 謙)に帰属しま す。 ・もしこのプログラムを使用することで何らかの問題が発生しても作者は一 切の責任を負いません。各自の責任で使用してください。 ・アーカイブを変更しない限り配布/転載は自由です。 ・ソースファイルの使用は非商用に限り自由です。 作者 : K.Takata(高田 謙) E-mail : kentkt@anet.ne.jp URL : http://webs.to/ken/