日立 MB-S1実機でCP/M80をロードしてみる その1

Last Updated on 2019年8月11日 by kabekin

2Dの実FDにデータを書込みできたのでS1/10とMP-3550でCP/M80をロードしてみます。

Z80Bカードはまだ完成していないので、CP/Mの動作確認はできません。
目的のメモリにロードされることを確認してみます。

DISKBASICを起動し、CP/Mのブートローダを実行。

ブートローダの実行が終わりBIOS09に実行が移ったところでAddress Errorが発生して停止。

S1エミュレータでは正常にロードが終わりBIOS09に動作が移っていましたが実機では様子が違うようです。

ロードが終わるまでに80秒程度ロード時間がかかります。

トラック1をロード中は1セクタのリードで4回HEADLOADのアクセス音がします^^

メモリの状態を見てみると、
空間8のマッピングは

正常に行われているようです。

しかし、メモリにはデータがロードされていません。

エミュレータと同じことをやっているつもりなのですが結果が違うのはなぜ!?

ロードに異常に時間がかかっているのも気になるところです。
メモリ廻りの設定の問題だと思うのでちょっと調べてみます^^

8件のコメント

  1. samです。
    DiskBASICからのローダ”PreLoader”から調査ですかね?
    diskioシステムコールを使っているのですがエラーチェックをまじめにやっていません。(^^:
    ちゃんとロードされていないならなんらかのエラーになっているはずですが。
    #diskioシステムコールの仕様には何がどうのと書いてはいないようで、
    0が正常、0以外がエラーとかおおざっぱのようですね・・(^^:
    メモリをマップしてみてうまく読み書きできるか?とか(そこからかいっ!て言われそう)
    ダンプした状況からは$FFと$00なのでRAM領域で読み書きできそうですが・・。
    ではまた。

    1. そうですね^^
      エミュレータ上では問題なく動作していたので、実機でロードされていなかったのは予想外でした・・
      実FDはS1で使っていたブランクディスクのD88イメージにトラック0,1をインポートしたものですのでスキューがかかっています。
      特に問題ないとは思いますが、実FDとエミュでの違いはこのくらいかなぁと思っています。
      (2DベタファイルからD88に変換するときやDITTで実FDに書込む時に何かミスしている可能性もあったりします^^;;)
      トラック1を読むときはヘッドLOADのカチカチ音がするのですが1セクタを読むのに4回カチカチいうので4回読んでるっぽい感じです。
      お盆休み中に何かヒントがないか調べてみます^^

  2. samです。
    どうもDiskBASICが使用している物理ページがあり、
    CP/M本体、BIOS80(Z80のBIOSコード)、BIOS09(6809側BIOSコード)を読み込んだときに
    DiskBASICが使っているところを壊しているので誤動作しているっぽいです。
    エミュレータでも$03、$04のページを壊すと(に読み込むと)Addressエラーが出たり
    暴走したりします。
    BASIC側から物理ページ$00-$0F(Z80用)とそれ以外の任意2ページをBIOS09用に
    BASICから解放して自由に使えるようにできれば解消ということになると思いますが今のところ方法不明。
    異様に時間がかかったり何度も読んだりしているのも誤動作?と疑いたくなります。
    現在使用しているDiskBASIC下のDISKIOシステムコールは高機能ではありますが
    そのためかどうも動作が遅いような気もするし・・・(^^;
    FDCを直接操作してFD読み書きを実現する方向で頑張ってみます。
    備考:グラフィックで青枠を書いているのはBASICからのローダ(PreLoader)でLINEコマンド
    を実行しています。ローダとは全く関係ないのですが文字表示範囲(レイアウト)の目安、
    グラフィックが有効であることを確認する意味があります。

    1. DISKBASICで使っている系列7のメモリマップを見ると拡張メモリありの状態だと物理メモリの$3000~$5FFFを使っているようなので暴走するのかなぁと見ています。
      拡張メモリ無しの場合$8A000~$8CFFFを使うようですがZ80からは$0000~$FFFFが拡張されている必要があるので厳しいですね。
      拡張メモリありでも$8A000~ロードする方法があればいいのですが・・・

  3. samです。
    >拡張メモリありでも$8A000~ロードする方法があればいいのですが・・・
    コメントみていてはたと気が付きました(思い付きともいう)
    Disk BASICのローダを改変して、システムコールを使って必要なメモリページ($00-$0Fと任意の2ぺージ)
    を”あらかじめ予約”してしまえばどうだろう・・・
    具体的にはMMRASG, MMRFRE。
    MMRASGをつかってバンバンメモリを予約し、
    最終的に使用するページ以外をMMRFREをつかって解放、
    そのあとでDiskBASICをロードして起動すれば・・・?!

    1. 頂いたサンプルを実行させてみました。
      この方法を使うとZ80で使おうとしているエリアを邪魔せずにDISKBASICをロードできてますね^^
      $0-$FFFF迄が開放されていない状態でロードされているので64KB増設した環境でもDISKBASIC起動時に28k Byte Freeのメッセージが出ています。
      DISKBASICではきちんと$0-$FFFFが使えないエリアとして認識しているようです^^

  4. やったやった!
    実機でも大丈夫だったんですね。合計18ページを予約状態なので
    DiskBASICはCLEAR 100,&HA000 あたりが限界で、それ以上だとOut Of Memoryです(^^;ゞ
    現在samはDiskBASICのお世話にならなくてもFDをRead/Writeできるようにすべく
    頑張っています。以前は挫折したのですが大きな誤解をしていることに気付きました。
    おそらくもうちょっとで完成かと・・・。

    1. はい!実機でも大丈夫でした。
      64kBの拡張メモリを増設している状態でのDISKBASIC起動で28KB freeの表示は、かなり違和感がありました^^
      出張から戻ったらZ80カードの残りの配線を一気に片付ける予定です。
      残りはアドレスバスとデータバスだけなのでもう一息です。
      と言っても半田付けが終わっても、配線チェックにしばらくかかりそうです^^

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください