TMS9918
TMS9918には全部で36画面(スプライト1枚も数えて)あり、
それぞれ優先順位がつけられその設定で表示されます
優先順ではスプライト画面が32枚、キャラクタパターン画面(BG)が1枚、バックドロップ画面が一枚
外部入力画面が1枚、最後部画面(黒)が1枚あります
使用RAM:最大16KB
カラー16パレット
キャラクターパターン256キャラクター(グラフィックIIは768)
ハードウェアスクロール機能:無し
スクリーンモード
モード名 | 解像度 | サイズ | パターン数 | カラー | 表示画面 |
グラフイック I | 256*192 | 8*8 | 256 | 16色 | 32*24 |
グラフイック II | 256*192 | 8*8 | 768 | 16色 | 32*24 |
マルチカラー | 64*48(ブロック) | 4*4(1ブロックあたり) | --- | 16色 | 32*24 |
テキスト | 256*192 | 8*6 | 256 | 16色中2色 | 40*24 |
アクセスの方法
まず一番最初にコマンドレジスタに使用するR#nn(0−7)に使用するモード、アドレスの指定等を設定して
そのモードに合わせてキャラクターデータ等を設定したりします。
コマンドレジスタをリードする事によってステータスレジスタを見る事が出来ます。(ポートは2つだけです)
データレジスタ
VDPのR#nnのデータの読み書き、VRAMにデータを読み書きをします。
SG−1000の場合、ポート0BEH
MSX1の場合、ポート098H
PV−2000の場合メモリの04000H
コマンドレジスタ
VDPレジスタを指定したりVRAMアドレスの指定をします
080H〜087HでVDP R#nnの指定になります
下位アドレス”、”上位アドレス OR 040H”の順でVRAMの書き込みのアドレス指定
下位アドレス”、”上位アドレス”の順でVRAMの読み込みのアドレス指定になります。
一度アドレスを設定するとアドレスはオートインクリメントされますのでアドレスを設定しなくても
データレジスタに読み書きするだけで連続に書き込み(または読み込み)されます。
VRAM 01234Hに0FDH、0FEH、0FFHに書き込む場合
コマンドレジスタに034H、052H(012H OR 040H)と設定して
データレジスタに0FDH、0FEH、0FFHと書き込みを行います
VRAM 01234Hの内容を読む場合
コマンドレジスタに034H、042Hと設定して
データレジスタを読み込みを行います。
ただしアクセス途中で割り込みが掛かると正確に設定が出来ない場合がありますので
割り込みを禁止にする必要があります。
ここのポートを読むとステータスレジスタの内容が読めます。
SG−1000の場合、ポート0BFH
MSX1の場合、ポート099H
PV−2000の場合メモリ04001H
VDPレジスタ
VDPを制御するレジスタはR#0〜R#7までありR#nに080Hを足した数をコマンドレジスタに指定します。
まず、データレジスタに設定するデータを書き込みを行ってからR#nnの指定を行います。
R#0とR#1で画面モードなどの設定を行います。
R#0 (コマンドコード080H)
d7:0
d6:0
d5:0
d4:0
d3:0
d2:0
d1:M3 モード選択ビット3
d0:EV 外部ビデオ信号 1=入力、 0=無し
R#1 (コマンドコード081H)
d7:4K/16K V−RAMのメモリ選択 1=16K、 0=4K
d6:BLANK 1=画面の表示する、0=画面の表示しない
d5:IE V−BLANK割り込み 1=割り込みをする、0=割り込みをしない
d4:M1 モード選択ビット1
d3:M2 モード選択ビット2
d2:0
d1:SIZE スプライトサイズ 1=16×16ドット、 0=8×8ドット
d0:MAG スプライトの拡大 1=拡大する、 0=拡大しない
M3〜1:000=グラフィックI
100=グラフィックII
010=マルチカラー
001=テキスト
R#2 パターン名称テーブル(コマンドコード082H)
パターン名称テーブルはパターン・ジェネレータ・テーブルで設定したキャラクタを
何処に表示するかを決める所です。
d7:0
d6:0
d5:0
d4:0
d3:AD13
d2:AD12
d1:AD11
d0:AD10
R#3 カラーテーブル・ベース・アドレス(コマンドコード083H)
パターン名称で設定した各キャラクタの色を設定します。
d7:AD13
d6:AD12(グラフィックIIでは使用しません)
d5:AD11(グラフィックIIでは使用しません)
d4:AD10(グラフィックIIでは使用しません)
d3:AD9(グラフィックIIでは使用しません)
d2:AD8(グラフィックIIでは使用しません)
d1:AD7(グラフィックIIでは使用しません)
d0:AD6(グラフィックIIでは使用しません)
R#4 パターン・ジェネレータ・テーブル・アドレス(コマンドコード084H)
いわゆるキャラクタデータを格納する先頭アドレスを指定します
設定できるアドレスはAD13〜AD10まででコレより細かくは設定出来ません
アドレスの先頭からパターン名称0から始まりデータは1キャラあたり8バイト、
最大256個*3まで定義できます。
d7:0
d6:0
d5:0
d4:0
d3:0
d2:AD13
d1:AD12(グラフィックIIでは使用しません)
d0:AD11(グラフィックIIでは使用しません)
R#5 スプライト属性テーブル・ベース・アドレス(コマンドコード085H)
スプライトのX,Y座標、パターン#を指定できるアドレスを設定します。
d7:0
d6:AD13
d5:AD12
d4:AD11
d3:AD10
d2:AD9
d1:AD8
d0:AD7
R#6 スプライト・パターン・ジェネレータ・テーブル・アドレス(コマンドコード086H)
スプライトのキャラクタデータを格納します
d7:0
d6:0
d5:0
d4:0
d3:0
d2:AD13
d1:AD12
d0:AD11
R#7 テキストカラー(コマンドコード087H)
テキストモードでのカラーを設定します。
d7〜4:テキストカラー1
d3〜0:テキストカラー0 又は バックドロップカラー
ステータスレジスタ
d7:F V−BLANK割り込みフラグ
d6:5S スプライトオーバーフロー 5つ以上のスプライトが 並んだ=1、並んでいない=0
d5:C スプライト衝突フラグ 衝突した=1、衝突してない=0
d4:5th Sprite# D4
d3:5th Sprite# D3
d2:5th Sprite# D2
d1:5th Sprite# D1
d0:5th Sprite# D0
5th Sprite#d4〜0:スプライトオーバーフロ−したスプライト番号(0〜31)
スプライトの衝突
2つのスプライトからの2の透明でないドットが重なったとき、VDP R#0のビット5が1になる。
最初の重なったスプライトだけ有効で、フレーム毎に1つのスプライトの重なりをみているだけである。
グラフィック I (モード0)
グラフィック II(モード1)
マルチカラー (モード2)
テキスト (モード3)
SG−1000のコーナへ
Home へ戻る