PCG8100


まずHAL研究所からPCG8100がPC−8001用として発売されました。 このハードが基準となり、ゲームロータスボード、PSA等のコンパチ製品が発売されます。 ただ単純な定義は互換があったのですが、 キャラクタジェネレータのROMコピーモードが無いのと PCGのCGRAMとCGROMの切り換えが トルグSWやらソフト切り換えで不具合が幾つかでています。 また初期ロットのPCG8100の音は1声しかなく 後期では3声に変更され、尚且つソフトウェアスイッチが追加されています    000H(出力) PCG RAM 定義データ   d7:PCG RAM db7   d6:PCG RAM db6   d5:PCG RAM db5   d4:PCG RAM db4   d3:PCG RAM db3   d2:PCG RAM db2   d1:PCG RAM db1   d0:PCG RAM db0      001H(出力) PCG アドレス下位   d7:PCG RAM ad7   d6:PCG RAM ad6   d5:PCG RAM ad5   d4:PCG RAM ad4   d3:PCG RAM ad3   d2:PCG RAM ad2   d1:PCG RAM ad1   d0:PCG RAM ad0    002H(出力) PCG アドレス上位+コントロール   d7:CTC カウンタ2出力    1=On、0=Off(PCG8100後期以降)   d6:CTC カウンタ1出力    1=On、0=Off(PCG8100後期以降)   d5:CB1 PCG ROMコピー 1→0でCG ROMからPCG RAMへコピー(PCG−8100のみ可)   d4:CB0 PCG RAMライト 1→0でPCG RAMライト   d3:CTC カウンタ0出力    1=On、0=Off   d2:PCG RAM ad10    (PCG8200/8800のみ)   d1:PCG RAM ad9   d0:PCG RAM ad8      *d7、6は3声対応のPCGのみ     d2はPCG8200/8800はPCG RAM ad10          PCG8100     は未使用     PCG RAM アドレス    PCG8100ではアスキーコード080H−0FFHの    128キャラクタ定義が出来ます    アドレスの指定は00000H−03FFHまでが有効    PCG RAMアドレス 0000Hは    アスキーコード080Hのアドレスになります     PCG ROMコピー    指定したPCG アドレスのROMデータを    同アドレスのPCG RAMへ1バイトコピーを行ないます    1キャラのコピーは8回必要になります     PCG RAMライト    ポート000Hで設定した定義データを    指定したPCG RAMアドレスに1バイト書き込みを行います    1キャラの定義は8回必要になります      003H(出力) PCG ROM/RAM セレクト(PCG8200/8800)   d7:未使用   d6:未使用   d5:未使用   d4:定義するPCG RAMの選択          1=RAM−1、0=RAM−0   d3:表示するハイコード               1=RAM  、0=CG ROM   d2:表示するハイコード d3で1を選択した場合のみ 1=RAM−1、0=RAM−0   d1:表示するローコード               1=RAM  、0=CG ROM   d0:表示するローコード d1で1を選択した場合のみ 1=RAM−1、0=RAM−0      ここがPCG RAMとCG ROMの切り換えスイッチにあたります。    ハイコードというのはアスキーコードの080H〜0FFHで、    ローコードはアスキーコードの000H〜07FHになります    PCG8100がハイコード部分の080H〜0FFHしか定義できないのに対して    PCG8200/8800は000H〜0FFHの全てが定義でき、    定義RAMは2つのバンクを持っている事になります    PCG8100モードと呼ばれるのはOUT 3,&H08ないしOUT 3,&H1Cになります。    PCG8100はフロントにあるトルグSWで切り替えを行います    00CH 8253 カウンタ0(動作クロックは4MHz)  00DH 8253 カウンタ1  00EH 8253 カウンタ2  00FH 8253 コントロール   d7:SC1   d6:SC0   d5:RL1   d4:RL0   d3:M2   d2:M1   d1:M0   d0:BCD 1=BCDカウント、0=バイナリカウント     SCn=カウンタnの指定    SC1=0、SC0=0:カウンタ0を選択    SC1=0、SC0=1:カウンタ1を選択    SC1=1、SC0=0:カウンタ2を選択    SC1=1、SC0=1:組み合わせ禁止     RLn=カウンタのデータ指定    RL1=0、RL0=0:カウンタ・ラッチングオペレーション    RL1=0、RL0=1:下位8ビットのみロード    RL1=1、RL0=0:上位8ビットのみロード    RL1=1、RL0=1:下位8ビット、上位8ビットの順でロード     Mn=モード指定    M2=0、M1=0、M0=0:モード0 Lレベル立ち上がり=カウント不可、立ち上がり=無し、Hレベル=カウント可    M2=0、M1=0、M0=1:モード1 Lレベル立ち上がり=無し、立ち上がり=カウント開始 再トリガ、Hレベル=無し    M2=X、M1=1、M0=0:モード2 Lレベル立ち上がり=カウント不可、カウント出力を強制的にH、立ち上がり=カウント開始、Hレベル=カウント可    M2=X、M1=1、M0=1:モード3 Lレベル立ち上がり=カウント不可、カウント出力を強制的にH、立ち上がり=カウント開始、Hレベル=カウント可    M2=1、M1=0、M0=0:モード4 Lレベル立ち上がり=カウント不可、立ち上がり=無し、Hレベル=カウント可    M2=1、M1=0、M0=1:モード5 Lレベル立ち上がり=無し、立ち上がり=カウント開始、Hレベル=無し    後期のPCG8100からサウンド周りの変更に伴い、初期設定の方法が変更されており、  初期ロットのPCG8100で製作されたソフトによっては途中から音が鳴る場合があります。(PCG8200/8800も同様)  そこで最初にOUT&H0F,&H36を実行すれば音が鳴る場合があります。  また電源投入時に音が発生する場合があります  これはPCG内の8253の初期化が行なわれない為に極まれに起こる現象で  OUT2,0で出力を止めるか8253の初期化を行います  
PCG定義  1.キャラクタ定義データをポート000Hに書き込む  2.PCG 下位アドレスをポート001Hに書き込む  3.PCG 上位アドレスをポート002Hに書き込む  4.ポート002Hのd4を1にする  5.ポート002Hのd4を0にする  6.残りのラインも同様に定義する     キャラクタジェネレータコピー  1.PCG 下位アドレスをポート001Hに書き込む  2.PCG 上位アドレスをポート002Hに書き込む  3.ポート002Hのd5〜4を11にする  4.ポート002Hのd5〜4を00にする  5.残りのラインも同様に定義する   <例> CHR&H80〜&HFFを縦縞にする  10 D=&HAA  20 FOR AD=0 TO &H3FF  30 AH=AD\256:AL=AD MOD 256  40 OUT 0,D:OUT 1,AL:OUT 2,AH+&H10:OUT 2,AH  50 NEXT AD    
PC8100のソフトをPCG8200/8800で使用する場合 PC−8001+PCG8100はトルグSWでPCG機能のオン・オフを行いますが PC−8001mkII+PCG8200、PC−8801+PCG8800では ポート003Hの出力でPCG機能のオン・オフを行います   OUT3,8またはOUT3,8:OUT15,54を実行して ソフトを動かせばよいわけですがソフトによっては PCまたはPC+PCGで動作を途中で聞いてくるソフトもあり OUT3,8で起動、尚且つカナ文字等を使われている部分が ランダムパターンで読めず不便になります そこでソフトごとにプログラムを書き換える必要があります     スペース・マウス I/O’81年10月号の場合  BASICプログラムでPCGの有無を  聞いてくるので下記のように追加   190 G$=INKEY$:IF G$="y"THEN POKE&HE14E,1:…           ↓   190 G$=INKEY$:IF G$="y"THEN OUT3,8:OUT15,54:POKE&HE14E,1:…   PORTER I/O’82年10月号の場合  CGROMコピー機能使用の為  キャラクタ化けが生じるのでキャラクタ定義します  HAL研のサンプルプログラムと同様なので  定義データは128個分ありフラグ群でPCG定義、コピーを判断しているので  全て定義する様にしても良いのですが  今回は最低限化けると思われるCHR(0E4H〜0E7H)を定義します  エミュレータによってはROMコピー機能が使用で出来たり  最初からPCGのRAM領域にCGデータの内容が入っている等  必要ありませんが本来ランダムパターンになっているので  実機ではこの修正が必要になります    まずPC版の修正(訂正記事)   1075 DEFFNG(X,Y)=&HF302+2*X+120*Y    次にPCG版の修正(訂正記事)   1075 DEFFNG(X,Y)=&HF302+2*X+120*Y    変更リストの追加   D94F:87 → 8D (訂正記事ではアドレスが違うので注意)    これで修正済みのPC版とPCG版を作成して  PCG版を全PCG(8100/8200/8800)用に変更します    PCG定義フラグ群の変更    DA9C:01 → F1 (フラグ群)    PCG定義データの変更   DDC0:01 03 07 0F 1F 3F 7F FF 80 C0 E0 F0 F8 FC FE FF   DDD0:FF 7F 3F 1F 0F 07 03 01 FF FE FC F8 F0 E0 C0 80    BASIC部分の変更   1010 DEFINT A-Z:DEFSNG F:OUT3,8:OUT15,54:OUT2,0:OUT15,54:DT=-1:MT=3    
PC−8001のコーナへ Home へ戻る