GCCで68000ボードで正常動作するコードが生成できたので、まあ問題ないと思いますが68040環境でも確認しておきます
ビルド用のスクリプトはほとんど同じで、プロセッサオプションに-m68040を指定し
リンク時のスタートアドレスとハードウェア固有ののドライバを含むライブラリが変わるだけです
RTCのレジスタを読み出し、time.hで定義されるtm構造体にセットするgettime()、
tm構造体を可読文字列にするasctime()、time_t型変数を可読文字列にするctime()は下請けにsprintf系関数を呼ぶようでリンクエラーのため使えません。
ここも手作りで文字列整形してやり、プログラムをビルド。ボード上で問題なく動作しました
中央の冷却ファンの下にMC68040が鎮座しています
RTCから取り出した現時刻をmktime()でtime_t型変数に変換して合わせて表示していますがよくよくみると何か変。
現在のtime_t型のUNIX時刻(1970/1/1 0時からの秒数)は14億秒を超えているはず。
微妙に足りません
怪しいのが自作のgettime関数です。
RTCに2桁分しかない年のレジスタ値を西暦年に拡張するため2000を足して
tm構造体のtm_yearメンバにセットしていましたがこれが間違い。
tm_yearメンバは「1900年からの年数」が正解のようです。補正値は+100にしなければなりません
もっともこの基板内でクローズしている変数なので何だろうと一向にかまわないのですがいちおう修正後は正しいUNIX時刻を表示しています