HuC6272(KING)

BG転送SCSI転送, ADPCM転送, RAINBOW転送 等の処理を行うチップ

MainRAM のデータを直接扱うことはできないので、データを KRAMに転送しておく必要がある。

I/Oポートアドレス

レジスタ(W)600h
ステータス(R)600h
ステータス2(R)602h
データ(R/W)604h
データ2(R/W)606h

ステータス

600Hb6-b0レジスタ番号
602Hb0
b1?
b2I/O
b3C/D
b4MSG
b5REQ
b6BSY
b7?
b8-15

レジスタ (SCSI関連)

00h SCSI DATAバスデータ

アドレスREADWRITE
604Hb0-b7SCSI BUS
b8-b150

01h

アドレスREADWRITE
604Hb0BSY
b1
b2SEL
b3
b4ACK
b5
b6
b7RST
b8-b150

02h

アドレスREADWRITE
604Hb01 で転送できるようにする
b1
b2
b3
b4
b5
b6
b7
b8-b150

03h

アドレスREADWRITE
604Hb0I/O
b1C/D
b2MSG
b3
b4
b5
b6
b7
b8-b150

05h

アドレスREADWRITE
604Hb0不明
b1
b2
b3
b4
b5
b60=転送不可 / 1=転送可
b7
b8-b150
606Hb0-b7I/O転送用
b8-b150

07h

アドレスREADWRITE
604Hb0-b15不明不明

09h

アドレスREADWRITE
604Hb0-b31DMA 転送アドレス

0Ah

アドレスREADWRITE
604Hb0-b31DMA 転送サイズ

0Bh

アドレスREADWRITE
604Hb0-b15不明0001h = MainRam転送
0003h = KRAM転送

レジスタ (KRAM関連)

0Ch KRAM 読み込みアドレス(Word)

KRAM の読み込みアドレスを指定する。

bit0-17アドレス(0〜3FFFFh)
bit18-27アドレス増分(0〜511)
bit31ページ(0〜1)

0Dh KRAM 書き込みアドレス(Word)

KRAM の書き込みアドレスを指定する。

bit0-17アドレス(0〜3FFFFh)
bit18-27アドレス増分(0〜511)
bit31ページ(0〜1)

0Eh KRAM 読み書きデータ(Half)

reg 0Ch または reg 0Dh で指定されたアドレスのデータを入出力する。

0Fh KRAM ページ設定(Half)

KING の各機能が使用する KRAM のページを指定する

bit0SCSI が使用するページ(0〜1)
bit8BG が使用するページ(0〜1)
bit16RAINBOW が使用するページ(0〜1)
bit24ADPCM が使用するページ(0〜1)

レジスタ (BG関連)

10h BGモード(Half)

BG のモード設定。

bit3-bit0BG0 のモード
bit7-bit4BG1 のモード
bit11-bit8BG2 のモード
bit15-bit12BG3 のモード

モードとして設定する値は以下の通り

0未使用
14 palette
216 palette
3256 palette
464k color
516M color
94 palette block mode
1016 palette block mode
11256 palette block mode

12h プライオリティ(Half)

BG のプライオリティ設定。

bit2-bit0BG0 のプライオリティ
bit5-bit3BG1 のプライオリティ
bit8-bit6BG2 のプライオリティ
bit11-bit9BG3 のプライオリティ
bit14-bit12回転するなら1

設定できる値は以下の通り。ここで設定するプライオリティはNew鉄観音で設定するプライオリティと矛盾してはいけない。

0表示しない
1最後面
2最後面から1面前
3最後面から2面前
4最前面
5〜7設定禁止

13h マイクロプログラムアドレス(Half)

マイクロプログラムを書き込むアドレスを指定する。

14h マイクロプログラムデータ(Half)

マイクロプログラムへ書き込むデータを出力する。

15h マイクロプログラムコントロール(Half)

マイクロプログラムの制御を行う。

0で動作停止、1で動作可?

16h SUB screen mode(Half)

副画面のモード設定。設定値の詳細は不明。

20h BG0 BAT アドレス(Half)

BG0 の BAT アドレスを指定する。指定する値はアドレスを 1024 で割った値。

21h BG0 CG アドレス(Half)

BG0 の CG アドレスを指定する。指定する値はアドレスを 1024 で割った値。

22h BG0sub BAT アドレス(Half)

BG0sub の BAT アドレスを指定する。指定する値はアドレスを 1024 で割った値。

23h BG0sub CG アドレス(Half)

BG0sub の CG アドレスを指定する。指定する値はアドレスを 1024 で割った値。

24h BG1 BAT アドレス(Half)

BG1 の BAT アドレスを指定する。指定する値はアドレスを 1024 で割った値。

25h BG1 CG アドレス(Half)

BG1 の CG アドレスを指定する。指定する値はアドレスを 1024 で割った値。

28h BG2 BAT アドレス(Half)

BG2 の BAT アドレスを指定する。指定する値はアドレスを 1024 で割った値。

29h BG2 CG アドレス(Half)

BG2 の CG アドレスを指定する。指定する値はアドレスを 1024 で割った値。

2Ah BG3 BAT アドレス(Half)

BG3 の BAT アドレスを指定する。指定する値はアドレスを 1024 で割った値。

2Bh BG3 CG アドレス(Half)

BG3 の CG アドレスを指定する。指定する値はアドレスを 1024 で割った値。

2Ch BG0 size(Half)

BG0 のサイズを指定する。

設定値大きさ
8888h32x32(256x256)
8989h32x64(256x512)
9898h64x32(512x256)

2Dh BG1 size(Half)

BG1 のサイズを指定する。設定値は reg 2Ch と同じ。

2Eh BG2 size(Half)

BG2 のサイズを指定する。設定値は reg 2Ch と同じ。

2Fh BG3 size(Half)

BG3 のサイズを指定する。設定値は reg 2Ch と同じ。

30h BG0 X scroll(Half)

BG0 の左上 X 座標を指定する。

31h BG0 Y scroll(Half)

BG0 の左上 Y 座標を指定する。

32h BG1 X scroll(Half)

BG1 の左上 X 座標を指定する。

33h BG1 Y scroll(Half)

BG1 の左上 Y 座標を指定する。

34h BG2 X scroll(Half)

BG2 の左上 X 座標を指定する。

35h BG2 Y scroll(Half)

BG2 の左上 Y 座標を指定する。

36h BG3 X scroll(Half)

BG3 の左上 X 座標を指定する。

37h BG3 Y scroll(Half)

BG3 の左上 Y 座標を指定する。

レジスタ (RAINBOW関連)

40h RAINBOW転送 コントロール(half)

1 で転送。

41h RAINBOW転送 KRAMアドレス(word)

RAINBOW に転送するデータの KRAM アドレスを指定する。

42h RAINBOW転送 転送開始位置(half)

RAINBOW 転送を開始する Y 位置。

43h RAINBOW転送 転送ブロックサイズ(half)

RAINBOW に転送するデータのブロック数(1block=16dot?)を指定する。

44h RAINBOW転送 不明(half)

レジスタ (ADPCM関連)

50h ADPCM コントロール(half)

bit0channel 0 の再生
0=停止 / 1=再生
bit1channel 1 の再生
0=停止 / 1=再生
bit3-2サンプリングレート
00=32kHz
01=16kHz
10=8kHz
11=4kHz
bit7-4不明

51h ADPCM channel 0 バッファモード(half)

リングバッファモードにすると、指定バッファの内容をループ再生します。 中間アドレスを使えば、ストリーミング再生も可能(だと思う)。

bit0バッファモード
0=通常 / 1=RING Buffer
bit1終了割り込み
0=禁止 / 1=許可
bit2中間割り込み
0=禁止 / 1=許可

52h ADPCM channel 1 バッファモード(half)

内容は reg 51h と同じ

53h ADPCM ステータス(half)

このレジスタの内容を読むと、フラグは 0 に設定される。

割り込みを使用する時には、割り込みルーチン内でこのレジスタを読み取ってフラグをクリアする必要があります。クリアしないと永遠に割り込み要求が発生するのでハングアップ状態になります。

bit0channel 0 の再生アドレスが終了アドレスに来ると 1 になる
bit1channel 0 の再生アドレスが中間アドレスに来ると 1 になる
bit2channel 1 の再生アドレスが終了アドレスに来ると 1 になる
bit3channel 1 の再生アドレスが中間アドレスに来ると 1 になる

58h ADPCM channel0 開始アドレス(half)

開始ブロック番号を指定する。1ブロックは256[half word]。

59h ADPCM channel0 終了アドレス(word)

終了アドレスを指定する。 開始ブロック番号 * 256 + データサイズ[byte] / 2 - 1 を指定すればいいらしい。

5Ah ADPCM channel0 中間アドレス(half)

中間アドレスを指定する。 (開始ブロック番号 * 256 + 発生オフセット[byte] / 2) / 64 を指定すれば良いらしい。

5Ch ADPCM channel1 開始アドレス(half)

内容は reg 58h と同じ

5Dh ADPCM channel1 終了アドレス(word)

内容は reg 59h と同じ

5Eh ADPCM channel1 中間アドレス(half)

内容は reg 5Ah と同じ

マイクロプログラム

KING の BG は MicroProgram にしたがって生成されます。MicroProgram は KRAM のデータをどのようにNEW鉄観音へ出力するかを記述したプログラムです。

MicroProgram は 16[HalfWord] の空間を持ち、アドレスの 0〜7 番地を A バンク、8〜15 番地を B バンクと呼びます。

マイクロプログラムコードの意味

bit2-0オフセット
アクセスするデータのオフセットを指定します。
bit5 が 1 (回転面)の場合は 0 を指定します。
bit4-3アクセスデータ種類
00=CGデータをアクセスします。
01=読み込んだ BAT データに関係する CG データをアクセスします。
10=BAT データを読み込む
bit5回転フラグ
このビットを 1 にすると回転処理を行います。
bit7-6BG面番号
このオペコードがどの BG 面に対する物かを指定します。
bit8NOP フラグ
このビットを 1 にすると、bit7-0は無視され何も動作を行いません。
bit15-9未使用

制限

A バンクと B バンクにまたがった MicroProgram を記述することは出来ません。

16M色の画面が含まれる場合は、回転処理を行うことができません。

非回転面のデータ幅が 1dot あたり 16bit 以内であること。例えば 64k色画面を 2面作成したり、256色画面を 3面作成することはできません。

回転面を BG0 面以外に設定することはできません。

16M色モード / 64k色モード のマイクロプログラム例

コード動作内容
0000+0 の CG をアクセスする
0001+1 の CG をアクセスする
0002+2 の CG をアクセスする
0003+3 の CG をアクセスする
0004+4 の CG をアクセスする
0005+5 の CG をアクセスする
0006+6 の CG をアクセスする
0007+7 の CG をアクセスする

256色モードのマイクロプログラム例

コード動作内容
0000+0 の CG をアクセスする
0001+1 の CG をアクセスする
0002+2 の CG をアクセスする
0003+3 の CG をアクセスする

16色モードのマイクロプログラム例

コード動作内容
0000+0 の CG をアクセスする
0001+1 の CG をアクセスする

4色モードのマイクロプログラム例

コード動作内容
0000+0 の CG をアクセスする

256色ブロックモードのマイクロプログラム例

コード動作内容
0010+0 の BAT を読み込む
0100NOP
0008+0 の BAT CG をアクセスする
0009+1 の BAT CG をアクセスする
000A+2 の BAT CG をアクセスする
000B+3 の BAT CG をアクセスする

16色ブロックモードのマイクロプログラム例

コード動作内容
0010+0 の BAT を読み込む
0100NOP
0008+0 の BAT CG をアクセスする
0009+1 の BAT CG をアクセスする

4色ブロックモードのマイクロプログラム例

コード動作内容
0010+0 の BAT を読み込む
0100NOP
0008+0 の BAT CG をアクセスする

回転面のマイクロプログラム例

コード動作内容
0020回転処理
0020回転処理
0020回転処理
0020回転処理
0020回転処理
0020回転処理
0020回転処理
0020回転処理

[TOPへ戻る]