MOSテクノロジー8563

8563ビデオディスプレイコントローラ(VDC )は、MOSテクノロジー社が製造した集積回路です。コモドール128 (C128)コンピュータで使用され、80列(640 × 200ピクセル)のRGBビデオディスプレイを生成するために使用されました。コモドール64互換グラフィックスをサポートするVIC-IIと併用されていました。C128のDCRモデル(および一部のDモデル)では、後継機としてより技術的に進歩した8568 [D]VDCコントローラが採用されていました。
歴史と特徴
当初は、 Zilog Z8000をベースに計画されていたものの未発売のUNIXベースのビジネスコンピュータであるCommodore 900向けにVDCが設計されました。Commodoreは、これらのプロトタイプ機のうち、実際に生産されたのはCommodore 128のみでした。人気のVIC-IIなどの初期のMOSビデオチップとは異なり、VDCは専用のビデオメモリを搭載していました。オリジナルの「フラット」C128では16キロバイト(16,384バイト。64キロバイト、65,536バイトまで拡張可能)、C128DCRでは64キロバイトでした。このRAMはマイクロプロセッサから直接アクセスすることはできませんでした。
8563はMOSテクノロジーの他の製品よりも製造が難しく、初期の歩留まりは非常に低かった。初期の製品には重大な信頼性の問題があり、過熱による自己破壊が起こりやすかった。[1]また、VDCのタイミング問題により、レジスタへの間接ロードおよびストア操作が誤動作を起こすこともあった。
VDCは公式にはテキスト専用チップでしたが、初期のC128開発者に配布されたMOSテクノロジーの技術資料を注意深く読むと、高解像度ビットマップモードが可能であることが示されていました。ただ、詳細な説明はされていませんでした。C128の組み込みプログラミング言語であるBASIC 7.0は、従来のVIC-IIチップを介して40列モードでのみ高解像度グラフィックスをサポートしていました。

C128 の発売直後、VDC のビットマップモードは、データ ベッカーの書籍「Commodore 128 - Das große GRAFIK-Buch」(1985 年後半に米国で Abacus Software から出版) でかなり詳細に説明され、ドイツの著者である Klaus Löffelmann と Dieter Vüllers によってアセンブリ言語プログラムが提供されました。このプログラムでは、任意のピクセルを設定またはクリアしたり、BASICを使用して必要な計算を実行し、80 列の画面上にビットマップの幾何学的形状を生成したりすることが可能でした。[2] 1986年2月、コモドール128の発売から1年も経たないうちに、 RUN誌は「Ultra Hi-Res Graphics」という記事を掲載した。この記事ではVDCのビットマップモードについて解説し、BASIC 7.0の機能を拡張して8563で640×200の高解像度グラフィックスをサポートするタイプインプログラム(8502 アセンブリ言語で記述)を掲載した。[1] 作者のルー・ウォレスとデビッド・ダラスは後にUltra Hi-Resユーティリティを商用パッケージであるBASIC 8に開発。C128用の最も人気のあるサードパーティ製ユーティリティの1つであるこのユーティリティは、より高度なVDCの高解像度機能を幅広いプログラマーに提供した。
コモドールは最終的に、コモドール128プログラマーズリファレンスガイドにおいてVDCに関する完全な公式ドキュメントを提供しました。VDCビットマップモードは、C128版のGEOS オペレーティングシステムで広く使用されていました。
VDCにはスプライト機能がないため、ゲームアプリケーションでの使用は限られていました。しかし、専用ビデオRAM内で小さなブロックメモリのコピーを自律的に実行するブリット機能は備えていました。VDCがこのコピーを実行している間も、コピーが完了する前に他のVDCへのアクセスが試みられない限り、システムCPUはコードの実行を継続できます。これらの機能は、C128のスクリーンエディタROMで画面セクションの高速スクロールやクリアに使用されていました。
技術仕様
- RGBI出力 (RGB と強度) は IBM のCGAビデオ標準と互換性があります。*
- ディスプレイ、文字形状、およびディスプレイ属性メモリ用の16 または 64キロバイトのアドレス空間 (専用、システム メモリとは別)。
- インターレースモードでは最大720 × 700ピクセルのビデオ解像度(64KBのビデオRAM搭載時)を実現。プログラマーのニーズに応じて、640 × 200(ノンインターレース)、640 × 400(インターレース)など、他の画像サイズにも対応可能です。
- 80 × 25 文字のテキスト解像度 (C128 カーネルのデフォルト)。80 × 50 や 40 × 25 などの他のサイズも可能です。
- 2 段階の強度で 8 色。
* これは米国仕様の60Hz C128にのみ適用されます。50Hz C128は、垂直リフレッシュレートが50Hzの信号を出力します。CGA規格に準拠していないにもかかわらず、ほとんどのCGAモニターは50Hz信号を問題なく表示できました。しかし、一部のモニターでは、信号を解像できなかったり、解像できたとしても、電気的または熱的ストレスによって偏向回路が遅かれ早かれ故障し、修理が必要になったりしました。
プログラミング
VDCの内部レジスタと専用ビデオメモリのアドレス指定は、間接的な手段で実行する必要があります。まず、プログラムはVDCに対し、37個の内部レジスタのうちどのレジスタにアクセスするかを指示する必要があります。次に、プログラムはVDCがアクセス準備を完了するまで待機し、その後、選択された内部レジスタへの読み取りまたは書き込みを実行できます。以下の アセンブリコードは、レジスタ読み取りの典型的な例です。
ldx # regnum ;アクセスする VDC レジスタstx $d600 ;制御レジスタへの書き込みloop bit $d600 ;ステータス レジスタのビット 7 をチェックbpl loop ;VDC の準備ができていませんlda $d601 ;VDC レジスタから読み取り... 次のコードは、レジスタ書き込み操作の典型的な例です。
ldx # regnum ;書き込む VDC レジスタstx $d600 ;制御レジスタに書き込むloop bit $d600 ;ステータス レジスタのビット 7 をチェックbpl loop ;VDC の準備ができていませんsta $d601 ;VDC レジスタに書き込む... 同じことは、特定のKERNALルーチンを呼び出すことでBASIC言語でも実行可能です。
このコードは VDC レジスタ読み取りの典型的なもので、⟨レジスタ⟩は以下に示すように 0 から 36 までの数値です。
BANK15 ... SYS DEC ( "CDDA" ),,レジスタ: RREG VDC REM $ccda 別名 52698 (10 進数) PRINT VDC ... このコードは VDC レジスタ書き込みの典型的なもので、⟨レジスタ⟩は 0 から 36 までの数値、⟨値⟩はそのレジスタに配置する 0 から 255 までの数値です。
BANK15 ... SYS DEC ( "CDCC" ) 、値、レジスタREM $ccdc 10 進数の 52684 ... このやや面倒な VDC 制御方法のため、ビットマップモードで可能な最大フレーム レートは、ディスプレイのビット集約型操作が必要なアーケード スタイルのアクション ビデオ ゲームには一般的に遅すぎます。
標準テキスト モードでは、VDC は VIC-II とほぼ同じように動作しますが、画面メモリが 1k ではなく 2k である点が異なります。電源投入時のデフォルト構成では、画面メモリは に配置され$0-$7FF、カラー メモリは$800-$9FFに配置されます。これらは 2k 境界内であれば VDC メモリ内の任意の場所に移動できます。属性は VIC-II の高解像度モードのように処理され、グローバル背景色と各文字の前景色はカラー RAM ごとに個別に設定されます。後者には、カラー データに加えて、各文字の属性データも含まれます。ビット 4 を有効にすると文字が点滅し、ビット 5 は文字に下線を引いてくれます。ビット 6 は文字のビットマップ パターンを反転します。ビット 7 は代替文字セットを有効にします。VDC は最大 512 文字を使用できます。特定の文字の代替文字フラグを有効にすると、文字パターンは文字 256 ~ 511 から描画されます。代替文字フラグは通常、大文字/小文字モードが設定されている場合に使用されます。フラグはすべての VDC 画面位置で有効になり、デフォルトの大文字/グラフィック文字セットの代わりに、大文字/小文字の文字セットとその反転ビデオ バージョンが表示されます。
VDC は文字 ROM を使用しません。代わりに、VIC-II の文字 ROM パターンは、C128 の電源投入時の初期化の一部として、VDC RAM にコピーされます。VDC はハードウェアで文字を反転できますが、反転ビデオ文字のパターンも含まれます。VDC は文字の高さを調整できるため、文字パターンの保存には 8 バイトではなく 16 バイトが必要です。画面は 25 行なので、実際には文字の高さは 8 行に制限され、文字データ用のスペースの半分が未使用のまま無駄になります。電源投入時のデフォルト構成では、文字データは に配置されます$2000-$3FFF。には$2000-$23FF大文字/グラフィック文字のパターン、$2C00-$33FF大文字/小文字が含まれ、$2400-$2BFFおよびに$3400-$3FFFは各セットの反転ビデオ パターンが含まれます。ユーザーはカスタム文字を自由に定義し、VDC メモリにマップできます。
登録リスト
この情報はコモドール128プログラマーズリファレンスガイド[3]から引用したものです。
| 登録する | 16進数 | ビット7 | ビット6 | ビット5 | ビット4 | ビット3 | ビット2 | ビット1 | ビット0 | 説明 |
|---|---|---|---|---|---|---|---|---|---|---|
0 | 00ドル | HT7 | HT6 | HT5 | HT4 | HT3 | HT2 | HT1 | HT0 | 水平合計 |
1 | 01ドル | HD7 | HD6 | HD5 | HD4 | HD3 | HD2 | HD1 | HD0 | 水平表示 |
2 | 02ドル | HP7 | HP6 | HP5 | HP4 | HP3 | HP2 | HP1 | HP0 | 水平同期位置 |
3 | 03ドル | VW3 | VW2 | VW1 | VW0 | HW3 | HW2 | HW1 | HW0 | 垂直/水平同期幅 |
4 | 4ドル | VT7 | VT6 | VT5 | VT4 | VT3 | VT2 | VT1 | VT0 | 縦合計 |
5 | 5ドル | — | — | — | VA4 | VA3 | VA2 | VA1 | VA0 | 垂直調整 |
6 | 6ドル | VD7 | VD6 | VD5 | VD4 | VD3 | VD2 | VD1 | VD0 | 縦表示 |
7 | 7ドル | VP7 | VP6 | VP5 | VP4 | VP3 | VP2 | VP1 | VP0 | 垂直同期位置 |
8 | 8ドル | — | — | — | — | — | — | IM1 | IM0 | インターレースモード |
9 | 9ドル | — | — | — | — | CTV4 | CTV3 | CTV2 | CTV1 | 文字数合計(縦) |
10 | 0Aドル | — | CM1 | CM0 | CS4 | CS3 | CS2 | CS1 | CS0 | カーソルモード、スキャン開始 |
11 | 00億ドル | — | — | — | CE4 | CE3 | CE2 | CE1 | CE0 | カーソル終了スキャンライン |
12 | 0セント | DS15 | DS14 | DS13 | DS12 | DS11 | DS10 | DS9 | DS8 | ディスプレイ開始アドレス上位バイト |
13 | $0D | DS7 | DS6 | DS5 | DS4 | DS3 | DS2 | DS1 | DS0 | ディスプレイ開始アドレス下位バイト |
14 | $0E | CP15 | CP14 | CP13 | CP12 | CP11 | CP10 | CP9 | CP8 | カーソル位置の上位バイト |
15 | $0F | CP7 | CP6 | CP5 | CP4 | CP3 | CP2 | CP1 | CP0 | カーソル位置下位バイト |
16 | 10ドル | LPV7 | LPV6 | LPV5 | LPV4 | LPV3 | LPV2 | LPV1 | LPV0 | ライトペンの垂直位置 |
17 | 11ドル | LPH7 | LPH6 | LPH5 | LPH4 | LPH3 | LPH2 | LPH1 | LPH0 | ライトペンの水平位置 |
18 | 12ドル | UA15 | UA14 | UA13 | UA12 | UA11 | UA10 | UA9 | UA8 | アドレス上位バイトの更新 |
19 | 13ドル | UA7 | UA6 | UA5 | UA4 | UA3 | UA2 | UA1 | UA0 | アドレス下位バイトの更新 |
20 | 14ドル | AA15 | AA14 | AA13 | AA12 | AA11 | AA10 | AA9 | AA8 | 属性開始アドレス上位バイト |
21 | 15ドル | AA7 | AA6 | AA5 | AA4 | AA3 | AA2 | AA1 | AA0 | 属性開始アドレス下位バイト |
22 | 16ドル | CTH3 | CTH2 | CTH1 | CTH0 | CDH3 | CDH2 | CDH1 | CDH0 | 文字数合計(水平)、文字表示(水平) |
23 | 17ドル | — | — | — | CDV4 | CDV3 | CDV2 | CDV1 | CDV0 | 文字表示縦 |
24 | 18ドル | コピー | RVS | CBRATE | VSS4 | VSS3 | VSS2 | VSS1 | VSS0 | 垂直スムーズスクロール |
25 | 19ドル | 文章 | ATR | セミ | DBL | HSS3 | HSS2 | HSS1 | HSS0 | 水平スムーズスクロール |
26 | 1Aドル | FG3 | FG2 | FG1 | FG0 | BG3 | BG2 | BG1 | BG0 | 前景色/背景色 |
27 | 10億ドル | AI7 | AI6 | AI5 | AI4 | AI3 | AI2 | AI1 | AI0 | 行ごとのアドレス増分 |
28 | 1セント | CB15 | CB14 | CB13 | ラム | — | — | — | — | 文字ベースアドレス |
29 | 1ドル | — | — | — | UL4 | UL3 | UL2 | UL1 | UL0 | 下線スキャンライン |
30 | 1ユーロ | WC7 | WC6 | WC5 | WC4 | WC3 | WC2 | WC1 | WC0 | 単語数 |
31 | 1Fドル | DA7 | DA6 | DA5 | DA4 | DA3 | DA2 | DA1 | DA0 | データレジスタ |
32 | 20ドル | BA15 | BA14 | BA13 | BA12 | BA11 | BA10 | BA9 | BA8 | ブロック開始アドレス上位バイト |
33 | 21ドル | BA7 | BA6 | BA5 | BA4 | BA3 | BA2 | BA1 | BA0 | ブロック開始アドレス下位バイト |
34 | 22ドル | DEB7 | DEB6 | DEB5 | DEB4 | DEB3 | デブ2 | DEB1 | デブ0 | ディスプレイの有効化開始 |
35 | 23ドル | ディー7 | ディー6 | ディー5 | DEE4 | ディー3 | DEE2 | DEE1 | ディーオー | ディスプレイ有効化終了 |
36 | 24ドル | — | — | — | — | DRR3 | DRR2 | DRR1 | DRR0 | DRAMリフレッシュレート |
参考文献
- ^ 「Commodore.ca | 製品 | Commodore 128、128D、128DCR、歴史、マニュアル、写真、年表」www.commodore.ca。2003年7月26日時点のオリジナルよりアーカイブ。
- ^ 第 3.9.1 章「VDC HI-RES-Grafik」213 ページ以降
- ^ Commodore Capital, Inc. (1986). Commodore 128 プログラマーズリファレンスガイド.ニューヨーク: Bantam Books, Inc.
外部リンク
- 超高解像度自己解凍アーカイブ - 第1巻
- 超高解像度自己解凍アーカイブ - 第2巻
- C=ハッキング第2巻 - レジスタ一覧と説明