2017.9.4
前へ
次へ
ホームページトップへ戻る

マイコン独立大作戦
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

前へ
次へ
ホームページトップへ戻る