レトロマイコン86ボードの構想(その10)回路図整理とパターン設計 [8086]
ブレッドボード上に作ったV20(8088互換)とPIC24を使ったPic24V20でCP/M-86が動いているようなので回路図を整理してパターン設計しました。
回路図はレトロマイコン86シリーズの最初の記事の「レトロマイコン86ボードの構想」の内容から大体想像が付いてしまいそうですが、下図になります。
8088はデータがアドレスに多重化されているので74HC573を2個使い、5チップ構成になります。
アドレスとデータが多重化されたことでPIC24の使用ピンに余裕ができたので、RTCC(リアルタイムクロックカレンダ)モジュール用に水晶の実装回路も付けてみました。
使用したCADはDesignSparkPCBです。
★2021/02/25
V20での16MHzクロック動作に対応した回路図をここにアップしました
従来通り、抵抗やコンデンサ等は表面実装部品を使いますが、ボトム面が割合空いているのでラッチ用のIC(74HC573)は5.2mm幅のSOPパッケージのものを使いボトム面に実装しました。
パターン図(グランドをベタパターン化前のもの)は下図になります。赤色がトップ面、水色がボトム面のパターンです。
細い線が何本かありますがこれらはグランドの接続線で、グランドをベタパターン化することで接続されます。
グランドをベタパターン化後のトップ面のパターンが下図です。
ボトム面は次のとおりです。
部品の3Dデータは作っていないので表示がイマイチですが3D表示が下図になります。
右端の黒いものはSDカードホルダーです。
ボトム面の3D表示は下図で、前述のようにラッチICを2個、ボトム面に実装しました。
右側の赤い大きなものはリアルタイムクロック用の電池(CR2032)ホルダです。
★2019/11/20 追記
完成したプリント基板の写真等を「レトロマイコン86ボードの構想(その16)プリント基板完成」に記載しました。
★2020/12/14 追記
V20の16MHzクロック対応のために改善した回路図及びパターン図を「レトロマイコン86ボードの構想(その25)回路図アップデート」の記事に記載しました。
[TOP] [ 前へ ] 連載記事 [ 次へ ]
回路図はレトロマイコン86シリーズの最初の記事の「レトロマイコン86ボードの構想」の内容から大体想像が付いてしまいそうですが、下図になります。
8088はデータがアドレスに多重化されているので74HC573を2個使い、5チップ構成になります。
アドレスとデータが多重化されたことでPIC24の使用ピンに余裕ができたので、RTCC(リアルタイムクロックカレンダ)モジュール用に水晶の実装回路も付けてみました。
使用したCADはDesignSparkPCBです。
Pic24V20(8088ワンボードマイコン)の回路図 |
※2019/10/20 最新版に更新(下記のパターン図はアップデートしていません) |
V20での16MHzクロック動作に対応した回路図をここにアップしました
従来通り、抵抗やコンデンサ等は表面実装部品を使いますが、ボトム面が割合空いているのでラッチ用のIC(74HC573)は5.2mm幅のSOPパッケージのものを使いボトム面に実装しました。
パターン図(グランドをベタパターン化前のもの)は下図になります。赤色がトップ面、水色がボトム面のパターンです。
細い線が何本かありますがこれらはグランドの接続線で、グランドをベタパターン化することで接続されます。
Pic24V20パターン図 |
|
グランドをベタパターン化後のトップ面のパターンが下図です。
Pic24V20パターン図(トップ面) |
|
ボトム面は次のとおりです。
Pic24V20パターン図(ボトム面) |
|
部品の3Dデータは作っていないので表示がイマイチですが3D表示が下図になります。
右端の黒いものはSDカードホルダーです。
3D表示(トップ面) |
|
ボトム面の3D表示は下図で、前述のようにラッチICを2個、ボトム面に実装しました。
右側の赤い大きなものはリアルタイムクロック用の電池(CR2032)ホルダです。
3D表示(ボトム面) |
|
★2019/11/20 追記
完成したプリント基板の写真等を「レトロマイコン86ボードの構想(その16)プリント基板完成」に記載しました。
★2020/12/14 追記
V20の16MHzクロック対応のために改善した回路図及びパターン図を「レトロマイコン86ボードの構想(その25)回路図アップデート」の記事に記載しました。
[TOP] [ 前へ ] 連載記事 [ 次へ ]
レトロマイコン86ボードの構想(その9)bootstrapでのCP/M-86の起動 [8086]
前回の記事でCP/M-86をCold Start Loaderで起動できたことを書きました。
今回はBootstrapを使ってCP/M-86を本来の起動方法で立ち上げます。
BootstrapはDiskAのシステム用トラック(今回は1トラックをシステム用に確保しています)からCold Start Loaderを読込んで起動するだけの機能なので作成は簡単なのですが、ブレッドボード上で回路を組んでいるため、ハードが不安定になることが度々あり、その都度、原因調査と対策をして時間が掛かりました(何度か安定化したといっているのでオオカミ少年状態です(少年ではないのですがw))
ブレッドボードで評価する時は、次回から新しいブレッドボードを使い、結線の線材も自作するなど、検討した方がいいかもしれません。
話をBootstrapに戻すとシステムトラック上のBootstrapとCold Boot Loaderの配置はSDカードのブロックサイズが512bytesであることを考慮してCold Boot Loaderのヘッダを除く、コード部を0200H(2ブロック目)から配置しました。
Bootstrapは先頭の128バイトに収めます。
Bootstrapのソースは短いので全リストを貼っておきます。
Pic24V20でのCP/M-86用Bootstrap(アセンブラ)
★2019/11/16 変更 Bootstrapリストを最新版に変更
ハードが安定している時には、CP/M-86の起動がメチャ楽になりました。
電源投入時からCP/M-86起動までのサンプルログを以下に示します。
下記のサンプルログでは手動でCP/M-86を起動していますが、picle言語で書いたCP/M-86booterを自動起動するように設定すれば電源オンでCP/M-86が起動するようになります。
BootstrapでのCP/M-86の起動
★2019/09/07 追記
CP/M-86用のデジタルリサーチ社製Cコンパイラでhello表示してみた。
stdio.hの67行目でエラーが発生しましたがリンク後起動したところ、hello表示できました。
DRCでhello
★2019/09/15 追記
デジタルリサーチ社の Personal Basic でASCIIARTを動かしてみました。
Personal Basicはプロンプト行がそのまま入力行になっているためかプログラムからの出力が80文字手前で次の行へ改行してしまうので冒頭にwidth命令を追加して80文字/行に設定しています。
実行時間は2分5秒でした(V20のクロックは8MHzです)
因みにマイクロソフトのMBASICでの実行時間は2分42秒でした。
CP/M-68Kではデジタルリサーチ社のCBASICはBCD演算のためかASCIIARTの実行時間がかなり遅かったのですがCP/M-86ではMSより速いですね。
Personal BasicでのASCIIART実行
★2019/09/22 追記
CP/M-86はネットから入手できるソフトが思ったより多くないですね^^;
デジタルリサーチ以外のCコンパイラを探したところ、Aztec Cを見つけました。
でもincludeでファイルが読めないとのエラーが出てコンパイルできない・・
CP/M-86が正常に動いていないのか・・
Aztec Cでのコンパイルエラー
★2019/09/22 追記
上に書いたAztec Cのコンパイルエラーですが、#includeで指定するファイルを<>ではなく""で囲むとエラーが出なくなりました。
下のログはDRC(デジタルリサーチ社製)とAztecCでのコンパイル状況と実行ファイルのサイズの比較です。
AztecCの方がかなりコンパクトな実行ファイルを作成してますね。
まぁもっと大きなプログラムの場合、どうなるかはやってみないと判らないですが・・
Aztec CとDRCとの比較
★2019/10/22 追記
Aztec Cのコンパイルオプションでインクルードドライブを標準ヘッダファイルのあるドライブ(今回の場合はCドライブ)に指定するとエラーが出なくなりました。
cc -ic: SrcFileName
★2019/09/23 追記
AztecCの著作権についてメモしておきます。
the official AZTEC C onlineのサイトでApple IIとCommondore 64用のAztec Cが公開されていて、このサイト内のLeap into a new dimension with Aztec Cのページで免責事項として次のように記載されています。
Apple IIとCommondore 64用のAztec Cに関してはfreeで使っていいようです。
google翻訳が下記で「所有権を一切主張せず」とあるので少なくともこのサイトで公開されているApple IIとCommondore 64用のコンパイラに関しては自由に使えるようです。
[TOP] [ 前へ ] 連載記事 [ 次へ ]
今回はBootstrapを使ってCP/M-86を本来の起動方法で立ち上げます。
BootstrapはDiskAのシステム用トラック(今回は1トラックをシステム用に確保しています)からCold Start Loaderを読込んで起動するだけの機能なので作成は簡単なのですが、ブレッドボード上で回路を組んでいるため、ハードが不安定になることが度々あり、その都度、原因調査と対策をして時間が掛かりました(何度か安定化したといっているのでオオカミ少年状態です(少年ではないのですがw))
ブレッドボードで評価する時は、次回から新しいブレッドボードを使い、結線の線材も自作するなど、検討した方がいいかもしれません。
話をBootstrapに戻すとシステムトラック上のBootstrapとCold Boot Loaderの配置はSDカードのブロックサイズが512bytesであることを考慮してCold Boot Loaderのヘッダを除く、コード部を0200H(2ブロック目)から配置しました。
Bootstrapは先頭の128バイトに収めます。
; ++++ SD block assign ++++ ; ; blk No adr length content ; 0 0000H 80H Bootstrap ; 0 0080H 100H not use ; 0 0180H 80H ColdStartLoader's header ; 1 0200H nnnn code of ColdStartLoader ; ...
Bootstrapのソースは短いので全リストを貼っておきます。
|
★2019/11/16 変更 Bootstrapリストを最新版に変更
ハードが安定している時には、CP/M-86の起動がメチャ楽になりました。
電源投入時からCP/M-86起動までのサンプルログを以下に示します。
下記のサンプルログでは手動でCP/M-86を起動していますが、picle言語で書いたCP/M-86booterを自動起動するように設定すれば電源オンでCP/M-86が起動するようになります。
|
★2019/09/07 追記
CP/M-86用のデジタルリサーチ社製Cコンパイラでhello表示してみた。
stdio.hの67行目でエラーが発生しましたがリンク後起動したところ、hello表示できました。
|
★2019/09/15 追記
デジタルリサーチ社の Personal Basic でASCIIARTを動かしてみました。
Personal Basicはプロンプト行がそのまま入力行になっているためかプログラムからの出力が80文字手前で次の行へ改行してしまうので冒頭にwidth命令を追加して80文字/行に設定しています。
実行時間は2分5秒でした(V20のクロックは8MHzです)
因みにマイクロソフトのMBASICでの実行時間は2分42秒でした。
CP/M-68Kではデジタルリサーチ社のCBASICはBCD演算のためかASCIIARTの実行時間がかなり遅かったのですがCP/M-86ではMSより速いですね。
|
★2019/09/22 追記
CP/M-86はネットから入手できるソフトが思ったより多くないですね^^;
デジタルリサーチ以外のCコンパイラを探したところ、Aztec Cを見つけました。
でもincludeでファイルが読めないとのエラーが出てコンパイルできない・・
CP/M-86が正常に動いていないのか・・
|
★2019/09/22 追記
上に書いたAztec Cのコンパイルエラーですが、#includeで指定するファイルを<>ではなく""で囲むとエラーが出なくなりました。
下のログはDRC(デジタルリサーチ社製)とAztecCでのコンパイル状況と実行ファイルのサイズの比較です。
AztecCの方がかなりコンパクトな実行ファイルを作成してますね。
まぁもっと大きなプログラムの場合、どうなるかはやってみないと判らないですが・・
|
★2019/10/22 追記
Aztec Cのコンパイルオプションでインクルードドライブを標準ヘッダファイルのあるドライブ(今回の場合はCドライブ)に指定するとエラーが出なくなりました。
cc -ic: SrcFileName
★2019/09/23 追記
AztecCの著作権についてメモしておきます。
the official AZTEC C onlineのサイトでApple IIとCommondore 64用のAztec Cが公開されていて、このサイト内のLeap into a new dimension with Aztec Cのページで免責事項として次のように記載されています。
Apple IIとCommondore 64用のAztec Cに関してはfreeで使っていいようです。
Disclaimer This website and the content available from this website unless otherwise noted are original or derivative works and as such the licencing by the original authors applies insofar as legal Copyright ownership applies. Bill Buckels makes no claims of ownership whatsoever for the content available from this website unless otherwise noted, and further assumes no liability for the results of its use. You may use the content available from this website in any way you find useful (subject to all the aforestated conditions of use) and provided that you agree that Bill Buckels has no warranty obligations or liability resulting from said use in any way whatsoever. If you do not agree or if your use is not Fair then do not download from this website . |
google翻訳が下記で「所有権を一切主張せず」とあるので少なくともこのサイトで公開されているApple IIとCommondore 64用のコンパイラに関しては自由に使えるようです。
免責事項 このウェブサイトおよびこのウェブサイトから入手可能なコンテンツは、特に明記しない限り、オリジナルまたは二次的著作物であり、著作権の法的所有権が適用される限り、オリジナル著者によるライセンスが適用されます。ビル・バックルズは、特に明記しない限り、このウェブサイトから入手可能なコンテンツの所有権を一切主張せず、さらにその使用結果について責任を負いません。 このウェブサイトから入手できるコンテンツは、有用と思われる方法で使用することができます(すべての植林された使用条件に従うものとします)。また、Bill Buckelsが何らかの方法で上記の使用に起因する保証義務または責任を負わないことに同意するものとします。同意しない場合、または使用が公正でない場合は、このWebサイトからダウンロードしないでください 。 |
[TOP] [ 前へ ] 連載記事 [ 次へ ]
レトロマイコン86ボードの構想(その8)Cold Start LoaderでのCP/M-86の起動 [8086]
前回の記事に書いたようにCP/M本体をHexファイル化してHexファイルローダーでロードすることでCP/M-86が起動できたので今回はCP/MのコールドスタートローダーをHexファイルローダーで読込むことでCP/M-86を起動してみます。
CP/M-86の起動シーケンスは前回も書いたように
という流れです。
Cold Start LoaderはCP/Mのサブセット版なので専用のBIOSが必要になりますが、今回はBIOSをCP/M-86 System Guideに載っているサンプルを参考に作成しているので「loader_bios EQU false」の部分をtrueに変更することでLoader用のBIOSのHexファイルを生成できるようにしています。
loader_biosのEQU宣言を変更する度にBIOSのソースファイルのタイムスタンプが変わるのが嫌だったのでEQU宣言をPicBois.defファイルに移し、includeするようにしました。
include化したことで予想外のエラー(ソースにはない内容のエラーを検出)したので確認したところ、CPM86エミュレータはファイルのエンドにCP/MのEOFマークである01AHを渡していない模様で、PicBois.defファイルの末尾に01AHのコードを入れたらエラーは出なくなりました。
アセンブルした結果、生成されたBIOSのHexファイルをCP/M-86関連のダウンロードファイルに入っているCold Start Loader用のCP/MとBDOSのHexファイルと連結します。
連結方法としてシステムガイドには
PIP LOADER.H86=LDCPM.H86,LDBDOS.H86,LDBIOS.H86
と書いてあるのですが前回の記事で書いたようにms-dos player+cpm86.exeでのpip起動ではエラーになるのでエディタで連結しました。
連結したLOADER.H86をgencmdコマンドでコマンドに変換すればCold Start Loaderが完成します。
[A400]のスイッチはセグメントを0400Hにするためです。
生成されたLOADER.CMDを前回の記事で書いたようにCMDヘッダを削除しHexファイル化します(セグメントの値は0400H)。
Cold Start Loader用のBIOSのINIT処理のエントリは1200HなのでCold Start LoaderのHexファイルをHexファイルローダで読込み、0400:1200Hから実行するとCP/M-86が起動します。
Cold Start LoaderをHexファイルローダでロードしてCP/M-86を起動した際のサンプルログを貼っておきます。
CP/M本体のセグメントアドレスと最終オフセットが表示されていますが、これはCold StartLoaderが表示しているもので、もう少し見栄えを良くしたいのですがソースが無いのでまずはそのままにしておきます。
Cold Start LoaderのサイズはCP/M本体の半部以下なのでCP/M-86の起動が少し楽になりました。
Cold Start LoaderでのCP/M-86の起動
★2019/10/22 追記
Cold Start LoaderのCPM.SYS起動部のソース(LDCPM.A86)を見つけたのでメッセージを下記のように変更しました。
[TOP] [ 前へ ] 連載記事 [ 次へ ]
CP/M-86の起動シーケンスは前回も書いたように
- Bootstrap
最初のセクタ(128バイト)から読み込んだBootstrapをV20にのメモリにロードし、起動することで第2セクタ以降に格納されているCold Start Loader(simple version of CP/M-86)をメモリに読込む
- Cold Start Loader
DiskA内のCPM本体(CPM.SYS)をメモリに読込み起動することでCP/M自体が立ち上がる
という流れです。
Cold Start LoaderはCP/Mのサブセット版なので専用のBIOSが必要になりますが、今回はBIOSをCP/M-86 System Guideに載っているサンプルを参考に作成しているので「loader_bios EQU false」の部分をtrueに変更することでLoader用のBIOSのHexファイルを生成できるようにしています。
loader_biosのEQU宣言を変更する度にBIOSのソースファイルのタイムスタンプが変わるのが嫌だったのでEQU宣言をPicBois.defファイルに移し、includeするようにしました。
include化したことで予想外のエラー(ソースにはない内容のエラーを検出)したので確認したところ、CPM86エミュレータはファイルのエンドにCP/MのEOFマークである01AHを渡していない模様で、PicBois.defファイルの末尾に01AHのコードを入れたらエラーは出なくなりました。
アセンブルした結果、生成されたBIOSのHexファイルをCP/M-86関連のダウンロードファイルに入っているCold Start Loader用のCP/MとBDOSのHexファイルと連結します。
連結方法としてシステムガイドには
と書いてあるのですが前回の記事で書いたようにms-dos player+cpm86.exeでのpip起動ではエラーになるのでエディタで連結しました。
連結したLOADER.H86をgencmdコマンドでコマンドに変換すればCold Start Loaderが完成します。
C:¥picle¥V20¥asm¥bios¥cmd>msdos cpm86 gencmd loader 8080 CODE[A400] CP/M-86 emulator for DOS vers 1.3 - 11/30/97 Copyright (c) 1985, 1997 Jim Lopushinsky BYTES READ 1073 RECORDS WRITTEN 2C C:¥picle¥V20¥asm¥bios¥cmd> |
[A400]のスイッチはセグメントを0400Hにするためです。
生成されたLOADER.CMDを前回の記事で書いたようにCMDヘッダを削除しHexファイル化します(セグメントの値は0400H)。
Cold Start Loader用のBIOSのINIT処理のエントリは1200HなのでCold Start LoaderのHexファイルをHexファイルローダで読込み、0400:1200Hから実行するとCP/M-86が起動します。
Cold Start LoaderをHexファイルローダでロードしてCP/M-86を起動した際のサンプルログを貼っておきます。
CP/M本体のセグメントアドレスと最終オフセットが表示されていますが、これはCold StartLoaderが表示しているもので、もう少し見栄えを良くしたいのですがソースが無いのでまずはそのままにしておきます。
Cold Start LoaderのサイズはCP/M本体の半部以下なのでCP/M-86の起動が少し楽になりました。
|
★2019/10/22 追記
Cold Start LoaderのCPM.SYS起動部のソース(LDCPM.A86)を見つけたのでメッセージを下記のように変更しました。
... loading Pic24V20 ver0.02 CP/M-86 Version 1.1 Segment Address = 0040 Last Offset = 31FF System Generated by skyriver 2019/10/07 A> |
[TOP] [ 前へ ] 連載記事 [ 次へ ]
レトロマイコン86ボードの構想(その7)HexローダーでのCP/M起動に成功^^ [8086]
前回の記事で書いたようにPICのゆりかごの中で動作するV20(8088互換)の動作が安定になったのでCP/M-86のBIOSを作成し、CP/M-86の起動に先程、成功しました(^^)/
CP/M-86の起動は「3チップ構成68Kマイコンの構想(その8)ローダーによるCP/Mの起動」で書いたようなCP/M-68Kの起動シーケンスと同様で
のような起動シーケンスになります。
今回は「3チップ構成68Kマイコンの構想(その4)CP/M-68K 初ブート」の記事で書いたCP/M-68Kの時と同じようにCP/M本体をHexファイルローダーでV20のメモリ内にロードし、CP/M-86を起動しました。
起動手順の概要は次のとおりです。
[TOP] [ 前へ ] 連載記事 [ 次へ ]
CP/M-86の起動は「3チップ構成68Kマイコンの構想(その8)ローダーによるCP/Mの起動」で書いたようなCP/M-68Kの起動シーケンスと同様で
- Bootstrap
ROMまたは最初のセクタに格納されている最初に起動されるローダーでOS用にリザーブされたトラック(標準的な8インチディスクなら最初の2トラック)に格納されているCold Start Loaderを読込み起動する
- Cold Start Loader
CP/M本体のサブセット版(simple version of CP/M-86)でディスクA内にあるCP/M本体(CPM.SYS)をメモリに読込み起動する
のような起動シーケンスになります。
今回は「3チップ構成68Kマイコンの構想(その4)CP/M-68K 初ブート」の記事で書いたCP/M-68Kの時と同じようにCP/M本体をHexファイルローダーでV20のメモリ内にロードし、CP/M-86を起動しました。
起動手順の概要は次のとおりです。
- BIOSのアセンブル
次のコマンドで今回のハード(Pic24V20)用に作成したbiosのソースをアセンブルします。
C:¥picle¥V20¥asm¥bios¥cmd>msdos cpm86 asm86 picbios
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: 7%
C:¥picle¥V20¥asm¥bios¥cmd>
- CP/MとbiosのHexファイルの連結
ダウンロードしたCP/M-86関連ファイルに入っていたCPM.H86の末尾に上のbiosのアセンブルで生成されたBIOSのHexファイルを連結します。
PIPコマンドで連結してもいいようなのですが、私の環境(ms-dos playerでcpm86.exe経由でpip.cmdを起動)ではうまく連結できなかったので秀丸エディタで連結しました。連結したファイルはCPMX.HEXのファイル名でセーブします。
- CPM.SYSの作成
次のコマンドで上で連結したHexファイルからCPMX.CMDを作成します。CPMX.CMDはCPM.SYSにリネームすればCold Start LoaderからロードされるCP/M本体のファイルになります。
C:¥picle¥V20¥asm¥bios¥cmd>msdos cpm86 GENCMD CPMX 8080 CODE[A40]
CP/M-86 emulator for DOS vers 1.3 - 11/30/97
Copyright (c) 1985, 1997 Jim Lopushinsky
BYTES READ 2627
RECORDS WRITTEN 65
C:¥picle¥V20¥asm¥bios¥cmd>
- CMDファイルのヘッダ削除
CP/M-86のCMDファイルには128バイトのヘッダが付いているのでバイナリエディタを使って最初の128バイトを削除し、CPMX_NH.SYSのファイル名で保存します。
CPMX.CMDのヘッダ削除
- CPM_NH.SYSのHexファイル作成
バイナリファイルを0040セグメントから始まるhexファイルに変換し、CPM_NH.HEXのファイル名でセーブします。
hexファイル変換ツールでセグメント指定ができない場合は、先頭のセグメント指定の行として
:020000020040BC
を手動で追加します。
- CPM_NH.HEXのロードと起動
作成したHexファイルをHexファイルローダーを使ってV20のメモリにロードし、0040:2500H(BIOSの先頭部)番地から実行するとCP/M-86が起動します。
下記はHexファイルロードからCP/M-86起動までのログのサンプルです。
Hexファイルローダーを使ったCP/M-86の起動 :¥¥ +B000-BDBA # CP/M-86 boot 2019/08/23 +C000-CC8D #LibCpm CP/M86(PMP) v0.01 2019/08/17 +D000-DEEB #LibSpi SPI lib V0.04 for CP/M86 2019/08/16 +E000-EDC7 # Memory check executer 2019/08/18 +F000-FC43 # Pic24V20 HexLoader v0.02 2019/08/12 :¥<$F000 3139 :run HexLoader Start 2000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000001 :¥< 3514 :run System Generated by skyriver 2019/08/14 A>dir A: ASM86 CMD : ASSIGN CMD : CONFIG CMD : CPM SYS A: DATA PFK : DDT86 CMD : DSKMAINT CMD : ED CMD A: FUNCTION CMD : GENCMD CMD : HELP CMD : HELP HLP A: PIP CMD : PRINT CMD : SETUP CMD : STAT CMD A: SUBMIT CMD : TOD CMD A>ddt86 DDT86 1.2 -d 0000:0000 8F 25 40 00 36 08 66 7C 8F 25 40 00 2E 08 66 7C .%@.6.f|.%@...f| 0000:0010 8F 25 40 00 8F 25 40 00 8F 25 40 00 8F 25 40 00 .%@..%@..%@..%@. 0000:0020 8F 25 40 00 8F 25 40 00 8F 25 40 00 8F 25 40 00 .%@..%@..%@..%@. 0000:0030 8F 25 40 00 8F 25 40 00 8F 25 40 00 8F 25 40 00 .%@..%@..%@..%@. 0000:0040 8F 25 40 00 8F 25 40 00 8F 25 40 00 8F 25 40 00 .%@..%@..%@..%@. 0000:0050 8F 25 40 00 8F 25 40 00 8F 25 40 00 8F 25 40 00 .%@..%@..%@..%@. 0000:0060 8F 25 40 00 8F 25 40 00 8F 25 40 00 8F 25 40 00 .%@..%@..%@..%@. 0000:0070 8F 25 40 00 8F 25 40 00 8F 25 40 00 8F 25 40 00 .%@..%@..%@..%@. 0000:0080 8F 25 40 00 8F 25 40 00 8F 25 40 00 8F 25 40 00 .%@..%@..%@..%@. 0000:0090 8F 25 40 00 8F 25 40 00 8F 25 40 00 8F 25 40 00 .%@..%@..%@..%@. 0000:00A0 8F 25 40 00 8F 25 40 00 8F 25 40 00 8F 25 40 00 .%@..%@..%@..%@. 0000:00B0 8F 25 40 00 8F 25 40 00 8F 25 40 00 8F 25 40 00 .%@..%@..%@..%@. -^C A>
[TOP] [ 前へ ] 連載記事 [ 次へ ]
レトロマイコン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] [ 前へ ] 連載記事 [ 次へ ]