MOSテクノロジー8563
8563ビデオディスプレイコントローラー ( VDC )は、MOS Technologyが製造した集積回路でした。 Commodore 128コンピューターで使用され、80列(640 x 200ピクセル)RGBビデオディスプレイを生成し、Commodore 64互換グラフィックスをサポートするVIC-IIと共に実行されました。 C128のDCRモデル(およびいくつかのDモデル)は、最新の技術的に高度な8568 VDCコントローラーを使用しました。
歴史と特徴
元々は、Zilog Z8000をベースに計画された(ただし未リリースの)UNIXベースのビジネスコンピューターを対象としていたCommodoreは、VDCをいくつかのプロトタイプマシンに設計しました。これらのうち、Commodore 128のみがこれまでに生産を見ました。人気のあるVIC-IIなどの初期のMOSビデオチップとは異なり、VDCには専用のビデオメモリがあり、元のC128に16キロバイト(16,384バイト、64キロバイト、65,536バイトにアップグレード可能)またはC128DCRに「フラット」C128がありました。このRAMは、マイクロプロセッサから直接アクセスできませんでした。
8563は、他のほとんどのMOSテクノロジーラインよりも製造が難しく、初期歩留まりは非常に低かった。初期のユニットには、重大な信頼性の問題もあり、過熱により自己破壊する傾向がありました。また、VDCには、レジスタに対する間接的なロードおよびストア操作が誤動作するタイミングの問題がありました。
公式には、VDCはテキストのみのチップでしたが、初期のC128開発者に与えられたMOS Technologyの技術文献を注意深く読んだところ、高解像度のビットマップモードが可能であったことが示されました。詳細。 Commodore 128の組み込みプログラミング言語であるBASIC 7.0は、レガシーVIC-IIチップを介して40カラムモードでのみ高解像度グラフィックスをサポートしていました。
C128のリリース後まもなく、VDCのビットマップモードは、Data Beckerの書籍「Commodore 128-DasgroßeGRAFIK-Buch」(1985年後半に米国でAbacus Softwareにより発行)、およびアセンブリ言語プログラムでかなり詳細に説明されました。ドイツの作家KlausLöffelmannとDieterVüllersによって提供されました。ここでは、任意のピクセルを設定またはクリアしたり、BASICを使用して必要な計算を実行したり、80列画面でビットマップの幾何学的形状を生成したりすることができました。コモドール128のリリースから1年足らずの1986年2月、 RUN誌は、VDCのビットマップモードについて説明し、BASIC 7.0を拡張したタイプインプログラム(8502アセンブリ言語で記述)を含む記事「 Ultra Hi-Res Graphics 」を発行しました8563を使用して640×200の高解像度グラフィックスをサポートする機能。著者のLou WallaceとDavid Darusは、後にUltra Hi-Resユーティリティを商用パッケージBASIC 8に開発しました。 C128で最も人気のあるサードパーティユーティリティの1つであり、これは、より高度なVDC高解像度機能を幅広いプログラマーに提供しました。
Commodoreはついに、 Commodore 128 Programmer's Reference Guideで VDCに関する完全な公式ドキュメントを提供しました。 VDCビットマップモードは、GEOSオペレーティングシステムのC128バージョンで広く使用されていました。
VDCにはスプライト機能がなく、ゲームアプリケーションでの使用が制限されていました。ただし、専用のビデオRAM内で小さなブロックメモリコピーを自律的に実行するブリッティング機能が含まれていました。 VDCがそのようなコピーを実行している間、コピーが完了するまで他のVDCアクセスが試行されない限り、システムCPUはコードの実行を継続できます。これらの機能は、C128のスクリーンエディタROMによって使用され、スクリーンセクションをすばやくスクロールまたはクリアします。
技術仕様
- IBMのCGAビデオ規格と互換性のあるRGBI出力(RGBと強度)。
- 表示用の16または64キロバイトのアドレス空間、文字形状、および表示属性メモリ(専用、システムメモリとは別)。
- インターレースモードで最大720×700ピクセルのビデオ解像度(最大64 KBのビデオRAM)。プログラマのニーズに応じて、640×200ノンインターレース、640×400インターレースなど、他の画像サイズも可能です。
- 80×25文字のテキスト解像度(C128カーネルのデフォルト); 80×50や40×25などの他のサイズも可能です。
- 2つの強度で8色。
:これは、米国60 Hz C128のみに適用されます。 50 Hz C128マシンは、50 Hzの垂直リフレッシュで信号を出力します。 CGA規格に準拠していませんが、ほとんどのCGAモニターは問題なく50 Hz信号を表示できました。ただし、一部のモニターは信号の解決に失敗したか、解決に成功しましたが、遅かれ早かれ偏向回路が失敗します。
プログラミング
VDCの内部レジスタと専用のビデオメモリのアドレス指定は、間接的な方法で行う必要があります。最初に、プログラムはVDCに、その37個の内部レジスタのどれにアクセスするかを通知する必要があります。次に、プログラムはVDCがアクセスの準備ができるまで待機する必要があります。その後、選択された内部レジスタの読み取りまたは書き込みが実行されます。次のコードは、典型的なレジスタ読み取りです。
次のコードは、一般的なレジスタ書き込み操作です。
VDCを制御するこのやや面倒な方法により、ビットマップモードでの可能な最大フレームレートは一般に、ディスプレイのビット集約的な操作が必要なアーケードスタイルのアクションビデオゲームには遅すぎます。
標準テキストモードでは、VDCはVIC-IIとほぼ同じように動作しますが、1kではなく2kの画面メモリが使用されます。電源投入時のデフォルト構成では、画面メモリは0〜7FFドル、カラーメモリは800〜9FFドルに配置され、2k境界にある限りVDCメモリのどこにでも移動できます。属性は、VIC-IIの高解像度モードのように処理され、グローバルな背景色と各色の前景色がカラーRAMごとに個別に設定されます。カラーデータに加えて、後者には各文字の属性データも含まれています。ビット4は、有効にすると文字を点滅させ、ビット5は下線付き文字を生成し、ビット6は文字のビットマップパターンを反転させます。ビット7は、代替文字セットを有効にします。 VDCは最大512文字を使用できます。特定の文字の代替文字フラグが有効になっている場合、文字パターンは文字256〜511から描画されます。したがって、文字65が表示されている場合、代替文字フラグを有効にすると、代わりに文字321が表示されます。代替文字フラグは通常、大文字/小文字モードが設定されている場合に使用されます。このフラグは、すべてのVDC画面位置で有効になり、デフォルトの大文字/グラフィック文字セットの代わりに、大文字/小文字文字セットとその反転ビデオバージョンが表示されます。
VDCはキャラクターROMを使用せず、代わりにVIC-IIのキャラクターROMパターンは、VDCがハードウェアでキャラクターを反転できる場合でも、リバースビデオキャラクターのパターンを含むC128のパワーオン初期化の一部としてVDC RAMに単にコピーされます。 VDCの文字の高さは調整可能であるため、文字パターンは8バイトではなく16バイトで保存されます。画面は25行なので、実際には文字の高さは8行に制限されています。つまり、文字データ用のスペースの半分が未使用のままで無駄になっています。電源投入時のデフォルト設定では、文字データは$ 2000- $ 3FFFに配置されます。 $ 2000- $ 23FFには大文字/グラフィックス文字のパターンが含まれ、$ 2C00- $ 33FFには大文字/小文字が含まれ、$ 2400- $ 2BFFおよび$ 3400- $ 3FFFには各セットの反転ビデオパターンが含まれます。ユーザーは任意のカスタム文字を自由に定義し、VDCメモリにマップできます。
登録リスト
この情報は、 Commodore 128プログラマーズリファレンスガイドから改編されました。
登録 | 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 | 04ドル | VT7 | VT6 | VT5 | VT4 | VT3 | VT2 | VT1 | VT0 | 垂直合計 |
5 | 05ドル | - | - | - | VA4 | VA3 | VA2 | VA1 | VA0 | 垂直調整 |
6 | 06ドル | VD7 | VD6 | VD5 | VD4 | VD3 | VD2 | VD1 | VD0 | 縦表示 |
7 | 07ドル | VP7 | VP6 | VP5 | VP4 | VP3 | VP2 | VP1 | VP0 | 垂直同期位置 |
8 | 08ドル | - | - | - | - | - | - | IM1 | IM0 | インターレースモード |
9 | 09ドル | - | - | - | - | CTV4 | CTV3 | CTV2 | CTV1 | キャラクター合計垂直 |
10 | 0A | - | CM1 | CM0 | CS4 | CS3 | CS2 | CS1 | CS0 | カーソルモード、スキャン開始 |
11 | $ 0B | - | - | - | 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 | 100万ドル | FG3 | FG2 | FG1 | FG0 | BG3 | BG2 | BG1 | BG0 | 前景色/背景色 |
27 | 10億ドル | AI7 | AI6 | AI5 | AI4 | AI3 | AI2 | AI1 | AI0 | 行ごとのアドレス増分 |
28 | $ 1C | CB15 | CB14 | CB13 | 羊 | - | - | - | - | キャラクターベースアドレス |
29 | 1D | - | - | - | UL4 | UL3 | UL2 | UL1 | UL0 | スキャンラインに下線を引く |
30 | 1Eドル | 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 | DEB2 | DEB1 | DEB0 | 表示有効化開始 |
35 | 23ドル | DEE7 | DEE6 | DEE5 | DEE4 | DEE3 | DEE2 | DEE1 | DEE0 | 表示有効終了 |
36 | 24ドル | - | - | - | - | DRR3 | DRR2 | DRR1 | DRR0 | DRAMリフレッシュレート |