2013.7.2
前へ
次へ
ホームページトップへ戻る

復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります

[第432回]


●(14)PL/IのLINKでエラー

やっとCOBOLについての不具合は解決できたのですが、H様からはまたまた「PL/IのLINKでエラーになります」というメールが届きました。

実はそのことにつきましては、もう少し前にも「PL/IでファイルOPENエラーになります」というメールをいただいていました。
しかし、私はPL/Iはさわったことがありませんから、つまりはPL/Iについては知識ゼロですので、「今はそれを解決するには時間が足りません。もう少しおちついてから取り組むことにします」とご返事いたしました。

そうしましたところ、今回のメールです。
H様は前回のCOBOLと同様に独自にデバッグを進めて、プログラムのどこでエラーが発生しているのかを突き止められたようです。
いやあ。すごいです。
感服いたしました。

メールにはCOBOLのときと同じように、その状況を示すログが添付してありました。
以下はそのログの一部です。

A>C:
C>PLI DFACT


PL/I-80 V1.3  COMPILATION OF: DFACT


   NO ERROR(S) IN PASS 1

   NO ERROR(S) IN PASS 2


CODE SIZE = 00A5
DATA AREA = 0028
FREE SYMS = 2B6B
END  COMPILATION

C>ZB3
end of ZBDOS
>BP CC03
>/CPM,D
drive D ................................
drive C ................................
drive B ................................
drive A ................................

C>LINK DFACT

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 0004 0004 0000 0000 0000 0000 0000 CC03 F7FE 0000 0000 FF 01000100
>BP@0DA4
>RT@
LINK 1.3 

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 FFFF 394D FF68 0000 0000 0000 0000 0DA4 38A0 0000 0000 FF 01000100
>BP@0DA7
>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 FFFF 394D 0068 0000 0000 0000 0000 0DA7 38A0 0000 0000 FF 01000100
>BP@0DAA
>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
0144 FFFF 394D 0068 0000 0000 0000 0000 0DAA 38A0 0000 0000 FF 01000100
>BP@0DAB
>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
0102 FFFF 394D 0068 0000 0000 0000 0000 0DAB 38A0 0000 0000 FF 00000010
>BP@0DB7
>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
0102 005C 394D 0068 0000 0000 0000 0000 0DB7 38A0 0000 0000 FF 00000010
>DM@005C,006F
005C  00 50 4C 49 4C 49 42 20-20 49 52 4C 01 00 00 80  .PLILIB  IRL....
006C  3E 00 3F 00 40 00 41 00-42 00 43 00 44 00 45 00  >.?.@.A.B.C.D.E.
>BP@35F3
>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
0102 005C 394D 0068 0000 0000 0000 0000 35F3 389E 0000 0000 FF 00000010
>BP@35F7
>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
0102 000F 005C 0068 0000 0000 0000 0000 35F7 389E 0000 0000 FF 00000010
>DM@0050,00FF
0050  0C A8 AE EA 08 E8 77 75-02 85 AA 2A 00 50 4C 49  .ィョ...wu..ェ*.PLI
0060  4C 49 42 20 20 49 52 4C-01 00 00 80 3E 00 3F 00  LIB  IRL....>.?.
0070  40 00 41 00 42 00 43 00-44 00 45 00 18 35 F7 00  @.A.B.C.D.E..5..
0080  00 50 4C 49 4C 49 42 20-20 49 52 4C 00 00 00 80  .PLILIB  IRL....
0090  3E 00 3F 00 40 00 41 00-42 00 43 00 44 00 45 00  >.?.@.A.B.C.D.E.
00A0  00 50 4C 49 4C 49 42 20-20 49 52 4C 01 00 00 80  .PLILIB  IRL....
00B0  46 00 47 00 48 00 49 00-4A 00 4B 00 4C 00 4D 00  F.G.H.I.J.K.L.M.
00C0  00 50 4C 49 4C 49 42 20-20 49 52 4C 02 00 00 5C  .PLILIB  IRL...\
00D0  4E 00 4F 00 50 00 51 00-52 00 53 00 00 00 00 00  N.O.P.Q.R.S.....
00E0  00 52 4D 41 43 20 20 20-20 43 4F 4D 00 00 00 6B  .RMAC    COM...k
00F0  54 00 55 00 56 00 57 00-58 00 59 00 5A 00 00 00  T.U.V.W.X.Y.Z...
>BP@0DBA
>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
FF6A 000F 005C E88A 0000 0000 0000 0000 0DBA 38A0 0000 0000 FF 01101010
>DM@0050,00FF
0050  0C A8 AE EA 08 E8 77 75-02 85 AA 2A 00 50 4C 49  .ィョ...wu..ェ*.PLI
0060  4C 49 42 20 20 49 52 4C-01 00 00 80 3E 00 3F 00  LIB  IRL....>.?.
0070  40 00 41 00 42 00 43 00-44 00 45 00 18 35 F7 00  @.A.B.C.D.E..5..
0080  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
0090  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
00A0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
00B0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
00C0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
00D0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
00E0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
00F0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
>BP@0DC2
>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
FF6A 3CF7 005C E88A 0000 0000 0000 0000 0DC2 38A0 0000 0000 FF 01101010
>DM@3CF7,3CFF
3CF7  49 4E 44 45 58 20 45 52-52 4F 52 24 4D 55 4C 54  INDEX ERROR$MULT
>BP@3640
>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
FF6A 3CF7 005C E88A 0000 0000 0000 0000 3640 389E 0000 0000 FF 01101010
>BP@02A6
>RT@
INDEX ERROR
C>ZB3

いきなりこのログを見ても何が何だかわかりませんから、少し補足いたします。

あ。
その前に。
PL/Iの入手先です。
PL/Iも[第431回]でご紹介しました DDT(Dinamic Debugging Tool)と同じ圧縮ファイルに含まれています。
こちらのサイト(http://www.retroarchive.org/cpm/os/os.htm)のDRIPAK.ZIPをダウンロードして解凍するとフォルダがいっぱい現れます。
そのなかのPLIにPL/I関係のファイルがあります。
PL/IのサンプルプログラムはPLISフォルダにあります。
CP/Mではサブフォルダは使えませんから、サンプルプログラムもPLIフォルダに移したうえでZドライブにコピーするとよいでしょう。

それでは、上のログの補足説明から。
最初にまず、サンプルプログラムのうちのDFACT.PLIをコンパイルしています。
PLI DFAFT
です。
コンパイルは正常に完了しています。

H様によりますと、その次のLINKでエラーが発生してしまうとのことで、このあとはブレークポイントを設定しながらのデバッグになっています。

LINK DFACT
の入力でデバッグを開始して、少しずつBPを設定しながら進んでいます。
どうやら問題はファイルOPENのようです。
あれ?
COBOLも問題はファイルOPENでしたね。
どうもファイルOPENにまだ何かが欠けているようです。

アドレス35F7H、0DBAHの間でファイルOPEN(ファンクション0Fコール)が行なわれているようです。FCBアドレスは005Cです(PC=35F7,0DBA、Cレジスタ=0F、DEレジスタ=005C)。
その結果A=FFですからファイルOPENエラーです。

DM@コマンドでFCBの内容も確認しています。
005C〜にはPLILIB IRLの文字があります。
PLILIB.IRLのOPENに失敗しているようです。
なんだか、ほんとにCOBOLのときとそっくりですね。
しかしこれはCOBOLでの問題をクリアしたあとのZB3DOS.EXEのはず…。

H様は、ここでエクステント(アドレス0068H)に01があるのがファイルOPENできない原因ではないか、と考えられたようです。
H様。
今回も正解、お見事です。

お考えの通り、ファイルOPENの場合のFCBではエクステントは00であるべきです。

なぜか?
そして、それなのにそこが01になっているという場合には、どうすればよいのか?

うーむ。しかし。
どーしてこうもイレギュラーなプログラムを書いてくれるんでしょうねえ。
たまりません。

というところで、時間がなくなってしまいました。
何がどうしてどうなるのかということにつきましては、次回に説明をいたします。

ワンボードマイコンでCP/Mを![第432回]
2013.7.2upload

前へ
次へ
ホームページトップへ戻る