Edited at

[P6MK2VGA] リファレンス

More than 1 year has passed since last update.


はじめに


  • 公式サイト

  • 勝手にまとめています。

  • 一部の用語は独自のものを使用しています。

  • コードの動作確認(どころかアセンブルすら)していません。

  • 手元に実物が無いのでほとんど妄想です。

  • エミュレータ対応よろしくお願いします。

  • 編集リクエストお待ちしております。


I/O

address
name

$91
DATA

$93
STROBE

$C0
STATUS


DATA ($91)

送信したいCommandまたはDataを書き込む。


STROBE ($93)

data
description

$01
Command送信

$00
Data送信


STATUS ($C0)

bit
description

7-2
(reserved)

1
VBlank (0:垂直帰線期間)

0
(reserved)


基本的なコマンド送信手順

ld      a,Command

out ($91),a
ld a,1
out ($93),a ;send Command
ld a,Data
out ($91),a
ld a,0
out ($93),a ;send Data


用語集

用語
説明

スプライト番号
0~255(\$00~$FF)で指定。同時に256枚の表示が可能。表示優先は0が一番高く、255が一番低い。水平方向に20枚までしか表示出来ない。20枚を超えるとスプライト番号の小さいものから消えていく。

属性
スプライトの各種設定。アトリビュート、座標、キャラクタ番号、リンク。

アトリビュート
スプライトの表示/非表示、反転、回転などの設定を行う。

X座標
0~511(\$000~$1FF)で指定。表示領域は16〜335(初代機モードでは16~271)。

Y座標
0~255(\$00~$FF)で指定。表示領域は16〜215(初代機モードでは16~207)。

リンク
スレーブに設定したスプライトは、指定したマスターからのオフセット座標に表示される。座標更新が不要になるのでPC側の処理が軽くなる(と思われる)。デカキャラなどに使用すると良い。

キャラクタ番号
0〜191(\$00~$BF)で指定。16x16で192パターンの定義が可能。スプライトに表示させるキャラクタの番号。

画面優先順位
16bit。bit0~15がPC側の色番号0~15に対応。bitが立っている色番号のPC側のドットはスプライトよりも優先が高くなる。

スクロール値
0~319(\$000~$13F)で指定。PC側の画面をスクロールさせることが出来る。数値を増やすと左方向にスクロールする。

画面切り取り
横スクロール時に画面端の書き換えが見えないようにするために使用する。


Command


スプライト関連コマンド


$10 属性の設定を行うスプライト番号の指定

Command
Data

$10
スプライト番号 (\$00~$FF)


  • これでスプライト番号を指定した後、属性(アトリビュート、座標、キャラクタ番号、リンク)の変更を行う。


$20 アトリビュートの設定

Command
Data

$20
アトリビュート


アトリビュート

bit
name
description

7-6
QUAD
00:左上, 01:右上, 10:左下, 11:右下

5
SIZE
0:16x16, 1:8x8

4
LINK
0:マスター, 1:スレーブ

3
ROTATE
0:回転なし, 1:左90°回転

2
VFLIP
1:上下反転

1
HFLIP
1:左右反転

0
VISIBLE
0:非表示, 1:表示


  • 回転→反転の順に処理される。

  • SIZE=1(8x8)の場合、QUADで指定した位置のキャラクタが指定した座標の位置に表示される。


    • SIZE=0(16x16)のときのQUADの影響については未検証。




$21 X座標の設定(下位1bit)

Command
Data

$21
X座標の下位1bit (\$00~$01)


  • 範囲外の値に関しては未検証。


$22 X座標の設定(上位8bit)

Command
Data

$22
X座標の上位8bit (\$00~$FF)


$23 Y座標の設定

Command
Data

$23
Y座標 (\$00~$FF)


$24 キャラクタ番号の設定

Command
Data

$24
キャラクタ番号 (\$00~$BF)


  • 範囲外の値に関しては未検証。


$25 リンクの設定

Command
Data

$25
マスターのスプライト番号 (\$00~$FF)


  • スレーブのスプライトを指定してはいけない。


    • どうなるのかは未検証。



  • 座標指定は、マスターからのオフセットになる。


    • 基準座標や、回転/反転による影響などは未検証。(おそらく影響は無いと思われる)




$30 キャラクタデータの設定

Command
Data
Data2

$30
キャラクタ番号 (\$00~$BF)
キャラクタデータ (128バイト)


  • Command/Data送信後にキャラクタデータを送信する。

    ld      a,$30       ;コマンド

out ($91),a
ld a,1
out ($93),a
ld a,$00 ;キャラクタ番号
out ($91),a
xor a
out ($93),a

ld hl,data ;キャラクタデータ
ld b,64 ;2バイト×64回
loop:
;+0
ld a,(hl)
out ($91),a
ld a,1
out ($93),a
inc hl
;+1
ld a,(hl)
inc hl
out ($91),a
xor a
out ($93),a
inc hl

djnz loop


スクロール関連コマンド


$40 スクロール値の設定(下位1bit)

Command
Data

$40
スクロール値の下位1bit (\$00~$01)


  • 初代機の画面モードでは使用しない。

  • 範囲外の値に関しては未検証。


$41 スクロール値の設定(上位8bit)

Command
Data

$41
スクロール値の上位8bit (\$00~$FF)


  • 初代機の画面モードではこの値(上位8bit)のみ使用する。


    • スクロール値は0~255(\$00~$FF)ということ。



  • 範囲外の値に関しては未検証。


画面サイズ切り替えコマンド


$50 mkIIモード(デフォルト)

Command
Data

$50
-


  • Dataは無いがSTROBEへの書き込みは必要。

ld      a,$50

out ($91),a
ld a,1
out ($93),a
xor a
out ($93),a


$51 初代機モード

Command
Data

$51
-


  • Dataは無いがSTROBEへの書き込みは必要。


画面優先順位設定コマンド


$60 画面優先順位の設定(下位8bit)

Command
Data

$60
画面優先順位の下位8bit (\$00~$FF)


$61 画面優先順位の設定(上位8bit)

Command
Data

$61
画面優先順位の上位8bit (\$00~$FF)


PC-6001mkII画面表示禁止コマンド


$70 画面表示許可

Command
Data

$70
-


  • Dataは無いがSTROBEへの書き込みは必要。


$71 画面表示禁止

Command
Data

$71
-


  • Dataは無いがSTROBEへの書き込みは必要。


画面左右切り取りコマンド


$80 画面切り取り設定(左端)

Command
Data

$80
切り取るドット数 (\$00~$1F)


  • 範囲外の値に関しては未検証。


$81 画面切り取り設定(右端)

Command
Data

$81
切り取るドット数 (\$00~$1F)


  • 範囲外の値に関しては未検証。