SSブログ
English Version

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

 今回作成した3チップ構成のワンボードマイコン(下の写真)でCP/M-80が動作し、スイッチ入力処理等も実装が完了したのでCP/Mを立ち上げるまでに必要な作業を整理しました。

 チップ構成はZ84C0020PEG(20MHz版のZ80、PICからクロック供給する関係で16MHzで動作)、HM628128ALP-7(128kBytesのSRAM、アクセスタイムは70ns)、PIC24FJ64GA004の3チップのみで汎用ロジックICやPLD等は使っていません。

Pic24CPMボード


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

    1. 今回作成したPic24CPM用のファイル
       PICファーム全体のhexファイル(これを書込めばPIC側の準備は完了)とIPL、bios及びpicleソース等をアーカイブした下記のファイルをダウンロードする。
      • Pic24CPM20181111.zip
        ★2018/11/11 変更
        SDアクセス部でSDタイプによりエラーになることがあったので修正(Pic24CPM68Kからのフィードバック)
        ★2018/05/19 変更
        電源ON時の不要なメッセージ等に対する対処版

    2. CP/Mのソース
       メモリサイズが64K版のCP/Mのバイナリファイルを作成するため、CP/Mのソースが必要になります。
       The Unofficial CP/M Web siteのサイトで
      Digital Research Source Code -> CP/M2.2 ASM80 Source

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

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

    5. hex2bin
       hexファイルをバイナリファイルに変換するツール。CP/Mのメモリサイズの変更時に使用します。検索すればいろいろ見つかりますが、ここからダウンロードしたものを使わせて戴きました。

    6. その他
       CP/Mシステム部分のディスクイメージの作成時にバイナリファイルの連結が必要となります。
       私はWindows10上のMinGW/msys環境(windows上のlinux環境)でddコマンドを使いました。Windows用のddコマンドも検索すれば見つかるはずです。

  2. PIC24FJ64GA004側の準備
    • ワンボードマイコン基板
       回路図は下記のとおりです。詳細は「レトロマイコンZ80ボードの構想(その16)回路図とPCB化」の記事を参照してください。
       私はPCB化しましたが汎用基板やブレッドボードでも気軽?に作成できる回路規模だと思います。
       MONのLEDが回路図では赤色になっていますが、黄色に変えました(抵抗値はそのままでもok)。
       また、SDカードホルダはebayで購入したものを使っていますが、秋月電子通商さんで販売している「SDカードコネクタ SD381200-S304」も使えるはずです。
      ★2018/05/17 追記 {
       メモリはアクセスタイム70nsのもの(HM628128ALP-7)を使用
      }

      Pic24CPMの回路図 Ver0.01

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

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

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

      3. Pic24CPM用のファイルに入っている「exit.com」をCP/M上で起動するとCP/Mから抜けてpicleコンパイラの世界に戻ります(runコマンドでCP/M再起動)

      4. picleのソースも「Pic24CPM用のファイル」に入れてあるのでセルフコンパイル環境で機能変更が可能です。
         尚、picleソースの先頭にはTeraTermでコピペし易いように「new」と「i」コマンドを付けているのでそのままコピペすればソースが登録されます。
         自動起動の場合、ソース先頭アドレスがフラッシュメモリ上になっているので、「"src" + リターン」の操作でソース先頭アドレスをSRAM上にしてからコピペしてください。
         詳細は「独自言語 picle compiler on PIC24FJ」を参照してください。

      5. TeraTermのシリアル設定は38400bps、8bit、Parity無しです。また、コピペで取りこぼしが発生しないように
        SetUp -> Additional Settings -> Copy and Paste -> Paste delay per line
        を10ms程度に設定してください。

      6. OneBitLoaderをコンソール接続のUART対応した状態で導入しています。
         OneBitLoaderをダウンロードし、Device欄で「PIC24FJ64GA_CPM」を選択すれば、PICKIT3等の書込み環境無しにPIC内フラッシュメモリの書換えが可能です。
         書込み操作としては、シリアルポートを開放するためにTeraTermを終了させてからOneBitLoaderを起動し、「Write」ボタンを押下後ワンボードのresetボタンを押すことで書込みができます。

      7. SDカードの抜き差しをPICが監視しています。抜いた状態ではMONのLEDが点滅します。SDカードを抜いてから挿入するとSDカードを再度イニシャライズ(保存データは消えない)するので継続してSDカードのアクセスが可能です(これによりSDカード間でのメモリを介してのファイルコピー等ができます)。

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

  3. CP/Mブート用SDカードの作成
    1. CP/Mのメモリサイズを最大の64Kに変更
       CP/Mのソース「CPM22.ASM」の最初の方にあるメモリサイズの部分を64に変更する。

      MEM EQU 64 ;for a 64k system (TS802 TEST - WORKS OK).

       末尾の「B I O S J U M P T A B L E」にあるジャンプ命令はBIOSの部分なのでアセンブル後にBIOSとオーバーラップしないようにジャンプ命令をEQUステートメントに変更する。

      ;**************************************************************
      ;*
      ;* B I O S J U M P T A B L E
      ;*
      ;**************************************************************
      ;
      ; change jmp to equ statement by skyriver 2018/02/19
      BIOS equ (MEM * 2 - 3) * 512
      BOOT equ BIOS ;NOTE WE USE FAKE DESTINATIONS
      WBOOT equ BIOS + 3
      CONST equ BIOS + 6
      CONIN equ BIOS + 9
      CONOUT equ BIOS + 12
      LIST equ BIOS + 15
      PUNCH equ BIOS + 18
      READER equ BIOS + 21
      HOME equ BIOS + 24
      SELDSK equ BIOS + 27
      SETTRK equ BIOS + 30
      SETSEC equ BIOS + 33
      SETDMA equ BIOS + 36
      READ equ BIOS + 39
      WRITE equ BIOS + 42
      PRSTAT equ BIOS + 45
      SECTRN equ BIOS + 48

       以上でCP/Mのソース変更が完了したので下記の例のようにasm.comでアセンブルし、hex2binでバイナリファイル化する。
       cpmはwindows上で動作するCP/Mエミュレータです。

      C:¥src¥CPM>cpm asm cpm22
      CP/M ASSEMBLER - VER 2.0
      FA00
      019H USE FACTOR
      END OF ASSEMBLY

      C:¥src¥CPM>hex2bin cpm22.hex
      hex2bin v2.5, Copyright (C) 2017 Jacques Pelletier & contributors

      Allocate_Memory_and_Rewind:
      Lowest address: 0000E400
      Highest address: 0000F9FF
      Starting address: 0000E400
      Max Length: 5632

      0 byte length Data record ignored
      0 byte length Data record ignored
      Binary file start = 0000E400
      Records start = 0000E400
      Highest address = 0000F9FF
      Pad Byte = FF

      C:¥src¥CPM>
      ★2020/09/05 表示内容をアップデート

    2. IPL,CPM,BIOSファイルの連結
       linux環境でのddコマンド(またはWindowa用のddコマンド互換ツールを使用)を使って下記の操作でIPL、CPM、BIOSのファイルを連結します。(IPLとBIOSのバイナリファイルはダウンロードしたPic24CPMのアーカイブファイル内にあります)

      dd conv=sync bs=128 count=1 if=IPL.bin > cpm64k.img
      dd conv=sync bs=128 count=44 if=cpm22.bin >> cpm64k.img
      dd conv=sync bs=128 count=10 if=bios64.bin >> cpm64k.img
      ★2018/08/28 IPL.bin部のcountを2から1へ修正^^;
    3. ディスクイメージの作成
       ダウンロードしたcpmtoolsを展開したフォルダに上記操作で作成したcpm64k.imgを置きます。
       またダウンロードしたPic24CPM用ファイル内にあるdiskdefs、SDImageSpliter.exe及びsysgen.batファイルもフォルダに置きます。
       sysgen.bat内の「../FolderA/*.*」部分をディスクイメージファイルに入れたいCP/Mファイルが入ったフォルダに変更します。
       同様に「../FolderD/*.*」まで変更します。
      (ディスクドライブは A~Eでeは空になる設定ですが、必要に応じて変更してください)
       変更後、sysgenを実行すると「diskimage_exp.img」というファイルができます。

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

  4. CP/Mの起動
     上記で作成したSDカードを入れた状態で電源を入れれば、自動的にCP/Mが立ち上がります。
     ダウンロードしたPic24CPMファイルに入っている「exit.com」を実行することで、CP/Mから抜け、PIC上のpicleコンパイラの環境に戻ります。
     Pic24CPMにはpicleソースも入れていますので処理内容の確認や改造が可能です。


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


★2018/05/17 追記
 Pic24CPMボードが増殖しましたw
 プリント基板を作ってもらうと簡単に増殖できてメッチャ楽^^
 CNCでのプリント基板作成のモチベーションが下がってしまうw
 右側がさっき完成したものでTQFO(PIC24FJ64GA004)を今回は事前に半田盛りはしないで半田付けしました。余分な半田は半田吸い取り線で除去。パッド間の間隔をCNC用にかなり狭くしたので心配でしたが、大丈夫でした。最初の物より綺麗にできた^^

Pic24CPM基板増殖^^


★2018/11/03 追記
 ガーバーデータをseeedさんの「Fusion gallery」の「Geek product」コーナーで公開しました。
https://www.seeedstudio.com/Pic24CPM-developed-by-skyriver-Z80-board-constructed-with-only-3-chips-in-which-CP-M-80-work-g-1121278

★2020/07/15 追記
 同様に3チップ構成でCP/M-68Kが動作するPic24CPM68Kの作成手順を下記の記事にまとめています。
  3チップ構成Pic24CPM68Kマイコン(CP/M-68K起動までの作業まとめ)

★2023/12/26 追記
 同様にV20を使った3チップ構成でCP/M-86が動作するPic24V20の記事は下記です。
  レトロマイコン86ボードの構想(その25)回路図アップデート

 更にUSB機能を有した20ピンのPICを使用し40ピンのZ80を使用した世界最小のZ80 CP/Mボードを目指した3チップ構成のZ80PicCompactの記事は下記です。
  超小型Z80マイコン(その12)PCBへの部品実装



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

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