mz-80K ディスプレイ周り
V−RAM ディスプレイコードとアスキーコード 左がディスレイコード、右がアスキーコード ディスプレイコードの並び方が一見バラバラにみえますが Aにはスペード、チ、Bには逆三角、コ...と000H−0BFHまで 通常、シフト、カナと040Hスライドしていきます この方式は海外仕様の本体でもCGROMの変更だけで済みます 40×25の1000文字を0D000H〜0D3E7HのV−RAMに割り当てられています ココにディスプレイコードを書込むとキャラクタ文字が出力されます ディスプレイコード040Hと080Hのスペースには mz−700で新たにキャラクタが定義されています(矢印の→と↓) ここをスペースとして使うとMZ−700以降では画面が化けます したがって通常のスペースは000Hを使用する事が望ましい事になります。 CPUメモリなのでプログラムを書いて実行もできますが その部分は当然ディスプレイコードで表示されます 領域は1KBなので0D3E8H〜0D3FFHは未使用(空き)となります またミラーとなるので0D400H、0D800H、0DC00Hは0D000Hと同じになります mz−1200以降はVRAM2KB、色情報テーブルRAM2KB(未実装) mz−80A/700以降はVRAM2KB、色情報テーブルRAM2KBの計4KB アクセス方法 VRAM領域にある0D000H〜0D3FFHに ディスプレイコードを書き込むだけなのですが /VBLANK期間内(4ms)に書き込まないと 一瞬画面にゴミのようなものが出てチラツキが発生します そこでPPI /VBLANK PC7=1からPC=0になるまで 監視する必要があります この監視部分が、かなりの速度低下につながります なにしろ全VRAMを単純なLDIRのブロック転送で チラツキ無しでは3回ほど分けないといけません またmz−80A/1200/700以降はでは CRTCによるサイクルスチールで監視する必要はなくなりました (ただしWAITが入る様になります) 監視はPC=0のチェックだけでは、 すぐに/VBLANKが切り換わってしまう場合(PC7=1)もあるので PC7=1からPC=0のチェックになります。 LOOP0:LD A,(0E002H) ;Waiting /VBLANK=1 RLCA JR NC,LOOP0 LOOP1:LD A,(0E002H) ;Waiting /VBLANK=0 RLCA JR NC,LOOP1 |
mz−80DU(未確認) CPU Z80A 4MHz ROM 2KB( 4KBまで拡張可) RAM 16KB(32KBまで拡張可) VRAM 18KB 8色 256×192ドット 42×24文字(6×8ドットマトリックス) 24色 128×192ドット 8色 、8階調 128×192ドット モノクロ、4階調 256×192ドット 00000H〜007FFH:モニタROM 00800H〜00FFFH:拡張ROM 01000H〜012FFH:ワークエリア 01300H〜04E0FH:ディスプレイプログラム(SP−3001) 04E10H〜04FFFH:C・Sエリア 05000H〜08FFFH:拡張RAM 09000H〜0A7FFH:VRAM赤 0A800H〜0AFFFH:空き 0B000H〜0C7FFH:VRAM緑 0C800H〜0CFFFH:空き 0D000H〜0E7FFH:VRAM青 0E800H〜0FFFFH:空き コマンド M :色調、階調モードの指定 B :Mコマンドに合ったが画面全体の色、階調の指定 C :ドット、直線、円、文字の色をMコマンドに合った色で指定 P :指定座標に1ドット表示 L :指定座標に直線表示 LW:指定座標に指定幅、指定色の棒線を引く(BOX) SR:画面上に文字(ASCII)表示 SF:指定座標に、指定角度で文字(ASCII)表示 W :スクロールのオン/オフ、表示する文字の行数、1行に表示する文字数の指定 CH:画面上の指定色をMコマンドに合った別の指定色に変更 CI:指定座標を中心に指定半径、指定角度の扇形、または円を描く PI:指定座標を中心に指定半径、指定角度の扇形、または円を同一色でぬりつぶす PO:指定座標に指定多角形を描き、多角形内を同一色でぬりつぶす MD:指定座標に1ドットを表示、カーソルコードで移動、カーソルコードで任意の座標にセット X :2個のX印で指定した座標間に直線、棒線、X印を中心に円、扇形、X印を基準にASCII文字を描く、X印はカーソルコードで移動可 CS:指定枠内の図形をスタディする。 枠のサイズ、位置は任意に指定できる CP:CSコマンドで作成した図形を指定座標に表示する TX:バッファ内に必要なテキスト作成 TL テキスト内のプログラムを画面上にリスト GO 作成したテキストプログラムの実行 ER 画面上の背景以外の図形クリア CR テキストバッファをクリア ED ダイレクトコマンドに復帰、テキストプログラムは保持 CD:画面上の指定座標の色データを出力 TR:システムから送られるデータをユニットの指定メモリに転送 RQ:ウニットの指定範囲のデータを出力 J :プログラムの実行番地を移す BK:プログラムリセット、コールドスタート LT:使用するプログラムエリアの制限 ・――――――――――――――――――――――――――――・ |色コード|モード 0|モード 1|モード 2|モード 3| |――――+―――――+―――――+―――――+―――――| | 0 | 黒 | 黒 | 黒 | 黒 | | 1 | 赤 | 赤2 | 赤1 | 灰1 | | 2 | 緑 | 緑2 | 赤2 | 灰2 | | 3 | 黄 | 黄2 | 赤3 | 灰3 | | 4 | 青 | 青2 | 赤4 | 白 | | 5 |マゼンダ |マゼンダ3| 赤5 | | | 6 | シアン | シアン2| 赤6 | | | 7 | 白 | 白 | 赤7 | | | 8 | | 赤1 | 赤8 | | | 9 | | 緑1 | 緑1 | | | 10 | | 青1 | 緑2 | | | 11 | | 黄1 | 緑3 | | | 12 | |マゼンダ1| 緑4 | | | 13 | | シアン1| 緑5 | | | 14 | | 灰 | 緑6 | | | 15 | | 緑3 | 緑7 | | | 16 | | 青3 | 緑8 | | | 17 | | シアン3| 青1 | | | 18 | | 赤3 | 青2 | | | 19 | | 青4 | 青3 | | | 20 | |マゼンダ4| 青4 | | | 21 | |マゼンダ2| 青5 | | | 22 | | 緑4 | 青6 | | | 23 | | 黄3 | 青7 | | | 24 | | | 青8 | | | 25 | | | 黄1 | | | 26 | | | 黄2 | | | 27 | | | 黄3 | | | 28 | | | 黄4 | | | 29 | | | 黄5 | | | 30 | | | 黄6 | | | 31 | | | 黄7 | | | 32 | | | 黄8 | | | 33 | | |マゼンダ1| | | 34 | | |マゼンダ2| | | 35 | | |マゼンダ3| | | 36 | | |マゼンダ4| | | 37 | | |マゼンダ5| | | 38 | | |マゼンダ6| | | 39 | | |マゼンダ7| | | 40 | | |マゼンダ8| | | 41 | | | シアン1| | | 42 | | | シアン2| | | 43 | | | シアン3| | | 44 | | | シアン4| | | 45 | | | シアン5| | | 46 | | | シアン6| | | 47 | | | シアン7| | | 48 | | | シアン8| | | 49 | | | 白1 | | | 50 | | | 白2 | | | 51 | | | 白3 | | | 52 | | | 白4 | | | 53 | | | 白5 | | | 54 | | | 白6 | | | 55 | | | 白7 | | | 56 | | | 白8 | | ・――――――――――――――――――――――――――――・
PCG1200 PCG700と同一ハードのようです またPCG8000ではCPUとPCG基板を挟んで制御信号を取っていたのですが mz−80K2以降CPUが直付けとなり装着が困難でしたが PCG1200は本体の外部バスから制御しています 対応機種はmz−80C/K2/K2E/1200です mz−80Kが対象外なのはおそらくCG ROMの違いの為か不明 PCG700/PCG1200の使用ポート 0E010H:PCG用のキャラクタデータ d7:CG−RAM D7 d6:CG−RAM D6 d5:CG−RAM D5 d4:CG−RAM D4 d3:CG−RAM D3 d2:CG−RAM D2 d1:CG−RAM D1 d0:CG−RAM D0 0E011H:PCG用のアドレス下位 d7:CG−RAM A7 d6:CG−RAM A6 d5:CG−RAM A5 d4:CG−RAM A4 d3:CG−RAM A3 d2:CG−RAM A2 d1:CG−RAM A1 d0:CG−RAM A0 0E012H:PCG用のコントロール、アドレス上位 d7:未使用 d6: 〃 d5:CG−ROMのコピー 1→0でCG−ROMからCG−RAMへコピー d4:CG−RAMの書き込み 1→0でCG−RAMに書き込む d3:SSW 1=PCGオフ、0=PCGオン d2:CG−RAMセレクト (CG−RAM A10) d1:CG−RAM A9 d0:CG−RAM A8 PCGの定義はデータ、アドレス下位をセットして、 アドレス上位+書き込みを1にして書き込み すぐに書き込みを0にしていかないと 後から勝手に定義される場合があるので 必ずPCGデータを書き込みした後 すぐに書き込みを0にするようにします SSW(ソフトウェアSW)の他にHSW(ハードウェアSW)がありますが HSWはSSWの信号の接続するかしないかに使用されています またmz−700ではバンク切り替えでポートとメモリが切り替わっても このポートはアクセスされるようです(ゲームソフトのゼラトールで確認) ADVANCED MZ−700のPCGコンパチ基板では SSW部分はハードのトルグスイッチとなっています PCG8000 0E010H:PCG用のキャラクタデータ d7:CG−RAM D7 d6:CG−RAM D6 d5:CG−RAM D5 d4:CG−RAM D4 d3:CG−RAM D3 d2:CG−RAM D2 d1:CG−RAM D1 d0:CG−RAM D0 0E011H:PCG用のアドレス下位 d7:CG−RAM A7 d6:CG−RAM A6 d5:CG−RAM A5 d4:CG−RAM A4 d3:CG−RAM A3 d2:CG−RAM A2 d1:CG−RAM A1 d0:CG−RAM A0 0E012H:PCG用のコントロール、アドレス上位 d7:未使用 d6: 〃 d5:CG−ROMのコピー 1→0でCG−ROMからCG−RAMへコピー d4:CG−RAMの書き込み 1→0でCG−RAMに書き込む d3:未使用 d2: 〃 d1:CG−RAM A9 d0:CG−RAM A8 PCG8000とPCG1200(PCG700)との違い SSWの有無 PCG8000 無し、PCG700 有り キャラクタ定義数 PCG8000 128、PCG700 256 接続方法 PCG8000 CPUバス、PCG700 外部 バス PCG700ではハードを完全に切り離す事が出来るジャンパGSWがあります PCG1200には取り除かれています またロータスのゲームボードGB−10はPCG8000コンパチとなります
カラーディスプレイ・アダプタ (注)I/O 1981年9月号の本体を改造する記事です。 0E0C1H:カラーデータ d7:未使用 d6:フロント赤 d5:フロント緑 d4:フロント青 d3:未使用 d2:バック 赤 d1:バック 緑 d0:バック 青 V−RAM 0D000H〜0D3FFHに裏RAMを増設します 通常と同じくVRAMにディスプレイコードを書き込むと 0E0C1Hのカラーデータが裏RAMに書き込まれ カラーデータとしてカラーモニタに出力されます <例> 0E0C1Hに047H(フロント赤、バック白)を書き込む 0D000Hに001H(ディスレイコード A)を書き込む 画面左上に白地に赤いAが表示される
COLOR GAL5 (注)I/O 1984年3月号の吉喜工業のカラーギャル公開記事 0E00CH:カラーデータ d7:未使用 d6:バック 赤 d5:バック 緑 d4:バック 青 d3:未使用 d2:フロント赤 d1:フロント緑 d0:フロント青 V−RAM 0D000H〜0D3FFHに裏RAMを増設します 通常と同じくVRAMにディスプレイコードを書き込むと 0E00CHのカラーデータが裏RAMに書き込まれ カラーデータとしてカラーモニタに出力されます <例> 0E00CHに047H(バック赤、フロント白)を書き込む 0D000Hに001H(ディスレイコード A)を書き込む 画面左上に赤地に白いAが表示される 以降VRAMにディスレイコードを書き込むと 赤地に白いディスレイコードが表示されます
グラフィック (注)I/O 1982年 3月号の本体を改造する記事です。 0E010H:グラフィック画面オフ、メインRAM 0E011H:グラフィック画面オフ、G−RAM 0E012H:グラフィック画面オン、メインRAM 0E013H:グラフィック画面オン、G−RAM G−RAMのアドレスは0B000H〜0CFFFH(使用領域は0B000H〜0CF3FH)で 320×200ドットの表示をします。 データd0がドットの左でd7が右のドットになります。 0B000H・――――――――――――――――――――――――――・0B027H |―+―+―+―+ +―+―+―| | | | | |―+―+―+―+ +―+―+―| 0CF18H・――――――――――――――――――――――――――・0CF3FH 1ドットのデータのビット順 01234567
mz−80Kのコーナへ Home へ戻る