FF04 - DIV - 分周レジスタ (読み込み/書き込み可能)
何らかの値がこのレジスタへ書き込まれた時、 00h にリセットされます。
FF05 - TIMA - タイマーカウンタ (読み込み/書き込み可能)
このレジスタの値は、 TAC レジスタ (FF07) で設定されたクロック周波数でインクリメントされます。
値がオーバーフローした時 (FFh を超えた時)、 TMA レジスタ (FF06) で指定した値にリセットされ、
割り込み要求が出されます。
FF06 - TMA - タイマーモジュロ (読み込み/書き込み可能)
TIMA レジスタがオーバーフローした時、この値がセットされます。
FF07 - TAC - タイマー制御 (読み込み/書き込み可能)
Bits 7-3 - 未使用
Bit 2 - タイマー停止状態 (0 = 停止, 1 = 開始)
Bits 1-0 - 入力クロック選択
00: 4,096 Hz (~4,194 Hz SGB) 1,024 分周
01: 262,144 Hz (~268,400 Hz SGB) 16 分周
10: 65,536 Hz (~67,110 Hz SGB) 64 分周
11: 16,384 Hz (~16,780 Hz SGB) 256 分周
TAC は、タイマ機能を制御するレジスタです。
ビット 2 が 1 にセットされているとき、Bit 1-0 で選択した入力クロックがカウントされ、 TIMA レジスタが増加します。
入力クロックは、システムクロックが分周されたものを 4 つの中から選択できます。
タイマ割り込み間隔の例
1 秒間に 4,096 回の間隔で割り込みを発生させたいとき:
4,096 Hz = 4.096 KHz / 1
LD A, -1 ;入力クロックを 1 分周
LD ($FF06), A
LD A, 4 ;入力クロックに 4.096 KHz を選択
LD ($FF07), A
1 秒間に 65,536 回の間隔で割り込みを発生させたいとき:
65,536 Hz = 262.144 KHz / 4
LD A, -4 ;入力クロックを 4 分周
LD ($FF06), A
LD A, 5 ;入力クロックに 262.144 KHz を選択
LD ($FF07), A
または
65,536 Hz = 65.536 KHz / 1
LD A, -1 ;入力クロックを 1 分周
LD ($FF06), A
LD A, 6 ;入力クロックに 65.536 KHz を選択
LD ($FF07), A
INT 50 - タイマー割り込み
タイマーがオーバーフローするたびに (TIMA が FFh を超えるたびに)、
IF レジスタ (FF0F) のビット 2 がセットされ、割り込み要求が出されます。
割り込みが有効になっている時、
CPU は 0050 の割り込みベクタを呼び出します。
注意
上で説明したタイマーはゲームボーイの内蔵タイマーです。
MBC3 のバッテリで動く、リアルタイムクロックのことではありません。
メモリバンクコントローラ のところで詳しく書きます。
最終更新:2017年08月28日 14:53