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