復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第419回]
●/BATで遠隔デバッグ!
ZB3DOS(CP/M互換DOS)の使用結果などについての報告を毎日のようにメールで送って下さる長野県のN様からまた不具合のメールをいただきました。
その前にご指摘いただいたバグを修正したZB3DOSプログラムをお送りしたところ、トランジェントコマンドを受け付けなくなってしまった、とのご指摘です。
/CPMでエントリ後すぐにたとえば
A>WS[Enter]
と入力すると、
WS?
と表示されてしまいます。
WSに限らず、M80でもF80でも、あるいはアセンブラで作成したユーザープログラムでも同じことなのだそうです。
ところが一度DIRコマンドを使ってドライブの中身を表示させてから、
A>WS[Enter]
と入力すると、今度は今までと同じようにWordStarが起動するようになります。
そんなばかなことは…?
と思ってその通りの操作をして試してみましたが、そんなおかしな症状は出ません。
ごく普通にプログラムが実行されます。
こういうトラブルが一番厄介です。
お客様の手元ではエラーが発生するのに、そっくり同じことをこちらでやってみても全くエラーにならず普通に実行できてしまいます。
ということになりますと、なんとも手の打ちようがありません。
とにかくエラーが発生している場合はブレークポイントを設定してブレークさせながらレジスタやメモリの値を確認することで、バグをみつけることができます。
というのが私の定番のデバッグ方法です。
しかしお客様のところではエラーになるのに、私のところのパソコンでは正常に実行されてしまう、というのではデバッグすることができません。
カレントドライブに登録されているはずのファイルを実行しようとして、そのファイル名を入力しても、?が表示されてしまう、ということはおそらくキー入力したファイル名とディスクディレクトリに登録されているファイル名との比較に失敗している可能性が高いということになります。
しかも一度DIRコマンドを実行すると、その次からはエラーにならず普通にファイル名が認識される、ということになりますと、多分ある特定のメモリの値がDIRを実行することで正しくセットされる、ということだろうと思われます(DIRを実行する前までは必要な値が設定されていないことが考えられます)。
それならお客様にブレーク処理をしてもらって、その結果のレポートをもらえれば、何かがわかるかもしれません。
しかし私はずっと昔からその方法でデバッグしてきましたから、難なく普通に操作できますが、おそらくほとんどの方はそういうデバッグはしたことがない、と思われますから、こうやって、ああやって、とやり方を説明しましても、なかなか要領を得ないのでは、と思います。
むむ。
なにかいい方法が…。
で、思いついたのがバッチ処理でした。
デバッグの手順を記述したバッチファイルを作成して、それをお客様に送って/BATコマンドを実行してもらう、というようにすれば、お客様のところでもデバッグができてしまうではありませんか。
もちろんそのためには、プログラムのどの辺にブレークポイントを仕掛ければよいか、という目星がつかなければ、その芸当はできません。
しかし今回の場合にはおおよそどの辺りかという見当はついています。
それでN様にそのようにしていただくつもりで、念のためにお送りするバッチファイルを実際に使ってみようとしましたところ、前回書きました通り、/BATがまさかのハングアップをしてしまったのでした。
その問題はこれも前回書きましたように、ほぼ1日を費やした結果、やっと解決できましたので、/BATが動くように修正したZB3DOSプログラムとともにバッチファイルをN様にお送りして、テストをしていただくように依頼いたしました。
こちらがN様にお送りしたバッチファイルです。
p '*** /CPM TEST2 batch program exec PI.COM /CPM ZB3 BP D159 /CPM,D PI BP D1D8 RT@ DM E93C,E95F BP D1DF RT@ /EXIT |
logfile nd80zlog\06142151.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** >/bat batt2pi.txt '*** /CPM TEST2 batch program exec PI.COM >/CPM loading zbds4h.bin ...19c1(6593)bytes loaded,from CC00 to E5C0 drive D ................................ drive C ................................ drive B ................................ drive A ................................ A>ZB3 end of ZBDOS >BP D159 >/CPM,D drive D ................................ drive C ................................ drive B ................................ drive A ................................ A>PI A F B C D E H L A'F' B'C' D'E' H'L' PC SP IX IY I SZ H PNC 003A 0200 D49F E100 0000 0000 0000 0000 D159 F800 0000 0000 FF 00111010 >BP D1D8 >RT@ A F B C D E H L A'F' B'C' D'E' H'L' PC SP IX IY I SZ H PNC 0044 0007 E93F E93C 0000 0000 0000 0000 D1D8 F7FC 0000 0000 FF 01000100 >DM E93C,E95F E93C 00 50 49 20 20 20 20 20-20 43 4F 4D 01 00 00 0D .PI COM.... E94C 61 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 a............... E95C 0D 00 00 00 00 00 00 E8-02 00 00 E1 02 00 00 E1 ................ >BP D1DF >RT@ A F B C D E H L A'F' B'C' D'E' H'L' PC SP IX IY I SZ H PNC 0050 0004 E93C E88A 0000 0000 0000 0000 D1DF F7FC 0000 0000 FF 01010000 >/EXIT 0000 00C3 - リモート接続を終了しました logfile closed at Fri Jun 14 21:52:12 2013 |
; ;*** TRANSIENT COMMAND *** ; D153 3A0400 USRCMD:LD A,(CURDRV) D156 3288E8 LD (CDRV_DIRWK),A D159 E5 PUSH HL D15A 215C00 LD HL,FCB D15D 3600 LD (HL),00 D15F 23 INC HL D160 3620 LD (HL),20 D162 216C00 LD HL,FCB2 D165 3600 LD (HL),00 D167 23 INC HL D168 3620 LD (HL),20 D16A 213CE9 LD HL,SYSFCB D16D 3600 LD (HL),00 D16F 23 INC HL D170 1608 LD D,08 D172 3620 USRCMD2:LD (HL),20 D174 23 INC HL D175 15 DEC D D176 C272D1 JP NZ,USRCMD2 D179 3643 LD (HL),43;'C' D17B 23 INC HL D17C 364F LD (HL),4F;'O' D17E 23 INC HL D17F 364D LD (HL),4D;'M' D181 E1 POP HL D182 2235CC LD (INPOINT),HL;for error message D185 113CE9 LD DE,SYSFCB D188 78 LD A,B D189 322FE9 LD (INBYTE),A D18C FE01 CP 01 D18E CAA1D1 JP Z,USRCMD3 D191 23 INC HL D192 7E LD A,(HL) D193 2B DEC HL D194 FE3A CP 3A;':' D196 C2A1D1 JP NZ,USRCMD3 D199 7E LD A,(HL) D19A D640 SUB 40;'A' to 01 D19C 12 LD (DE),A D19D 23 INC HL D19E 23 INC HL D19F 05 DEC B D1A0 05 DEC B D1A1 13 USRCMD3:INC DE D1A2 0E08 LD C,08 D1A4 7E USRCMD4:LD A,(HL) D1A5 FE20 CP 20 D1A7 CABBD1 JP Z,USRCMD6 D1AA 12 LD (DE),A D1AB 23 INC HL D1AC 13 INC DE D1AD 05 DEC B D1AE CABBD1 JP Z,USRCMD6;no PARAM D1B1 0D DEC C D1B2 C2A4D1 JP NZ,USRCMD4 D1B5 7E LD A,(HL) D1B6 FE20 CP 20 D1B8 C259D2 JP NZ,USRCMDERR12 ; D1BB E5 USRCMD6:PUSH HL D1BC C5 PUSH BC D1BD 213CE9 LD HL,SYSFCB D1C0 7E LD A,(HL) D1C1 B7 OR A D1C2 CAD8D1 JP Z,USRCMD70 D1C5 320400 LD (CURDRV),A D1C8 3D DEC A D1C9 5F LD E,A D1CA CD33D4 CALL DRVNOSET D1CD CAD8D1 JP Z,USRCMD70 D1D0 CD2DD3 CALL BADDRVDP;err D1D3 C1 POP BC D1D4 E1 POP HL D1D5 C347D2 JP USRCMD73;end ; D1D8 113CE9 USRCMD70:LD DE,SYSFCB D1DB CD36D4 CALL OPEN D1DE 3C INC A D1DF CA57D2 JP Z,USRCMDERR |