マイコン独立大作戦
ROM/RAM/RTCボードの製作
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
WindowsパソコンにUSB接続して使う現行方式はそれなりに便利ではありますが、ときとしてWindows
のしがらみから開放されて、小さいながらも独立した一個のパソコンとして機能したいと思うこともあります。
独立大作戦の作戦その1はCRTインターフェースボードの製作です。
作戦その2はキーボードインターフェースです。
作戦その3は、SDカードインターフェースです。
作戦その4は、ROM/RAM/RTCボードです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第21回]
●増設RAMリードライトプログラムは作成済みでした
しばらくぶりにプログラムの作成作業を再開したのですが、のっけから迷走状態になってしまいました。
前回はLOGファイル作成のための準備作業として、512バイトのLOGバッファを増設RAM上に設けて、そこにアクセスするサブルーチンを作ってテストをしました。
そこまではうまくいきましたので、いよいよLOGファイルの本体をSAVEするためのプログラムを作成すべく、まずは少し前に作成したLOGファイルOPENプログラムを確認してみることから始めました。
LOGファイルOPENプログラムのテストは[第16回]で行ないました。
LOGファイルOPENプログラムはSDカード制御プログラムに追加する形で作成しました。
それは妥当な考えです。
[第16回]ではテストとデバッグの便を考えて、仮にRAM上で動作するようにORGを$9000に変更したプログラムを作成して、ND80Z3.5(USB接続版)で動作テストを行ないました。
あれ?
$9000〜に配置していたのか。
前回作成した増設RAMアクセスプログラムもとりあえずのテスト版として$9000に置きました。
これでは完全に重なってしまいます。
そういうことなら、いっそのこと前回作ったサブルーチンを正規のプログラムとしてシステムのワークアドレスに置いてしまいましょう。
うむむむ?
デジャブか?
なんだか前にも同じようなことを考えたような…。
おお、デジャブなどではありませんでした。
カラーキャラクタディスプレイインターフェースで、カラーコードもスクロールできるようにするために、増設RAMを使ったのでした。
そのことは前回書きました。
それなのに、そうするためには当然増設RAMにアクセスするためのプログラムを作ったはず、というところに考えが及びませんでした。
なんとも間の抜けた話です。
そういえば、カラーコードについてのプログラムについてはいずれお見せします、ということでパスしてしまっておりました。
こういうものはやっぱりホームページにしっかりUPしておくべきでした
下がそのときに作った増設RAMアクセスプログラムです。
2017/8/7 8:54 szbkcg.txt END=6DDB ;;; RAM/ROM BKCG ;17/8/5 ; ORG $6DC0 ; ; 6DC0 21CC6D LD HL,BKWR 6DC3 11A0E9 LD DE,$E9A0 6DC6 011000 LD BC,$0010 6DC9 EDB0 LDIR 6DCB C9 RET ; 6DCC D39C BKWR:OUT (9C),A;$E9A0 6DCE EB EX DE,HL 6DCF 71 LD (HL),C 6DD0 EB EX DE,HL 6DD1 AF XOR A;don't use JP! see assemble list 6DD2 D39C OUT (9C),A 6DD4 C9 RET 6DD5 D39C BKRD:OUT (9C),A;$E9A9 6DD7 4E LD C,(HL) 6DD8 AF XOR A 6DD9 D39C OUT (9C),A 6DDB C9 RET ; ;END BKRD =6DD5 BKWR =6DCC |
しっかり作ってしまっているじゃありませんか。
日付を見ますとまだ1ヶ月も経っておりませぬ。
むむむ。
忘れっぽいなんてレベルじゃありませんです。
こりゃあもう真性認知症か?
このプログラムは独立型システムROMの未使用エリアにはめこんでいます。
起動時にこのプログラムをコールするとRAMのE9A0〜に増設RAMWRITE、READサブルーチンがコピーされます。
E9A0−E9A8 増設RAMWRITE
E9A9−E9AF 増設RAMREAD
です。
うーん。
前回の増設RAMWRITEと、増設RAMREADはここですでに作成済みだったか。
とほほ。
512バイトのデータCOPYプログラムを新規に作ったことがせめてものなぐさめであります。
下はカラー表示を組み込んだスクリーンエディタプログラムの、上記のサブルーチンのコール部分のリストです。
; ;scroll check & scroll 5303 7C SCRCK:LD A,H 5304 B7 OR A 5305 CA0F53 JP Z,SCRCK1 5308 ED5B56F1 LD DE,(VRAME) 530C ED52 SBC HL,DE 530E D8 RET C 530F 1100F8 SCRCK1:LD DE,VRAMS 5312 2A52F1 LD HL,(VRAM2) 5315 ED4B5AF1 LD BC,(SCRDT) 5319 23 SCRCK2:INC HL 531A 13 INC DE 531B 7C LD A,H 531C E67F AND 7F 531E 67 LD H,A 531F 7A LD A,D 5320 E67F AND 7F 5322 57 LD D,A 5323 C5 PUSH BC 5324 3EEF LD A,EF;color buffer 5326 CDA9E9 CALL BKRD 5329 3EEF LD A,EF 532B CDA0E9 CALL BKWR 532E 7A LD A,D 532F F680 OR 80 5331 57 LD D,A 5332 3EF7 LD A,F7;color vram 5334 D3D0 OUT (D0),A 5336 79 LD A,C 5337 12 LD (DE),A 5338 3EFB LD A,FB;character vram 533A D3D0 OUT (D0),A 533C 1B DEC DE 533D 2B DEC HL 533E 7C LD A,H 533F F680 OR 80 5341 67 LD H,A 5342 7E LD A,(HL) 5343 12 LD (DE),A 5344 23 INC HL 5345 13 INC DE 5346 C1 POP BC 5347 0B DEC BC 5348 78 LD A,B 5349 B1 OR C 534A C21953 JP NZ,SCRCK2 ; 534D 3A50F1 LD A,(VLCHR) 5350 47 LD B,A 5351 13 SCRCK3:INC DE 5352 7A LD A,D 5353 E67F AND 7F 5355 57 LD D,A 5356 3EEF LD A,EF;color buffer 5358 0E07 LD C,07 535A CDA0E9 CALL BKWR 535D 7A LD A,D 535E F680 OR 80 5360 57 LD D,A 5361 3EF7 LD A,F7;color vram 5363 D3D0 OUT (D0),A 5365 79 LD A,C 5366 12 LD (DE),A 5367 3EFB LD A,FB;character vram 5369 D3D0 OUT (D0),A 536B 1B DEC DE 536C 3E20 LD A,20 536E 12 LD (DE),A 536F 13 INC DE 5370 05 DEC B 5371 C25153 JP NZ,SCRCK3 5374 3EFC LD A,FC 5376 D3D0 OUT (D0),A 5378 2A54F0 LD HL,(CADRS) 537B ED5B5CF1 LD DE,(SCRDT2);$FFB0/FFD8 537F 19 ADD HL,DE;-80/-40 5380 2254F0 LD (CADRS),HL 5383 05 DEC B;********* reset zf,for cancel BREAK 5384 C9 RET |
アドレス5326、532B、535Aでコールしています(このほかのところでもコールしていますが、その部分のリストは省略します)。
さてここまでは記憶も戻ってきましたので、以前作成済みの増設RAMWRITE、READプログラムの後ろに前回作成しました512バイトのコピープログラムを追加しようとしましたら。
メモリが足りません。
下は前回のプログラムです。
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 |
BKMVは19バイトあります。
ノートを確認したところ、増設RAMWRITE、READのコピー先の前後はZB3DOS(CP/M互換DOS)で使っているので、この部分の空きはE999−E9BFしかないと記してありました。
前記のサブルーチンの後ろにBKMVを追加しようとしたら、E9B0からになりますからメモリが足りません。
全体をE999から始めるようにするか、LD BC,$0200を外せばなんとか入りますけれど。
そんなことをちまちまやるより、ここはやっぱりLDIRを使うところでしょう。
おお、すでに前記のサブルーチンでLDIRを使っておりました。
こういうときにLDIRは実に便利です(Z80に感謝!です)。
8080用はあとで考えることにいたしましょう。
ということでBKMVを追加したプログラムを作成しました。
2017/9/2 14:20 szbkcgt.txt END=8026 ;;; RAM/ROM BKCG for test ;17/8/5 9/2 ; ORG $8000;*** $6DC0 ; ; 8000 210C80 LD HL,BKWR 8003 11A0E9 LD DE,$E9A0 8006 011B00 LD BC,$001B 8009 EDB0 LDIR 800B C9 RET ; 800C D39C BKWR:OUT (9C),A;$E9A0 800E EB EX DE,HL 800F 71 LD (HL),C 8010 EB EX DE,HL 8011 AF XOR A;don't use JP! see assemble list 8012 D39C OUT (9C),A 8014 C9 RET 8015 D39C BKRD:OUT (9C),A;$E9A9 8017 4E LD C,(HL) 8018 AF XOR A 8019 D39C OUT (9C),A 801B C9 RET 801C 010002 BKMV:LD BC,$0200;$E9B0 801F D39C OUT (9C),A;E9B3 8021 EDB0 LDIR 8023 AF XOR A 8024 D39C OUT (9C),A 8026 C9 RET;end=$E9BA ; ;END BKMV =801C BKRD =8015 BKWR =800C |
最終的には元のプログラムと同じようにROMに組み込みますが、とりあえずはテスト用なので8000からにしました。
テストのため前回のテストプログラムのサブルーチンコールアドレスを書き換えました。
2017/9/2 10:41 bkwtest2.txt END=9114 ;;; BANK RAM WRITE TEST ; 17/9/1 9/2 ; ORG $9100;for test ; BKWR=$E9A0 REENT=$1033 ; 9100 110074 WTEST:LD DE,$7400 9103 010002 LD BC,$0200 9106 3EEF WTEST1:LD A,EF 9108 CDA0E9 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 =E9A0 REENT =1033 WTEST =9100 WTEST1 =9106 |
こちらはBKMVのテストプログラムです。
こちらもBKMVのアドレスを書き換えました。
2017/9/2 10:41 bkmvt2.txt END=920D ;;; BANK RAM MOVE(READ) TEST ; 17/9/1 9/2 ; ORG $9200;for test ; BKMV=$E9B0 REENT=$1033 ; 9200 210074 MVTEST:LD HL,$7400 9203 110082 LD DE,$8200 9206 3EEF LD A,EF 9208 CDB0E9 CALL BKMV 920B C33310 JP REENT ; BKMV =E9B0 MVTEST =9200 REENT =1033 |
そのように変更したうえで、念のため前回と同じテストを行ないました。
logfile nd80zlog\09021032.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** ndwr2h.bin loaded,from E23F to E535 >/ld szbkcgt.bin,8000 loading SZBKCGT.BIN ...0027(39)bytes loaded,from 8000 to 8026 >usr($8000) >dm e9a0,e9bf E9A0 D3 9C EB 71 EB AF D3 9C-C9 D3 9C 4E AF D3 9C C9 モ..q.ッモ.ノモ.Nッモ.ノ E9B0 D3 9C 01 00 02 ED B0 AF-D3 9C C9 32 4E 41 54 41 モ.....ーッモ.ノ2NATA >/ld bkwtest2.bin,9100 loading BKWTEST2.BIN ...0015(21)bytes loaded,from 9100 to 9114 >/ld bkmvt2.bin,9200 loading BKMVT2.BIN ...000e(14)bytes loaded,from 9200 to 920D >jp 9200 >dm 8200,83ff 8200 2A EA 05 55 55 53 EB AF-AE AA 14 D5 54 45 AE EA *..UUS.ッョェ.ユTEョ. 8210 7D 15 0A EA AA 2E D5 B8-55 5D 42 8E A2 AA 5B 0F }...ェ.ユクU]B.「ェ[. 8220 8A 3A 05 11 55 51 AB 28-EA 8A CD 49 5C 54 9B A8 .:..UQォ(..ヘI\T.ィ 8230 55 35 CA A8 8A EA 45 D3-57 65 A6 A1 8A 3F 5E 55 U5ハィ..EモWeヲ。.?^U 8240 A3 A9 55 7C 1D 54 AA AE-A2 AA 5D 53 57 52 AA 0F 」ゥU|.Tェョ「ェ]SWRェ. 8250 34 1C AA 38 AA 88 6D 77-51 53 B8 EA BA AA 45 55 4.ェ8ェ.mwQSク.コェEU 8260 AA AA 64 5B 51 D5 A8 AF-AA 8A 57 1D 15 55 E6 8A ェェd[Qユィッェ.W..U.. 8270 5D 55 29 68 AA DA 75 64-44 51 A2 AA 8B 2A 70 75 ]U)hェレudDQ「ェ.*pu 8280 EA A2 55 05 55 55 AA AA-A3 A8 55 75 5C 55 8E 16 .「U.UUェェ」ィUu\U.. 8290 57 4D 2A D2 E2 A8 59 53-75 55 9A 2A A8 AA 5A 5B WM*メ.ィYSuU.*ィェZ[ 82A0 0A AA 1D 15 45 58 BA AB-AB AA 55 71 0D 55 AA E8 .ェ..EXコォォェUq.Uェ. 82B0 15 45 EE 2E 88 EF 55 5D-55 F5 21 01 AB AA D1 DB .E....U]U.!.ォェムロ 82C0 CA A2 6C 17 50 1C A2 AB-AA 6A B1 55 55 54 AA B8 ハ「l.P.「ォェjアUUTェク 82D0 55 55 8C B9 20 AA 65 1D-57 55 AA AA AA 32 68 3E UU.ケ ェe.WUェェェ2h> 82E0 AA AA 55 35 5D 56 B2 22-6A 8A 65 41 55 55 BB EA ェェU5]Vイ"j.eAUUサ. 82F0 C4 D5 20 0B A9 AA F5 4D-55 55 AA 28 8A BA 15 FF トユ .ゥェ.MUUェ(.コ.. 8300 E9 AA 47 71 79 54 A9 AA-A2 8A 55 31 D6 15 AE AF .ェGqyTゥェ「.U1ヨ.ョッ 8310 53 D1 E1 AD AA AA 55 1C-55 45 A8 AE A0 B0 47 46 Sム.ュェェU.UEィョーGF 8320 AE AA 55 45 C4 55 0B AF-E8 AA D1 5F 44 55 8A BA ョェUEトU.ッ.ェム_DU.コ 8330 55 55 A8 2A EA 82 DB 19-55 53 C0 82 88 EB C7 14 UUィ*..ロ.USタ...ヌ. 8340 A8 8A F7 17 55 5C AA AA-AA AE 05 55 53 55 6A 86 ィ...U\ェェェョ.USUj. 8350 51 B5 AE C6 EB AA 4D 46-55 55 1E F0 A8 EE 73 D5 Qオョニ.ェMFUU..ィ.sユ 8360 8A A2 37 65 15 55 A3 A8-AB A8 53 77 6E 4D AA F8 .「7e.U」ィォィSwnMェ. 8370 5B 5D F9 BF 82 EE 01 67-5D 71 AA 63 AE E8 B6 D4 [].ソ...g]qェcョ.カヤ 8380 EF AA 54 75 4D 15 BE A8-8B A8 5F 0C 41 D5 AA 38 .ェTuM.セィ.ィ_.Aユェ8 8390 95 51 BA 62 BA AE E7 74-55 55 A2 9F AA AA D5 71 .Qコbコョ.tUU「.ェェユq 83A0 A2 A2 FD E1 55 44 BB 1B-8E 2A 45 54 65 55 AA A8 「「..UDサ..*ETeUェィ 83B0 77 75 A9 0A A6 2E 54 26-75 55 AE A9 AB AA 47 11 wuゥ.ヲ.T&uUョゥォェG. 83C0 ED A3 51 5D 57 55 A2 EA-A8 A8 41 55 55 D5 AA 8A .」Q]WU「.ィィAUUユェ. 83D0 75 55 EB AA AA 8A 25 37-55 55 3A E8 8E 8A 60 15 uU.ェェ.%7UU:...`. 83E0 9A BA 59 75 CD 51 AE AB-3A E0 97 6D C1 55 A9 AE .コYuヘQョォ:..mチUゥョ 83F0 55 55 EA 0E AB AA D3 5E-56 75 8E AA AA FA 9C 1F UU..ォェモ^Vu.ェェ... >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 ................ >/exit 0000 00C3 - リモート接続を終了しました logfile closed at Sat Sep 02 10:43:24 2017 |
最初にSZBCGT.BINをロードして実行します。
最後がRETで終っているのでJPではなくてZB3BASICのUSRを使いました。
SZBCGT.BINを実行することでRAMのE9A0〜にBKWR、BKRD、BKMVの各サブルーチンがコピーされます。
前回と同じ内容のサブルーチンをシステムのRAMエリアに置いただけですから、前回と同じように正しく実行されました。
やれやれ、です。
とんだ二度手間になってしまいました。
ROM/RAM/RTCボードの製作[第21回]
2017.9.4upload
前へ
次へ
ホームページトップへ戻る