文字をこぼすX68000

 インターネット黎明のころ、パソコン通信のBBSへの書き込みした方からその当時どんな雰囲気だったかを聞きます。

com(76/565) 93/08/22 00:07 68デ割り込みとかを
1rep 126B

割り込みを割り込みレベル落とさずにRSで通信すると文字をこぼすこぼす,,,
ああ、かなしや......

1993/8 BBSの書き込み より

 X68000の割り込み優先順位の高い処理の中で割り込みレベルを落とさないままにしていると、RS-232C経由の受信データをこぼしてしまうと悲しんでいる書き込みです。シリアル通信での受信データも割り込み処理で受け取っているからのようですが、そんなに厳しい処理なのでしょうか。

 X68000でのRS-232Cデータ受信は割り込み処理でおこなわれている。割り込みは優先順位の高いものから順に以下の通り。

level7 NMIスイッチ
level6 MFP (Multi Function Peripheral) MC68901
level5 SCC (Serial Communication Controller) Z8530
level4 拡張スロット
level3 DMAC (Direct Memory Access Controller) HD63450
level2 拡張スロット
level1 I/O コントローラ

 RS-232コネクタ経由のシリアルデータ受信は割り込みレベル5に接続されたSCCによって行われている。SCCよりレベルの高い割り込みにはMFPが接続されており、MFPは多くのデバイスから割り込みを受け付けるようになっていて、この中にCRTC V-DISPという画面表示開始・終了をトリガとする割り込みもあり、ゲームなどの用途で割り込み中に少し重めの処理を気にせずに書いてしまうと、その処理中はレベル5以下の割り込みがすべてせき止められてしまう。このため、RS-232Cのデータ受信割り込みも受け付けられずに受信データをこぼしてしまうという書き込み。
 このような事に備えて、MFPで管理されている割り込み処理で長めの処理時間がかかる場合、割り込み処理開始時すみやかにMFPの割り込みに関するレジスタの書き換え→割り込み許可、という処理することにより、レベル5以下の割り込みを受け付けられるようにする。割り込みレベルを下げるのをサボったまま割り込み内で処理してしまうと、書き込みにあるように受信データをこぼす等、色々な悪い影響がある。
 書き込みへのリプライでは、割り込みレベルを下げないままでも文字をこぼさないものなんてあるの?という問いに、I/O用にCPUを別に持っている場合や、大きめのFIFO受信バッファを持っている場合には落とさないだろうとの話も出ている。書き込み時は38400bpsでの受信データをこぼしていたようで、実際にはもうちょっと耐えると思っていたら、割り込みレベル落とさなければこのくらいのボーレートでもこぼす位きびしいと書いている。X68000ではRS-232Cの送受信にSCC Z8530が使用されていて、FIFOバッファもついており、3バイトの受信まではバッファにデータが保持される。38400bpsの調歩同期シリアル通信であれば、スタートビット1ビット、ストップビット1ビット、データ8ビットの場合に最大3840Hzでデータが来ることになり、1データあたり約260uS、3バイトのFIFOで780uSの期間、割り込みが受け付けられなければ受信データを落としてしまう。1msくらい割り込み処理内で割り込みレベルを落とさないまま処理を続けてしまうと、データ受信に支障があることがわかる。
 他の方のリプライより、少し重たい位の割込みで割込みレベル落とさないでRS-232C転送すると9600bpsでも取りこぼしが起きるとの指摘もあり、X68000 XVIの68000 16MHzであれば9600bpsくらいならいけると思うと書かれている。68000 10MHzでは1KHz程度のデータ受信でも割り込み処理に配慮が必要だったことがわかる。

BBS書き込みした方による現在のコメント

 X68000に搭載されているシリアル通信LSIでは、FIFOが3バイトしかないため、レベルの高い割り込み処理で割り込みレベルを変更しないまま重めの処理をしてしまうとダメで、割り込みレベルを変更するといった配慮が必要なようです。
 X68000のゲーム中でシリアル通信が必要なのはデバッグ時に使うくらいで稀のようです。しかし、ゲームにおいて1/60秒に一度のCRTC V-DISP割り込みと、15KHz程度になったりするCRTC H-SYNC割り込み、任意のラスターでトリガがかけられるラスター割り込み等が画面処理上必要になることがあり、CRTC V-DISP割り込みの処理開始時にMFPのレジスタ操作と割り込みレベルを落とす処理が必要になることが多いそうです。
 Windowsのパソコンではシリアル通信用とし16550 UART (Universal Asynchronous Receiver / Transmitter)というLSIが搭載されるようになり、チップ内に16バイトのFIFOが内蔵されているようです。さらに大きなFIFOが内蔵されたLSIもあるようですが、現在はほとんどのパソコンからRS-232Cコネクタはなくなっており、シリアル通信が必要な場合はUSB RS232Cシリアル変換ケーブルなどを用いるようになっていて、シリアルデータ送受信はケーブル内のCPUが良きに計らってくれるようになっています。

用語

・X68000の割り込み
 X68000は多数の割り込みデバイスが接続されており、各チップの割り込みは以下のような接続がされている。

Inside X68000 P.72 割り込み系統図より

・MFP
 Motorola MC68901 Multi Function Peripheral。パラレルインタフェース、シリアルインターフェース、タイマ、割り込みコントローラという機能を持つ多機能のMC68000周辺LSI。画面関係の割り込みや電源関係、FM音源の割り込み、キーボードの送受信までを担っており、ゲーム等では割り込みマスクレジスタの制御などでアクセスすることが多い。

Inside X68000 P.78 MFPの内部ブロック図より

・SCC
 Zilog Z8530 Serial Communication Controller。2チャンネルのシリアル通信ができるLSIで、X68000ではそれぞれRS-232Cとマウスの通信に使用されている。
 Konamiのサウンド用チップで同じ名前のものがあるが、そちらはSound Creative Chip。

 株式会社瑞起より、X68000を復活させた「X68000 Z LIMITED EDITION EARLY ACCESS KIT」のクラウドファンディングが12月3日より開始。2023年1月28日まで実施中です。
X68000Z https://www.zuiki.co.jp/x68000z/
クラウドファンディング https://kibidango.com/2285

https://www.zuiki.co.jp/x68000z/ より

 インターネット黎明のころの草の根BBSももりこみつつ、いろんなエピソードをつめこんだ「ちょっと偏ったインターネット老人会へようこそ」を同人誌として頒布します。
参加予定イベント
 12月31日 V-43a コミックマーケット 101

同人サークル BLACK FTZやってます twitter @black_ftz

この記事が気に入ったらサポートをしてみませんか?