Image: 260201 5550エミュ製作 [57]RTCの実装

IBM PC系ではRTC(時計IC)は1984年発売のPC/ATから実装され、1983年発売のPC/XT初期モデルの時点ではRTCが搭載されていなかった。そのため、毎回のDOS起動時に正しい日時を入力する必要があった。

色んな文献を読んだところでは、IBM 5550は初代モデルからRTCを搭載していたらしい。その実装はIPL ROMやDOSのBIOSを調べて分かった。PC/ATとはI/Oポートが違うだけでなく、RTCのレジスターアクセスも微妙に方法が違う。具体的には、PC/ATではI/Oポート70hにOUT命令でアドレスを書き込んでポート71hに対してOUTで書き込み、INで読み込むというシンプルなアクセスだが、IBM 5550では、

  1. ポート360hでCS (Chip Select) ビットを1 (0x40) にし、アドレス(下位4ビット)を書き込む。
  2. ポート361hにデータを書き込む。
  3. ポート360hの書き込みビットを1 (0x20) にするとデータが書き込まれる。
  4. ポート360hのCSビットを0に戻す。

という手続きを取る必要がある。RTCに何のICが使われていたか分かっていないが、レジスター構成は一般的な組み込みシステム向けRTCチップと大差なく、年月日時分秒が10進数で各桁4ビットずつ持っている。年データは加工せずそのままの値で、DOS側では80以上を1980年から1999年、80未満を2000年から2079年に変換している。TC8521など他のRTCチップでは、年データを1980年からの積算値で持っている場合があるので、ここも注意する必要がある。

Index (mask)
0(f) = second x 1 (BCD)
1(7) = second x 10 (BCD)
2(f) = minute x 1 (BCD)
3(7) = minute x 10 (BCD)
4(f) = hour x 1 (BCD)
5(3) = hour x 10 (BCD)
6(7) = weekday?
7(f) = day x 1 (BCD)
8(3) = day x 10 (BCD)
9(f) = month x 1 (BCD)
a(1) = month x 10 (BCD)
b(f) = year x 1 (BCD)
c(f) = year x 10 (BCD)

RTCの実装が終わったら、表示周りを直していくか。全角文字が豆腐になっているのはDOSのディスクにフォントファイルが入っていないためだが、私はフォントファイルが含まれているバージョンのDOSを持っていない。これはフォントカード(漢字ROM)を実装することで解決可能だが、そのROMデータを持っていないので、まずはフォントデータからROMデータを生成するツールから作る必要があるだろう。その構造はPS/55の初代ディスプレイ・アダプターと似ていることは既に分かっている。カラーパレットの解釈は私が期待していたものと違うので、どうしたら辻褄が合うのか、頭を悩ませている。ゴールはすぐそこに見えるようで、課題はまだ多い。


※コメント欄が表示されない場合はdisqusについてJavascriptが有効であることを確認して下さい。コメントはスパム防止フィルターによる承認制のため、投稿してもすぐに反映されない場合があります。

管理人 : Akamaki (akm)

は、PCとVTuberに夢中になっている電気技術者です。

私はレトロコンピューティングの愛好家ですが、そのようなリグはもう収集していません。

私の活動はトップページで見ることができます。読んでくれてありがとう!