ベーシックマスターのハードウェア(5)カラーアダプタ

BASICMASTER, 昔のパソコン

BASICMASTER Jr用のカラーアダプタ(MP-1710)の回路図についてのメモ。MP-1710は持っていないので間違ってたらごめん。

MP-1710は内部に1K*4bitのスタティックRAMである2114AP-2を2つ持っていて、計1KBの色情報を持っている。文字情報(768バイト)分しかないので、文字は1文字単位で色付けできるが、グラフィック表示の際は8×8ドット単位でしか色付けできない。文字しか表示できない機種を騙し騙し拡張しているので仕方がないではある。

色情報RAMは1KB分あるが、使っているのは768バイト分だけである。残り256バイトが勿体無い気もするが、このRAMは読み出しできないので気にしても無駄である。

RAMのA0-A7まではCPUのアドレスバスがそのまま繋がっている。RAMのA8にはA8、A9はA8⊕A9が繋がっている。CSは0100-03FFかつ$E892のbit0=1のときに選択される。
(なんで、NOTしたりXORしてるんでしょうね?)

RAMのデータ側はI/O $E890の出力をラッチしたIC 4,8の出力が繋がっている。

色情報は文字VRAMと同じ$100-$3FFに存在していて、書き込みのみ可能である。$E892に$01(b0=1であれば良い)を書いておくと、その後のキャラクタVRAMアクセス時に、同じアドレスの色情報RAMに書き込みが発生して、文字色が設定される。現在 何色が表示されているのかは知ることができない。

色を付けるには、$E890-$E892に存在する色情報レジスタに値を格納したあとで、通常通りに文字表示を行う。

「ベーシックマスター活用研究 Level 3,Jr」 工学社 1982.12 p.109 より引用

$E890のb7, b3はブリンク設定。b7がBL1,b3がBL2である。


色を変更したいが、文字を書き換えたくない場合は、一度読んで同じデータを書く必要がある。
拡張ROMの$E14Fに存在する色クリアルーチンがその動作をしているのだが、一見すると何をやっているかさっぱりわからない。

解析しようとした方も “but that does not seem to be what the code is doing”、“Rewrites screen with its existing data?” と書いていたりする。

; fuckin.rash.jp claims that this is:
; テキスト画面クリア $0100~$03ffを$00クリア
; but that does not seem to be what the code is doing.
_e14f_unused PSHA
LDX #IO_color_tile
LDAA #$01
STAA $02,X ; $E892 IO_color_mono
LDAA #$07
STAA ,X ; $E890 IO_color_tile
;
; Rewrites screen with its existing data?
LDX #screen_base
.e15e LDAA ,X
JSR _staAscreenX ; STAA ,X → INX → CPX #screen_end → RTS
BNE .e15e
PULA
RTS

グラフィックス画面に着色したい場合は、そのドットの対応する位置のテキストVRAMのアドレスを計算して、そこに色を書き込む必要がある。