3チップ構成68Kマイコンの構想(その3)Sレコード簡易ローダーの製作 [68K]
前回の「3チップ構成68Kマイコンの構想(その2)」で書いたようにPICと68Kの連携処理に関しては68Kのreset命令を利用することで実現できそうなのでCP/M-68KのBIOSは対応できる見込みが付きました。
しかし、SDカードを使う上でのdisk関連のパラメータ等、調べる項目はまだまだあります。diskのパラメータについてはネットで探しましたが、68Kを使った今回の用途(SDカードをパーティション分けして使う)のような例は見つかりませんでした。
CP/M-68Kではセクタサイズを512にしている例もあり、blocking/deblocking処理無しでSDカードが使えそうです。(また試していませんが一応disk関連のパラメータも決めました)
最初に CP/M-68K 関連のファイルですが下記から入手しました。
CP/M-68Kは本体(CPP+BDOS+BIOS)のサイズが大きいことからCP/M-80と違い1トラックに収まらないため、本体をCP/Mのファイルシステム上に置き、1トラック目に格納したCPMLDR.SYSがファイルシステム上に置かれたCP/M本体をロードする仕組みになっています。
CPMLDR.SYSは1トラック内に格納できるようにするためにCP/Mのファイルシステムをアクセス可能な機能に絞った機能実装がされていてこれ用のBIOSもサブセット版とし、コンパクト化されています。
今回の3チップ構成の68Kボードでは「3チップ構成68Kマイコンの構想」の記事で書いたようにPIC側からは68Kのごく一部のメモリしかアクセスできないのでSレコードファイルの簡易ローダーを作成してみました。
アセンブル結果のリストが下記でチェックサムや16進数文字の範囲チェック等を省略し、小型化してみました。
コンパクトではありますがアドレス表現部の桁数の異なるS1~S3タイプに対応しています。
尚、Sレコードのフォーマットについては「モトローラ S レコードフォーマット」のサイト等を参考にさせて頂きました。
また、アセンブル環境は前回同様にEASy68Kを使っています。
★2019/07/02 追記
実装メモリサイズが512KBのバージョンに差し換えました。(開発時はこの時点でのメモリサイズは128KB)
Sレコード簡易ローダー
上記のソースのアセンブル結果をPIC側のpicle言語のソースに埋め込み、起動した状態でTeraTermにSレコードをコピペすることで68K上のメモリにロードされます。
ロード試験用のソースはこんな感じです。
ローダー試験用ソース
アセンブル結果生成されるSレコードフォーマットのファイルは下記のようになります。
アセンブル結果生成されたSレコードファイル
試験時の操作ログを貼っておきます。
Sレコード簡易ローダをロードするためのpicle言語のソースを表示後、'run'コマンドで実行しています。
この状態で上記のローダー試験用のSレコードをTeraTermでコピペしています。
68K内で動作しているSレコードローダーはレコードタイプを表示(下記のログの'12'の部分)しながらメモリに展開し、Sレコードの終了行を読込んだ後、PIC側に制御を渡します。
★2019/07/02 追記
実装メモリサイズが512KBのバージョンに差し換えました。(開発時はこの時点でのメモリサイズは128KB)
Sレコード簡易ローダーのロードと実行とSレコードのロード試験
今回ロードしたメモリの範囲はPIC側からもアクセス可能な範囲なのでメモリダンプして確かめてみましょう。
想定通りの値になっています^^
ロードデータのダンプリスト
[TOP] [ 前へ ] 連載記事 [ 次へ ]
しかし、SDカードを使う上でのdisk関連のパラメータ等、調べる項目はまだまだあります。diskのパラメータについてはネットで探しましたが、68Kを使った今回の用途(SDカードをパーティション分けして使う)のような例は見つかりませんでした。
CP/M-68Kではセクタサイズを512にしている例もあり、blocking/deblocking処理無しでSDカードが使えそうです。(また試していませんが一応disk関連のパラメータも決めました)
最初に CP/M-68K 関連のファイルですが下記から入手しました。
CP/M-68Kは本体(CPP+BDOS+BIOS)のサイズが大きいことからCP/M-80と違い1トラックに収まらないため、本体をCP/Mのファイルシステム上に置き、1トラック目に格納したCPMLDR.SYSがファイルシステム上に置かれたCP/M本体をロードする仕組みになっています。
CPMLDR.SYSは1トラック内に格納できるようにするためにCP/Mのファイルシステムをアクセス可能な機能に絞った機能実装がされていてこれ用のBIOSもサブセット版とし、コンパクト化されています。
今回の3チップ構成の68Kボードでは「3チップ構成68Kマイコンの構想」の記事で書いたようにPIC側からは68Kのごく一部のメモリしかアクセスできないのでSレコードファイルの簡易ローダーを作成してみました。
アセンブル結果のリストが下記でチェックサムや16進数文字の範囲チェック等を省略し、小型化してみました。
コンパクトではありますがアドレス表現部の桁数の異なるS1~S3タイプに対応しています。
尚、Sレコードのフォーマットについては「モトローラ S レコードフォーマット」のサイト等を参考にさせて頂きました。
また、アセンブル環境は前回同様にEASy68Kを使っています。
★2019/07/02 追記
実装メモリサイズが512KBのバージョンに差し換えました。(開発時はこの時点でのメモリサイズは128KB)
|
上記のソースのアセンブル結果をPIC側のpicle言語のソースに埋め込み、起動した状態でTeraTermにSレコードをコピペすることで68K上のメモリにロードされます。
ロード試験用のソースはこんな感じです。
|
アセンブル結果生成されるSレコードフォーマットのファイルは下記のようになります。
|
試験時の操作ログを貼っておきます。
Sレコード簡易ローダをロードするためのpicle言語のソースを表示後、'run'コマンドで実行しています。
この状態で上記のローダー試験用のSレコードをTeraTermでコピペしています。
68K内で動作しているSレコードローダーはレコードタイプを表示(下記のログの'12'の部分)しながらメモリに展開し、Sレコードの終了行を読込んだ後、PIC側に制御を渡します。
★2019/07/02 追記
実装メモリサイズが512KBのバージョンに差し換えました。(開発時はこの時点でのメモリサイズは128KB)
|
今回ロードしたメモリの範囲はPIC側からもアクセス可能な範囲なのでメモリダンプして確かめてみましょう。
想定通りの値になっています^^
|
[TOP] [ 前へ ] 連載記事 [ 次へ ]
3チップ構成68Kマイコンの構想(その2) [68K]
前回の記事で「68KとPICの連携処理のために68Kのreset命令が使えそう」と書きましたが、実験して確かめてみました。
使っている68KはCMOS版ではないため、普段使っているブレッドボード用の電源が容量不足だったり、他にもハード的な問題があったりしましたがやっと安定に動いているように見える状態になりました ^^;
68KとPICの連携処理の確認の話に戻すとZ80の3チップ構成のPic24CPMマイコンの時とほぼ同様な処理で実験してみました。
68KとPICの処理の概要は次のとおりです。
最初はコンソール出力の実験で68K側の処理は下記のソースのように'Hello.'の文字列をコンソールへ出力要求します(定番ですね)。
アセンブル環境はEASy68Kを使っています。
68Kの'Hello.'出力処理
PIC側は自作のpicleコンパイラを使い、Pic24CPMマイコンのBIOS処理を流用し不要な部分を削除して使っています。
上記の68Kのソースのアセンブル結果(Sレコードフォーマット)をバイナリ変換後、MemWR()ステートメントへの自動変換処理を通してpicleのソースに埋め込んでいます。
試験実行時のログが下記でpicleソースを表示後、runしています。想定通り68Kから出力要求した文字が出力されました^^/
★2019/07/02 追記
実装メモリサイズが512KBのバージョンに差し換えました(開発時はこの時点ではメモリサイズが128KBだったのでワークエリアのアドレス等が異なります)
68Kからの'Hello.'出力実験ログ
'H'出力処理時のロジアナ波形が下記です。68Kがreset命令を実行することでRESET/信号が15.7us間アクティブになり、PIC側ではRESET/信号がアクティブになったことを検出し、バス要求(BR/をアクティブ)しています。
PIC側は要求のあった処理を行った後、バスを開放しています。
[TOP] [ 前へ ] 連載記事 [ 次へ ]
使っている68KはCMOS版ではないため、普段使っているブレッドボード用の電源が容量不足だったり、他にもハード的な問題があったりしましたがやっと安定に動いているように見える状態になりました ^^;
68KとPICの連携処理の確認の話に戻すとZ80の3チップ構成のPic24CPMマイコンの時とほぼ同様な処理で実験してみました。
68KとPICの処理の概要は次のとおりです。
- 68K側の処理概要
- ワークエリアにPICに要求する処理IDと必要な情報を設定する。
- reset命令を実行する。
- ワークエリアにPICが設定した処理結果を参照する。
- PIC側の処理概要
- RESET信号がアクティブになるまで待つ。
- BR/をアクティブにしバス制御を要求し、68Kからのバス引き渡し応答(BG/)がアクティブになるまで待つ。
- ワークエリアに設定された処理IDに基づき、処理を行い結果をワークエリアに書き込む。
- BR/をインアクティブにしバスを開放する。
最初はコンソール出力の実験で68K側の処理は下記のソースのように'Hello.'の文字列をコンソールへ出力要求します(定番ですね)。
アセンブル環境はEASy68Kを使っています。
|
PIC側は自作のpicleコンパイラを使い、Pic24CPMマイコンのBIOS処理を流用し不要な部分を削除して使っています。
上記の68Kのソースのアセンブル結果(Sレコードフォーマット)をバイナリ変換後、MemWR()ステートメントへの自動変換処理を通してpicleのソースに埋め込んでいます。
試験実行時のログが下記でpicleソースを表示後、runしています。想定通り68Kから出力要求した文字が出力されました^^/
★2019/07/02 追記
実装メモリサイズが512KBのバージョンに差し換えました(開発時はこの時点ではメモリサイズが128KBだったのでワークエリアのアドレス等が異なります)
|
'H'出力処理時のロジアナ波形が下記です。68Kがreset命令を実行することでRESET/信号が15.7us間アクティブになり、PIC側ではRESET/信号がアクティブになったことを検出し、バス要求(BR/をアクティブ)しています。
PIC側は要求のあった処理を行った後、バスを開放しています。
68KからPICへの処理要求時の波形サンプル |
|
[TOP] [ 前へ ] 連載記事 [ 次へ ]
3チップ構成68Kマイコンの構想 [68K]
「3チップ構成Pic24CPMマイコン(CP/M起動までの作業まとめ)」の記事でPIC24FJ64GA004を使った3チップ構成のZ80ワンボードドマイコンでCP/Mを立ち上げるまでの作業を書きましたが68Kで同様なことが可能か否かの実験中です。
チップ構成はMC68008P10(10MHz版ですがPICからクロックを供給する関係で8MHzで動作)とHM628128ALP-7(128KByteの70nsのSRAM)とPIC24FJ64GA004の3チップでTTLやGAL等は一切使っていません。
メモリは512KByteのK6T4008C1Bをebayで注文したので届いたら交換するかも・・
動作確認はブレッドボードで行っていて(下の写真)、相変わらずゴチャゴチャした状態ですw
右側に伸びている配線は写真では見えないですがロジアナに接続されています。
撮影用に古い雑誌を本棚から持ち出して敷きましたw
数日前にtwitterでベンチマーク用のアスキーアートのことを書きましたが68Kの情報収集の際に見つけたものです。ここには68Kのシミュレータ上のディバッグ環境であるEASy68KでCP/M-68Kを立ち上げる手順も書いてあります(やってみたら動きました^^)。
PICからのメモリアクセスはZ80の時と同様にBR/(BusRequest)してPICがバスマスターとなり直接メモリに書き込みますが、アドレス線が足りないのでAD0~AD10の11本分を出力しています。
AD10が1の場合は上位アドレスも1になるようにしているのでPICからのアドレスと68K側のアドレスは下表のような対応になります。
尚、68K側は003FFまではベクタテーブルです。
Z80の時はPICとの連携処理のインターフェースとしてHALT命令とRESET信号を使いましたが、68Kのマニュアルをざっと見たところPICと68Kの連携用のインターフェースとして68KのRESET命令が使えそうです。
試しにEASy68Kで下記の短いソースをアセンブルし、ブレッドボードで動かしてみました。
最初に書いてある3行のコメント行はCP/M-68Kのアセンブラとリンカーを使っていた時のアセンブル方法などのメモです。
下記が動作確認を行った時のログです。例のごとく自作のpicleコンパイラを使っています。
68Kの仕様に従い、最初に0000hにスタックとジャンプ先を書いた後に上記のアセンブル結果を書込んでからバスリクエストをoffに変更後、リセットを解除(出力から入力状態にする)しています。
実行後のダンプリストを見ると0410hに'1234'と書かれているので68K側のプログラムが動いていることが判ります。
picleコンパイラでの動作確認例
68KのRESET命令での動作をロジアナで確認した結果が下のキャプチャです。MCS/とMRD/はそれぞれメモリに対するチップセレクトとリード信号です。
reset命令の実行により68Kがreset端子を16usほどアクティブにしています。
68KがPIC側に処理を要求する際には68K側でRESETを実行し、PIC側ではRESET信号を監視することでPic24CPMマイコンと同様なことができる可能性があると思います。
[TOP] [ 前へ ] 連載記事 [ 次へ ]
チップ構成はMC68008P10(10MHz版ですがPICからクロックを供給する関係で8MHzで動作)とHM628128ALP-7(128KByteの70nsのSRAM)とPIC24FJ64GA004の3チップでTTLやGAL等は一切使っていません。
メモリは512KByteのK6T4008C1Bをebayで注文したので届いたら交換するかも・・
動作確認はブレッドボードで行っていて(下の写真)、相変わらずゴチャゴチャした状態ですw
右側に伸びている配線は写真では見えないですがロジアナに接続されています。
撮影用に古い雑誌を本棚から持ち出して敷きましたw
3チップ構成のMC68008ブレッドボード |
|
数日前にtwitterでベンチマーク用のアスキーアートのことを書きましたが68Kの情報収集の際に見つけたものです。ここには68Kのシミュレータ上のディバッグ環境であるEASy68KでCP/M-68Kを立ち上げる手順も書いてあります(やってみたら動きました^^)。
PICからのメモリアクセスはZ80の時と同様にBR/(BusRequest)してPICがバスマスターとなり直接メモリに書き込みますが、アドレス線が足りないのでAD0~AD10の11本分を出力しています。
AD10が1の場合は上位アドレスも1になるようにしているのでPICからのアドレスと68K側のアドレスは下表のような対応になります。
尚、68K側は003FFまではベクタテーブルです。
PIC address | 68K address |
---|---|
0000-03ff | 00000-003ff |
0400-07ff | 01fc00-01ffff |
Z80の時はPICとの連携処理のインターフェースとしてHALT命令とRESET信号を使いましたが、68Kのマニュアルをざっと見たところPICと68Kの連携用のインターフェースとして68KのRESET命令が使えそうです。
試しにEASy68Kで下記の短いソースをアセンブルし、ブレッドボードで動かしてみました。
最初に書いてある3行のコメント行はCP/M-68Kのアセンブラとリンカーを使っていた時のアセンブル方法などのメモです。
EASy68Kでアセンブル |
|
下記が動作確認を行った時のログです。例のごとく自作のpicleコンパイラを使っています。
68Kの仕様に従い、最初に0000hにスタックとジャンプ先を書いた後に上記のアセンブル結果を書込んでからバスリクエストをoffに変更後、リセットを解除(出力から入力状態にする)しています。
実行後のダンプリストを見ると0410hに'1234'と書かれているので68K側のプログラムが動いていることが判ります。
|
68KのRESET命令での動作をロジアナで確認した結果が下のキャプチャです。MCS/とMRD/はそれぞれメモリに対するチップセレクトとリード信号です。
reset命令の実行により68Kがreset端子を16usほどアクティブにしています。
68KがPIC側に処理を要求する際には68K側でRESETを実行し、PIC側ではRESET信号を監視することでPic24CPMマイコンと同様なことができる可能性があると思います。
68KがRESET命令実行時の波形サンプル |
|
[TOP] [ 前へ ] 連載記事 [ 次へ ]
PICkit3でコネクトエラー [PIC]
久々にPICkit3で PIC24FJ64GA004 に書き込みを行おうとしたら
The target circuit may require more power than the debug tool can provide. An external power supply might be necessary. Connection Failed.
のエラーが出て接続できず・・・・
電源はPICkit3から供給していますが接続されているのはPIC単体のみに近い状態なので電流不足は考えにくい状況なのですが・・
このエラーは以前も何度か出ていましたが PICkit3 からの供給電圧を 3.15Vに下げることで問題回避できていました。
今回は電圧を下げても状況が変わらず、予備のPICkit3に変えたり、 PICを PIC24FJ64GA002 に変更しても変化なし・・orz
しばらく悩んだけど MPLAB IPE を立ち上げてからPICkit3をパソコンに接続したらPICにコネクトできました ^^
尚、IPEのバージョンは3.35です。
なんなんでしょうねぇ~
The target circuit may require more power than the debug tool can provide. An external power supply might be necessary. Connection Failed.
のエラーが出て接続できず・・・・
電源はPICkit3から供給していますが接続されているのはPIC単体のみに近い状態なので電流不足は考えにくい状況なのですが・・
このエラーは以前も何度か出ていましたが PICkit3 からの供給電圧を 3.15Vに下げることで問題回避できていました。
今回は電圧を下げても状況が変わらず、予備のPICkit3に変えたり、 PICを PIC24FJ64GA002 に変更しても変化なし・・orz
しばらく悩んだけど MPLAB IPE を立ち上げてからPICkit3をパソコンに接続したらPICにコネクトできました ^^
尚、IPEのバージョンは3.35です。
なんなんでしょうねぇ~