2024/4/18
- PC-8001でユーザー定義キャラクタ(PCG)を使用可能にするハードウェア
- 従来品より2倍以上速いデータ登録速度
- 画面分割により256種類を超えるPCG表示が可能
- PCGとROMキャラクタの同時表示が可能
I/O | アドレス | 用途 |
---|---|---|
OUT | $00 | ラインデータ #0 |
OUT | $01 | ラインデータ #1 |
OUT | $02 | ラインデータ #2 |
OUT | $03 | ラインデータ #3 |
OUT | $04 | ラインデータ #4 |
OUT | $05 | ラインデータ #5 |
OUT | $06 | ラインデータ #6 |
OUT | $07 | ラインデータ #7 |
OUT | $08 | コントロール |
- 8x8ドットのキャラクタを垂直方向に8分割し、上からライン#0とする
- ラインデータは1バイトで、MSBが左端のドットに対応する
- PCGはビット反転して出力されるため、データはあらかじめ反転したものを作成すること
BIT | 用途 |
---|---|
0,1 | 書き込みバンク# (bit0=LSB) |
2 | PCGスイッチ (1=on) |
3 | モードスイッチ (1=ブロックモード) |
4~7 | 予約 |
2種類の表示モードが存在し、登録可能なPCGの最大数と使用可能エリアに違いがある
モード | PCGの最大数 | 使用可能エリア |
---|---|---|
ノーマル | 256 | 制限なし |
ブロック | 1024 | 制限あり (7.ブロックモードを参照) |
CG-RAMは2KBバイトずつ4つのバンクに分割されている
アドレス | バンク | 用途 |
---|---|---|
$0000~$07FF | 0 | ノーマルモード、ブロックモード共用データエリア |
$0800~$0FFF | 1 | ブロックモード専用データエリア |
$1000~$17FF | 2 | ブロックモード専用データエリア |
$1800~$1FFF | 3 | ブロックモード専用データエリア |
CG-RAMにPCGのデータを登録する手順は下記の通り
- コントロールポートで書き込みバンク#をセットする
- 垂直帰線消去期間を待機
- Bレジスタにキャラクタコードをセットする
- Cレジスタにライン番号をセットする
- Aレジスタにラインデータをセットする
- OUT(C),A を実行する
4から6を8回くりかえすことで登録が完了する
- 予期しないデータが書き込まれるのを防ぐため、データ登録は必ず垂直帰線消去期間内に行うこと
- 1キャラクタのデータ登録が完了するまでBレジスタの値を変化させないこと
- Bレジスタを使用するため、BASICのOUT命令では登録できない
PCGを表示する手順は下記の通り
- 表示したい領域のVRAMアトリビュートをリバースにする
- コントロールポートのPCGスイッチ(bit2)をonにする
VRAMのアトリビュート情報でキャラクタ表示を切り替えるため、画面内でPCGとROMキャラクタの併用が可能である
アトリビュート | 表示 |
---|---|
ノーマル | ROMキャラクタ |
リバース | PCG |
画面を行で4分割し、それぞれにCG-RAMのバンクを割り当てることで256種類を超えるPCGの表示を可能にする
行番号 | バンク |
---|---|
0~7 | 0 |
8~15 | 1 |
16~23 | 2 |
24 | 3 |
ブロックモードではCRTCからのVSP信号をカウントして行番号を識別している。 25行モードでは1行あたり8回VSP信号が送られるので、8行(VSP信号64回)ごとにCG-RAMのバンクを1つ進めている。 一方で20行モードでは1行あたり10回VSP信号が送られるためカウントにズレが生じ、表示が崩れてしまう。 このためブロックモードは25行モードで使用しなければならない。
VSPカウンタ値 | 行番号(25行モード) |
---|---|
0~63 | 0~7 |
64~127 | 8~15 |
128~191 | 16~23 |
192~199 | 24 |