はじめに
- 公式サイト
- 勝手にまとめています。
- 一部の用語は独自のものを使用しています。
- コードの動作確認(どころかアセンブルすら)していません。
- 手元に実物が無いのでほとんど妄想です。
- エミュレータ対応よろしくお願いします。
- 編集リクエストお待ちしております。
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 アトリビュートの設定
アトリビュート
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モード(デフォルト)
ld a,$50
out ($91),a
ld a,1
out ($93),a
xor a
out ($93),a
$51 初代機モード
画面優先順位設定コマンド
$60 画面優先順位の設定(下位8bit)
Command |
Data |
$60 |
画面優先順位の下位8bit ($00~$FF) |
$61 画面優先順位の設定(上位8bit)
Command |
Data |
$61 |
画面優先順位の上位8bit ($00~$FF) |
PC-6001mkII画面表示禁止コマンド
$70 画面表示許可
$71 画面表示禁止
画面左右切り取りコマンド
$80 画面切り取り設定(左端)
Command |
Data |
$80 |
切り取るドット数 ($00~$1F) |
$81 画面切り取り設定(右端)
Command |
Data |
$81 |
切り取るドット数 ($00~$1F) |