Last Updated on 2020年3月11日 by kabekin
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カラー調整の記録・・・


ファンクションキーですが、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の命令で定義すればうまくいきそうなので、専用のトランジェントコマンドを作りたいですね^^