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=オン、0=オフ(PCG8100後期以降) d6:CTC カウンタ1出力 1=オン、0=オフ(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=オン、0=オフ 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定義データ(0E4H〜0E7H)の変更 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 へ戻る