システムタイマー

システムタイマー値を参照する方法は比較的簡単。
システムタイマーはハードウエアのVDP割り込み処理によって実現されており、
1/60secの間隔でVDPから投げられる割り込み信号を使いカウントする。
割り込み発生直後はBIOS内部の処理が呼ばれ、この内部でシステムタイマーのカウントが行なわれる。

ROMBASICにはシステムタイマーとしてTIME変数がある。
これは16bitの長さを持つアップカウンタで1/60Sec毎にカウントを行なう。

システムタイマーは約18分に一回ゼロクリアするアップカウンタで、数値が65535を超えるとクリアされゼロからカウントする。
このカウンタはBASICの変数と等しいので代入によりカウンタの初期値を決めることができる。

資料には書かれていない(誤記??)が、カウンタの値はシステムワークエリアの
0xFC9Eの2byteが使われているようだ。
このほかに16bitの0xFCA2はダウンカウンタがある。これらはお互いに独立している。

up_counter 0xFC9E
down_counter 0xFCA2

ROMBASICが動作している時は必ずカウンタは動作しているが、
カウンタはDOS起動時にも有効dでシステムタイマーは動作している。

DOSからシステムタイマーを参照するCコードの例を示す。
この例はsdccクロス開発環境のほかに、セルフ開発環境のHI-TECH Cでも動作する。

#include <stdio.h>

void main(void){
	unsigned int * p_timer;

	p_timer=(unsigned int *)0xFC9E;

	printf("system timer - %u \n",(*p_timer));

}

この例は、システムタイマー変数を参照するBASICの以下の命令と同じである。
(DOS上で動作するCのプログラムでシステムタイマー値を変更すればROMBASICのタイマー値も変化する)

10 print time

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2013年01月11日 00:22
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。