misc/include/rtc.equ- Source code ソースコード - XEiJ - STUDIO KAMADA
misc/include/rtc.equ

    	.nlist
      .ifndef __rtc_equ__
    __rtc_equ__	equ	1

    ;----------------------------------------------------------------
    ;
    ;	RP5C15 RTC
    ;
    ;----------------------------------------------------------------

    ;----------------------------------------------------------------
    ;レジスタバンク0
    ;----------------------------------------------------------------

    ;秒カウンタ
    ;	00～59 (BCD)
    RTC_0_ONE_SECOND	equ	$00E8A001	;bit3-0  1秒カウンタ
    RTC_0_TEN_SECONDS	equ	$00E8A003	;bit2-0  10秒カウンタ

    ;分カウンタ
    ;	00～59 (BCD)
    RTC_0_ONE_MINUTE	equ	$00E8A005	;bit3-0  1分カウンタ
    RTC_0_TEN_MINUTES	equ	$00E8A007	;bit2-0  10分カウンタ

    ;時カウンタ
    ;	00～31 (BCD)
    ;	           0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
    ;	12時間計  00 01 02 03 04 05 06 07 08 09 10 11 20 21 22 23 24 25 26 27 28 29 30 31 (BCD)
    ;	24時間計  00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 (BCD)
    RTC_0_ONE_HOUR		equ	$00E8A009	;bit3-0  1時カウンタ
    RTC_0_TEN_HOURS		equ	$00E8A00B	;bit1    12時間計のとき12時カウンタ(0=AM,1=PM)
    						;        24時間計のとき20時カウンタ
    						;bit0    10時カウンタ

    ;曜日カウンタ
    ;	0～6
    ;	7日でオーバーフローする日カウンタ
    ;	日カウンタと同時に初期化する必要があり、日カウンタと同時にカウントアップする
    ;	0～6のどれが日曜日なのかは初期化したときに決まる
    ;	X68000では0=日曜日で初期化されるが、RTC側で0=日曜日と決まっているわけではない
    RTC_0_DAY_OF_WEEK	equ	$00E8A00D	;bit2-0  曜日カウンタ

    ;日カウンタ
    ;	01～31 (BCD)。01=1日
    ;	年カウンタが4の倍数になっているかどうかとは関係なく、閏年カウンタが0のときに2月を29日までカウントする
    ;	閏年カウンタ  月カウンタ  01 02 03 04 05 06 07 08 09 10 11 12
    ;	      0                   31 29 31 30 31 30 31 31 30 31 30 31
    ;	      1       日カウンタ  31 28 31 30 31 30 31 31 30 31 30 31
    ;	      2         の上限    31 28 31 30 31 30 31 31 30 31 30 31
    ;	      3                   31 28 31 30 31 30 31 31 30 31 30 31
    RTC_0_ONE_DAY		equ	$00E8A00F	;bit3-0  1日カウンタ
    RTC_0_TEN_DAYS		equ	$00E8A011	;bit1-0  10日カウンタ

    ;月カウンタ
    ;	01～12 (BCD)。01=1月
    RTC_0_ONE_MONTH		equ	$00E8A013	;bit3-0  1月カウンタ
    RTC_0_TEN_MONTHS	equ	$00E8A015	;bit0    10月カウンタ

    ;年カウンタ
    ;	00～99 (BCD)
    ;	ただの12ヶ月カウンタ
    ;	閏年カウンタと同時に初期化する必要があり、閏年カウンタと同時にカウントアップする
    ;	00が西暦何年なのかは初期化したときに決まる
    ;	X68000では00=1980年で初期化されるが、RTC側で00=1980年と決まっているわけではない
    RTC_0_ONE_YEAR		equ	$00E8A017	;bit3-0  1年カウンタ
    RTC_0_TEN_YEARS		equ	$00E8A019	;bit3-0  10年カウンタ

    ;----------------------------------------------------------------
    ;レジスタバンク1
    ;----------------------------------------------------------------

    ;CLKOUTセレクタ
    ;	0～7。0=点灯,1=16384Hz,2=1024Hz,3=128Hz,4=16Hz,5=1Hz,6=1/64Hz,7=消灯
    ;	X68000ではRP5C15のCLKOUT信号がTIMER-LEDに接続されており、このレジスタはTIMER-LEDの状態を制御するために使われている
    ;	IOCS _ALARMMODやIOCS _ALARMSETでアラームを許可したとき、0が書き込まれてTIMER-LEDが点灯する
    ;	IOCS _ALARMMODでアラームを禁止したとき、7が書き込まれてTIMER-LEDが消灯する
    ;	アラームで起動したとき、5が書き込まれてTIMER-LEDが点滅する
    ;	KRAMD.SYSは転送開始時と転送終了時に7をEORすることでTIMER-LEDをRAMディスクのアクセスランプにしている
    ;	#1000ではCLKOUTがMFPのGPIP5にも接続されることになっていたが、X68000では接続されていない
    RTC_1_CLKOUT		equ	$00E8A001	;bit2-0  CLKOUTセレクタ

    ;アジャスト
    ;	1=秒を29捨30入する
    RTC_1_ADJUST		equ	$00E8A003	;bit0    アジャスト

    ;アラームレジスタ
    ;	1分カウンタ～10日カウンタがアラーム1分レジスタ～アラーム10日レジスタとすべて一致したときアラーム出力が始まる
    ;	アラームリセット後に一度も書き込まれていないアラームレジスタはdon't careで常に一致していると見なされる
    ;	アラームリセットすると全項目がdon't careになりアラーム出力が始まってしまうので、
    ;	通常はアラーム出力をOFFにしてからアラームリセットする
    RTC_1_ONE_MINUTE	equ	$00E8A005	;bit3-0  アラーム1分レジスタ
    RTC_1_TEN_MINUTES	equ	$00E8A007	;bit2-0  アラーム10分レジスタ
    RTC_1_ONE_HOUR		equ	$00E8A009	;bit3-0  アラーム1時レジスタ
    RTC_1_TEN_HOURS		equ	$00E8A00B	;bit2-0  アラーム10時レジスタ
    RTC_1_DAY_OF_WEEK	equ	$00E8A00D	;bit2-0  アラーム曜日レジスタ
    RTC_1_ONE_DAY		equ	$00E8A00F	;bit3-0  アラーム1日レジスタ
    RTC_1_TEN_DAYS		equ	$00E8A011	;bit1-0  アラーム10日レジスタ

    ;12時間計/24時間計セレクタ
    ;	0～1。0=12時間計,1=24時間計
    RTC_1_TWENTY_FOUR	equ	$00E8A015	;bit0    12時間計/24時間計セレクタ

    ;閏年カウンタ
    ;	0～3。0=今年が閏年,1=3年後が閏年,2=2年後が閏年,3=来年が閏年
    ;	4年でオーバーフローする年カウンタ
    ;	年カウンタと同時に初期化する必要があり、年カウンタと同時にカウントアップする
    ;	曜日カウンタと違ってRTC側で0=閏年と決まっている
    ;	年カウンタが4の倍数になっているかどうかとは関係なく、閏年カウンタが0のときに2月を29日までカウントする
    RTC_1_LEAP_YEAR		equ	$00E8A017	;bit1-0  閏年カウンタ

    ;----------------------------------------------------------------
    ;バンク0/1共通
    ;----------------------------------------------------------------

    ;モードレジスタ
    RTC_MODE		equ	$00E8A01B	;bit3    0=秒以後のカウンタ停止,1=計時開始
    						;bit2    0=アラーム出力OFF,1=アラーム出力ON
    						;bit0    0=バンク0,1=バンク1
    RTC_MODE_CLOCK_BIT	equ	     3
    RTC_MODE_CLOCK_MASK	equ	%00001000
    RTC_MODE_ALARM_BIT	equ	      2
    RTC_MODE_ALARM_MASK	equ	%00000100
    RTC_MODE_BANK_BIT	equ	        0
    RTC_MODE_BANK_MASK	equ	%00000001

    ;テストレジスタ(write-only)
    RTC_TEST		equ	$00E8A01D	;bit3    1=1年カウンタに16384Hzを入力する
    						;bit2    1=1日カウンタに16384Hzを入力する
    						;bit1    1=1分カウンタに16384Hzを入力する
    						;bit0    1=1秒カウンタに16384Hzを入力する
    RTC_TEST_YEAR_BIT	equ	     3
    RTC_TEST_YEAR_MASK	equ	%00001000
    RTC_TEST_DAY_BIT	equ	      2
    RTC_TEST_DAY_MASK	equ	%00000100
    RTC_TEST_MINUTE_BIT	equ	       1
    RTC_TEST_MINUTE_MASK	equ	%00000010
    RTC_TEST_SECOND_BIT	equ	        0
    RTC_TEST_SECOND_MASK	equ	%00000001

    ;リセットレジスタ(write-only)
    RTC_RESET		equ	$00E8A01F	;bit3    0=1Hz ON
    						;bit2    0=16Hz ON
    						;bit1    1=秒以前の分周段リセット
    						;bit0    1=アラームリセット
    RTC_RESET_1HZ_BIT	equ	     3
    RTC_RESET_1HZ_MASK	equ	%00001000
    RTC_RESET_16HZ_BIT	equ	      2
    RTC_RESET_16HZ_MASK	equ	%00000100
    RTC_RESET_CLOCK_BIT	equ	       1
    RTC_RESET_CLOCK_MASK	equ	%00000010
    RTC_RESET_ALARM_BIT	equ	        0
    RTC_RESET_ALARM_MASK	equ	%00000001

      .endif  ;__rtc_equ__
    	.list

STUDIO KAMADA
Copyright © 1999-2026 Makoto Kamada