まず、境界領域またはビデオ バンクの最後のバイト (通常は $3fff) から読み取られる繰り返し 8 ビット パターン (幅 8 ピクセル) にスプライトのみを表示できます。これらのスプライトまたは 8 ビット パターンは、VIC チップをだまして境界線を「表示しない」ようにした場合にのみ表示されることに注意してください。下記参照。
ボーダーはスプライトよりも優先度が高いため、通常、スプライトがボーダー領域に描画されると、ボーダーがスプライトを覆います。ちょっとした VIC チップの策略で、境界線をオフにすることができます。
上下の縁取りは簡単にオフにできます (後で説明します)。側面の縁取りは非常に重要なタイミングでオフになります。
最初に、VIC チップが c64 でどのように機能するかについて少し説明します。
VIC チップは、画面を左上から右上に描画し、次に 1 行下に描画し、再び左から右に画面全体が描画されるまで描画します。この再描画を毎秒 50 回 (PAL ユニットの場合) または毎秒 60 回 (NTSC ユニットの場合) 実行します。
任意の時点でのラスタの垂直位置を含む 8 ビットの VIC レジスタがあります。$d012. 実際には 255 を超える可能な位置があるため、9 番目のビットはビット 7 (最上位ビット) またはレジスタ $d011 に格納されます。したがって、いつでもこれらのレジスタを読み取って、ラスターの垂直位置を見つけることができます。ラスターの x 位置を読み取るために使用できるレジスタがありません。
VIC チップのもう 1 つの優れた機能は、ハードウェア スクロールを使用する際の問題を修正するために使用されました。基本的な垂直スクロールは、ハードウェア レジスタを使用して画面を 0 ~ 7 ピクセル垂直に移動することで実現されました。制限 (スクロールの方向に応じて 0 または 7) に達したら、各文字ブロック (8x8 ピクセル) を 1 ブロック垂直に移動し、新しいデータを描画して上部 (または方向に応じて下部) に表示します。これは非常にうまく機能しますが、8 ピクセルのスクロールごとにデータが画面に「ポップ」表示される点が異なります。これを解決するには、レジスタ $d011 のビット 3 をクリアすることで、境界領域を垂直方向に 8 ピクセル拡大することができます。これを 24 列モードと呼びます。デフォルトでは、画面は 8x8 ピクセル文字の 25 行に設定されていました。24 行モードでは、文字を一番下の行に描画することはできますが、それらは境界線によって隠されるだけです。
したがって、上下の境界線をオフにする秘訣は次のとおりです。
1) 画面を 25 行モードに設定します
2) ラスターが $f2 と $fa の間の垂直位置 (24 行モードと 25 行モードの両方で境界線が始まる場所の間の 8 ピクセル) に到達するのを待ちます。
3) 画面を 24 行モードに設定します...境界線の垂直方向の開始点を現在のラスター位置の上に移動します
4) 垂直ラスター位置 ($fa) の後まで待機します。
5) 各フレームを繰り返す
ステップ 3) は、VIC チップをだまして、境界線の描画が既に開始されていると思わせるため、描画を開始しません。出来上がり、上下の境界線が開いています。
サイド ボーダーに関しては、異なるレジスタで同じことを行うことができますが、ラスターの水平方向の移動は垂直方向の移動よりもはるかに速いため、タイミングをより厳密にする必要があります。また、ジッタと呼ばれる考慮すべき別の問題があります。< ここでは説明しません。その問題の詳細な説明については、Web で「Stable Raster C64」を検索してください。