S1-CP/M80 移植作戦 その20 BIOSの作成4^^

スポンサーリンク

BIOS09内のディスクI/Oのサブルーチンを考えています。

S1はFMと違い、ROM内にFDDのサブルーチンが無いので自分で作る必要があるみたいです。

FDCのMB8877を使った参考書としては「オーム社のマイクロコンピュータMC6809の考え方」が分かりやすく
お気に入りの書籍です。
この本はFLEX9中心の参考書ですが、この本を参考にS1CPM用のディスクI/Oサブルーチンを考えてみました。
S1はMB8876なのですがデータの反転を入れればOKではないかと甘いことを考え中^^

骨格は書籍の通りですが、S1固有の部分を合わせながら進めています。
(MC6809の考え方ではDRQをIRQとしてMPUに取り込んでいますがS1ではDRQはMNIに取り込んでいないっぽい)

6809活用研究に掲載のMP-1870の回路図を見るとDRQ,IRQは$FF04のリードで取得することが判明

ドライブ変更時に正常に動作しなくなったり、セクタを変えると暴走したりと問題点満載ですが、コードを晒しながら動作するように頑張ります^^

何か勘違いしていると思いますので、間違いに気づかれた方はご指摘下さい(^^;;
(アセンブラはMS-DOS用のAS63_DOS.EXEを使ってます)

このソフトを実行するとドライブ0のトラック20,セクタ5を1セクタ読込んで$0300~にロードします。

$300~書き込まれた256バイトをドライブ1のトラック39、セクタ5に1セクタ書き込みます。

本来アセンブラのサブルーチンは上記のように機能毎に別の位置で処理するのではなく、
一連の流れでデータを作る効率の良さが求められるものだと思いますが、完全に機能毎に処理しています。
かなり非効率なポンコツプログラムですが笑って許してください^^;;

アセンブラのコードの書き方をマスタしたいので、こう書いたほうがいいなどの指摘がありましたら
どんどん指摘してください(^^;;;

連絡画面からのメール送信も復活させましたので、アドバイスなど宜しくお願い致します(^^)

 

スポンサーリンク

「S1-CP/M80 移植作戦 その20 BIOSの作成4^^」への6件のフィードバック

  1. ちょっとだけですが,

    SIDESEL: equ *
    lda wSectNo,PCR #SectorNo
    bita #$10
    bne SIDE2SEL #16セクタ以上ならSide2
    SIDE1SEL: clra # lda #0よりclraの方が速い
    rts # SIDE1ならwSectNo,PCRはそのままで良い
    SIDE2SEL: anda #$0f
    sta wSectNo,PCR
    lda #$01
    rts

    1. お懐かしい!
      あの Level3さん でしょうか!?

      私は当時NIFTYのFOS9/FDEVICEに Hase. というハンドルで出没していました。
      現在は
      https://twitter.com/haserin09
      http://haserin09.la.coocan.jp/
      で細々とやっております。

      ところで、ご相談させていただきたいことがあるのですが、DMさせていただいてもよろしいでしょうか?

      以上、よろしくお願いします。

      勝手に使ってしまってすいません。>かべきんさま

  2. もう1つ,データエリアの参照にプログラムカウンタ相対を使用していますが,ここは絶対アドレス参照で良いのではないでしょうか?BIOSの位置は出来上がった段階では固定ですから絶対アドレス参照の方が速いと思います.

    1. コメントありがとうございます
      SIDESELのサブルーチンは早速入替えさせて頂きました^^;;
      現状は実験する際に$3000~ロードしたり$0000からロードしたりと相対アドレス対応でコーディングしていますが、ある程度動作するようになって落ち着いてきたら絶対アドレスにして速度重視に整理したいと思います

コメントを残す

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

日本語が含まれない投稿は無視されますのでご注意ください。 本文に全角文字を2文字以上含めて下さい (スパム対策)