拡張漢字ROMのデータの吸出しですが、プログラムがありませんので作成しました。
実機とカートリッジがあれば、どの機種でも多分動作可能です。
ただし、128Kバイトのデータをテープに出力するので、かなり時間がかかります。
mode=1、page=1 で実行して下さい。
saverkanji.zip
また、PC-8801 の漢字ROM を、P6用の拡張漢字ROM として使う事もできます。
ただ、なぜか半角文字の大部分が下に1ドットずれているので、変換が必要になります。
(こちらが正解かも知れませんが...)
変換をしないと、チェックルーチンでNGとなり、ROMが挿さっていないと判断されてしまいます。
そこで、PC-8801 の漢字ROMから、P6用拡張漢字ROMのデータを生成するプログラムを作りました。
exkanjiconv.zip
PC-6601-01 や PC-6007SR を持っていれば、こんな事しなくてもいいんですけどねぇ。
2013年02月19日
拡張漢字ROM(2)
拡張漢字ROM での漢字コードは、以下の通りです。
0x0020〜0x00FF:半角文字(8×16ドット)
0x0100〜0x01FF:1/4角文字(8×8ドット)
0x2121〜0x277E:記号、英数字、かな(16×16ドット):JISコード
0x3021〜0x4F7E:第一水準漢字(16×16ドット):JISコード
JISコードは、以下を参照して下さい。
http://www.asahi-net.or.jp/~ax2s-kmtn/ref/jisx0208.html
拡張漢字ROMの全ての漢字を表示させるプログラムです。
BASIC で組んでいるので、かなり遅いです。
mode=5、page=4 で、PC-6601で実行して下さい。
exkjdisp.zip
漢字コードから、ROMのアドレスが算出されますが、かなりややこしい計算をしています。
PC-8801 にも漢字ROMがありますが、全く同じ計算をしているようです。
実際の計算は、以下のページの「漢字ROM」に書かれています。
http://www.maroon.dti.ne.jp/youkan/pc88/index.html
上記の計算をすると、文字種別ごとには以下のアドレスに格納されていることが分かります。
0x0100〜0x07FF:半角文字(漢字コード:0x0020〜0x00FF)
0x0800〜0x0BFF:1/4角文字(漢字コード:0x0100〜0x01FF)
0x1200〜0x3FFF:記号、英数字、かな(漢字コード:0x2120〜0x277F)
0x4000〜0xFFFF:第一水準漢字(漢字コード:0x3020〜0x47FF)
0x0020〜0x00FF:半角文字(8×16ドット)
0x0100〜0x01FF:1/4角文字(8×8ドット)
0x2121〜0x277E:記号、英数字、かな(16×16ドット):JISコード
0x3021〜0x4F7E:第一水準漢字(16×16ドット):JISコード
JISコードは、以下を参照して下さい。
http://www.asahi-net.or.jp/~ax2s-kmtn/ref/jisx0208.html
拡張漢字ROMの全ての漢字を表示させるプログラムです。
BASIC で組んでいるので、かなり遅いです。
mode=5、page=4 で、PC-6601で実行して下さい。
exkjdisp.zip
漢字コードから、ROMのアドレスが算出されますが、かなりややこしい計算をしています。
PC-8801 にも漢字ROMがありますが、全く同じ計算をしているようです。
実際の計算は、以下のページの「漢字ROM」に書かれています。
http://www.maroon.dti.ne.jp/youkan/pc88/index.html
上記の計算をすると、文字種別ごとには以下のアドレスに格納されていることが分かります。
0x0100〜0x07FF:半角文字(漢字コード:0x0020〜0x00FF)
0x0800〜0x0BFF:1/4角文字(漢字コード:0x0100〜0x01FF)
0x1200〜0x3FFF:記号、英数字、かな(漢字コード:0x2120〜0x277F)
0x4000〜0xFFFF:第一水準漢字(漢字コード:0x3020〜0x47FF)
拡張漢字ROM(1)
今回はあまり使っていないと思われる、拡張漢字ROMについてです。
P6で使われる漢字は内蔵のものが1024文字ありますが、それ以外にカートリッジとして用意されていました。
PC-6601-01(拡張漢字ROM)
PC-6007SR(拡張漢字ROM&RAM)
2つの違いは、64KバイトのRAM部分があるかどうかです。
...だと思います。実は、両方とも持っていないので、詳細はよく分かりません。
回路図の資料がココにあります。
http://www2.odn.ne.jp/~haf09260/Etc/EnrEtc.htm
http://www43.tok2.com/home/cmpslv/Etc/EnrEtc.htm
この回路図ですが、一箇所間違っているようです。
ROM に出力している、/ROE という信号ですが、これは RA15 の誤りのようです。
また、回路図下部に書かれている説明も若干違うようです。
下記が多分正解だと思われます。
○搭載ROM:64Kアドレス × 16bit の 1Mbit
○使用ポート
0xFC:(書き込み)漢字ROMのアドレス(RA15-0)
データバスに RA15-8、アドレス上位に RA7-0 を出力して書き込む。
0xFD:(読み出し)漢字ROMの左半分
0xFE:(読み出し)漢字ROMの左半分
0xFF:(書き込み)漢字ROMのチップイネーブル
開始の際に0x00を書き込み、終了時に、0xFFを書き込む
ポート0xFC のみ、16ビットアクセスをする必要があります(OUT (C),A などを使う)。
ポート0xFF に関しては、実は書き込みデータは関係ありません。
○P6からのアクセスプログラム
; HL にアドレスを入力して、コールする。
;
LD B,L
; 拡張漢字ROM アドレスラッチ
LD C,0FCH
OUT (C),H
; 時間待ち
NOP
NOP
NOP
NOP
; 拡張漢字ROM Enable
LD A,00H
OUT (0FFH),A
;拡張漢字ROM 左フォント読み込み
LD C,0FDH
IN H,(C)
;拡張漢字ROM 右フォント読み込み
LD C,0FEH
IN L,(C)
; 拡張漢字ROM Disable
LD A,0FFH
OUT (0FFH),A
RET
(プログラム自体はもっと短くなりますが、分かりやすさを優先しています)
○BASIC のサポート
PC-6001、PC-6001mk2では、BASICでサポートしていません。
PC-6601 以降の機種で、KANJI文で呼び出す事が可能です。
KANJI文は、KANJI (X座標,Y座標),色,漢字コード
ですが、この漢字コードが内蔵漢字を使う場合と、拡張漢字ROMを使う場合とで変わってきます。
BASIC内部では以下の処理をしています
1)拡張漢字ROMが挿さっているかどうかをチェックします。
2)拡張漢字ROMが挿さっていない場合、漢字コードが1〜1024ならば、それに対応する内蔵漢字を表示します。
3)拡張漢字ROMが挿さっている場合は、漢字コードから漢字ROMのアドレスを計算して、拡張漢字ROMにアクセスします。
このため、同じKANJI文でも動きが変わる事があります。
例えば、KANJI (0,0),4,33 とした場合、内蔵漢字だと 雨 が表示されますが、拡張漢字ROMの場合、半角の ! が表示されます。
拡張漢字ROMのアクセスなどのプログラムは、PC-6601 の音声合成ROMの0x3E00〜に格納されています。
P6で使われる漢字は内蔵のものが1024文字ありますが、それ以外にカートリッジとして用意されていました。
PC-6601-01(拡張漢字ROM)
PC-6007SR(拡張漢字ROM&RAM)
2つの違いは、64KバイトのRAM部分があるかどうかです。
...だと思います。実は、両方とも持っていないので、詳細はよく分かりません。
回路図の資料がココにあります。
http://www43.tok2.com/home/cmpslv/Etc/EnrEtc.htm
この回路図ですが、一箇所間違っているようです。
ROM に出力している、/ROE という信号ですが、これは RA15 の誤りのようです。
また、回路図下部に書かれている説明も若干違うようです。
下記が多分正解だと思われます。
○搭載ROM:64Kアドレス × 16bit の 1Mbit
○使用ポート
0xFC:(書き込み)漢字ROMのアドレス(RA15-0)
データバスに RA15-8、アドレス上位に RA7-0 を出力して書き込む。
0xFD:(読み出し)漢字ROMの左半分
0xFE:(読み出し)漢字ROMの左半分
0xFF:(書き込み)漢字ROMのチップイネーブル
開始の際に0x00を書き込み、終了時に、0xFFを書き込む
ポート0xFC のみ、16ビットアクセスをする必要があります(OUT (C),A などを使う)。
ポート0xFF に関しては、実は書き込みデータは関係ありません。
○P6からのアクセスプログラム
; HL にアドレスを入力して、コールする。
;
LD B,L
; 拡張漢字ROM アドレスラッチ
LD C,0FCH
OUT (C),H
; 時間待ち
NOP
NOP
NOP
NOP
; 拡張漢字ROM Enable
LD A,00H
OUT (0FFH),A
;拡張漢字ROM 左フォント読み込み
LD C,0FDH
IN H,(C)
;拡張漢字ROM 右フォント読み込み
LD C,0FEH
IN L,(C)
; 拡張漢字ROM Disable
LD A,0FFH
OUT (0FFH),A
RET
(プログラム自体はもっと短くなりますが、分かりやすさを優先しています)
○BASIC のサポート
PC-6001、PC-6001mk2では、BASICでサポートしていません。
PC-6601 以降の機種で、KANJI文で呼び出す事が可能です。
KANJI文は、KANJI (X座標,Y座標),色,漢字コード
ですが、この漢字コードが内蔵漢字を使う場合と、拡張漢字ROMを使う場合とで変わってきます。
BASIC内部では以下の処理をしています
1)拡張漢字ROMが挿さっているかどうかをチェックします。
2)拡張漢字ROMが挿さっていない場合、漢字コードが1〜1024ならば、それに対応する内蔵漢字を表示します。
3)拡張漢字ROMが挿さっている場合は、漢字コードから漢字ROMのアドレスを計算して、拡張漢字ROMにアクセスします。
このため、同じKANJI文でも動きが変わる事があります。
例えば、KANJI (0,0),4,33 とした場合、内蔵漢字だと 雨 が表示されますが、拡張漢字ROMの場合、半角の ! が表示されます。
拡張漢字ROMのアクセスなどのプログラムは、PC-6601 の音声合成ROMの0x3E00〜に格納されています。

