PC-8001 CRTC


PC−8001はCRTCにμPD3301を使用します。 そしてCPUメモリの一部をDMAでCRTCに転送して画像を表示します。 Z80でDMA転送なのでCPUが一旦止まりますがソフトでブロック転送するより当然早くなります また垂直帰線を見て(待って)VRAMを書き換えるより効率が良いともいえます しかし画面は常に表示することが多いので常にCPUが止まることが多くなります。 さらにソフトウェアでのタイミングがとれなくなるので 常に画面表示しながら他のデバイスにアクセスする為にCMTに8251、FDDに8255を使用する事になります。
キャラクタコード  
N−BASICのVRAM VRAMは設定によってアドレスの変更が出来ますがN−BASICでは0F300Hに固定して使用します。 構成は表示領域が80バイト(80桁)にアトリビュートが40バイト(20個分)で1行分 それが最大25行なので(80+40)×25で3000バイトになります。 アトリビュートは1文字につき1つではなくて1行につき40バイトしかなくアトリビュートは最低でも2バイト消費します。 つまり20回分しかアトリビュートの設定が出来ません。 また40桁でもVRAMでは1行80バイトとアトリビュート40バイトは変わりません
使用アドレスは0F300H−0FEB7H  表示領域   ここにキャラクタデータまたはグラフィックデータを書き込みます。   キャラクタ(ASCIIコード)かグラフィックかはアトリビュートで設定します。        グラフィックは1キャラクタ分を2*4ドットにして表示します。   アトリビュート ICWの設定(ATn、SC)によってかわります  ノントランスペアレント モード  1バイトの構成になります   Bit7:1   Bit6:V  1=バーチカルライン オン、0=バーチカルライン オフ   Bit5:U  1=アンダーライン  オン、0=アンダーライン  オフ   Bit4:O  1=オーバーライン  オン、0=オーバーライン  オフ   Bit3:H  1=ハイライト    オン、0=ハイライト    オフ   Bit2:R  リバース ビデオ (Z2)   Bit1:B  ブリンク     (Z1)S=1の時 無効   Bit0:S  シークレット   (Z0)       H(ハイライト)は輝度強調       Z2−Z0     111:リバースシークレット     110:リバースブリンク     101:リバースシークレット     100:リバース     011:シークレット     010:ブリンク     001:シークレット     000:ノーマル      トランスペアレント モード  2バイトで1組の構成になります。  第1バイトは、左端を0として何番目のキャラクタに対して第2バイトの属性を対応させるかの指定  第2バイトは、指定した桁からの色やキャラクタかグラフィックの選択等(属性)を書き込みます  属性データは白黒、カラー選択、カラー通常指定でデータの意味が変ります。    <第1バイト>   Bit7:0   Bit6:a6 列アドレス 04FH〜000H   Bit5:a5   Bit4:a4   Bit3:a3   Bit2:a2   Bit1:a1   Bit0:a0    <第2バイト>  白黒モード   Bit7:G  1=グラフィック     、0=キャラクタ   Bit6:V  1=バーチカルライン オン、0=バーチカルライン オフ   Bit5:U  1=アンダーライン  オン、0=アンダーライン  オフ   Bit4:O  1=オーバーライン  オン、0=オーバーライン  オフ   Bit3:0   Bit2:R  リバース ビデオ (Z2)   Bit1:B  ブリンク     (Z1)S=1の時 無効   Bit0:S  シークレット   (Z0)      カラー選択 (Bit3=1)   Bit7:緑  1=緑オン   、0=緑オフ *緑赤青信号は白黒モニタでは濃淡になる   Bit6:赤  1=赤オン   、0=赤オフ   111(明るい) <−> 000(暗い)   Bit5:青  1=青オン   、0=青オフ   Bit4:G  1=グラフィック、0=キャラクタ   Bit3:1   Bit2:0   Bit1:0   Bit0:0      カラー通常指定(Bit3=0)   Bit7:G   1=グラフィック     、0=キャラクタ   Bit6:V   1=バーチカルライン オン、0=バーチカルライン オフ   Bit5:U   1=アンダーライン  オン、0=アンダーライン  オフ   Bit4:O   1=オーバーライン  オン、0=オーバーライン  オフ   Bit3:0   Bit2:R   リバース ビデオ (Z2)   Bit1:B   ブリンク     (Z1)S=1の時 無効   Bit0:S   シークレット   (Z0)      Z2−Z0     111:リバースシークレット     110:リバースブリンク     101:リバースシークレット     100:リバース     011:シークレット     010:ブリンク     001:シークレット     000:ノーマル    特殊制御コード  ノントランスペアレント、トランスペアレント共に指定でき  2バイトのデータを指定します  <第1バイト>   Bit7:1 または 0   Bit6:1   Bit5:1   Bit4:0   Bit3:0   Bit2:0   Bit1:0   Bit0:0    <第2バイト>   Bit7:0   Bit6:0   Bit5:0   Bit4:0   Bit3:0   Bit2:I 1=特殊制御文字を検出時に割込み、ステータスNを1にする   Bit1:V 1=特殊制御文字を検出時から最終行まで表示停止   Bit0:D 1=特殊制御文字を検出時から最終行までDMA停止  
使用ポート 050H:パラメータ入出力 051H:コマンド入出力(ICWまたはOCWn)   ICWコマンド  CRTCのイニシャライズ(設定)を行います。  まずポート051Hに000Hを出力(ICW:RESETを実行)、  DMAの設定してから ポート050Hにパラメータ  (ICW SCREEN FORMAT1〜5)を順にデータを書き込みます。  OCW3の割り込みのマスクを設定したらDMAを実行するようにして  OCW2のDISPLAY STARTを行います  最後にポート040HのBit3を0(/CLDS)にして設定終了です    ICW:RESET   DMAアンダーライン(1行表示期間中にDMA転送が終了しない)以外の原因による   割り込みDMA要求が停止されVSP出力がアクティブになり   パラメータ(ICW:SCREEN FORMAT)書き込みが可能になります    Bit7:0    Bit6:0    Bit5:0    Bit4:0    Bit3:0    Bit2:0    Bit1:0    Bit0:0      ICW:SCREEN FORMAT1(パラメータ)   画面構成、同期信号幅、特殊文字、DMA制御の設定を行います。    Bit7:C/B 1=DMAキャラクタモード、0=DMAバーストモード    Bit6:H6    Bit5:H5    Bit4:H4    Bit3:H3    Bit2:H2    Bit1:H1    Bit0:H0       DMAバースト モード:1行分のデータを1度にDMA転送する     DMAキャラクタモード:1文字ごとにDMA転送           H6〜H0:1行に表示する文字数を設定します(000H〜04EH)                 n文字分表示するにはn−2を設定します。                 PC−8001は常に80文字で使用し、                 字際の40文字の切り換えはポート030HのBit0を使用します。                 80文字以上の値の指定は禁止されています。    ICW:SCREEN FORMAT2    Bit7:B1 B1〜B0 ブリンキング指定時間    Bit6:B0    Bit5:L5 L5〜L0 行数指定    Bit4:L4    Bit3:L3    Bit2:L2    Bit1:L1    Bit0:L0        B0〜B1:ブリンキングのタイミングを設定します。            カーソルブリングの明暗時間の比率は1:1、            アトリビュートブリンクの明暗時間の比率は3:1             00=カーソルブリング 16、アトリビュートブリング 32             01=カーソルブリング 32、アトリビュートブリング 64             10=カーソルブリング 48、アトリビュートブリング 96             11=カーソルブリング 64、アトリビュートブリング128      L5〜L0:行数指定            画面に表示する行数を設定します。            m行分表示するにはm−1を設定します。             000000:01行/画面             000001:02行/画面               |             010011:20行/画面               |             011000:25行/画面               |    ICW:SCREEN FORMAT3    Bit7:S  1=1行おきの表示、0=通常表示    Bit6:C1 C1〜C0 カーソル表示モード    Bit5:C0    Bit4:R4 R4〜R0 ライン数/文字指定    Bit3:R3    Bit2:R2    Bit1:R1    Bit0:R0        S=1にすると画面上では1行おきの表示がなされます。        L5〜L0で行数指定を25行にすると1行から13行までが1行おきに表示されます。      C1〜C0:カーソル表示モード            カーソルの種類を指定します。            ただし。ライン数/文字指定を13以下の場合はアンダーラインの指定をしても            カーソル表示はされません。             00:ブリンキング無し、アンダーラインカーソル             01:ブリンキング有り、アンダーラインカーソル             10:ブリンキング無し、カーソル             11:ブリンキング有り、反転ブロックカーソル      R4〜R0:ライン数/文字指定            1文字のライン数(ラスタ)を設定します。            n’ライン/文字数の指定はn’−1を設定します。             200ライン/25行= 8ライン/文字             200ライン/20行=10ライン/文字             400ライン/25行=16ライン/文字             400ライン/20行=20ライン/文字                00000:指定禁止              00001:指定禁止              00010: 3ライン/文字              00011: 4ライン/文字                |              00111: 8ライン/文字                |              01001:10ライン/文字                |              11111:32ライン/文字      ICW:SCREEN FORMA4    Bit7:V2 V2〜V0 垂直帰線幅    Bit6:V1    Bit5:V0    Bit4:Z4 Z4〜Z0 水平帰線幅    Bit3:Z3    Bit2:Z2    Bit1:Z1    Bit0:Z0      V2〜V0:垂直帰線幅を行数単位で設定します(1〜8)            n行分指定は場合はn−1を設定します            VRTC = 水平周波数 ÷ (垂直周波数×1文字のライン数) − 1画面に表示する行数             000:1行              |             101:6行(20行モード)             110:7行(25行モード)             111:8行        Z4〜Z0:水平帰線幅を文字数単位で設定します(6〜33)            m文字分指定は場合はm−1を設定します。            HRTC = 発振周波数 ÷ (水平周波数×8) − 1行に表示する文字数              PC−8001、200ラインの発信周波数 14.31818(MHz)                           水平周波数 15.98(KHz)                           垂直周波数 60(Hz)(実際には63.5?)              PC−8801、400ラインの発信周波数 21.0526(MHz)                           水平周波数 24.83(KHz)                           垂直周波数 55(Hz)              200ライン:20行 水平帰線幅=32、垂直帰線幅=6                   25行 水平帰線幅=32、垂直帰線幅=7            400ライン:20行 水平帰線幅=26、垂直帰線幅=2                   25行 水平帰線幅=26、垂直帰線幅=3               00000:使用禁止               |             00011:使用禁止             11110:32             11111:33    ICW:SCREEN FORMAT5    Bit7:AT1    Bit6:AT0    Bit5:SC    Bit4:A4  A4〜A0 最大アトリビュート/行指定    Bit3:A3    Bit2:A2    Bit1:A1    Bit0:A0      AT1、AT0、SC アトリビュートおよび特殊制御文字モード       000:トランスペアレント白黒、  特殊制御文字=有効       001:アトリビュート無し、    特殊制御文字=無効       010:トランスペアレントカラー、 特殊制御文字=有効       011:指定禁止       100:ノントランスペアレント白黒、特殊制御文字=有効       101:ノントランスペアレント白黒、特殊制御文字=無効       110:指定禁止       111:指定禁止         トランスペアレントは文字エリアとアトリビュートエリアを分離       ノントランスペアレントは文字コードとアトリビュートコードを混在します       ノントランスペアレントはBit7を文字かアトリビュートの区別に使うので       PC−8001では256キャラクタ使用の為トランスペアレントの指定を行います。        A4〜A0 最大アトリビュート数 (1〜20)        00000: 1個/行        00001: 2個/行        10011:20個/行        11111:32個/行(最大20個の為、使用不可)   OCWコマンド  ICWと同様にポート051Hにコマンドを送り、  パラメータがあるコマンドならポート050Hにパラメータが送られます    OCW1:STOP DISPLAY(出力)    Bit7:0    Bit6:0    Bit5:0    Bit4:0    Bit3:0    Bit2:0    Bit1:0    Bit0:0      ICWコマンドと同じです。(パラメータを書き込まない)      DMAアンダーラン以外の原因による割り込み要求、DMA要求が停止      VSP出力がアクティブになり、画面表示がされません。    OCW2:START DISPLAY(出力)    Bit7:0    Bit6:0    Bit5:1    Bit4:0    Bit3:0    Bit2:0    Bit1:0    Bit0:DM 1=反転表示、0=通常表示      DMAアンダーランによる割り込み要求、ステータスをクリアして      DMA要求を可能にして画面表示の開始を行います。      また反転表示は全ての画面を反転します。    OCW3:SET INTERRUPT MASK(出力)    Bit7:0    Bit6:1    Bit5:0    Bit4:0    Bit3:0    Bit2:0    Bit1:MN 1=特殊制御文字の割り込みの無効、0=特殊制御文字の割り込みの有効    Bit0:ME 1=画面終了時割り込みの無効  、0=画面終了時割り込みの有効      CRTCによる割り込み要求のマスクの指定を行います。      DMAをオートロードモードで使用している場合はMN=1、ME=1にします。    OCW4:READ LIGHT PEN(出力)    Bit7:0    Bit6:1    Bit5:1    Bit4:0    Bit3:0    Bit2:0    Bit1:0    Bit0:0        パラメータ(入力)       Bit7:HR       Bit6:CH POS       Bit5:CH POS       Bit4:CH POS       Bit3:CH POS       Bit2:CH POS       Bit1:CH POS       Bit0:CH POS         Bit7:0       Bit6:0       Bit5:ROW POS       Bit4:ROW POS       Bit3:ROW POS       Bit2:ROW POS       Bit1:ROW POS       Bit0:ROW POS      ライトペン入力信号が入力されたときの座標を読み込みます。      このコマンドの実行後にライトペン検出スターテスが0になります。      ライトペン信号が帰線時間中に入力された場合はHR=1になります。      また、このコマンドを使用した場合ライトペンのタイミング補正をソフトで行う必要があります。    OCW5:LOAD CURSOR POSISITION(出力)    Bit7:1    Bit6:0    Bit5:0    Bit4:0    Bit3:0    Bit2:0    Bit1:0    Bit0:CM 1=カーソル表示をする、0=カーソル表示をしない        パラメータ(入力)       Bit7:0       Bit6:CH POS       Bit5:CH POS       Bit4:CH POS       Bit3:CH POS       Bit2:CH POS       Bit1:CH POS       Bit0:CH POS         Bit7:0       Bit6:0       Bit5:ROW POS       Bit4:ROW POS       Bit3:ROW POS       Bit2:ROW POS       Bit1:ROW POS       Bit0:ROW POS         カーソル表示の指定を行い、カーソル位置を取得します         CM=1に設定した時点で次のパラメータを設定しなくても         DMA転送が行われる可能性があるのでカーソルが意図しない所から現れる(誤動作)場合があります。         誤動作を回避するにはDMA期間外で設定する必要があります。         つまり画面終了割り込みかVRTCのチェックをして垂直帰線期間が始まった直後に設定する事になります。    OCW6:RESET INTERRUPT(出力)    Bit7:1    Bit6:0    Bit5:1    Bit4:0    Bit3:0    Bit2:0    Bit1:0    Bit0:0      DMAアンダーラン以外の割り込み要求、ステータスのN、Eをクリアして      DMA要求を有効にします。    OCW7:RESET COUNTERS(出力)    Bit7:1    Bit6:1    Bit5:0    Bit4:0    Bit3:0    Bit2:0    Bit1:0    Bit0:0      内部カウンタ・リセットを1文字区間分発生して、内部カウンタを全てクリアします。    OCW8:READ STATUS(入力)    Bit7:0    Bit6:0    Bit5:0    Bit4:VE    Bit3:U    Bit2:N    Bit1:E    Bit0:LP      CRTC内のステータスフラグです。      DMAアンダーランが発生した場合U=1にして割り込み要求を発生し、VE=0にして表示を停止させます。         VE:Video Enable           1=Start Display           0=Reset or Stop DisplayまたはDMAアンダーラン発生         U :DMAアンダーラン           1=DMAアンダーラン発生           0=Start Display         N :特殊制御文字による割り込み、割り込み要求出力がアクティブ           1=特殊制御文字による割り込み発生           0=Reset Interrput、Reset Stop Display、Reset Counter         E :表示終了の割り込みが発生           1=表示終了による割り込み発生           0=Reset Interrput、Reset Stop Display、Reset Counter         LP:ライトペン信号           1=ライトペン信号           0=リード ライトペン  
DMA コントローラICは8257を使用 PC−8001ではCh2のみを使用しています。(CRTC用) PC−8001mkII、PC−8801ではCh0、Ch1が外部の拡張ポート(主にDMAタイプのFDD用)、Ch2がCRTC用になります またN、N80 BASICではオートロード・モードで使用する為、Ch2しか使用しません オートロード・モードでは一垂直画面ごとにDMAアドレスのロード、プリセットが行われます。    060H Ch0 DMAアドレス・セット     (拡張用スロットバス)   Bit7:A7   Bit6:A6   Bit5:A5   Bit4:A4   Bit3:A3   Bit2:A2   Bit1:A1   Bit0:A0     Bit7:A15   Bit6:A14   Bit5:A13   Bit4:A12   Bit3:A11   Bit2:A10   Bit1:A9   Bit0:A8    061H Ch0 ターミナル・カウンタ・セット  (拡張用スロットバス)   Bit7:C7   Bit6:C6   Bit5:C5   Bit4:C4   Bit3:C3   Bit2:C2   Bit1:C1   Bit0:C0     Bit7:Rd   Bit6:Wr   Bit5:C13   Bit4:C12   Bit3:C11   Bit2:C10   Bit1:C9   Bit0:C8      Rd=0、Wr=0 DMA ベリファイサイクル    Rd=0、Wr=1 DMA リード  サイクル    Rd=1、Wr=0 DMA ライト  サイクル    Rd=1、Wr=1 使用禁止    062H Ch1 DMAアドレス・セット     (拡張用スロットバス)        Ch0と同様    063H Ch1 ターミナル・カウンタ・セット  (拡張用スロットバス)        Ch0と同様    064H Ch2 DMAアドレス・セット     (VRAMアドレス)        Ch0と同様    065H Ch2 ターミナル・カウンタ・セット  (オペレーション+VRAMの大きさ)        Ch0と同様    066H Ch3 DMAアドレス・セット     (未使用)        Ch0と同様    067H Ch3 ターミナル・カウンタ・セット  (未使用)        Ch0と同様    068H モード・セット またはステータス・リード   モード・セット    Bit7:AL  1=イネーブル オートロードモード、0=ディスイネーブル オートロードモード    Bit6:TCS ターミナル・カウンタ ストップ    Bit5:EW  エクステンドライト    Bit4:RP  ローテション・プライオリィテイ    Bit3:EN3 1=イネーブル DMA Ch3、0=ディスイネーブル DMA Ch3    Bit2:EN2 1=イネーブル DMA Ch2、0=ディスイネーブル DMA Ch2    Bit1:EN1 1=イネーブル DMA Ch1、0=ディスイネーブル DMA Ch1    Bit0:EN0 1=イネーブル DMA Ch0、0=ディスイネーブル DMA Ch0     ステータス・リード    Bit7:0    Bit6:0    Bit5:0    Bit4:UP    Bit3:TC3    Bit2:TC2    Bit1:TC1    Bit0:TC0    
PEN STICK ライトペン回路を応用したジョイスティックで白黒CRT IFがある機種なら 全て利用可能となっています(4方向、1トリガー)    <例> 広告のサンプルより   LD A,060H    ;OCW4   LD (051H),A   IN A,(050H)   IN A,(050H)  ;ジョィステックの内容    
PC−8001のコーナへ Home へ戻る