Categories: R10コンピュータ

日立 MB-S1 S1-CP/M80 移植作戦 その28 BIOSの作成14

MSX風画面に更に近づけるために40字モードでファンクションキー表示をしてみました。

CP/M80では全く意味はありませんが、MSX風に color auto,goto list run を定義してみます^^;;

これはもうMSX風の画面そのものです^^;;;

実験するのに下記のようなソフトを入れてみましたが、

                ;Function Key Show
                ldy             #0xE96E
                lda             #0
                ldb             #160
LP1:            cmpb            #0
                beq             LP2
                sta             ,Y+
                decb
                bra             LP1
LP2:
                leax            FNSTR,PCR       ;FNKEY STR
                ldy             #0xE96E
LP3:            lda             ,X+
                cmpa            #0xFF
                beq             LP4
                sta             ,Y+
                bra             LP3
LP4:
FNSTR:          .ascii          /color           auto            goto            list            run             /
                .byte           0xFF

ファンクションキー文字列のデリミタは$00のようなので、$20(スペース)で位置合わせした文字列では使えません。
(F1を押すとcolor      auto         となってしまう)
と、いうわけで各キー毎にきちんと$00で区切る必要があるようです^^;;

color auto,goto list runの定義では意味が無いので、PC-8001用CP/Mのような割当に変えてみます。

ゴニョニョやってみましたがPF10まで全て設定しないと何故だか暴走してしまいます。

FNSTR:          .ascii          /DIR A: /
                .byte           0x0D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
                .ascii          /STAT /
                .byte           0x0D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
                .byte           0xFF

PF1,2のみ設定だと暴走する→それもヘッドシークでヘッドが移動状態でリミットを超えても止まらず、壊れそうになる暴れ具合・・・

PF10まで全て設定すると直りますが、これでは160バイトも消費するのでもっと工夫が必要です

FNSTR:          .ascii          /DIR A:/
                .byte           0x0D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
                .ascii          /STAT/
                .byte           0x0D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
                .byte           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
                .byte           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
                .byte           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
                .byte           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
                .byte           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
                .byte           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
                .byte           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
                .ascii          /DIR B:/
                .byte           0x0D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
                .byte           0xFF

原因は調べたいと思いますが、とりあえずこれでも目的の動作はOKです

MSX風画面表示は満足したので、元に戻したいと思います^^

そんなMSX風画面対応のS1-CP/M80カラー調整の記録・・・

kabekin

View Comments

  • ファンクションキーですが、Sharp X1のCP/M ではデフォルトでファンクションキーが表示されています。
    ファンクションキー表示ではスクロールが24行、非表示では25行という画面制御になっています。
    ESCシーケンスで表示/非表示が制御でき、KEY.COMで定義一覧を表示したり任意のキーを定義できます。
    KEY で一覧表示、KEY で任意の番号に任意の文字列を定義できます。
    文字列(ASCII)はすべて大文字に変換され、文字列に”@M”をいれるとReturnコードとみなされます。

    • 実はこのS1-CP/M80のファンクションキー表示はBIOS09に実装したBASICの命令で表示しています。
      (今のところアセンブラでファンクションキーを表示する方法は分かっていません・・・・^^;;;)
      CONSOLE,0,24,1を実行すると一度画面がクリアされるのでCONSOLEした後にCP/Mの起動メッセージを表示しています。
      BASICの命令で定義すればうまくいきそうなので、専用のトランジェントコマンドを作りたいですね^^