ベーシックマスターのハードウェア(3)グラフィック表示回路
そもそも BASICMASTER Jr.(MB-6885) のグラフィック回路はどのように構成されているのだろうか?
初代BASICMASTER(MB-6880)から、L2,L2II(MB-6881)になるまではグラフィック回路はなく、文字表示(キャラクタ表示)だけであった。
後継機種のMB-6885のグラフィックは、L2IIまでの文字表示のハードウェアを上手に流用して構成されている。ハードウェアの追加は最低限で済んでいる。
(AppleIIの表示回路を思い出させるものがあります。Apple IIではカラー表示も含めて8KBの領域で済ませていて天才的)
腕に覚えのあるユーザーの間では旧機を改造してJr相当にすることも行われていた(BMUG会報 No.7 JULY 1982, No.17 MAY 1983)
初代は4KBしかメモリがなかったので、text VRAMが$100-$03FFに存在している。
それを流用してグラフィックを実装したため、グラフィックVRAMアドレスがBASICプログラム領域と重複している。グラフィックを使うには面倒な手順が必要だ。
$0100-$03FF Screen RAM (text mode)
$0900-$20FF VRAM page 1 (graphics mode)
$2100-$38FF VRAM page 2 (graphics mode)
キャラクタ表示回路
BM Jr. のグラフィック表示は、キャラクタ表示回路を流用している。「インターフェース 1981年5月号」に掲載されている MB-6881のブロック・ダイヤグラムを見てみよう。
- インターフェース1980年2月号 「ベーシックマスター拡張・汎用ラボオート装置の制作」 pp.61-88 (レベルIIの一部回路図)
- インターフェース1981年5月号 「ベーシックマスター・レベルIIの回路図解剖」 pp.165-177 (MB6881の全回路図)
インターフェース 1981年5月号 「ベーシックマスター・レベルⅡの回路図解剖」p.166より引用
テキストV-RAM($0100-$03FF)をアクセスするために、HP0〜VP4の信号を使う。読み出した文字コードからキャラクタROMのフォントを8bitずつ順に読む(CA0-CA2)。その出力を直並列変換してビデオ出力に送る。
VP4-VP0がA9-A5, HP4-HP0がA4-A0になる(D-RAMのRAS/CASの切り替えや、リフレッシュもあるので回路はややこしい)。
合計するとアドレス線は10本ある。210=1024($0000-$03FF)であるが、BMでは768($0100-$03FF)分を使っている。
実はアドレス自体は$0000-$03FFまで生成し、$0000-$00FFの期間は画面に出力されないだけのようだ。HP/VPはD-RAMのリフレッシュにも使っているので、飛ばすわけにもいかないのだろう。
(IC45 74LS93を8進-2進カウンタとして使い、上位2bitが00のときにV-WINDOW信号を作っている)
グラフィック表示回路
MB-6885のグラフィック回路は、上記のキャラクタ回路の拡張になっている。
- I/O 1982年3月号 「ベーシックマスターJr.全回路図集」 p.198,pp.291-299
- ベーシックマスター活用研究 : Level 3,Jr – 国立国会図書館デジタルコレクション
フォントROMの代わりにRAMから読み込んだデータを、直列変換してビデオ出力に送る。
グラフィックVRAMから8バイトのデータを読むために、CA2-CA0をA2-A0として使う。HP/VPもトコロテン式にずれる。HP4-HP0がA7-A3、VP4-VP0がA12-A8となる。
元々のVP4-VP0は、01 000H HHHH – 11 111H HHHH までを生成していた(HはHP4-0)。
CA2-CA0の3bit分ずらすと、0 1000 HHHH HCCC – 1 1111 HHHH HCCC になる(CはCA2-CA0)。
結果、$0800-$1FFFになる。
これをそのまま使うとBASICのワーク領域($0400-$08FF)に重なるし、グラフィック画面を1画面しか持てない。
そこで、MB-6885では、4bitの全加算機(IC61 74LS283)を用いて、$EFE0の下位4bitとVP4-VP1を加算し、結果をアドレスとして使っている。
I/O 1982年3月号 「ベーシックマスターJr.全回路図集」p.291BMUG会報 1983年5月号P.3を元に作図
素直に繋ぐと先頭は$0800のままなので、A8はVP0とし、74LS283のC0にVP0を繋ぐ。
これによりVP0=0のときはアドレスに$100が加算され、VP=1のときは$200が加算される。実に巧妙である。
以下、$EFE0に$C0とした場合の表。
| VP4-VP2 | VP1 | VP0 | A12-A10 | A9(VP1+VP0) | A8(VP0) | アドレス |
|---|---|---|---|---|---|---|
| 010 | 0 | 0 | 010 | 0 | 1 | $0900 |
| 010 | 0 | 1 | 010 | 1 | 0 | $0A00 |
| 010 | 1 | 0 | 010 | 1 | 1 | $0B00 |
| 010 | 1 | 1 | 011 | 0 | 0 | $0C00 |
| 011 | 0 | 0 | 011 | 0 | 1 | $0E00 |
| 011 | 0 | 1 | 011 | 1 | 0 | $0E00 |
余談: この回路図、インバーターを入れる小細工をせずに単にC0=1固定とすれば、アドレスは常に$0200ずれて、$0A00-$21FFになる。もしかしてこれが前回記事で指摘した「混乱」の元? 開発途中での変更があったのだろうか?
グラフィックRAMアドレスは変更できる
先に説明した通り、グラフィック先頭アドレスは全加算機の出力結果なので、入力($EFE0)に与えるアドレスを変えれば移動できる。
世の中の資料では、$EFE0に$C0を書くとグラフィック画面1ページ目($0900-$20FF)、$CCを書くと2ページ目($2100-$38FF)となっている。
これは $0900 + $0000 = $0900、$0900 + $1800 = $2100 ということである(下位4bit $C=1100 が左に5bitずれて$1800=1 1000 0000になる)。
なので、$EFE0に$C1を書けば、$0B00-$22FFになるし、$CFだと$2700-$3DFFになる。512バイト(グラフィック16ライン)ごとに移動できる。
もっと細かく移動できれば、縦スクロールに使えたのに。惜しい。
この機能使ってるソフトは無いんじゃないかと思ってたのだが、BMUG No.21 SEP 1983 の「TL/1改良版」でTL/1言語にグラフィック機能を追加する際に、グラフィック画面アドレスを$2700-$3EFFにしているのを見つけた。
初期化時に$EFE0に$CFを書き込んでいる。
BASICMASTER移植版のTL/1が$1000-$26FFを使うので、その後ろにグラフィック画面を置いたようだ。他にもこの機能を活用しているソフトはあるのだろうか?
テキスト・グラフィック切り替え
MB-6885回路図1/2の左上、1/3と接続と書かれているところにD7-D0が来ている。それを右に辿っていくと、D7,D6,D3-D0はIC60の6D,5D,4D-1Dに繋がっている。IC60は$EFE0用のラッチ(74LS153P)だ。
D7,D6はIC60のの6Q,5Qに出力され、6QはIC22(74LS74)のPRに、5QはCLRにつながっている。CLKはV-SYNC。
QがDに繋がっているので、PR=1、CLR=1ならクロックのたびに反転する。
PRにはD7がNANDを使ったNOT経由で繋がっており、CLRはD6である。Qがテキスト表示(0)とグラフィック表示(1)の切り替えになる。
| D7 | PR | D6 | CLR | Q | 出力 |
|---|---|---|---|---|---|
| 0 | 1 | 0 | 0 | 0 | テキスト |
| 0 | 1 | 1 | 1 | V-SYNC毎に反転 | インポーズ |
| 1 | 0 | 1 | 1 | 1 | グラフィック |
| 1 | 0 | 0 | 0 | 不定 | ??? |
資料
- インターフェース1980年2月号 「ベーシックマスター拡張・汎用ラボオート装置の制作」 pp.61-88 (レベルIIの一部回路図)
- インターフェース1980年6月号 「ベーシックマスター用高解像度カラーグラフィック装置の制作」 pp.122-134
- インターフェース1981年5月号 「ベーシックマスター・レベルIIの回路図解剖」 pp.165-177 (MB6881の全回路図)
- I/O 1982年3月号 「ベーシックマスターJr.全回路図集」pp.198,291-299
- I/O 1982年4月号 「Jr.カラーアダプタ[全回路図公開]/アセンブラ」 pp.304-306
- I/O 1982年5月号 pp.337-347 「Jr.カラーアダプタ・グラフィック・ユーティリティ」
- ベーシックマスター活用研究 : Level 3,Jr – 国立国会図書館デジタルコレクションpp.95-
- テクノポリス 1982年10月号記事「ゲームのためのマシン語講座」pp.145-150
- BMUG会報 1982年7月号P.10
- BMUG会報 1983年5月号P.3
- BMUG会報 1984年12月号 P.4








ディスカッション
コメント一覧
まだ、コメントがありません