ベーシックマスターのハードウェア(3)グラフィック表示回路

BASICMASTER, 昔のパソコン

そもそも 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のグラフィック回路は、上記のキャラクタ回路の拡張になっている。

フォント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)の切り替えになる。

D7PRD6CLRQ出力
01000テキスト
0111V-SYNC毎に反転インポーズ
10111グラフィック
1000不定???


資料

  • インターフェース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