レトロマイコン86ボードの構想(その6)メモリチェックプログラムの製作 [8086]
前回の記事で書いたようにヘキサファイルをV20のメモリ内にダウンロードできるようになったのでプログラムを作って遊んでいます。
アセンブラはCP/M-86のASM86を使い、アセンブラから出力されるヘキサファイルをhexファイルローダーでV20内のメモリにダウンロードして動かしています。
環境としてはMS-DOS Player上でCP/M-86エミュレータ(cpm86.exe)を動かし、ASM86.CMDを起動しています。
しかし、プログラムを作成して動かしてみると、不安定であり、ブレッドボード上の配線のチェックを行ったところ、接続線が1本断線していましたorz
今回は2度目の配線なのでテスタで線材の導通を確認しながら配線したのですが、最後の方で一部チェックせずに配線した部分で問題が発生していました(手抜きは駄目ですね・・)^^;
状況は改善したものの例えばダミーのPUSH/POPを追加しただけで動作が変わることがあったり等、微妙に不安定な要素があったので手抜きせずにメモリチェックプログラムを作成して確認してみました。
理想を言えばメモリ上に変数を置かずにレジスタだけで動作する(CALLも使用しない)方がいいのですが、そこまで不安定ではないのでメモリ上の変数やCALLは許容することにして、アドレスバスやデータバスのエラーはきちんと検出したいので
ようにしました。
プログラム自体は0010:0000からに置き、0030:0000~7FFE:0000をチェック対象にしています(メモリ最後の部分はPICとのI/F用とリセット時のジャンプ命令で使用するのでチェック対象外)。
結果として、最初は結構すぐにエラーが発生する(例えばチェック1回目で「err 17E0:0000」が発生)状況でしたが、回路の抵抗値の調整等を行い少し安定になりました。
最終的には、安定化電源で供給していた電圧がブレッドボード上では0.2V程度低かったので、5.0Vにしたところ数十回の連続チェックも通るようになりました^^
★2019/08/30 変更 {
チェック処理中であることが判るように約1秒毎に'o'を表示するようにしました。
}
メモリチェックプログラム(アセンブラ)
アセンブル時のコマンドはこんな感じです。
アセンブルした結果、生成されたHexファイルをHexファイルローダーでダウンロードしている様子が下記です。
Hexファイルの内容をTeraTermにコピペするとデータタイプを表示しながらV20のメモリにロードされます。
安定化した後の確認結果も貼っておきます。
尚、途中でリセットして中断していますが、リセットしなければ永遠とメモリチェックを繰り返します。
メモリチェック結果
★2020/09/17 追記
アセンブラプログラムのコードを内包した一発起動のpicleソースを追記します。
メモリチェックソース(picle)
[TOP] [ 前へ ] 連載記事 [ 次へ ]
アセンブラはCP/M-86のASM86を使い、アセンブラから出力されるヘキサファイルをhexファイルローダーでV20内のメモリにダウンロードして動かしています。
環境としてはMS-DOS Player上でCP/M-86エミュレータ(cpm86.exe)を動かし、ASM86.CMDを起動しています。
しかし、プログラムを作成して動かしてみると、不安定であり、ブレッドボード上の配線のチェックを行ったところ、接続線が1本断線していましたorz
今回は2度目の配線なのでテスタで線材の導通を確認しながら配線したのですが、最後の方で一部チェックせずに配線した部分で問題が発生していました(手抜きは駄目ですね・・)^^;
状況は改善したものの例えばダミーのPUSH/POPを追加しただけで動作が変わることがあったり等、微妙に不安定な要素があったので手抜きせずにメモリチェックプログラムを作成して確認してみました。
理想を言えばメモリ上に変数を置かずにレジスタだけで動作する(CALLも使用しない)方がいいのですが、そこまで不安定ではないのでメモリ上の変数やCALLは許容することにして、アドレスバスやデータバスのエラーはきちんと検出したいので
- チェック書込みとチェック方法
チェック対象メモリ全体にチェックデータを書込んだ後に書き込んだデータが読込めるか確認する。
- 書き込みデータ
簡易的な乱数(合同法)を使って生成し、書込み開始時に乱数のseedを保存し、チェック開始時に乱数seedを復元する。
通常の合同法ではrand(n+1) = A x rand(n) + B(A,Bは素数が望ましい、Bは無い場合もある)ですが、LSBが固定されないように「A x rand(n)」の結果の特定ビットが1の場合、Bを加算する。
- 長期安定確認
上記の書込みとチェックを繰り返し動かし(乱数のseedは継続利用)、チェック開始時に何回目のチェックかを2バイトヘキサ表示する。
ようにしました。
プログラム自体は0010:0000からに置き、0030:0000~7FFE:0000をチェック対象にしています(メモリ最後の部分はPICとのI/F用とリセット時のジャンプ命令で使用するのでチェック対象外)。
結果として、最初は結構すぐにエラーが発生する(例えばチェック1回目で「err 17E0:0000」が発生)状況でしたが、回路の抵抗値の調整等を行い少し安定になりました。
最終的には、安定化電源で供給していた電圧がブレッドボード上では0.2V程度低かったので、5.0Vにしたところ数十回の連続チェックも通るようになりました^^
★2019/08/30 変更 {
チェック処理中であることが判るように約1秒毎に'o'を表示するようにしました。
}
|
アセンブル時のコマンドはこんな感じです。
C:¥picle¥V20¥asm¥bios¥cmd>msdos cpm86 asm86 Memchk CP/M-86 emulator for DOS vers 1.3 - 11/30/97 Copyright (c) 1985, 1997 Jim Lopushinsky CP/M 8086 ASSEMBLER VER 1.1 END OF PASS 1 END OF PASS 2 END OF ASSEMBLY. NUMBER OF ERRORS: 0. USE FACTOR: 2% C:¥picle¥V20¥asm¥bios¥cmd> |
アセンブルした結果、生成されたHexファイルをHexファイルローダーでダウンロードしている様子が下記です。
Hexファイルの内容をTeraTermにコピペするとデータタイプを表示しながらV20のメモリにロードされます。
:¥¥ +E000-EDC7 # Memory chack executer 2019/08/19 +F000-FC43 # Pic24V20 HexLoader v0.02 2019/08/12 :¥<$F000 3139 :run HexLoader Start e3aaaaaaaaaaaaa1 : |
安定化した後の確認結果も貼っておきます。
尚、途中でリセットして中断していますが、リセットしなければ永遠とメモリチェックを繰り返します。
|
★2020/09/17 追記
アセンブラプログラムのコードを内包した一発起動のpicleソースを追記します。
|
[TOP] [ 前へ ] 連載記事 [ 次へ ]