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