SSブログ
English Version

ポケコン(G850)用拡張ボード(EborsyEEP)でCP/M(その10)エスケープシーケンス対応 [ポケコン]

 今回開発した PC-G850V(以降ポケコンと記す)で CP/M を動かすことが出来る増設メモリボード(EborsyEEP)をBOOTHで配布した際の反応等からフルキーを実装した手のひらサイズの Z80 コンピュータであるポケコンの魅力を改めて痛感しました。
 しかし、現状のままでは CP/M は動くものの結局はパソコンに接続しないと使い辛い状況であると言わざるを得ません。

 ポケコン単体では使い辛いと感じる主要な原因の一つとして「手軽に使えるエディタが無い」ということがあると思います。OS を CUI ベースで使うとなると最低限、スクリーンエディタが必要ですよね。

 そこで次の改善を行うことにしました。
  1. エスケープシーケンス対応
     現状の仮想スクリーン(80x25)ではスクリーンエディタを動かせないのでエスケープシーケンスに対応することにします。「ポケコン(G850)用拡張ボード(EborsyEEP)でCP/M(その3)CP/M起動」の記事でも少し書きましたが、現状の仮想スクリーンの機能はスクリーンエディタの仮想的なスクリーンと競合してしまい、相性が 悪いのでエディタの方を LCD 画面サイズに対応するようにしました。

  2. ポケコン用スクリーンエディタの準備
     今回実装したエスケープシーケンスを使えば、Turbo Pascal の柔軟にカスタマイズできるエディタも使えるのですが、タブ表示に対応していなかったり、エディタ以外の機能は使わないようなユースケースも想定し、自作のエディタである SKED もポケコン対応することにしました。

  3. コントロールコードの入力対応
     スクリーンエディタを使うためにはキーボードからコントロールコードを入力できることが必要です。


 上記の対応でポケコン単体での CP/M の使い勝手がかなり改善されたのではないかと思います。実際に実装した機能について以下に簡単にまとめます。

  1. エスケープシーケンス機能
     下記の最小限の機能を実装しました。

    No.functioncharacter codememo
    1move cursorEsc[(y+1);(x+1)Hmove cursor to (x,y) position
    2clear screenEsc[2Jcursor doesn't move to home
    3erase lineEsc[0Jerase line from cursor to end of line
    4delete lineEsc[Kdelete cursor line
    5set reverseEsc[7mset character attribute to reverse
    6reset reverseEsc[0mset character attribute to normal
    7scroll upEsc[Sscroll up all lines on screen
    8scroll downEsc[Tscroll down all lines on screen
    ※Esc:0x1b、()はアスキーコードの2桁の数値

     尚、現状ではカーソル位置の文字がカーソルで上書きされて表示されない状態ですがプライオリティを下げて対応予定です。
    ★追記 2023/11/05
     対処した GOCPM の評価版を公開しました。

  2. スクリーンエディタ
     CP/M に対応した自作スクリーンエディタである sked をポケコンの LCD 画面に対応しました。名前も入力し易いように ske に短縮します。
     SHIFT J でヘルプが表示されます(LCD 画面範囲より大きいサイズなのでカーソルキーを操作して見てください)。
     参考として TeraTerm での sked のヘルプ表示画面が下図になります。

    sked for CP/M-80 の操作コマンド


  3. コントロールコード入力機能
     shift キーをコントロールキーとして扱い、記号の入力は全て「2ndF」キーを使用して入力することにしました。ESC は「SHIFT TAB」で、DEL は「SHIFT BS」で入力できます。
     また、下記の記号の入力を追加しました。
    • ^ : 2ndF 4
    • ~ : 2ndF 5


 参考として Turbo Pascal 3.0 の TINST でのスクリーン設定例を貼っておきます。一度設定した項目は対応無しに戻せないようなので、最初に「None of above」を選択して必要な項目のみ設定しました。下記は一度設定後に設定内容確認のために設定画面を開いた際の画面です。Highlight command は LCD 表示で見易いように逆に設定しています。

Turbo Pascal 3.0 の tinst での設定例


 上記の説明に対応した評価版の GOCPM.HEX 及び SKE.COM を下記のリンクからダウンロードできます。


 Twitter(X)に投稿した動画付きメッセージを貼っておきます。



★追記 2023/10/28
 パソコンを端末にして使っている時は GAME 言語のソースをコピペできましたが、ポケコンを単独で使用する時はソースをコピペできなくなるので困ってしまいます(GAME 言語の使用頻度は結構多めです^^)
 そこで GAME 言語のソースファイルをメモリ上に展開するツールを作ってみました。ソース修正時はエディタが使えるので GAME 言語のエディタよりも便利です。

 展開先のアドレスはディフォルトでは GAME言語のソース格納領域のディフォルト値である 0x8e00 に展開します。/Aオプションで展開先のメモリアドレスを指定できます。
 ディフォルトのアドレスに展開した場合、GAMEインタープリタがコールドスタートした時点でソースの先頭が 0xff に書き換えられるので下に示す操作例のようにおまじないが必要です。

D>GLOAD
load GAME source into TPA Ver0.01 2023/10/28 by skyriver
 usage; : gload [/axxxx] FileName
   xxxx : load; address(defalut:8E00)

D>GLOAD SAMPLE.GAM
SAMOLE.GAM 8E00-8E23
D>GAMEC
GAME80 for CP/M-80(compiler 0200-1B38) Ver0.03

*READY
:A== A:0)=0 ==

*READY
:


 展開先アドレスを指定した場合は次のような操作になります。

D>GLOAD /A4000 SAMPLE.GAM
SAMOLE.GAM 4000-4023
D>GAMEC
GAME80 for CP/M-80(compiler 0200-1B38) Ver0.03           

*READY
:=$4000 ==

*READY
:


 下記からダウンロードできます。


★追記 2023/10/29
 上記の GLOAD コマンドはロード時間がアッと言うまでパソコンを端末にしている時でさえ使いたくなりますね(コピペする場合はウェイト時間の設定変更等、少々面倒だった)

 指定したファイル名に拡張子が無い場合、.GAM に自動設定するようにしました。
 また、同類ソフトのセーブコマンドである gsave も作成しました。GAME インタープリタを終了(>=0 実行)した後に gsave FileName を実行することでメモリ上の GAME ソースをファイルにセーブできます。

 下記から gload と gsave をダウンロードできます。


★追記 2023/10/30
 GLOAD 実行後のおまじないが面倒なので GAMEC を起動する際に何かしらのアーギュメントを付けた場合、ホットスタートで起動するように GAMEC.COM を変更しました。

 下記からダウンロードできます。
  • GameOnCpm80_20231030_004.zip
  • ※2023/11/01変更 キーセンスの間引き処理廃止
     GAME言語のソース表示中にスペースキーで一時停止できない問題があり、GOCPMの5926Hを 3FH⇒07H に変更することで一時停止できるようになります。
    GameOnCpm80_20231101_004a.zip


★追記 2023/11/02
 CP/M-80 用 GAME インタープリタ&コンパイラの GAMEC.COM にソースファイルのロード(¥<FileName)/セーブ(¥>FileName)機能を実装しました。
 ポケコン(PC-G850V)のCP/Mでもソースのロード/セーブがメチャ楽になりました^^
 「3チップ構成Pic24CPMマイコン(その7)GAMEコンパイラ」の記事からダウンロードできます。


★追記 2023/11/05
 スクリーンエディタ使用時にカーソル位置の文字が見えなかった問題に対処した GOCPM 評価版です。

★追記 2023/11/06
 キー入力せずに放置すると10分程度でスペースコードが入力されてしまう問題に対処
 原因は ROM 内キー入力処理(0BCFDH)でリセット直後に単独で実行し同問題が再現
 キー入力は 0BE53H を使用するように変更し、カーソルブリンク機能も追加

★追記 2023/11/12
 BOOTH でダウンロードできる EborsyEEP_V103.zip では上記のアップデートを全て反映しています。



[TOP] [ 前へ ] 連載記事一覧 [ 次へ ]

nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー