SSブログ
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画面


★追記 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] [ 前へ ] 連載記事 [ 次へ ]

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