ポケコン(G850)用拡張ボード(EborsyEEP)でCP/M(その10)エスケープシーケンス対応 [ポケコン]
今回開発した PC-G850V(以降ポケコンと記す)で CP/M を動かすことが出来る増設メモリボード(EborsyEEP)をBOOTHで配布した際の反応等からフルキーを実装した手のひらサイズの Z80 コンピュータであるポケコンの魅力を改めて痛感しました。
しかし、現状のままでは CP/M は動くものの結局はパソコンに接続しないと使い辛い状況であると言わざるを得ません。
ポケコン単体では使い辛いと感じる主要な原因の一つとして「手軽に使えるエディタが無い」ということがあると思います。OS を CUI ベースで使うとなると最低限、スクリーンエディタが必要ですよね。
そこで次の改善を行うことにしました。
上記の対応でポケコン単体での CP/M の使い勝手がかなり改善されたのではないかと思います。実際に実装した機能について以下に簡単にまとめます。
参考として Turbo Pascal 3.0 の TINST でのスクリーン設定例を貼っておきます。一度設定した項目は対応無しに戻せないようなので、最初に「None of above」を選択して必要な項目のみ設定しました。下記は一度設定後に設定内容確認のために設定画面を開いた際の画面です。Highlight command は LCD 表示で見易いように逆に設定しています。
上記の説明に対応した評価版の GOCPM.HEX 及び SKE.COM を下記のリンクからダウンロードできます。
Twitter(X)に投稿した動画付きメッセージを貼っておきます。
展開先のアドレスはディフォルトでは GAME言語のソース格納領域のディフォルト値である 0x8e00 に展開します。/Aオプションで展開先のメモリアドレスを指定できます。
ディフォルトのアドレスに展開した場合、GAMEインタープリタがコールドスタートした時点でソースの先頭が 0xff に書き換えられるので下に示す操作例のようにおまじないが必要です。
展開先アドレスを指定した場合は次のような操作になります。
下記からダウンロードできます。
指定したファイル名に拡張子が無い場合、.GAM に自動設定するようにしました。
また、同類ソフトのセーブコマンドである gsave も作成しました。GAME インタープリタを終了(>=0 実行)した後に gsave FileName を実行することでメモリ上の GAME ソースをファイルにセーブできます。
下記から gload と gsave をダウンロードできます。
下記からダウンロードできます。
[TOP] [ 前へ ] 連載記事一覧 [ 次へ ]
しかし、現状のままでは CP/M は動くものの結局はパソコンに接続しないと使い辛い状況であると言わざるを得ません。
ポケコン単体では使い辛いと感じる主要な原因の一つとして「手軽に使えるエディタが無い」ということがあると思います。OS を CUI ベースで使うとなると最低限、スクリーンエディタが必要ですよね。
そこで次の改善を行うことにしました。
- エスケープシーケンス対応
現状の仮想スクリーン(80x25)ではスクリーンエディタを動かせないのでエスケープシーケンスに対応することにします。「ポケコン(G850)用拡張ボード(EborsyEEP)でCP/M(その3)CP/M起動」の記事でも少し書きましたが、現状の仮想スクリーンの機能はスクリーンエディタの仮想的なスクリーンと競合してしまい、相性が 悪いのでエディタの方を LCD 画面サイズに対応するようにしました。
- ポケコン用スクリーンエディタの準備
今回実装したエスケープシーケンスを使えば、Turbo Pascal の柔軟にカスタマイズできるエディタも使えるのですが、タブ表示に対応していなかったり、エディタ以外の機能は使わないようなユースケースも想定し、自作のエディタである SKED もポケコン対応することにしました。
- コントロールコードの入力対応
スクリーンエディタを使うためにはキーボードからコントロールコードを入力できることが必要です。
上記の対応でポケコン単体での CP/M の使い勝手がかなり改善されたのではないかと思います。実際に実装した機能について以下に簡単にまとめます。
- エスケープシーケンス機能
下記の最小限の機能を実装しました。
No. function character code memo 1 move cursor Esc[(y+1);(x+1)H move cursor to (x,y) position 2 clear screen Esc[2J cursor doesn't move to home 3 erase line Esc[0J erase line from cursor to end of line 4 delete line Esc[K delete cursor line 5 set reverse Esc[7m set character attribute to reverse 6 reset reverse Esc[0m set character attribute to normal 7 scroll up Esc[S scroll up all lines on screen 8 scroll down Esc[T scroll down all lines on screen
尚、現状ではカーソル位置の文字がカーソルで上書きされて表示されない状態ですがプライオリティを下げて対応予定です。
★追記 2023/11/05
対処した GOCPM の評価版を公開しました。
- スクリーンエディタ
CP/M に対応した自作スクリーンエディタである sked をポケコンの LCD 画面に対応しました。名前も入力し易いように ske に短縮します。
SHIFT J でヘルプが表示されます(LCD 画面範囲より大きいサイズなのでカーソルキーを操作して見てください)。
参考として TeraTerm での sked のヘルプ表示画面が下図になります。
sked for CP/M-80 の操作コマンド
- コントロールコード入力機能
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)に投稿した動画付きメッセージを貼っておきます。
ポケコン(PC-G850V)でCP/Mを動かせる増設メモリボードでLCD表示をエスケープシーケンスに対応しました
— skyriver (@wcinp) October 27, 2023
自作エディタもLCD上で動作します(skedをskeと名称短縮)
柔軟に設定可能なTurboPascalのエディタも使えます
評価版を下記urlからダウンロード可能ですhttps://t.co/TE6UdWwntD#EborsyEEP pic.twitter.com/nkx1WGmYg3
★追記 2023/10/28
パソコンを端末にして使っている時は GAME 言語のソースをコピペできましたが、ポケコンを単独で使用する時はソースをコピペできなくなるので困ってしまいます(GAME 言語の使用頻度は結構多めです^^)
そこで GAME 言語のソースファイルをメモリ上に展開するツールを作ってみました。ソース修正時はエディタが使えるので GAME 言語のエディタよりも便利です。
パソコンを端末にして使っている時は 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 コマンドはロード時間がアッと言うまでパソコンを端末にしている時でさえ使いたくなりますね(コピペする場合はウェイト時間の設定変更等、少々面倒だった)
上記の GLOAD コマンドはロード時間がアッと言うまでパソコンを端末にしている時でさえ使いたくなりますね(コピペする場合はウェイト時間の設定変更等、少々面倒だった)
指定したファイル名に拡張子が無い場合、.GAM に自動設定するようにしました。
また、同類ソフトのセーブコマンドである gsave も作成しました。GAME インタープリタを終了(>=0 実行)した後に gsave FileName を実行することでメモリ上の GAME ソースをファイルにセーブできます。
下記から gload と gsave をダウンロードできます。
★追記 2023/10/30
GLOAD 実行後のおまじないが面倒なので GAMEC を起動する際に何かしらのアーギュメントを付けた場合、ホットスタートで起動するように GAMEC.COM を変更しました。
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コンパイラ」の記事からダウンロードできます。
CP/M-80 用 GAME インタープリタ&コンパイラの GAMEC.COM にソースファイルのロード(¥<FileName)/セーブ(¥>FileName)機能を実装しました。
ポケコン(PC-G850V)のCP/Mでもソースのロード/セーブがメチャ楽になりました^^
「3チップ構成Pic24CPMマイコン(その7)GAMEコンパイラ」の記事からダウンロードできます。
★追記 2023/11/06
キー入力せずに放置すると10分程度でスペースコードが入力されてしまう問題に対処
原因は ROM 内キー入力処理(0BCFDH)でリセット直後に単独で実行し同問題が再現
キー入力は 0BE53H を使用するように変更し、カーソルブリンク機能も追加
キー入力せずに放置すると10分程度でスペースコードが入力されてしまう問題に対処
原因は ROM 内キー入力処理(0BCFDH)でリセット直後に単独で実行し同問題が再現
キー入力は 0BE53H を使用するように変更し、カーソルブリンク機能も追加
★追記 2023/11/12
BOOTH でダウンロードできる EborsyEEP_V103.zip では上記のアップデートを全て反映しています。
BOOTH でダウンロードできる EborsyEEP_V103.zip では上記のアップデートを全て反映しています。
[TOP] [ 前へ ] 連載記事一覧 [ 次へ ]