マイコン独立大作戦
CRT/VGAIF+KEYIF+SDCARDIFボードの製作
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
WindowsパソコンにUSB接続して使う現行方式はそれなりに便利ではありますが、ときとしてWindows
のしがらみから開放されて、小さいながらも独立した一個のパソコンとして機能したいと思うこともあります。
昔はそれが普通のことだったのですが、安価なCRTディスプレイが生産中止となって久しい今日ではそれ
は叶わぬことと諦めていたのですが…。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[総合第108回]
●MZ80のディスプレイパターンを追加
前回は新しく作ったVGA/CRT+カラーキャラクタディスプレイインターフェースボード(長いので以後はVGA/CRT/COLORIFボードと呼ぶことにします)では、PC8001とMZ80のキャラクタパターンをソフトウェアで切り換えて表示することができます、と書きました。
そうするためには8PディップスイッチのbRをOFFにしたうえで、VRAMとキャラジェネROMの間にあるショートピンをセットします、という説明もしました。
あるいはお気付きかも知れませんが、そのショートピンは4pinなのでショートピンは2個実装できます。
ショートピンを2個実装すると4通りのキャラジェネパターンが選択できるようになります。
その場合には8PディップスイッチのbRとbSをOFFにします。
ショートピンを2個実装しました。
ソフトウェアの方はといいますと。
前回の説明で文字の色指定に使う下位4ビットのうち空いているビット3をキャラジェネの切換えに使うと書きました。
背景色の指定には上位4ビットを使いますがこちらも3ビットしか使わないので、空いているビット7もキャラジェネの切換えに使うことにします。
b7 b6 b5 b4 b3 b2 b1 b0
↑ 背景色 ↑ 文字色
この2ビット(矢印のビット)を使うと4通りの指定ができます。
前回はPC8001とMZ80のキャラジェネを切り換えて表示しました。
昔MZ80をお持ちだった方はご存知かと思いますが、MZ80は画面に文字を表示するのにPC8001のように通常の文字コードを使うのではなくて、それとは別の文字配列のディスプレイコードというものを使ったのだそうです。
つまりMZ80は前回お見せした文字コードとは別のキャラクタパターンがもう一組あったことになります。
こちらは前回もお見せしたPC8001の文字パターンです。
説明の都合上、PC8001とMZ80のパターンの位置を入れ替えました。
こちらは前回お見せしたMZ80の文字パターンです。
そして下がMZ80のディスプレイパターンです。
かなりのキャラクタパターンが共通ですが各パターンに割り当てられた文字コードは全然異なっています。
せっかくなのでこのキャラクタパターンも上で説明しました仕組みを使って切り換えて表示できるように考えました。
ということは、キャラジェネROMにこのパターンも追加しなければなりません。
なかなかに面倒な作業なのです。
なにやらいっぱい書き込みがありますが、実際にひとつひとつ手作業でデータを打ち込んでいった作業のあとなのです。
この作業は私の娘に担当してもらいました。
先にキャラジェネデータとして作成済みのMZ80のパターンと共通のものはできるだけコピーすることで工数を減らしましたが、こちらにしかないものは新規に1バイトずつキーボードから打ち込んで作成しました。
以前からあるパターンでもアドレスを計算してコピーするよりも、新たにキーボードから打ち込んだほうが早い、という場合もありました。
こういう作業にはND80Z3.5が大いに役立ちます。
新規のデータ作成にはCM(チェンジメモリ)コマンドが役立ちます。
データのコピーにはMV(ムーブ)コマンドが役立ちます。
下はその作業を行なったときのログの一部です。
logfile nd80zlog\10152309.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** ndwr2h.bin loaded,from E23F to E535 >/ld cgpcmzf.bin,8000 loading CGPCMZF.BIN ...1800(6144)bytes loaded,from 8000 to 97FF >cm 9000 9000 54-00 9001 14-00 9002 14-00 9003 00-00 9004 8A-00 9005 CD-00 9006 78-00 9007 9C-00 9008 18- >mv 8b80,8bf7,9680 >mv 8bf8,8bff,9600 >mv 8888,88b7,9608 >cm 90d8 90D8 AA-08 90D9 C3-08 90DA E2-08 90DB 55-08 90DC AA-ff 90DD 46-08 90DE 21-08 90DF 41-08 90E0 A8-08 90E1 31-08 90E2 80-08 90E3 1D-08 90E4 CA-0f 90E5 5D-00 90E6 22-00 90E7 E7-00 90E8 A0-08 90E9 B1-08 90EA 36-08 90EB D0-08 90EC AB-f8 90ED 65-00 90EE C1-00 90EF 9D-00 90F0 21-08 90F1 75-08 90F2 8E-08 90F3 F7-08 90F4 09-0f 90F5 55-08 90F6 AA-08 90F7 15-08 90F8 8E-08 90F9 44-08 90FA 01-08 90FB 15-08 90FC 36-ff 90FD 48-00 90FE 27-00 90FF D7-00 |
このようにして作成したデータはDM(ダンプメモリ)コマンドで表示して確認することができますが、8ビットのデータがただ並んで表示されるだけなので、キャラジェネパターンとして正しいデータなのかどこかにミスがあるのかを確かめることは困難です。
こんな感じです。
>dm 9000,907f 9000 00 00 00 00 00 00 00 00-18 24 42 7E 42 42 42 00 .........$B~BBB. 9010 7C 22 22 3C 22 22 7C 00-1C 22 40 40 40 22 1C 00 |""<""|.."@@@".. 9020 78 24 22 22 22 24 78 00-7E 40 40 78 40 40 7E 00 x$"""$x.~@@x@@~. 9030 7E 40 40 78 40 40 40 00-1C 22 40 4E 42 22 1C 00 ~@@x@@@.."@NB".. 9040 42 42 42 7E 42 42 42 00-1C 08 08 08 08 08 1C 00 BBB~BBB......... 9050 0E 04 04 04 04 44 38 00-42 44 48 70 48 44 42 00 .....D8.BDHpHDB. 9060 40 40 40 40 40 40 7E 00-42 66 5A 5A 42 42 42 00 @@@@@@~.BfZZBBB. 9070 42 62 52 4A 46 42 42 00-18 24 42 42 42 24 18 00 BbRJFBB..$BBB$.. |
実際にROMに焼いて画面に表示させてみるという手もありますが、作業の途中でそれをやるのも面倒です。
ND80Z3.5はそういう局面でも大いに役立ちます。
そういうときには簡単にBASICプログラムをささっと書いてしまいましょう。
BASICを使うとこんなことができてしまいます。
>logfile nd80zlog\10161416.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** ndwr2h.bin loaded,from E23F to E535 >/ld cgprint2.txt,a000 loading CGPRINT2.TXT ...017a(378)bytes loaded,from A000 to A179 >/ld cgpcmzh.bin,8000 loading CGPCMZH.BIN ...1800(6144)bytes loaded,from 8000 to 97FF >r. >/ld cgpcmzh.bin,8000 loading CGPCMZH.BIN ...1800(6144)bytes loaded,from 8000 to 97FF >/load cgprint2.txt,a000 10 FOR A=$9000 TO $97F8 STEP 64 20 FOR D%=0 TO 7 30 PRINT HEX$(A+D%*8,4);" "; 40 NEXT D% 50 PRINT 60 FOR N=0 TO 7 70 FOR D%=0 TO 7 80 B%=PEEK(A+D%*8+N) 90 FOR C%=7 TO 0 STEP -1 100 IF BIT(B%,C%)=1 THEN PRINT "@";ELSE PRINT "."; 110 NEXT C% 120 PRINT " "; 130 NEXT D% 140 PRINT 150 NEXT N 160 NEXT A data end >r. 9000 9008 9010 9018 9020 9028 9030 9038 ........ ...@@... .@@@@@.. ...@@@.. .@@@@... .@@@@@@. .@@@@@@. ...@@@.. ........ ..@..@.. ..@...@. ..@...@. ..@..@.. .@...... .@...... ..@...@. ........ .@....@. ..@...@. .@...... ..@...@. .@...... .@...... .@...... ........ .@@@@@@. ..@@@@.. .@...... ..@...@. .@@@@... .@@@@... .@..@@@. ........ .@....@. ..@...@. .@...... ..@...@. .@...... .@...... .@....@. ........ .@....@. ..@...@. ..@...@. ..@..@.. .@...... .@...... ..@...@. ........ .@....@. .@@@@@.. ...@@@.. .@@@@... .@@@@@@. .@...... ...@@@.. ........ ........ ........ ........ ........ ........ ........ ........ 9040 9048 9050 9058 9060 9068 9070 9078 .@....@. ...@@@.. ....@@@. .@....@. .@...... .@....@. .@....@. ...@@... .@....@. ....@... .....@.. .@...@.. .@...... .@@..@@. .@@...@. ..@..@.. .@....@. ....@... .....@.. .@..@... .@...... .@.@@.@. .@.@..@. .@....@. .@@@@@@. ....@... .....@.. .@@@.... .@...... .@.@@.@. .@..@.@. .@....@. .@....@. ....@... .....@.. .@..@... .@...... .@....@. .@...@@. .@....@. .@....@. ....@... .@...@.. .@...@.. .@...... .@....@. .@....@. ..@..@.. .@....@. ...@@@.. ..@@@... .@....@. .@@@@@@. .@....@. .@....@. ...@@... ........ ........ ........ ........ ........ ........ ........ ........ 9080 9088 9090 9098 90A0 90A8 90B0 90B8 .@@@@@.. ...@@... .@@@@@.. ..@@@@.. ..@@@@@. .@....@. .@....@. .@....@. .@....@. ..@..@.. .@....@. .@....@. ....@... .@....@. .@....@. .@....@. .@....@. .@....@. .@....@. .@...... ....@... .@....@. .@....@. .@....@. .@@@@@.. .@....@. .@@@@@.. ..@@@@.. ....@... .@....@. ..@..@.. .@.@@.@. .@...... .@..@.@. .@..@... ......@. ....@... .@....@. ..@..@.. .@.@@.@. .@...... ..@..@.. .@...@.. .@....@. ....@... .@....@. ...@@... .@@..@@. .@...... ...@@.@. .@....@. ..@@@@.. ....@... ..@@@@.. ...@@... .@....@. ........ ........ ........ ........ ........ ........ ........ ........ 90C0 90C8 90D0 90D8 90E0 90E8 90F0 90F8 .@....@. ..@...@. .@@@@@@. ....@... ....@... ....@... ....@... ....@... .@....@. ..@...@. ......@. ....@... ....@... ....@... ....@... ....@... ..@..@.. ..@...@. .....@.. ....@... ....@... ....@... ....@... ....@... ...@@... ...@@@.. ...@@... ....@... ....@... ....@... ....@... ....@... ..@..@.. ....@... ..@..... @@@@@@@@ ....@@@@ @@@@@... ....@@@@ @@@@@@@@ .@....@. ....@... .@...... ....@... ........ ........ ....@... ........ .@....@. ....@... .@@@@@@. ....@... ........ ........ ....@... ........ ........ ........ ........ ....@... ........ ........ ....@... ........ 9100 9108 9110 9118 9120 9128 9130 9138 ..@@@@.. ....@... ..@@@@.. ..@@@@.. .....@.. .@@@@@@. ...@@@.. .@@@@@@. .@....@. ...@@... .@....@. .@....@. ....@@.. .@...... ..@..... .@....@. .@...@@. ..@.@... ......@. ......@. ...@.@.. .@@@@... .@...... .....@.. .@.@@.@. ....@... ....@@.. ...@@@.. ..@..@.. .....@.. .@@@@@.. ....@... .@@...@. ....@... ..@@.... ......@. .@@@@@@. ......@. .@....@. ...@.... .@....@. ....@... .@...... .@....@. .....@.. .@...@.. .@....@. ...@.... ..@@@@.. ..@@@@@. .@@@@@@. ..@@@@.. .....@.. ..@@@... ..@@@@.. ...@.... ........ ........ ........ ........ ........ ........ ........ ........ |
簡単に、と書きましたがプログラムに不慣れな方には何をやっているのかさっぱりわからないというようなプログラムです。
キャラジェネデータは仮の作業場所としてRAMに作成しました。
たとえば”A”のデータはメモリアドレス9008から900Fにあります。
18 24 42 7E 42 42 42 00 です。
”B”は9010から9017で、”C”は9018から901Fです。
各ビットの1を @ で 0を . に置き換えて表示します。
そのままPRINT文で表示すると縦にだらだらと表示されてしまいます。
そこでちょいと工夫して横に8キャラクタずつ表示するようにしました。
こうするとうんと見易くなるのですが、逆にプログラムは分かりにくいものになります。
こういうプログラムは慣れないとなかなか簡単には書けないとは思いますが、しかしこんなことが「簡単に」できてしまうというところも、ND80Z3.5の優れた点なのです。
本日は時間がなくなってしまいました。
次回に続きます。
CRT/VGAIF+KEYIF+SDCARDIFボードの製作[総合第108回]
2017.10.17upload
前へ
次へ
ホームページトップへ戻る