S1-CP/M80 移植作戦 その29 BIOSの作成15^^

スポンサーリンク

BIOS09内CONOUTの画面制御を強化してみました。

実装したのは中部本多通商のS1-CP/M80で使用されていたコード+シフトJIS漢字表示です

漢字表示はS1のシステムシステムコールではJIS漢字コードなのでCONOUT内で
シフトJISからJIS漢字に変換しています

上記の例は

を表示したもので、DEFで色反転、1行中の任意位置以降削除で15行目の8文字目以降を削除、カーソル操作で
上下左右とEをバックスペース、LOCATE操作(Jを反転)とベル出力です

実装したコードはこんな感じで
2バイトエスケープシーケンス系 6種類
ESC ( (1B28) 以後の文字表示で文字色と背景色が入れ替る→反転表示
ESC ) (1B29) 以後の文字表示で文字色と背景色が戻る→反転解除
ESC * (1B2A) スクリーンをクリアしてカーソルを左上に移動
ESC = (1B3D) カーソルを指定位置に移動→1B,3D,Y座標,X座標
ESC T (1B54) カーソル位置以降1行消去
ESC Y (1B59) カーソル位置以降1画面消去

1バイトコントロールコード系 17種類
$05 カーソル以降1行消去
$06 カーソルをスクリーンの右下に移動
$07 ベルを鳴らす
$08 カーソルを左に移動(BS)
$09 カーソルを次のタブストップ位置に移動
$0A カーソルを一つ下に移動(LF)
$0B カーソルをスクリーン左上に移動(ホーム)
$0C スクリーンをクリアしてカーソルをスクリーン左上に移動
$0D カーソルを次の行の先頭に移動(改行復帰)
$13 カーソルの位置にスペースを挿入
残 $14 カーソルの位置にタブストップを設定
$16 カーソルを表示する
$17 カーソルを表示しない
残 $19 カーソル位置のタブストップを解除する
$1B エスケープシーケンスの開始
$1C カーソルを一文字右へ移動
$1D カーソルを一文字左へ移動
$1E カーソルを一文字上へ移動
$1F カーソルを一文字下へ移動

かなりベタな書き方だと思いますが、とりあえず動作しているようなので晒しておきます^^;;;
お気付きの点がありましたら、アドバイスお願い致します (_ _)

 

S1BASIC上ではすべての機能が動作していますがCP/MのBIOS09に組み込むとSJIS漢字出力は動作しませんでした
(MBASICの問題かもしれません・・・)

10行目 エスケープシーケンスでLOCATE 10,11した後”AB”を表示
20行目 “ABC”を表示した後、エスケープシーケンスで”DEF”を反転、”GHI”で反転解除
30行目 SJIS漢字コードで漢字を表示しようとしたが、Illeagal Function Callが発生
このIlleagal Function CallはMBASICが出したものではなくS1BASICが出しています。
ということは、この時点でCP/M80は終了しS1BASICに落ちています・・・

そんなCONOUT機能拡張の記録・・・^^

スポンサーリンク

コメントを残す

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

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