SSブログ
English Version

Pic24MC68Kマイコン(その1)構想 [68K]

 以前、「3チップ構成Pic24CPM68Kマイコン」の記事に自作のMC68008ボードを使ってCP/M-68Kを動かす内容を書きましたが、今回は8ビットバスのMC680008ではなく、MC68000を使ってCP/M-68Kを動かしたいと思います(実際にはCMOS版で16MHz動作の MC68HC000P16 を使用予定)。
 今回の目標として全体をMC68Kのチップに近いサイズにまとめたいと考えています。使用予定のメモリは+5Vで動作可能で容量が 512K x 16bit でアクセスタイムが 55ns のTSOPパッケージの AS6C8016 で、前述のMC68008の時の2倍の容量になります。

 MC68HC000P16は今でも海外の通販サイト等で数百円で購入できます(もっと高い値付けのものも沢山ある)。しかし、安価なものは偽物というリスクが常にあります。
 購入済みのMC68HC000P16を無水アルコールを含ませたティッシュで拭いてみたところ、ティッシュが黒くなり、なんと MC68000P8 の文字が浮かんできましたw
 下の写真は上の方のチップがアルコールで拭いたもので、比較のために拭く前のチップの状態と同じものを下側に並べました。

購入したMC68HC000P16の偽物


 別のショップから購入した2個のMC68HC000があるのですが、これらは刻印の文字サイズと刻印内容は上記の偽物の写真と全く同じで、無水アルコールで擦るとティッシュが黒くなりましたがいくら擦っても刻印は変化しませんでした。偽の刻印を書く前の表面の削りが上記のものより深い(と言うか上記のものは削っていない?)のではないかと思われ、ティッシュの色と同様に限りなく黒に近いグレーな状態です。
 更に別のショップから購入したMC68000P16(下の写真)は無水アルコールで拭いてもティッシュは全く黒くならず、刻印も変化しませんでした。本物だと信じたいですが、HCではないので消費電力が大きいです。

購入したMC68000P16(多分本物?)


 気を取り直して今回の構想の話に戻って、MC68K と PIC とのインターフェースについては MC68008 の時と同様で「3チップ構成68Kマイコンの構想」の記事に書いたようにMC68KのRESET命令を使用します。
 以降の記述では自分用のメモの意味も含めデータシートからの引用が多く含まれますがご容赦ください。

 最初に信号レベルについてですが、下図が68Kのレベルになります。クロックについてもV20の時のような特別に厳しい条件は無いようです。

MC68Kの信号レベル


 下表がMC68Kの電気特性で、これならPICで制御可能なレベルです(PIC側の入力には5Vトレラントであることが必要)。

MC68Kの電気特性


 次にメモリアクセス関連ですが、下図がMC68Kのメモリアクセスタイミングダイアグラムです。データバスが16bitなので上位バイト/下位バイトそれぞれにセレクト信号(UDS#,LDS#)があります。これは後述するメモリ(AS6C8016)と同様です。

MC68Kのメモリアクセスダイアグラム


 下図がメモリチップ側のリードサイクルです。特別な仕掛け無しにMC68Kと接続できそうですね。

メモリ(AS6C8016)チップ側のリードサイクル


 下図がメモリチップ側のライトサイクルです。上記のMC68Kのライトサイクルを見るとLDS#信号がアクティブな期間が最も短いので、それに対応するLB#,UB#でコントロールされたライトサイクルを記載しています。こちらもMC68Kと簡単に接続できそうです。

メモリ(AS6C8016)チップ側のライトサイクル1


 下図はPICからのメモリライト時に使用予定のWE#でコントロールする場合のライトサイクルです。

メモリ(AS6C8016)チップ側のライトサイクル2


★追記 2021/12/09 {
 メモリの真理値表を追記します。ライト時に OE# はdon't care になります。

メモリ(AS6C8016)チップ側の真理値表
}

 MC68Kとメモリのアクセスサイクルを前置きとして書きましたが、ここからPIC側の対応に関して記述します。
 PIC側のメモリアクセスはパラレルマスタポート(PMP)機能を使用します。PMPはある程度汎用的に作られていますが、16bitのデータを扱う場合はバイト毎に分割して扱う必要があります。
 今回使用するモードは「16 ビットデータ、非多重化アドレス」です。下図にリード/ライトサイクルを示します。

PIC PMPメモリリードサイクル


PIC PMPメモリライトサイクル


 PIC側のデータバスは8bitで時分割で2バイト分を扱うのでメモリ側とのデータバス接続を切替える必要がありますが、一度に16bitを読み書きすることは無いこと、及びメモリ側はセレクトされていないバイトバスはハイインピーダンスになることからPIC側データバスとメモリ側ハイバイトバスとの間に74HC245を1個だけ設け、ロー側のバイトバスは常に接続した状態にすることで使用チップ数を節約します。

 実際にPICとメモリの接続実験結果を書きたいところですが、注文したメモリ(AS6C8016)がまだ届いていないので今回はこの辺にしたいと思います。
 しかし、今回はブレッドボードで評価後、回路図を整理しパターン設計をするといういつもの手順とは異なり、先行して回路設計とパターン設計を進めています^^

Pic24MC68Kのパターン(設計中)



[TOP] [ 前へ ] 連載記事 [ 次へ ]

nice!(0)  コメント(0) 

3チップ構成Pic24CPM68Kマイコン(CP/M-68K起動までの作業まとめ) [68K]

 今回作成した3チップ構成のワンボードマイコン(下の写真)でCP/M-68Kが動作しているようなのでCP/M-68Kを立ち上げるまでに必要な作業を整理しました。

 使用しているチップは下記のとおり、3チップ構成で汎用ロジックICやPLD等は使っていません。
  • MC68008P10
    10MHz版のバスが8bit幅の68Kチップ。PICからクロックを供給する関係で8MHzで動作。
  • K6T4008C1B-DB70
    512KBのSRAM。アクセスタイムは70ns。
  • PIC24FJ64GA004
    16bitPICマイコン。セルフコンパイラの独自言語picleを使って制御

Pic24CPM68K

  1. 事前にダウンロードするもの

    1. 今回作成したPic24CPM68K用のファイル
       PICファーム全体のhexファイル(これを書込めばPIC側の準備は完了)とIPL、bios等のCP/M関連のソース等をアーカイブした下記のファイルをダウンロードする。

      ★変更 2022/02/21
       CPM本体をメモリの上位に移動し、TPAが0400Hから始まる前提のプログラムも動くようにした
       旧バージョンから変更する場合はA:ドライブ内の CPM.SYS を新しいものに入れ替えるだけです


    2. cpmtools
       the Wonderfully Ancient World of CP/Mのサイトでhttp://www.cpm8680.com/cpmtools/cpmtoolsWin32.zipのリンクからダウンロード

    3. CP/M-68K関連ファイル
      CP/M-68K Ver1.3のファイルは下記から入手しました。
    4. DD for Windows
       作成したCP/MディスクイメージをSDカードに書込むユーティリティ
       DD for Windowsからダウンロード。
      ※2018/05/12現在での最新版はVer.0.9.9.8です(これを使用しています)


  2. PIC24FJ64GA004側の準備
    • ワンボードマイコン基板
       回路図は下記のとおりです。詳細は「3チップ構成68Kマイコンの構想(その11)回路図整理とパターン設計」の記事を参照してください。
       SDカードホルダはebayで購入したものを使っていますが、秋月電子通商さんで販売している「SDカードコネクタ SD381200-S304」も使えると思います。

       今回作成したプリント基板のガーバーデータをseeedさんの「Fusion gallery」の「Geek product」コーナーで公開しました。
      CP/M-68K board consisting three chips

      3チップ構成の68Kマイコンボードの回路図
      ※R3は+5Vにプルアップするつもりでしたが3.3Vへのプルアップでも動作することを確認しました^^;

    • PICのファーム
       上記でダウンロードしたファイルのPICディレクトリ直下のhexファイルをPIC24FJ64GA004に書き込めば準備完了です。

      1. PICにPICKIT3等で書込みを行う場合はPL2コネクタに接続してください。
         書込み時に使用するピンはSDカードと兼用しているので、SDカードを抜いた状態で書込んでください(68Kやメモリは挿した状態でOKです)。
         書込み器を接続した状態ではSDカードのアクセスエラーが発生するので、書込み器を外してからCP/Mを起動してください。

      2. 68Kとの連携処理等はpicle言語で記述していて、自動起動状態にしているので電源ONでCP/Mが起動します。

      3. cpmディレクトリに入っている「EXIT.68K」をCP/M上で起動するとCP/Mから抜けてpicleコンパイラの世界に戻ります(runコマンドでCP/M再起動)

      4. picleのソースもpic用hexファイルに入れてあるのでセルフコンパイル環境で機能変更が可能です。
         picleソースの表示方法やpicleの使用方法については「独自言語 picle on PIC24FJ」や「独自言語 picle compiler on PIC24FJ」を参照してください。

      5. TeraTermのシリアル設定は38400bps、8bit、Parity無しです。

      6. SDカードの抜き差しをPICが監視しています。抜いた状態ではERSDのLEDが点滅します。SDカードを抜いてから挿入するとSDカードを再度イニシャライズ(保存データは消えない)するので継続してSDカードのアクセスが可能です。

      7. 「OPE」スイッチでコンソールのエスケープシーケンスの有効/無効を切り替えられます。
         無効にした場合、PIC側の処理でコンソールデータの書換えが発生しないのでコンソール用シリアル通信でバイナリデータの透過性が保証できるようになります(バイナリデータ転送時に利用)。


  3. ディスクイメージの作成
     ダウンロードしたcpmtoolsを展開したフォルダにPic24CPM68K用アーカイブ内にあるdiskdefs、cpmboot.img及びsysgen68.batファイルを置きます。
     上記でダウンロードしたCP/M-68K Ver1.3のアーカイブ内にある「DISK1」~「DISK9」のフォルダをcpmtoolsを展開したフォルダ直下にコピーします。
     DISK1フォルダにはPic24CPM68K用アーカイブ内にあるCPM.SYSを上書きでコピーします。
     sysgen68.bat内を見れば判るように「DISK10」(Jドライブ)までのファイルイメージを作成するようになっているのでDISK10のフォルダを作成し、Pic24CPM68K用アーカイブ内にあるSKED.RELやEXIT.68K(その他、CP/MのJドライブに入れたいファイル)を「DISK10」フォルダに入れます。
     DISK1~DISK10までのフォルダの準備ができたら、sysgen68を実行すると「diskimage」というファイルが生成されます。


  4. SDカードへの書込み
     SDHCタイプ(2GBより大きく32GB以下)のSDカードに、上記操作で作成した diskimage を DD for Windows で書き込みます。
     SD書込みソフトは実行ファイルを右クリックして表示されるポップアップメニュで「管理者として起動」を選択して起動する必要があります。


  5. CP/Mの起動
     上記で作成したSDカードを入れた状態で電源を入れれば、自動的にCP/Mが立ち上がります。
     ダウンロードしたPic24CPM68Kファイルに入っている「EXIT.68K」を実行することで、CP/M-68Kから抜け、PIC上のpicleコンパイラの環境に戻ります。


★2019/07/07 追記 {
 Pic24CPM68Kのアーカイブファイルに入れた方が良かったかもと後で思いましたが、CP/M-68Kとパソコン間でファイル送受信したい場合には「3チップ構成68Kマイコンの構想(その10)XMODEMアプリの作成」の記事に書いた拙作のCP/M-68K用のxmodemアプリを使用するとメチャ便利です。パソコン側ではTeraTermのxmodem機能を使います。
 コンソール出力はPIC側でCP/M時代のエスケープシーケンスの一部をANSIエスケープシーケンスに変換しているのでTeraTermのディフォルトターミナルであるVT100でもWordMasterやWordStarが動きます。
 しかし、このためにコンソール出力データがPICの変換処理で変更されてしまい、バイナリデータの透過性が保証されません。

 Pic24CPM68KではBIOSの汎用入出力(CP/M-80で言うPUN/RDRデバイス)をコンソール用のシリアルを使い、バイナリデータの透過性を保証できるように実装しているので xmodem 使用時に /p のオプションを付けることでファイル送受信をバイナリ透過性のある汎用入出力で行えます。
 また、Pic24CPM68KのOPEスイッチを押すことで上記のPIC側でのエスケープシーケンス変換を有効/無効に切り換えれるのでxmodem使用時に変換処理を無効状態にして /p オプション無しで使うことも可能です。
}

★2019/07/08 追記
 上記の「WordMasterやWordStarが動きます」はCP/M-80(Pic24CPM)での話です^^;
 Pic24CPM68Kでも同様にエスケープシーケンスの変換処理が実装されています。


【参考リンク】
 下記のwebサイトを参考にさせて頂きました。



★追記 2023/06/28 {
 MC68K を使用したチップサイズとほぼ同じサイズの CP/M-68K ボード(Pic24MC68K)について記載した記事のリンクを追加しました。

小型CP/M-68Kボード(Pic24MC68K)
}


[TOP] [ 前へ ] 連載記事 [ 次へ ]

nice!(0)  コメント(3) 
共通テーマ:趣味・カルチャー

3チップ構成68Kマイコンの構想(その15)ケース作成 [68K]

 CP/M-68Kが動く3チップ構成のプリント基板が完成してからかなり時間が経ってしまいましたがケースを作りました。
 構造的にはZ-80版の時に「3チップ構成Pic24CPMマイコン(その2)ケース作成」の記事で書いたものと同様ですが、基板のサイズが小さくなっているのでケース自体も少し小さくなりました。
 トップパネルは前回同様に百均で購入したスチロール製のディスプレイスタンドから平板を切出して CNC で加工しています。

 設計はDesignSparkMechanicalを使っています。

Pic24CPM-68Kのケース設計


 バックパネルは黒のアクリル板をレーザーカッターで切り出しました(レーザーカッターは静かでカット中は待つだけなので楽)。

レーザーカッターでアクリル板を切り出し中

★2019/06/08 追記
 レーザーカッター加工写真追加

 側面部品は3Dプリンタで出力しました。

ケース側面部品とバックパネル


 トップパネルは前述したようにCNCで切削しています。DesignSparkMechanicalからDXFファイルをexportし、Estlcamで読込みNCファイルを作成しています。

CNCで切削中の画面


 CNCでの切削は1時間15分程度かかり、切削中は適宜潤滑油「切削」を供給する必要があり、音も出るので大変です。
 切削したトップパネルが下の写真です。

トップパネル


 Pic24CPM68Kのプリント基板を収めた完成写真が下の写真です。Pic24CPMの時は赤色基板で側面の黒とマッチしていると思っていましたが、今回の基板は青色ですがこれもまた中々いい感じですね^^

Pic24CPM68Kケース完成写真



[TOP] [ 前へ ] 連載記事 [ 次へ ]

nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー

3チップ構成68Kマイコンの構想(その14)スクリーンエディタの開発 [68K]

 ソフトが豊富なCP/M-80とは違いCP/M-68Kはインターネットからダウンロードできるソフトはそれ程豊富ではありません。
 CP/Mのラインエディタ(ED)はあまり使い勝手が良くないので使い易いエディタが欲しくなります。

 CP/M-68K用のマイクロEmacsが入手可能ですがWordStar系のエディタが欲しいところです。ZDEもCP/M-68Kには対応していないようです・・・

 ネットで探すとCP/M-68K用のエディタのソースがいくつか見つかりますが、ソースファイル数が多くてCP/Mのコマンドライン内でリンクできなかったり(ライブラリアンを使ってリンクしたという記事もあった)、ビルドはできてもうまく動かなかったりでソースを解析して動くようにするよりは、エディタを作ってみようという結論に達しました^^

 ということでCP/M-68K Ver1.3のCコンパイラ環境を使ってスクラッチでスクリーンエディタを作り、sked(Simple Kitten EDitor)と命名しました^^
 ターミナルはTeraTermを想定し、VT100のエスケープシーケンスの一部を使い制御しています。
 エディタ内のデータ構造や処理方法について書いておこうかとも思いましたが、あまり興味をひかない内容と思われるので割愛しますw

 今時、TeraTermで接続したCP/M-68Kボードを動かす人はほとんどいないと思うので必要とする人は少ないでしょうが、シンボル情報が含まれるリロケータブル形式のものを公開します。

 reloc sked.rel sked.68k

の操作でシンボル情報を取り除いたコンパクトな実行ファイルに変換できます。
 typeコマンドの代わりにviewerとしても使えるのでコンソール接続のCP/M-68Kが動く環境を持っている人にとってはそれなりに便利だと思います。

 現時点で実装しているコマンドに関しては下のヘルプを表示中の画面キャプチャを参照してください。

help表示状態の画面


 ダウンロードはこちらからどうぞ(商用利用以外であれば自由に使用できます)
  • sked68k_v001g.zip
    ★2022/02/09 V0.01g メモリ確保方法をmallocからSP参照方式に変更 ★2019/04/08 V0.01f 新規ファイル中断時に新規ファイルが残らないようにした ★2019/04/06 v0.01d ファイル内のコントロールコードを表示
    ★2017/12/19 v0.01b help表示の誤記修正
    ★2017/12/17 v0.01a ステータス表示部分を改善

★2018/12/14 追記
 twitterにアップした操作動画付きツイートを貼っておきます。
 Win10の画面録画機能?で保存していますが、ウィンド内表示の上下がカットされるため、TeraTermを26行に設定して録画したので表示中の最下端の行の表示はゴミです。(skedは 80文字x24行 の画面で動作します)


★2019/01/12 追記
 WordStarのコマンドライクなスクリーンエディタがCP/M-68K上で使えるようになったのでライフゲームを動かしてみました。
 実行ファイルとソースは下記からダウンロードできます。(★2019/01/13 定常状態の検出ロジックを強化しました)

 実行ファイルはシンボル情報の入ったリロケータブル形式(rel形式)になっているので

reloc life68.rel life68.68k

でシンボル情報のないコンパクトな実行ファイルに変換できます。

LifeGame on CP/M-68K


★2019/02/11 追記
 CP/M-68K用に開発したxmodemアプリを下記の記事で公開しています。
 TeraTermのxmodem機能を使ってファイルの送受信が可能になります。
3チップ構成68Kマイコンの構想(その10)XMODEMアプリの作成



★2020/08/13 追記 {
 「レトロマイコン86ボードの構想(その14)untarの製作」の記事で書いたCP/M-86用に作成したuntarをCP/M-68Kに移植しました。

reloc untar.rel untar.68k

でシンボル情報のないコンパクトな実行ファイルに変換できます。

 ダウンロードは下記のリンクからどうぞ(商用利用以外であれば自由に使用できます)
・2021/01/04 Ver0.05
 Win10のtarコマンド等のヘッダ内サイズデータのデリミタが20Hの場合に対応

}

[TOP] [ 前へ ] 連載記事 [ 次へ ]
nice!(0)  コメント(9) 
共通テーマ:趣味・カルチャー

3チップ構成68Kマイコンの構想(その13)プリント基板完成 [68K]

3チップ構成68Kマイコンの構想(その11)回路図整理とパターン設計」の記事に書いたように今回は最初からCNCでのプリント基板製造は諦め、プリント基板製造業者に製造を依頼することにしました。

 10/8にポチリ、10/24に到着しました。
 仕上がり具合は特に問題なく、綺麗に作って貰っています。
 今回は青色のソルダレジストにしてみました。トラック幅はCNCで切削し易い設定のままなので太めですw

PCB Top side



PCB Bottom side


 早々に部品を実装してみましたが、CP/Mが立ち上がりません・・orz
 「3チップ構成68Kマイコンの構想」の記事で書いたような簡単なプログラムは動作しましたが、メモリの末尾(0x0007fc00)を使ったPICと68Kとのデータの受け渡しができていないようです・・
 簡易的なモニタプログラムを作成して確認してみようかとも思いましたが、PICと68Kとのパラメータ渡しが出来ていない(メモリの先頭ではokのようですが、どの範囲がNGなのか不明)ので68Kからコンソール入出力ができないため、メモリ編集機能を実装することもできません・・・

 そこでこんなプログラムを作成してみました。
  1. 0x001000~0X07FF00の範囲で0x0100毎にメモリアドレスを書込む。(例 0x001800には0x00001800が書き込まれる)
  2. 次に0x001000~0X07F000の範囲で0x1000毎にメモリに書き込まれたアドレス値を拾い、0x0100からのメモリ領域に書き込む。
  3. 0x0100からのメモリ内容を調べることで68Kのメモリアクセス状況を確認する。また、PIC側からメモリダンプを調べることで68Kとのアクセスアドレスが一致しているかを確認する。(※確認は人手で行う)


 68K側のプログラムはこんな感じです。EASy68Kを使用しています。

メモリ確認用68Kプログラム
00000380 Starting Address Assembler used: EASy68K Editor/Assembler v5.16.01 Created On: 2018/10/28 0:31:53 00000000 1 * as68 -P -S c: SrcFile -O ObjFile 00000000 2 * lo68 [-S] -Ztext_address -Ddata_addressObjFile -O OutFile 00000000 3 00000000 4 * text 00000000 5 00000380 6 org $0380 00000380 7 00000380 203C 00001000 8 START: move.l #$1000,d0 * start adr 00000386 2600 9 move.l d0,d3 * save para 00000388 223C 00000100 10 move.l #$00000100,d1 * inc width 0000038E 243C 00080000 11 move.l #$00080000,d2 * end adr 00000394 2040 12 loop: move.l d0,a0 00000396 2080 13 move.l d0,(a0) 00000398 D081 14 add.l d1,d0 0000039A B082 15 cmp.l d2,d0 0000039C 66F6 16 bne loop 0000039E 17 0000039E 227C 00000100 18 move.l #$0100,a1 * result save area 000003A4 2003 19 move.l d3,d0 000003A6 2203 20 move.l d3,d1 * inc:$1000 000003A8 2040 21 loop2: move.l d0,a0 000003AA 22D0 22 move.l (a0),(a1)+ 000003AC D081 23 add.l d1,d0 000003AE B082 24 cmp.l d2,d0 000003B0 66F6 25 bne loop2 000003B2 26 000003B2 60FE 27 bra * 000003B4 28 000003B4 29 end START No errors detected No warnings generated SYMBOL TABLE INFORMATION Symbol-name Value ------------------------- LOOP 394 LOOP2 3A8 START 380


 アセンブルしてできたSレコードファイルをバイナリ変換し、picleのステートメントに自動変換後、picleソースに埋め込み、実行した結果は次のとおりでした。


picleソースに埋め込み実行した結果
:l 1:# 3chips MC68008 OneBoard test 2018/10/27 2:# by skyriver 3: 4:use LibCpm; 5:use LibSpi; 6: 7: 8:proc main() { 9: var adr; 10: init(); 11: initPmp(); 12: initSpi(); 13:# initSd(); 14: 15: LATA[-2]=LATA[-2]&$fffc; # on reset:a0 halt:a1 16: 17: PmpOn(); 18: PmpSetAdr(0); 19: MemWr($00); # stack 20: MemWr($02); 21: MemWr($00); 22: MemWr($00); 23: MemWr($00); # PC 24: MemWr($00); 25: MemWr($03); 26: MemWr($80); 27: 28: adr = $0380; # 68K's ADR:00000380 29: PmpSetAdr(adr); 30: 31: MemWr($20); 32: MemWr($3c); 33: MemWr($00); 34: MemWr($00); 35: MemWr($10); 36: MemWr($00); 37: MemWr($26); 38: MemWr($00); 39: MemWr($22); 40: MemWr($3c); 41: MemWr($00); 42: MemWr($00); 43: MemWr($01); 44: MemWr($00); 45: MemWr($24); 46: MemWr($3c); 47: MemWr($00); 48: MemWr($08); 49: MemWr($00); 50: MemWr($00); 51: MemWr($20); 52: MemWr($40); 53: MemWr($20); 54: MemWr($80); 55: MemWr($d0); 56: MemWr($81); 57: MemWr($b0); 58: MemWr($82); 59: MemWr($66); 60: MemWr($f6); 61: MemWr($22); 62: MemWr($7c); 63: MemWr($00); 64: MemWr($00); 65: MemWr($01); 66: MemWr($00); 67: MemWr($20); 68: MemWr($03); 69: MemWr($22); 70: MemWr($03); 71: MemWr($20); 72: MemWr($40); 73: MemWr($22); 74: MemWr($d0); 75: MemWr($d0); 76: MemWr($81); 77: MemWr($b0); 78: MemWr($82); 79: MemWr($66); 80: MemWr($f6); 81: MemWr($60); 82: MemWr($fe); 83: 84: PmpOff(); 85: dump(0); 86:# dump(adr); 87: 88: BusRelease(); 89: LATA[-2]=LATA[-2]|$3; # off reset:a0 halt:a1 90: 91: Timer_=10; 92: while (Timer_) {} # 100ms wait 93: 94: LATA[-2]=LATA[-2]&$fffc; # on reset:a0 halt:a1 95: PrnStr_( "\n-------" ); 96: dump(adr); 97: PrnStr_( "\n-------" ); 98: dump($0100); 99: dump($0180); 100: dump($0200); 101: dump($0280); 102: PrnStr_( "\n-------" ); 103: dump($0400); # 68K's adr:0007fc00 104:} :run 0000 : 00 02 00 00 00 00 03 80 00 00 4D E0 00 00 4D E4 0010 : 00 00 4D E8 00 00 4D EC 00 00 4D F0 00 00 4D F4 0020 : 00 00 4D F8 00 00 4D FC 00 00 4E 00 00 00 4E 04 0030 : 00 00 4E 08 00 00 4E 0C 00 00 4E 10 00 00 4E 14 0040 : 00 00 4E 18 00 00 4E 1C 00 00 4E 20 00 00 4E 24 0050 : 00 00 4E 28 00 00 4E 2C 00 00 4E 30 00 00 4E 34 0060 : EE 28 41 85 9E 4D AA 06 BA 69 2F 1D D6 1B 03 AE 0070 : F7 2B AC FB 37 6A 10 BE 0B 03 1F 12 17 FC 3C 6C ------- 0380 : 20 3C 00 00 10 00 26 00 22 3C 00 00 01 00 24 3C 0390 : 00 08 00 00 20 40 20 80 D0 81 B0 82 66 F6 22 7C 03A0 : 00 00 01 00 20 03 22 03 20 40 22 D0 D0 81 B0 82 03B0 : 66 F6 60 FE FE 00 72 7F 24 D8 51 C9 FF FC 52 40 03C0 : 51 CA FF E8 4E D3 0D 2E 2E 2E 20 6C 6F 61 64 69 03D0 : 6E 67 20 00 02 41 00 FF 00 41 03 00 32 81 4E 70 03E0 : 4E 75 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03F0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ------- 0100 : 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 0110 : 00 00 50 00 00 00 60 00 00 00 70 00 00 00 80 00 0120 : 00 00 90 00 00 00 A0 00 00 00 B0 00 00 00 C0 00 0130 : 00 00 D0 00 00 00 E0 00 00 00 F0 00 00 01 00 00 0140 : 00 01 10 00 00 01 20 00 00 01 30 00 00 01 40 00 0150 : 00 01 50 00 00 01 60 00 00 01 70 00 00 01 80 00 0160 : 00 01 90 00 00 01 A0 00 00 01 B0 00 00 01 C0 00 0170 : 00 01 D0 00 00 01 E0 00 00 01 F0 00 00 02 00 00 0180 : 00 02 10 00 00 02 20 00 00 02 30 00 00 02 40 00 0190 : 00 02 50 00 00 02 60 00 00 02 70 00 00 02 80 00 01A0 : 00 02 90 00 00 02 A0 00 00 02 B0 00 00 02 C0 00 01B0 : 00 02 D0 00 00 02 E0 00 00 02 F0 00 00 03 00 00 01C0 : 00 03 10 00 00 03 20 00 00 03 30 00 00 03 40 00 01D0 : 00 03 50 00 00 03 60 00 00 03 70 00 00 03 80 00 01E0 : 00 03 90 00 00 03 A0 00 00 03 B0 00 00 03 C0 00 01F0 : 00 03 D0 00 00 03 E0 00 00 03 F0 00 00 04 00 00 0200 : 00 04 10 00 00 04 20 00 00 04 30 00 00 04 40 00 0210 : 00 04 50 00 00 04 60 00 00 04 70 00 00 04 80 00 0220 : 00 04 90 00 00 04 A0 00 00 04 B0 00 00 04 C0 00 0230 : 00 04 D0 00 00 04 E0 00 00 04 F0 00 00 05 00 00 0240 : 00 05 10 00 00 05 20 00 00 05 30 00 00 05 40 00 0250 : 00 05 50 00 00 05 60 00 00 05 70 00 00 05 80 00 0260 : 00 05 90 00 00 05 A0 00 00 05 B0 00 00 05 C0 00 0270 : 00 05 D0 00 00 05 E0 00 00 05 F0 00 00 06 00 00 0280 : 00 06 10 00 00 06 20 00 00 06 30 00 00 06 40 00 0290 : 00 06 50 00 00 06 60 00 00 06 70 00 00 06 80 00 02A0 : 00 06 90 00 00 06 A0 00 00 06 B0 00 00 06 C0 00 02B0 : 00 06 D0 00 00 06 E0 00 00 06 F0 00 00 07 00 00 02C0 : 00 07 10 00 00 07 20 00 00 07 30 00 00 07 40 00 02D0 : 00 07 50 00 00 07 60 00 00 07 70 00 00 07 80 00 02E0 : 00 07 90 00 00 07 A0 00 00 07 B0 00 00 07 C0 00 02F0 : 00 07 D0 00 00 07 E0 00 00 07 F0 00 97 54 9F D4 ------- 0400 : 00 03 FC 00 00 00 00 00 00 07 FC 22 00 01 27 E8 0410 : 00 00 00 00 60 36 00 00 00 00 00 00 00 00 00 01 0420 : 00 01 00 07 FC 58 00 01 09 58 FF F7 00 01 00 00 0430 : 00 07 FC 4A 00 01 27 E8 00 00 00 00 60 36 00 00 0440 : 00 00 00 00 00 00 00 01 00 01 2E F0 00 01 44 70 0450 : FF F7 17 72 FF FF 00 00 00 01 63 BA 00 01 4C F7 0460 : 00 07 FC 98 00 01 2D B2 00 07 FC 78 00 01 63 BB 0470 : 00 08 00 00 00 01 4C F0 61 36 58 58 00 01 2E F0 :


 上の0x0100部のダンプリスト内容から68K側からのメモリアクセスは特に問題無いようです。
 0x0400部(実メモリ上のアドレスは0X0007fc00)のダンプ結果からPICからの0X07fc00のアクセスはA18がhighにならずlowの状態(結果0x0003fc00が読める)のようです。

 だいぶ状況が判ってきました^^
 次にシンクロでA18がhighになった状態の電圧レベルを確認しました(リファレンスとしてA16と比較)
 黄色がアドレス信号で紫色はトリガを取るためのBG/信号です。

A16の信号波形 A18の信号波形


 A16ももう少し高い電圧の方がいいのですが(今回は回路を限界的に簡略化しているのでこれでOKとします・・LEDの数は多めだけどw)、A18は明らかに電圧が低くなっています・・・・

 ボードから電源を抜いた状態でA18とGND間の抵抗を計ってみると2.6Kほどでした(他のアドレス線は15K程度)
 一応、半田付け状態も確認しましたが、問題なさそうだったのでメモリを抜いてみると抵抗が他のアドレス線と同じ15K程度になりました。

 このことからメモリチップが原因である可能性大です。今回使用している512KBのメモリは2個しか持っていないのでブレッドボードで使っているメモリを抜いてPCBに付けてみたところ無事にCP/M-68Kが立ち上がりました(^^)/

 消費電流を計ってみたところ、CP/M起動状態での通常時は170mA、SDカードアクセス時に190mA程度でした。
 通常時(キー入力待ち状態)は68KはバスをPICに引き渡して何もしていない状態ですが、使用しているMC68008P10はHMOSプロセスで製造されてるので消費電流はスイッチング速度によらず一定です。

 最後にCP/M-68Kが動作中のボード写真を貼っておきます^^
 メモリはブレッドボードで使用していたものに交換したのでピン番号と信号名の書かれた紙が貼ってありますw

CP/M-68K動作中の写真


★2018/11/03 追記
 「3チップ構成68Kマイコンの構想(その11)回路図整理とパターン設計」の回路図で
  • PL3
    1-2 の接続を解除
  • PL4
    1-2 -> 2-3 にジャンパピン変更

にジャンパピンを変え、PICの31ピンから16MHzが出力されるようにconfigを変更、更にバスリクエスト(BR/:low)時にBG/チェックをしなようにPIC側のソフトを変更することで、MC68008P10(10MHz版)への供給クロックを16MHzにしてみました。

 この状態でCP/M-68Kを起動したところ、Cold Boot Loaderが出力している「...booting」が表示された後、「ERAC」のLEDが点灯(メモリ実装外のアドレスをアクセス)して反応がなくなりました^^;
 (メモリのアクセスタイムは70nsなので大丈夫だと思いますが)やはり68Kの10MHz版では16MHz動作は厳しいようです。


★2018/12/04 追記
 ebayで注文していた512KBのSRAMが届いたのでブレッドボード用にラベルの付けたメモリからラベル無しのものに交換しました。
 記念として撮った写真を貼っておきます。TOP面のR23がDCジャックと若干干渉気味ですがDCジャック用の丸穴が大きめなので位置調整で何とか入りそう(若干削るといいかも^^;)
 初期バージョンとしてはまぁまぁのできではないでしょうか?

Pic24CPM68K部品実装写真(top面)


Pic24CPM68K部品実装写真(bottom面)


[TOP] [ 前へ ] 連載記事 [ 次へ ]

nice!(0)  コメント(2) 
共通テーマ:趣味・カルチャー