科学・技術
Apple IIを本格的にしたカード
The Card That Made the Apple II Serious (wiseowl.com)
要約
Apple IIは当初40桁表示で、ビジネス用途には不十分でした。1980年に登場したVidex VideoTermは、80桁表示を可能にし、Apple IIを本格的なビジネスマシンへと変貌させました。本記事では、このカードのハードウェアアーキテクチャ、特にMC6845 CRTCチップに焦点を当て、なぜスロット3が特別であったのかを解説しています。Apple IIeが80桁表示を内蔵するまでの間、Videx VideoTermは市場を席巻しました。
全文翻訳
全2部構成の第1部。このパートでは、Videx VideoTermのハードウェアアーキテクチャ、MC6845 CRTC、およびスロット3がアーキテクチャ的に特別な理由について説明します。第2部では、レンダリングパイプライン、C8の所有権、およびPascal起動時のハングアップについて説明します。
1977年、Apple IIは40桁のテキストで出荷されました。これはBASICプログラムやゲームには問題ありませんでしたが、WordStar、VisiCalc、あるいは業界を再構築していたCP/Mビジネスソフトウェアには不十分でした。本格的なワードプロセッサには80桁が必要でした。実際のデータを持つスプレッドシートには80桁が必要でした。Apple IIを実際の仕事に使用したい人には、誰でも80桁が必要でした。1980年に導入され、オレゴン州コーバリスで製造されたVidex VideoTermは、この問題を解決し、Appleが1983年にIIeに80桁のサポートを組み込むまで市場を支配したカードでした。それは、Apple Pascal、WordStar、そしてその時代のほぼすべての本格的なビジネスアプリケーションと互換性のある、Apple IIおよびII+用の最も広くサポートされた80桁カードでした。それがなぜそのように機能したのかを理解するには、今ではほとんど記憶から消え去ったチップ、Motorola MC6845 CRTコントローラを理解する必要があります。
ディスプレイの問題
Videxカード自体にたどり着く前に、Apple IIのビデオが実際にどのようなものだったかを理解するのに役立ちます。Apple II+はNTSCコンポジットビデオを出力します。これは、1970年代の家庭用テレビ用に設計された単一のアナログ信号です。画面を見ることができるという意味では機能しますが、NTSCコンポジットは色のにじみ、テキスト上のクロマアーティファクト、そして信号の帯域幅によって根本的に制限される水平解像度を持っています。標準のApple IIが生成する40桁のテキストモードは、当時のテレビでは判読可能です。それ以外のものだと、ディスプレイ技術がいかに変化したかを思い知らされます。
A2FPGAはコンポジット出力を完全にバイパスします。アナログ信号をキャプチャしてアップスケールする代わりに、Apple IIのビデオメモリ—Apple IIのビデオ回路がコンポジット出力を生成するために読み取るテキストページと高解像度グラフィックページ—を監視し、そのメモリ内容から直接HDMIを生成します。FPGAは、Apple IIがコンポジット信号を構築するために使用するのと同じバイトを読み取り、それをクリーンな720×480のデジタルフレームにレンダリングします。その結果、アナログのにじみなしで、正確なピクセル境界でテキストとグラフィックが表示されます。
Videxエミュレーションを追加することで、このパイプラインが拡張されます。Videxカードは、Apple IIのメモリマップとは別の独自の2KBのビデオRAMを持っており、80桁の文字グリッドを格納します。80桁モードがアクティブな場合、FPGAはVidex VRAMのレンダリングをApple IIのネイティブ40桁テキストに置き換えます。これにより、Apple IIのコンポジット出力を介して接続された物理Videxカードが生成するよりも鮮明な80桁出力を最新のHDMIディスプレイで実現します。
MC6845
MC6845は1977年に登場したプログラマブルCRTコントローラです。その仕事は、CRTディスプレイを駆動するタイミング信号、すなわち水平同期、垂直同期、カーソル位置を生成することです。これは現代の意味でのビデオチップではありません。それ自体はピクセルデータを生成しません。電子ビームがどこにあるかをホストシステムに伝え、適切な文字データを適切なタイミングで供給するようホストを信頼します。
6845は、2ポートインターフェースを介して18個のレジスタを公開します。アドレスレジスタにレジスタ番号を書き込み、次にデータレジスタを読み書きします。レジスタは、1行あたりの文字数から垂直合計、カーソル点滅速度まで、あらゆるものを制御します。レジスタは、オリジナルのMC6845ではほとんどが書き込み専用でしたが、Videx VideoTermで使用されている日立HD6845SPは、完全な読み戻しを可能にするタイプ1のバリアントです。これは、自身の構成をチェックするソフトウェアにとって重要な詳細です。
物理的なVidexボードを見ると、HD46505SPが最も大きなチップで、中央にあります。その上の2つの2716 EPROM(「INVERSE (C)1981 VIDEX」と「STD. 7X9 E (C)1981 VIDEX」とラベル付けされています)は、キャラクタROMの2つの半分です。「VI-FIM-500 (C)1982 VIDEX」チップはファームウェアROMです。74LSシリーズのロジックチップの小さな軍隊が、アドレスデコード、バスバッファリング、タイミングを処理します。FPGAエミュレーションはこれらすべてを置き換えます。そのボード上のすべてのチップ—HD46505SP、両方のキャラクタROM EPROM、ファームウェアROM、およびすべてのグルーロジック—は、GW2AR-18Cファブリックの約250のLUTと160のレジスタに収まっています。
スロット3が異なる理由
Apple IIには7つの拡張スロットがあります。電気的にはほとんど同じで、それぞれ同じバス信号のセットに加えて、スロット固有のI/O選択とデバイス選択を提供します。しかし、スロット3には、他のすべてのスロットとは異なるハードウェアの癖があります。それは、INTCXROM内部ROMメカニズムを制御することです。
CPUが$C300~$C3FFの範囲(スロット3 ROMスペース)のメモリにアクセスすると、Apple IIハードウェアはSLOTC3ROMと呼ばれるソフトスイッチをチェックします。SLOTC3ROMが0(デフォルト)の場合、$C300にアクセスするとINTC8ROMというフラグが設定され、$C800~$CFFFの拡張ROMスペースが外部カードではなくApple IIeの内部80桁ファームウェアにルーティングされます。Apple II+ではSLOTC3ROMが存在しないため、常に0です。これは、$C3xxへのアクセスがいずれもINTC8ROMを設定し、すべてのカードからのすべての拡張ROMをブロックすることを意味します。
これがVidexがスロット3になければならない理由です。SLOTC3ROM/INTCXROMメカニズムは、80桁カードスロットのために特別に存在します。Videxファームウェアはこの制約内で機能するように書かれています。特定の時点で$CFFFにアクセスしてC8空間の所有権を解放し、他のカードの拡張ROMが動作できるようにします。スロット3のハードウェアアーキテクチャは、事実上、シリコンに焼き付けられた80桁カードアーキテクチャなのです。これを正しくエミュレートするには、所有権プロトコルを理解する必要があり、これは実装のより微妙な部分の1つであることが判明しました。
アドレスマップ
Videxカードは3つのアドレス領域に応答します。
$C0B0–$C0BF (デバイスI/O) — これはスロット3デバイス選択範囲です。アドレスビット[3:2]は4つの512バイトVRAMバンクのいずれかを選択します。アドレスビット[0]はMC6845のアドレスレジスタ(偶数)とデータレジスタ(奇数)の間を選択します。書き込みはCRTCに送られます。読み取りはCRTCレジスタ値またはVRAM内容を返します。
$C300–$C3FF (スロットROM) — 256バイトのスロットファームウェアROM。この範囲にアクセスすると、拡張ROM所有権フラグも設定され、Videxカードに$C800–$CFFF空間の制御権が与えられます。
$C800–$CFFF (拡張ROM + VRAMウィンドウ) — カードがC8空間を所有すると、その2KBファームウェアを$C800–$CFFFから提供します。この範囲内で、$CC00–$CDFFはVRAMウィンドウです。これは、デバイスI/Oアドレスのバンクビットによって現在選択されている512バイトのVRAMです。
VRAMウィンドウは賢いです。Videxカード上のApple IIのビデオRAMは2KBである必要があります(80桁×24行=1920バイト、切り上げ)。しかし、スロットROMは256バイトしかなく、デバイスI/Oは16バイトしかありません。拡張ROM空間は2KBであり、$CC00に512バイトのウィンドウを切り出すことで、VidexファームウェアはデバイスI/Oアドレスビットを介して4つの512バイトページ間をバンク切り替えしながら、C8空間を介して完全なVRAMにアクセスできます。
ファームウェアROM
Videxファームウェアは、2つのアドレス範囲を提供する2KBのROMです。$C300の256バイトのスロットROMと、$C800の完全な2KBの拡張ROMです。これには、Apple IIの文字出力フック、40/80桁切り替えロジック、および割り込みハンドラパッチが含まれています。主要なエントリポイントは$C300にあり、最初の2バイトは$2C $CB — BIT $CBxx命令です。これは標準的なApple IIのスロットROMイディオムです。最初のバイトはBITオペコードで、無害に実行されますが、次の2バイトをアドレスオペランドとして使用します。これにより、ファームウェアは、このROMがPascal互換のエントリ構造を持っていることをシステムに通知でき、CALL 771($C303)が有効なPascal周辺機器カードプロトコルのエントリポイントであることを可能にします。
$C313には4C 00 C8 — JMP $C800 — が含まれており、メインの初期化パスのために拡張ROMに制御を渡します。
そのCardCatスクリーンショットは、ハードウェアから直接$C300–$C3FFを読み取っています。A2FPGAについては何も知りません。これは一般的なROM検査ユーティリティです。それが返すバイトはオリジナルのVidexファームウェアと完全に一致しています。なぜなら、それがエミュレーションが提供しているものだからです。
VRAMアーキテクチャ
Videx VideoTermは、80×24文字グリッドを格納するために2KBのビデオRAMを使用します。元のハードウェアでは、これは