Shinobi Library

1998/10/4


リアルタイムクロック(時計)関数

0. 概要

本関数は日付・時刻情報を提供するものです。

DreamcastにはRTC(Real Time Clock)がSH4のものとAICA(Advanced Integrated Custom Audio)のものと2種類ありますが、バッテリーバックアップされているのはAICAの方で、本関数はAICAに付属のRTCを利用しています。
本関数は、G2バス上にあるAICAのRTCから日付・時刻に関する情報を、取得および設定します。
AICAのRTCは32ビットのカウンタで、1秒に1カウントしていきます。そこで、現時刻やファイルのタイムスタンプに関する、日付・時刻を取得する目的で使われます。このカウンタは設定が可能ですが、ゲームプレイヤによる時刻設定以外に「設定」を行う事はアプリケーション開発者は避けるべきです。
作成基準にも依存しますが、アプリケーション開発者は主に日付・時刻の参照のみを利用するのがよいでしょう。


1.データ型

1.1 定数一覧

関数の処理ステータスに関する定数定義
SYD_RTC_ERR_OK正常終了
SYD_RTC_ERR_FATAL異常終了

サーバ関数の振る舞いに関する定数定義
SYD_RTC_STAT_ACTIVERTCにアクセスする
SYD_RTC_STAT_PASSIVERTCにアクセスしない

1.2 データ型一覧

SYS_RTC_DATE構造体
定義
typedef struct {
  Uint16 year;
  Uint8  month;
  Uint8  day;
  Uint8  hour;
  Uint8  minute;
  Uint8  second;
  Uint8  dayofweek;
  Uint8  ageofmoon;
} SYS_RTC_DATE

説明
日付情報を管理する構造体です。

メンバ
year西暦: 1950〜2085
month
day
hour
minute
second
dayofweek週:0(日曜)...6(土曜)
ageofmoon月齢:(0...29,0:新月, 15:満月)
参照
syRtcGetDate()


2. 関数リファレンス

2.1 関数一覧

関数機能
syRtcInit<新規>RTC関数の初期化
syRtcFinish<新規>RTC関数の終了
syRtcExecServer<新規>サーバ関数
syRtcGetDate<新規>現日付時刻の取得
syRtcSetDate<新規>日付時刻の設定
syRtcSetServerMode<新規>サーバ関数の動作の設定
syRtcGetStat<新規>サーバ関数の状態の取得
syRtcCompareDate<新規>日付時刻の比較
syRtcDateToCount<新規>日付時刻からカウント数への変換
syRtcCountToDate<新規>カウント数から日付時刻への変換

2.2 関数API

syRtcInit

[関数]
Sint32 syRtcInit( void )
[入力]
なし
[出力]
なし
[戻値]
SYD_RTC_ERR_***
[機能]
ワークエリアの確保及びRTC関数の初期化
[備考]
sbInitSystem関数内で呼ばれています。

syRtcFinish

[関数]
void syRtcFinish( void )
[入力]
なし
[出力]
なし
[戻値]
なし
[機能]
ワークエリアの開放及びRTC関数の終了
[備考]
なし

syRtcExecServer

[関数]
void syRtcExecServer( void )
[入力]
なし
[出力]
なし
[戻値]
なし
[機能]
日付時刻に関する内部情報の更新を行う
[備考]
V-BlankIn時に自動的に呼ばれるため、アプリケーションが明示的にこの関数を呼ことはありません。
サーバ関数停止時はsyRtcGetDate()で取得される値は更新されません。
syRtcSetDate()はサーバ関数停止時も実行されますが、その後syRtcGetDate()関数を実行しても、新しい時刻は返ってきません。

syRtcGetDate

[関数]
Sint32 syRtcGetDate( SYS_RTC_DATE *date )
[入力]
なし
[出力]
date
現在の日付時刻
[戻値]
サーバ関数の状態(SYD_RTC_STAT_***)
[機能]
日付時刻を取得します。
[用例]
  void main( void )
  {
    SYS_RTC_DATE date, startdate;
    char *dayofweek[] = {
      "SUNDAY",
      "MONDAY",
      "TUESDAY",
      "WEDNESDAY",
      "THURSDAY",
      "FRIDAY",
      "SATURDAY"
    };

  while( 1 ){
    syRtcGetDate( &date );
    printf( "yyyy/mm/dd hh:mm:ss = %4d/%2d/%2d %2d:%2d:%2d\n",
      date.year, date.month, date.day,
      date.hour, date.minute, date.second );
    printf( "Today is %s\n", dayofweek[day.dayofweek] );
    switch( date.ageofmoon ) {
    case 0:
      printf( "new moon\n" );
      break;
    case 15:
      printf( "full moon\n" );
      break;
    }
  }
[備考]
なし

syRtcSetDate

[関数]
Sint32 syRtcSetDate( const SYS_RTC_DATE *date )
[入力]
date
設定する日付時刻のポインタ
[出力]
なし
[戻値]
Error code(SYD_RTC_ERR_***)
[機能]
日付時刻を設定します。
[備考]
入力の構造体のdayofweekメンバとageofmoonメンバは参照されません。
サーバ関数停止時もAICA内レジスタを更新します。

syRtcSetServerMode

[関数]
void syRtcSetServerMode( const Sint32 mode )
[入力]
mode
サーバ関数の動作(SYD_RTC_STAT_***)
[出力]
なし
[戻値]
なし
[機能]
サーバ関数の活動状態を設定します。
[備考]
初期状態ではRTCサーバ関数は動作中(SYD_RTC_STAT_ACTIVE)になっています。

syRtcGetStat

[関数]
Sint32 syRtcGetStat( void )
[入力]
なし
[出力]
なし
[戻値]
サーバ関数の状態(SYD_RTC_STAT_***)
[機能]
サーバ関数の活動状態(SYD_RTC_STAT_***)を取得します。
[備考]
初期状態ではRTCサーバ関数は動作中(SYD_RTC_STAT_ACTIVE)になっています。

syRtcCompareDate

[関数]
Sint32 syRtcCompareDate( const SYS_RTC_DATE *date1, const SYS_RTC_DATE *date2 )
[入力]
date1
比較する日付時刻1のポインタ
date2
比較する日付時刻2のポインタ
[出力]
なし
[戻値]
-1
date1の方が小さい
0
等しい
+1
date1の方が大きい
[機能]
二つの日付時刻を比較し大小を判定します。大きい方が新しい。
[備考]
なし

syRtcDateToCount

[関数]
void syRtcDateToCount( const SYS_RTC_DATE *date, Uint32 *count )
[入力]
date
変換しようとする日付時刻のポインタ
[出力]
count
変換されたカウント値
[戻値]
なし
[機能]
日付時刻からカウントへの変換をします。カウントはUint32で、1カウントは1秒に相当します
[備考]
入力の構造体のdayofweekメンバとageofmoonメンバは参照されません。

syRtcCountToDate

[関数]
void syRtcSetDate( const Uint32 count, SYS_RTC_DATE *date )
[入力]
count
変換しようとするカウント
[出力]
date
変換された日付時刻のポインタ
[戻値]
なし
[機能]
1カウントを1秒としてカウントから日付時刻への変換を行います。
[備考]
なし


オーバービューに戻る

TOPに戻る
Copyright 1998 SEGA Enterprises, LTD.