レトロマイコンZ80ボードの構想(その14)CP/MでのWM動作実験 [Z80]
前回の記事「レトロマイコンZ80ボードの構想(その13)」で書いたように CP/M が起動できた(まだまだ細かい調整は必要ですが)ので懐かしいソフトを動かしたりして遊んでいましたが、エディタが無いと何かと不便なのでWordMasterを動かしてみることにしました。
「CP/M Text Editors and Word Processors」からダウンロードできるので簡単に動かせるだろうと思っていましたが意外と難関でした・・・^^;
ネット上ではエミュレータで動かしている例はありましたが、リアルのCP/MでTeraTerm等を接続してWordMasterを動かしている例は見つからなかった(みんなどうしてるんだろう?)
ダウンロードしたWordMasterファイルには画面制御のエスケープシーケンスをカスタマイズできるようにアセンブラのサンプルソースが付いています。
昔、画面表示部分を作ったこともあったので思い出しましたが、当時のエスケープシーケンスは移動先のカーソル位置を表現するのにスペースコード(20H)に位置情報を足したコードで表現していて、カスタマイズ用のサンプルソースも同様でした。
しかし TeraTerm のVT100モード等ではANSIのエスケープコードが採用されていてカーソル位置情報を10進文字で表現する必要があります。
(ANSIエスケープコードは碧色工房さんのウェブサイト等を参照させていただきました)
WordMasterに添付されているカスタマイズ用のソースはWordMasterの画面制御部を置き換えるパッチ形式になっていて使用できる領域が小さくて通常の10進変換はとても入れ込めそうにありません・・・
小さな領域にマシン語コードを埋め込む・・これぞマイコンの醍醐味なのでチャレンジしてみました ^^
最大の問題はバイナリから十進数への変換です。当然除算処理が必要になってきますが、今回の用途に限って言えば10進2桁までの数字を対象としていいのでこの条件で簡略化した除算処理が下のリストです。
A-regで渡されたデータを処理し、E-reg に10の桁、A-reg に1の桁が入ります(やっていることは筆算の計算と同様)
エミュレータではなく、(ワザワザ)実機CP/M上のZSIDで動作確認しています ^^
Binary to Decimal Transfer(Z80 Assembler)
WordMaster内の1文字出力処理である OUTCHR のアドレスを確認したら相対ジャンプ到達範囲内だったので関数末尾の OUTCHRコールは相対ジャンプ化しました。
ESC+'[' の出力をサブルーチン化する等して細切れの使用可能領域に断片的にコードを埋め込み、とうとう完成と思ったところ、ESC+'[2J'での画面クリアではカーソルがホームに戻らないので画面が乱れることが判明・・・orz
もうこれ以上の処理は入らないと諦めかけたましたが、メモリダンプを見たところ、パッチ領域の直前がメッセージのアスキーデータ領域であることに気づき、メッセージの最後の部分の領域を若干拝借してコードを埋め込みました。 ^^;;
hexファイルのパッチ適用操作は下記の操作ログを参照してください。(シリアルNoをつぶして悪さしているみたいだけどそうじゃないよ)
WordMasterへのパッチ適用作業工程
WordMasterのカーソルが最上位行での上スクロール時の再描画ぶりを久々に見れて懐かしい・・^^
無事WordMasterが動作したことを記念してキャプチャを貼っておきます。
また、カスタマイズしたパッチソース(macro-80用)とヘキサファイルは下記からダウンロードしてください。
スクリーンの行数を24から32に変更しています(32行の画面じゃないと上スクロール時に画面が乱れます)
※2018/03/18 コメントに書いたように単純ループ式に変更しました。
WordMaster ANSI用パッチ
★追記 2020/12/04
24行モードに変更するパッチ適用方法(下記)を追記しました。
[TOP] [ 前へ ] 連載記事 [ 次へ ]
「CP/M Text Editors and Word Processors」からダウンロードできるので簡単に動かせるだろうと思っていましたが意外と難関でした・・・^^;
ネット上ではエミュレータで動かしている例はありましたが、リアルのCP/MでTeraTerm等を接続してWordMasterを動かしている例は見つからなかった(みんなどうしてるんだろう?)
ダウンロードしたWordMasterファイルには画面制御のエスケープシーケンスをカスタマイズできるようにアセンブラのサンプルソースが付いています。
昔、画面表示部分を作ったこともあったので思い出しましたが、当時のエスケープシーケンスは移動先のカーソル位置を表現するのにスペースコード(20H)に位置情報を足したコードで表現していて、カスタマイズ用のサンプルソースも同様でした。
しかし TeraTerm のVT100モード等ではANSIのエスケープコードが採用されていてカーソル位置情報を10進文字で表現する必要があります。
(ANSIエスケープコードは碧色工房さんのウェブサイト等を参照させていただきました)
WordMasterに添付されているカスタマイズ用のソースはWordMasterの画面制御部を置き換えるパッチ形式になっていて使用できる領域が小さくて通常の10進変換はとても入れ込めそうにありません・・・
小さな領域にマシン語コードを埋め込む・・これぞマイコンの醍醐味なのでチャレンジしてみました ^^
最大の問題はバイナリから十進数への変換です。当然除算処理が必要になってきますが、今回の用途に限って言えば10進2桁までの数字を対象としていいのでこの条件で簡略化した除算処理が下のリストです。
A-regで渡されたデータを処理し、E-reg に10の桁、A-reg に1の桁が入ります(やっていることは筆算の計算と同様)
エミュレータではなく、(ワザワザ)実機CP/M上のZSIDで動作確認しています ^^
|
WordMaster内の1文字出力処理である OUTCHR のアドレスを確認したら相対ジャンプ到達範囲内だったので関数末尾の OUTCHRコールは相対ジャンプ化しました。
ESC+'[' の出力をサブルーチン化する等して細切れの使用可能領域に断片的にコードを埋め込み、とうとう完成と思ったところ、ESC+'[2J'での画面クリアではカーソルがホームに戻らないので画面が乱れることが判明・・・orz
もうこれ以上の処理は入らないと諦めかけたましたが、メモリダンプを見たところ、パッチ領域の直前がメッセージのアスキーデータ領域であることに気づき、メッセージの最後の部分の領域を若干拝借してコードを埋め込みました。 ^^;;
hexファイルのパッチ適用操作は下記の操作ログを参照してください。(シリアルNoをつぶして悪さしているみたいだけどそうじゃないよ)
|
WordMasterのカーソルが最上位行での上スクロール時の再描画ぶりを久々に見れて懐かしい・・^^
無事WordMasterが動作したことを記念してキャプチャを貼っておきます。
また、カスタマイズしたパッチソース(macro-80用)とヘキサファイルは下記からダウンロードしてください。
スクリーンの行数を24から32に変更しています(32行の画面じゃないと上スクロール時に画面が乱れます)
※2018/03/18 コメントに書いたように単純ループ式に変更しました。
WordMaster画面 |
|
★追記 2020/12/04
24行モードに変更するパッチ適用方法(下記)を追記しました。
24行モードに変更するパッチ適用方法 |
---|
b>a:ddt wmm.com DDT VERS 2.2 NEXT PC 2700 0100 -s1b9 01B9 20 18 01BA 50 . -g0 b>save 38 wmm.com |
[TOP] [ 前へ ] 連載記事 [ 次へ ]