随分空いてしまいましたがmc6800/mc6809に関する件。
とはいっても落ち葉拾い的な小物である点はご容赦下さい。
1.ターミナルモード
ここで言う処のターミナルモードとはPC8001に搭載されていたターミナルモード(8251を割込み無しでポーリングしていた為か1200bpsでした)と同義の意味です。
つまりmc6800(正確にはHD46802P)/mc6809(同HD6809P)+ CRTC(同HD46505SP)+ MC6850(ACIAですな。トーンバーストの頃からカセットインターフェースに使用していた物)でシリアルターミナルを構成したというお話。
で、何の為のターミナルかと言えば、
・Z80(CP/M-80)、i8086/upd70116(CP/M-86,MSDOS2.11 or 3.1)、MC68000(CP/M-68k)をホストにしたターミナル
であります。幸い学生時代に製作したCRTCボードは80x25文字(ANKですが)を表示可能でしたし、会社員になって東映無線で9インチぐらいのアンバー色のモニタを買ったので(お気に入りでした)それでCRTターミナルとして(無論、FLEX9としても)活用したいと考えた訳です。
2.ハードウェアスクロール
ここで言う処のハードウェアスクロールとは、HD46505SP(同時の愛称でCRTC)の表示文字開始アドレス(正式名称忘れた)を書き換える事で最も処理時間の掛かるスクロール処理を表示レジスタ更新のみで最後の行だけプログラムで処理すれば(正方向スクロールの場合)よく、その為表示速度が劇的に向上するという手法でありました。
加えて、6800系はサイクルスチールとかEクロックに同期とか同期式アクセスとは色々呼び方はありますがVRAMアクセスをCPUからとCRTCからのそれをEクロック(6800系CPUの基本クロック)に同期(CPUがEならばCRTCはEの逆相(/E or -E 、nE等)とすれば容易に)同期させる事が出来たのも数少ない6800系(というか同期バスというか、同時はEという1〜2Mhz程度の単相クロックに同期してバスサイクルが完結するのをmotorola系の人は同期バスと読んでいたと思います)。
パソコンに詳しい方はApple][を想起されると思いますがその通りですね。Woz様の設計は素晴らしくCRT表示とDRAMCをCRTCで兼ねて且つCPUアクセスも調停不要(同期バスだから)の為、当時としては結構高速(少なくともApple信者さんらは)と主張されておりました(これは余談)。
内蔵レジスタは次の18個で、書き込み専用や読み出し専用のものが多くなっています。
Reg. No. Description Read Write R0 Horizontal Total No Yes R1 Horizontal Displayed No Yes R2 H. Sync Position No Yes R3 Sync Width No Yes R4 Vertical Total No Yes R5 V. Total Adjust No Yes R6 Vertical Displayed No Yes R7 V. Sync Position No Yes R8 Interlace Mode and Skew No Yes R9 Max Scan Line Address No Yes R10 Cursor Start No Yes R11 Cursor End No Yes R12 Start Address (H) Yes Yes R13 Start Address (L) Yes Yes R14 Cursor (H) Yes Yes R15 Cursor (L) Yes Yes R16 Light Pen (H) Yes No R17 Light Pen (L) Yes No R12とR13はCRTCから見たリフレッシュ用メモリの表示開始アドレスを設定します。表示内容をスクロールするためには、CPUによってメモリ内のデータをブロック転送すればよいわけですが、この表示開始アドレスを一定量だけずらすことによっても同じことが実現できます。前者をソフトウェアスクロール、後者をハードウェアスクロールということもあります。ブロック転送すると1 KByte単位のデータ転送になるでしょうから、8 bitマイクロプロセッサでは10 ms単位の時間が必要となります。しかし、ハードウェアスクロールなら、レジスタふたつへの書き込みと、新たに表示領域に含まれることになるリフレッシュ用メモリの内容を書き換えるだけで済みますから、1 ms程度の処理時間しか必要としません。このCRTCは、比較的簡単にハードウェアスクロールが可能になっています。
引用おわり。
そういう事で6800系 + HD46505SP でVRAMを構成すると比較的簡単な回路で比較的高速なターミナル(モード)が実現できる訳でありました。
これは全くの手前味噌というか我田引水ですが80系では非同期バス故(まあ、以後のマイコンはすべて非同期バスな訳ですが:)VRAMをCPUからアクセスする際には何らかの調停回路(まあ、readyとかwaitとか言われる処理かDMAで物理的に回避するか)を必要とし、オーバーヘッドは数%から数十%に及ぶので珍しく6800系がシステム構成上、優位に見える(かもしれない)事例でもありました(主観)。
3.割込みと待ち行列
ハードウェア的にはこれで良いのですが通信速度が速い(といっても当時は19.2kbpsが高速な部類で4.8k/9.6kbpsが一般的でした)とデータを取りこぼすのでMC6850(ACIA)は割込みを有効にして、所謂リングバッファで受信データをバッファリングする必要がありました。
これまた手前味噌ですが6800系の周辺LSIは割込みはポーリングが基本でIRQ端子はワイヤードORで設計されているのでPullup抵抗1個で自由に割込みを使う事が出来ました。逆に言えばpollingが必要で割込みコントローラ(一部には独自開発もあった様ですが)が無いのでIRQベクタをリソースの数だけpollingする必要があった訳です。
リングバッファ(環状データ構造とか、FIFOとか、呼び方は色々ありましょうが)はデータ構造の基本であり、実際大変重宝するのでStackの次に覚えたデータ構造だった様な気がします。
4.3mmφのステレオミニジャック
何言ってるかと思われるかもしれないし、当時をご存知の方はああそういう事もしたっけ(回想)と思われるかもしれませんが本CRTターミナルとホストマシン(上述の如くZ80(CP/M)だったりi8086(CP/M86,MSDOS)だったりMC68000(CP/M-68k)だったりする訳ですが)との接続に真面目にRS232Cを使うのは無駄と割り切って、昨今のUSB-Serialで見られる様なTTLレベルでクロス接続しておりました。なので所詮独自だからTX/RX/GNDの3本の信号線で小型で使い勝手が良い素材・・・という事でタイトルの素材を選択したのでありました。これは自分なりには悪く無かった(無論、クロスケーブルは自作する必要はありましたが)と思っています:)
5.利用形態
上記の通りmc6800@1Mhzでは19.2kbpsが限界でそれで使っていた気がします。まあ、19.2kbpsならばCP/M-80のTurboPascalのエディタ(WordStar互換ですね。懐かし)もそこそこストレス無く動いた気がするので(当時はCP/M-80が動作するだけで十分満足しておりましたので)十分実用性は有って結構長期に渡って使っていた気がします。
後に専用機として68B09E + 68B45で専用のCRTターミナルを製作したのですがそれでは38.4kbpsで普通に動作していた気がします。
という訳で学生時代に製作したMC6800/MC6809マイコンは社会人になってからもFLEX9だったりCRTターミナルだったり、ROMライタだったりと活躍していたのでありました。
(了)
20250805 01:16追記:大雑把ですが全般のブロック図を記します。当時の記憶に基づいている為、正確とは言い難い情報が含まれる可能性をご容赦下さい(すみません)。

・大まかに言って製作時期は1980〜1983年頃と思われます。
・実際のボードは手配線(盛りそば的な)で構成され、
・CPUボード(CPU,ROM,RAM),6802版と6809版があります(差替えて使用)
・ROM(機械語モニタ:松本モニタを拡張)0xf800-0xffff
・RAM(モニタワーク、Stack)0xf000-0xf3ff
・ROM(TinyBasic/ROMWriter/SelfAssembler) 0x8000-0xbfff(dip-swでon/off)、0xc000-0xdfff
・DRAMボード(4116 x 24, MC3242,MC3480)0x0000-0xbfff,0x8000-0xbfffはdip-swで無効化可能(ROMと適時排他使用)
・CRTCボード(46505,2114x4,CGROM)0xe000-0xefff(2K + image)
・i/oボード(PIA、ACIA)0xf4xx
・FDCボード(MB8877、PIA)
他で構成されます。尚、
・FDCボードは6809(FLEX9)専用で6802では動作しません(正確には未確認)