So-net無料ブログ作成
English Version

レトロマイコン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)
CnvCal: LD E,0 ;2(2) LD BC,05A0H ;3(5) B:loop counter 5*256+10*(1<<4) CnvC1: SLA E ;2(7) CP C ;1(8) JR C,CnvC2 ;2(10) SUB C ;1(11) INC E ;1(12) CnvC2: SRL C ;2(14) DJNZ CnvC1 ;2(16)


 WordMaster内の1文字出力処理である OUTCHR のアドレスを確認したら相対ジャンプ到達範囲内だったので関数末尾の OUTCHRコールは相対ジャンプ化しました。

 ESC+'[' の出力をサブルーチン化する等して細切れの使用可能領域に断片的にコードを埋め込み、とうとう完成と思ったところ、ESC+'[2J'での画面クリアではカーソルがホームに戻らないので画面が乱れることが判明・・・orz

 もうこれ以上の処理は入らないと諦めかけたましたが、メモリダンプを見たところ、パッチ領域の直前がメッセージのアスキーデータ領域であることに気づき、メッセージの最後の部分の領域を若干拝借してコードを埋め込みました。 ^^;;

 hexファイルのパッチ適用操作は下記の操作ログを参照してください。(シリアルNoをつぶして悪さしているみたいだけどそうじゃないよ)

WordMasterへのパッチ適用作業工程
b>dir B: ANSI HEX : ANSI MAC : BEE ASM : H89 ASM B: HAZ ASM : LSI ASM : SOL ASM : WM COM B: WM HLP : WMH89 COM : WM-SOROC COM b>a:ddt wm.com DDT VERS 2.2 NEXT PC 2700 0100 -d 0100 C3 69 02 C3 60 02 20 43 4F 50 59 52 49 47 48 54 .i..`. COPYRIGHT 0110 20 28 43 29 20 31 39 37 38 20 20 4D 49 43 52 4F (C) 1978 MICRO 0120 50 52 4F 20 49 4E 54 45 52 4E 41 54 49 4F 4E 41 PRO INTERNATIONA 0130 4C 20 43 4F 52 50 4F 52 41 54 49 4F 4E 20 20 20 L CORPORATION 0140 20 20 20 0D 0A 00 0D 4D 69 63 72 6F 50 72 6F 20 ....MicroPro 0150 57 4F 52 44 4D 41 53 54 45 52 20 72 65 6C 65 61 WORDMASTER relea 0160 73 65 20 31 2E 30 37 41 20 73 65 72 69 61 6C 20 se 1.07A serial 0170 23 20 57 4D 36 33 34 34 56 35 20 20 20 0D 0A 00 # WM6344V5 ... 0180 00 00 00 00 00 00 3E 1B CD EF 01 3E 2A CD EF 01 ......>....>*... 0190 3E 1A CD EF 01 C9 3E 1B CD EF 01 3E 3D CD EF 01 >.....>....>=... 01A0 3E 20 85 CD EF 01 3E 20 84 CD EF 01 C9 00 00 00 > ....> ........ 01B0 00 00 00 00 00 00 00 B8 29 18 50 00 00 00 00 00 ........).P..... -iansi.hex -r NEXT PC 2700 0000 -d100 0100 C3 69 02 C3 60 02 20 43 4F 50 59 52 49 47 48 54 .i..`. COPYRIGHT 0110 20 28 43 29 20 31 39 37 38 20 20 4D 49 43 52 4F (C) 1978 MICRO 0120 50 52 4F 20 49 4E 54 45 52 4E 41 54 49 4F 4E 41 PRO INTERNATIONA 0130 4C 20 43 4F 52 50 4F 52 41 54 49 4F 4E 20 20 20 L CORPORATION 0140 20 20 20 0D 0A 00 0D 4D 69 63 72 6F 50 72 6F 20 ....MicroPro 0150 57 4F 52 44 4D 41 53 54 45 52 20 72 65 6C 65 61 WORDMASTER relea 0160 73 65 20 31 2E 30 37 41 20 73 65 72 69 61 6C 20 se 1.07A serial 0170 23 20 57 4D 36 0D 0A 00 CD EF 01 21 00 00 18 16 # WM6......!.... 0180 CD 8C 01 3E 32 CD EF 01 3E 4A 18 EC 3E 1B CD EF ...>2...>J..>... 0190 01 3E 5B 18 5A 00 CD 8C 01 7D CD AA 01 3E 3B CD .>[.Z....}...>;. 01A0 EF 01 7C CD AA 01 3E 48 18 45 3C CD C4 01 47 83 ..|...>H.E<...G. 01B0 CD EF 01 7A 80 18 38 B8 29 20 50 00 00 FF 00 00 ...z..8.) P..... -g0 b>save 38 wmm.com


 WordMasterのカーソルが最上位行での上スクロール時の再描画ぶりを久々に見れて懐かしい・・^^
 無事WordMasterが動作したことを記念してキャプチャを貼っておきます。
 また、カスタマイズしたパッチソース(macro-80用)とヘキサファイルは下記からダウンロードしてください。
 スクリーンの行数を24から32に変更しています(32行の画面じゃないと上スクロール時に画面が乱れます)

※2018/03/18 コメントに書いたように単純ループ式に変更しました。
WordMaster ANSI用パッチ


WordMaster画面



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

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

nice! 0

コメント 10

skyriver

 記事をアップ後の散歩中に気が付いたけど・・
 10進変換は10を何回引けるかの単純ループの方が短くなりそうですね
by skyriver (2018-03-17 19:43) 

名無し

> 10進変換は10を何回引けるかの単純ループの方が短くなりそうですね

こんな感じですかね。

CnvCal:
LD DE, 0AFFH
CnvC1:
INC E
SUB D
JR NC, CnvC1
ADD D
by 名無し (2018-03-17 22:29) 

名無し

訂正:

ADD D

ADD A,D
by 名無し (2018-03-17 22:31) 

skyriver

そんな感じだと思います。

by skyriver (2018-03-18 01:59) 

skyriver

WordMasterは今となっては実用面では見劣りしますねぇ(世界で最初のスクリーンエディタは viかwmのどちらからしい)
 wsがいいのだけれどwinstしてもうまく動かない・・・

 下記のURLで説明されている ZDE はインストール&コンフィグも簡単だし、wsライクなので使い易いよ ^^

http://techtinkering.com/2008/10/21/installing-zde-1-6-a-programmers-editor-for-cpm/

by skyriver (2018-03-18 16:59) 

skyriver


 コンソール接続のシリアルでCP/MとWin間でバイナリファイルの送受信ができる xmodem というのを見つけた。ファイルのやり取りがSDカード経由じゃなくなりメチャ便利^^
 ソースの先頭にある程度の説明が書いてあります。
CP/M側で受信する場合は
xmodem FileName /R /X0
で起動してTeraTermでxmodem送信すればいい。
固定的なオプションは XMODEM.CFG に書いておける。
/X0がないとRDR:から読もうとするみたい( ソース見て分かった)

https://groups.google.com/forum/#!topic/comp.os.cpm/1EdJzNh1ekM
by skyriver (2018-03-18 22:31) 

skyriver

 XMODEMは引数無しの起動でオプションスイッチの説明が表示されました。
 毎回 /X0 指定しなくていいようにdefaultをcon:に変更して使ってます。
 パソコン通信時代にファイル転送用によく使われたXMODEMプロトコルはブロック長が基本128bytesでファイル長の情報を渡さず、最後のブロックの余りをEOF(1AH)でパディングする等、まさにCP/Mのファイルシステムを意識した(ような)プロトコルですね。

by skyriver (2018-03-19 21:37) 

skyriver

 上のコメントで書いたアセンブラソースのXMODEMは私の環境では大きめ(20KB程度以上)のアップロードが出来なかったので、CP/M-80用のXMODEMアプリをHITECH-Cでスクラッチで作ってみました。

3チップ構成Pic24CPMマイコン(その5)XMODEMでファイル送受信
https://piclabo.blog.so-net.ne.jp/2018-06-17

by skyriver (2018-07-31 21:21) 

skyriver

 CP/M-68K用のxmodemアプリを作成し、下記で記事で公開しました。
https://piclabo.blog.so-net.ne.jp/CPM-68K_XMODEM

 また、CP/M-68K用の使い易いエディタが見つからなかったのでコマンド体系を WordStar ライクにしたスクリーンエディタsked(Simple Kitten EDitor)を開発し、下記の記事で公開しました。
https://piclabo.blog.so-net.ne.jp/CPM68K_SKED

by skyriver (2018-12-23 15:43) 

skyriver

CP/M-68K用に開発したWordStarコマンドライクなスクリーンエディタ(sked)をHI-TECH C環境を使ってCP/M-80に移植し、公開しました。
https://piclabo.blog.so-net.ne.jp/sked80

by skyriver (2019-03-18 00:47) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。