マイコン独立大作戦
ROM/RAM/RTCボードの製作
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
WindowsパソコンにUSB接続して使う現行方式はそれなりに便利ではありますが、ときとしてWindows
のしがらみから開放されて、小さいながらも独立した一個のパソコンとして機能したいと思うこともあります。
独立大作戦の作戦その1はCRTインターフェースボードの製作です。
作戦その2はキーボードインターフェースです。
作戦その3は、SDカードインターフェースです。
作戦その4は、ROM/RAM/RTCボードです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第20回]
●増設RAMリードライトプログラム
久しぶりにソフトウェア作業を再開しました。
考えているLOGファイル作成のポイントは、システムの画面表示プログラム(独立システムではスクリーンエディタプログラム)の中で、1文字データを画面に表示するときに、同時にその文字データをLOGファイル用バッファに書き込むようにすることです。
最終的にはLOGファイルデータをSDカードに書き込みますが、SDカードへのSAVEはセクタ単位(512バイト)で行ないますから、メモリのどこかに512バイトのバッファを確保する必要があります。
しかしシステムの作業領域はほとんどが割り当て済みで、とても512バイトもの空きエリアは残っていません。
そこで目をつけたのがROM/RAM/RTCボード上の増設RAMです。
ここはカラーキャラクタディスプレイインターフェース用に2KBの色コードバッファを設けました(カラーキャラクタディスプレイインターフェース回路の製作[第5回])が、それ以外は未使用でまだがら空きです。
ここに512バイトのLOGバッファを割り当てます。
実はLOGファイルを作成するためにはそれだけでは足りなくて、ほかにも特殊なバッファを用意する必要があると考えているのですが、それについては作業が進んだ時点で具体化していくつもりです。
ROM/RAM/RTCボード上の増設RAMへのアクセスについては、カラーキャラクタディスプレイインターフェース用のプログラムの中で行なっていますが、これからLOGファイルプログラムを作成しているために、デバッグにも使えるように汎用的な増設RAMアクセスプログラムを作っておくことにしました。
最終的には独立化システムROMに組み込むことになりますが、それまではUSB接続型のND80Z3.5で使える形にしておくのが便利ですので、通常のRAM領域で使う形のものとして作成します。
機能から考えると以下のプログラム(サブルーチン)が必要です。
当面はこれだけあれば十分でしょう。
1)バッファWRITE
1バイトのデータを増設RAMの指定アドレスに書き込みます。
Aレジスタ RAMバンクアドレス
Cレジスタ 1バイトのデータ
DEレジスタ 増設RAMのアドレス(0000〜7FFF)
2)バッファREAD
1バイトのデータを増設RAMの指定アドレスから読み出します。
使用レジスタは1)と同じです。
3)バッファMOVE
512バイトのデータを通常のRAM領域と増設RAM領域との間で転送します。
Aレジスタ RAMバンクアドレス
DEレジスタ コピー先アドレス
HLレジスタ コピー元アドレス
Aレジスタに指定するRAMバンクアドレスについては[第3回]で説明しています。
ここまで書いてきて2)は使わないことに気が付きました。
実はこのプログラムは昨日作ってテスト済みなのですが、その時点では気が付きませんでした。
ホームページの記事を書くのはなかなかにエネルギーを必要とするのですが、備忘録を兼ねるというメリットのほかにもそういう思わぬ副産物に恵まれることがあります。
読者の皆様のために書いているというよりも自分自身のために大いに役立っているとあらためて感じます。
ま、それはともかくとしまして、どうせ作ってしまいましたので、当面はそのまま使うこととしまして、まずはプログラムリストです。
;;; BANK RAM READ/WRITE ; 17/9/1 ; ORG $9000;for test ; JP BKWR JP BKRD JP BKMV ; ;A I/O BANK ADDRESS ;C DATA ;DE BANK ADDRESS ; ;I/O RAM WRITE (1byte) BKWR:OUT (9C),A LD A,C LD (DE),A XOR A OUT (9C),A RET ; ;I/O RAM READ (1byte) BKRD:OUT (9C),A LD A,(DE) LD C,A XOR A OUT (9C),A RET ; ;MEMORY TO I/O RAM MOVE(512 bytes) ;(HL) to (DE) ; BKMV:OUT (9C),A LD BC,$0200 BKMV1:LD A,(HL) LD (DE),A INC HL INC DE DEC BC LD A,B OR C JP NZ,BKMV1 XOR A OUT (9C),A RET ; |
たったこれだけの簡単なものです。
こちらはアセンブルリストです。
2017/9/1 22:19 bkrwsb1.txt END=902B ;;; BANK RAM READ/WRITE ; 17/9/1 ; ORG $9000;for test ; 9000 C30990 JP BKWR 9003 C31190 JP BKRD 9006 C31990 JP BKMV ; ;A I/O BANK ADDRESS ;C DATA ;DE BANK ADDRESS ; ;I/O RAM WRITE (1byte) 9009 D39C BKWR:OUT (9C),A 900B 79 LD A,C 900C 12 LD (DE),A 900D AF XOR A 900E D39C OUT (9C),A 9010 C9 RET ; ;I/O RAM READ (1byte) 9011 D39C BKRD:OUT (9C),A 9013 1A LD A,(DE) 9014 4F LD C,A 9015 AF XOR A 9016 D39C OUT (9C),A 9018 C9 RET ; ;MEMORY TO I/O RAM MOVE(512 bytes) ;(HL) to (DE) ; 9019 D39C BKMV:OUT (9C),A 901B 010002 LD BC,$0200 901E 7E BKMV1:LD A,(HL) 901F 12 LD (DE),A 9020 23 INC HL 9021 13 INC DE 9022 0B DEC BC 9023 78 LD A,B 9024 B1 OR C 9025 C21E90 JP NZ,BKMV1 9028 AF XOR A 9029 D39C OUT (9C),A 902B C9 RET ; BKMV =9019 BKMV1 =901E BKRD =9011 BKWR =9009 |
簡単なプログラムですが忘れてはならないのは、最後に必ず増設RAMアクセスからシステムROMアクセスに戻すことです。
汎用ではありますが、このプログラムの目的はLOGファイルの作成のため、です。
上に書きましたように最終的には独立型システムのスクリーンエディタプログラムに組み込むことになりますから、リターンする前にバンクを切り換えてROMアクセスに戻しておく必要があります。
ちなみにこのサブルーチンプログラムそのものはROMに組み込むのではなくて、システム起動時にRAM(8000〜FFFF)のどこかにコピーして、そこをスクリーンエディタプログラムがコールするようにします(そのようにしないとシステムが暴走してしまいます)。
今回作成したプログラムも通常のRAM領域に置かれますが、それはあくまで一時テスト用です。
最終的にはシステム用のエリア(E000〜F7FF)のどこかに置くように考えます。
さっそくテストプログラムを作ってテストをしてみました。
2017/9/1 22:19 bkwtest1.txt END=9114 ;;; BANK RAM WRITE TEST ; 17/9/1 ; ORG $9100;for test ; BKWR=$9000 REENT=$1033 ; 9100 110070 WTEST:LD DE,$7000 9103 010002 LD BC,$0200 9106 3EEF WTEST1:LD A,EF 9108 CD0090 CALL BKWR 910B 13 INC DE 910C 0B DEC BC 910D 78 LD A,B 910E B1 OR C 910F C20691 JP NZ,WTEST1 9112 C33310 JP REENT ; BKWR =9000 REENT =1033 WTEST =9100 WTEST1 =9106 |
これは手抜きプログラムです。
512バイトのデータを増設RAM(バンクEF)の7000〜71FFに書き込みますが、書き込むデータを置くCレジスタはカウンタを兼ねていますから00からスタートしてBCレジスタが0000になるまでダウンカウントします。
書き込みテストが正しく実行されたかどうかを確認するためには、それを読み出してみる必要があります。
そのためのテストプログラムです。
今度はBKMVを使います。
2017/9/1 22:20 bkmvt1.txt END=920D ;;; BANK RAM MOVE(READ) TEST ; 17/9/1 ; ORG $9200;for test ; BKMV=$9006 REENT=$1033 ; 9200 210070 MVTEST:LD HL,$7000 9203 110082 LD DE,$8200 9206 3EEF LD A,EF 9208 CD0690 CALL BKMV 920B C33310 JP REENT ; BKMV =9006 MVTEST =9200 REENT =1033 |
増設RAM(バンクEF)の7000(〜71FF)から512バイトのデータを読み出してRAMの8200〜83FFに書き込みます。
以上のプログラムをND80Z3.5(USB接続版)にロードして実行してみました。
>/ld bkrwsb1.bin,9000 loading BKRWSB1.BIN ...002e(46)bytes loaded,from 9000 to 902B >/ld bkwtest1.bin,9100 loading BKWTEST1.BIN ...0017(23)bytes loaded,from 9100 to 9116 >jp 9100 >/ld bkmvt1.bin,9200 loading BKMVT1.BIN ...0010(16)bytes loaded,from 9200 to 920F >jp 9200 >dm 8200,83ff 8200 00 FF FE FD FC FB FA F9-F8 F7 F6 F5 F4 F3 F2 F1 ................ 8210 F0 EF EE ED EC EB EA E9-E8 E7 E6 E5 E4 E3 E2 E1 ................ 8220 E0 DF DE DD DC DB DA D9-D8 D7 D6 D5 D4 D3 D2 D1 .゚゙ンワロレルリラヨユヤモメム 8230 D0 CF CE CD CC CB CA C9-C8 C7 C6 C5 C4 C3 C2 C1 ミマホヘフヒハノネヌニナトテツチ 8240 C0 BF BE BD BC BB BA B9-B8 B7 B6 B5 B4 B3 B2 B1 タソセスシサコケクキカオエウイア 8250 B0 AF AE AD AC AB AA A9-A8 A7 A6 A5 A4 A3 A2 A1 ーッョュャォェゥィァヲ・、」「。 8260 A0 9F 9E 9D 9C 9B 9A 99-98 97 96 95 94 93 92 91 ............... 8270 90 8F 8E 8D 8C 8B 8A 89-88 87 86 85 84 83 82 81 ................ 8280 80 7F 7E 7D 7C 7B 7A 79-78 77 76 75 74 73 72 71 .~}|{zyxwvutsrq 8290 70 6F 6E 6D 6C 6B 6A 69-68 67 66 65 64 63 62 61 ponmlkjihgfedcba 82A0 60 5F 5E 5D 5C 5B 5A 59-58 57 56 55 54 53 52 51 `_^]\[ZYXWVUTSRQ 82B0 50 4F 4E 4D 4C 4B 4A 49-48 47 46 45 44 43 42 41 PONMLKJIHGFEDCBA 82C0 40 3F 3E 3D 3C 3B 3A 39-38 37 36 35 34 33 32 31 @?>=<;:987654321 82D0 30 2F 2E 2D 2C 2B 2A 29-28 27 26 25 24 23 22 21 0/.-,+*)('&%$#"! 82E0 20 1F 1E 1D 1C 1B 1A 19-18 17 16 15 14 13 12 11 ............... 82F0 10 0F 0E 0D 0C 0B 0A 09-08 07 06 05 04 03 02 01 ................ 8300 00 FF FE FD FC FB FA F9-F8 F7 F6 F5 F4 F3 F2 F1 ................ 8310 F0 EF EE ED EC EB EA E9-E8 E7 E6 E5 E4 E3 E2 E1 ................ 8320 E0 DF DE DD DC DB DA D9-D8 D7 D6 D5 D4 D3 D2 D1 .゚゙ンワロレルリラヨユヤモメム 8330 D0 CF CE CD CC CB CA C9-C8 C7 C6 C5 C4 C3 C2 C1 ミマホヘフヒハノネヌニナトテツチ 8340 C0 BF BE BD BC BB BA B9-B8 B7 B6 B5 B4 B3 B2 B1 タソセスシサコケクキカオエウイア 8350 B0 AF AE AD AC AB AA A9-A8 A7 A6 A5 A4 A3 A2 A1 ーッョュャォェゥィァヲ・、」「。 8360 A0 9F 9E 9D 9C 9B 9A 99-98 97 96 95 94 93 92 91 ............... 8370 90 8F 8E 8D 8C 8B 8A 89-88 87 86 85 84 83 82 81 ................ 8380 80 7F 7E 7D 7C 7B 7A 79-78 77 76 75 74 73 72 71 .~}|{zyxwvutsrq 8390 70 6F 6E 6D 6C 6B 6A 69-68 67 66 65 64 63 62 61 ponmlkjihgfedcba 83A0 60 5F 5E 5D 5C 5B 5A 59-58 57 56 55 54 53 52 51 `_^]\[ZYXWVUTSRQ 83B0 50 4F 4E 4D 4C 4B 4A 49-48 47 46 45 44 43 42 41 PONMLKJIHGFEDCBA 83C0 40 3F 3E 3D 3C 3B 3A 39-38 37 36 35 34 33 32 31 @?>=<;:987654321 83D0 30 2F 2E 2D 2C 2B 2A 29-28 27 26 25 24 23 22 21 0/.-,+*)('&%$#"! 83E0 20 1F 1E 1D 1C 1B 1A 19-18 17 16 15 14 13 12 11 ............... 83F0 10 0F 0E 0D 0C 0B 0A 09-08 07 06 05 04 03 02 01 ................ > |
うまくいったようです。
テストとしてはこれでよいと思いましたが、念のために次のようにしてもう一度テストしてみました。
>cm 9200 9200 21- 9201 00- 9202 70-72 9203 11- >jp 9200 >dm 8200,83ff 8200 A8 AA D4 45 51 11 B8 FD-A6 AA 45 46 55 73 AB 9A ィェヤEQ.ク.ヲェEFUsォ. 8210 15 55 EB AB AA 2A 79 D5-06 D3 AC BE 8A AB 51 05 .U.ォェ*yユ.モャセ.ォQ. 8220 8A A8 5D 15 5D 54 AE AC-08 2A 55 41 55 95 EA 9A .ィ].]Tョャ.*UAU... 8230 55 51 BF B8 B2 AE 5D 0D-15 24 A0 8A AA AA 50 14 UQソクイョ]..$.ェェP. 8240 8E CA D5 15 B5 55 A8 EA-A9 AA 65 F9 F4 4D 6A AE .ハユ.オUィ.ゥェe..Mjョ 8250 5F DD AF A8 2A AA 11 59-97 45 BC B8 AA AA 55 D5 _ンッィ*ェ.Y.EシクェェUユ 8260 A8 AA 75 11 57 0D AA AE-AA AA 11 D0 74 54 4E 9B ィェu.W.ェョェェ.ミtTN. 8270 5D 75 E9 88 2A 66 31 51-55 55 AA AE A2 AA 75 D5 ]u..*f1QUUェョ「ェuユ 8280 38 AB C5 C5 75 57 A0 84-AA AA F5 76 D5 41 EA 6A 8ォナナuW.ェェ.vユA.j 8290 D5 55 9F 2A AA CA 4F 05-55 7D A9 2A AA AA 53 55 ユU.*ェハO.U}ゥ*ェェSU 82A0 2A AA 75 15 C7 5D 8B AA-AA AA 55 4C 57 D5 AE B2 *ェu.ヌ].ェェェULWユョイ 82B0 17 55 92 82 EA CA 5D D4-55 56 BA AA AE AA 75 5D .U...ハ]ヤUVコェョェu] 82C0 AA BA 79 35 D5 59 EE E9-AA EA D5 75 51 06 D2 CB ェコy5ユY..ェ.ユuQ.メヒ 82D0 5D 45 88 A9 A9 AB 0B 5D-E4 4D AA 8B BA A2 5D 7C ]E.ゥゥォ.].Mェ.コ「]| 82E0 A2 A2 57 ED 40 55 8E B8-A9 F2 5D 3B 6D 05 A9 32 「「W.@U.クゥ.];m.ゥ2 82F0 54 05 1A 1A 2A 9B 5F D7-01 17 A6 AB EA 6A 47 5F T...*._ラ..ヲォ.jG_ 8300 E2 A8 55 75 95 49 BE 8F-AA AB 64 55 71 15 B7 AA .ィUu.Iセ.ェォdUq.キェ 8310 55 47 E2 B8 E3 8E 54 14-4D 57 39 AB BA 1A 74 47 UG.ク..T.MW9ォコ.tG 8320 AA BA 4F 56 1D 44 3E EE-46 A8 2D 50 48 FD AB C8 ェコOV.D>.Fィ-PH.ォネ 8330 5D 0D A8 A6 8A AA CD 7C-53 11 26 2C DA BA 54 09 ].ィヲ.ェヘ|S.&,レコT. 8340 2A EA D1 45 51 75 E6 AA-AA AA D7 55 51 64 24 2E *.ムEQu.ェェェラUQd$. 8350 55 F1 29 AA AA A2 55 55-57 45 AB BB AE 2B 79 5D U.)ェェ「UUWEォサョ+y] 8360 AA AA C5 14 C5 25 BA B2-AA AA 55 90 59 D4 72 AA ェェナ.ナ%コイェェU.Yヤrェ 8370 5D 55 62 A2 AA 32 F6 55-54 15 B8 D4 EA 22 F5 54 ]Ub「ェ2.UT.クヤ.".T 8380 AA BA 57 0D 4D 51 A3 A7-AA AA 5D 17 C5 55 8B E4 ェコW.MQ」ァェェ].ナU.. 8390 19 F4 AA CA AA AA 17 17-51 1D EC A2 AA AA 55 25 ..ェハェェ..Q..「ェェU% 83A0 EE 8B C5 75 54 5B 86 B9-9A AA 20 71 D6 75 A8 AA ..ナuT[.ケ.ェ qヨuィェ 83B0 55 04 52 A8 A2 AA D7 50-56 55 A9 CE AA EA 51 15 U.Rィ「ェラPVUゥホェ.Q. 83C0 AB AA 55 1D DC 11 ED B8-04 6B 71 37 95 55 62 AE ォェU.ワ..ク.kq7.Ubョ 83D0 57 56 A2 AA AA AA 01 65-D5 5C A2 2A B8 EF FD 49 WV「ェェェ.eユ\「*ク..I 83E0 AE 8E 55 11 C5 6E 6C 80-4A AB DC 54 FC D8 0E EA ョ.U.ナnl.JォワT.リ.. 83F0 75 D4 AC 22 6B A2 57 7D-D5 55 8A 88 EA BA D4 55 uヤャ"k「W}ユU...コヤU >cm 9100 9100 11- 9101 00- 9102 70-72 9103 01- >jp 9100 >jp 9200 >dm 8200,83ff 8200 00 FF FE FD FC FB FA F9-F8 F7 F6 F5 F4 F3 F2 F1 ................ 8210 F0 EF EE ED EC EB EA E9-E8 E7 E6 E5 E4 E3 E2 E1 ................ 8220 E0 DF DE DD DC DB DA D9-D8 D7 D6 D5 D4 D3 D2 D1 .゚゙ンワロレルリラヨユヤモメム 8230 D0 CF CE CD CC CB CA C9-C8 C7 C6 C5 C4 C3 C2 C1 ミマホヘフヒハノネヌニナトテツチ 8240 C0 BF BE BD BC BB BA B9-B8 B7 B6 B5 B4 B3 B2 B1 タソセスシサコケクキカオエウイア 8250 B0 AF AE AD AC AB AA A9-A8 A7 A6 A5 A4 A3 A2 A1 ーッョュャォェゥィァヲ・、」「。 8260 A0 9F 9E 9D 9C 9B 9A 99-98 97 96 95 94 93 92 91 ............... 8270 90 8F 8E 8D 8C 8B 8A 89-88 87 86 85 84 83 82 81 ................ 8280 80 7F 7E 7D 7C 7B 7A 79-78 77 76 75 74 73 72 71 .~}|{zyxwvutsrq 8290 70 6F 6E 6D 6C 6B 6A 69-68 67 66 65 64 63 62 61 ponmlkjihgfedcba 82A0 60 5F 5E 5D 5C 5B 5A 59-58 57 56 55 54 53 52 51 `_^]\[ZYXWVUTSRQ 82B0 50 4F 4E 4D 4C 4B 4A 49-48 47 46 45 44 43 42 41 PONMLKJIHGFEDCBA 82C0 40 3F 3E 3D 3C 3B 3A 39-38 37 36 35 34 33 32 31 @?>=<;:987654321 82D0 30 2F 2E 2D 2C 2B 2A 29-28 27 26 25 24 23 22 21 0/.-,+*)('&%$#"! 82E0 20 1F 1E 1D 1C 1B 1A 19-18 17 16 15 14 13 12 11 ............... 82F0 10 0F 0E 0D 0C 0B 0A 09-08 07 06 05 04 03 02 01 ................ 8300 00 FF FE FD FC FB FA F9-F8 F7 F6 F5 F4 F3 F2 F1 ................ 8310 F0 EF EE ED EC EB EA E9-E8 E7 E6 E5 E4 E3 E2 E1 ................ 8320 E0 DF DE DD DC DB DA D9-D8 D7 D6 D5 D4 D3 D2 D1 .゚゙ンワロレルリラヨユヤモメム 8330 D0 CF CE CD CC CB CA C9-C8 C7 C6 C5 C4 C3 C2 C1 ミマホヘフヒハノネヌニナトテツチ 8340 C0 BF BE BD BC BB BA B9-B8 B7 B6 B5 B4 B3 B2 B1 タソセスシサコケクキカオエウイア 8350 B0 AF AE AD AC AB AA A9-A8 A7 A6 A5 A4 A3 A2 A1 ーッョュャォェゥィァヲ・、」「。 8360 A0 9F 9E 9D 9C 9B 9A 99-98 97 96 95 94 93 92 91 ............... 8370 90 8F 8E 8D 8C 8B 8A 89-88 87 86 85 84 83 82 81 ................ 8380 80 7F 7E 7D 7C 7B 7A 79-78 77 76 75 74 73 72 71 .~}|{zyxwvutsrq 8390 70 6F 6E 6D 6C 6B 6A 69-68 67 66 65 64 63 62 61 ponmlkjihgfedcba 83A0 60 5F 5E 5D 5C 5B 5A 59-58 57 56 55 54 53 52 51 `_^]\[ZYXWVUTSRQ 83B0 50 4F 4E 4D 4C 4B 4A 49-48 47 46 45 44 43 42 41 PONMLKJIHGFEDCBA 83C0 40 3F 3E 3D 3C 3B 3A 39-38 37 36 35 34 33 32 31 @?>=<;:987654321 83D0 30 2F 2E 2D 2C 2B 2A 29-28 27 26 25 24 23 22 21 0/.-,+*)('&%$#"! 83E0 20 1F 1E 1D 1C 1B 1A 19-18 17 16 15 14 13 12 11 ............... 83F0 10 0F 0E 0D 0C 0B 0A 09-08 07 06 05 04 03 02 01 ................ > |
まず最初に増設RAMのアドレス7200〜73FFを読み出して表示させました。
ランダムなデータが表示されていて、ここにはまだ意味のあるデータが書かれていないことがわかります。
次に同アドレスに対してさきほどのデータ書き込みプログラムを実行したあとで、もう一度読み出してみました。
正しく書き込みが行なわれたことがはっきり確認できました。
ROM/RAM/RTCボードの製作[第20回]
2017.9.2upload
前へ
次へ
ホームページトップへ戻る