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

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

[第437回]


●TURBO PASCAL

説明の流れの関係で、お話が前後してしまいます。
TURBO PASCALにつきましては、少し前から「まともに動きません」というメールを大分県のH様からいただいておりました。
そのメールには詳細なログファイルも添付されておりました。
そのログにしたがってこちらでも同じ操作をしてみましたところ、H様がご指摘されたのとは少し異なりましたが、やはり異常が発生しました。

こちらはTURBO PASCALの起動直後の画面です。



(Y/N)?にYを入力すると、暴走してブレークしてしまいました。



一体何が発生しているのか全くわかりません。
そもそも私はTURBO PASCALなど一度もさわったことがありませんし、何も知りません。
それでこれをクリアするなどというのは、これはもう無茶といいますか、至難の技でありましょう。
H様には、「今は時間がありません。時間ができたら調べてみます」とご返事して、そのままになっていました。
これは解決するのに時間がかかる、と判断して、ここまでの段階(つまりTURBO PASCALは未対策のまま)のZB3DOS(CP/M互換DOS)修正版を皆様にお送りしました。

そうしましたところ、H様からメールが届きました。
H様は4日間も、ZB3DOS(CP/M互換DOS)でTURBO PASCALが暴走する問題について原因を追究されていたそうです。
H様はWindows上で動くCP/Mシミュレータを使ってZB3DOSとの比較を行い、その結果、なんと原因まで特定されて、それでメールを送ってこられたのです。

こちらはそのときいただいたメールの一部です。

TURBO PASCAL が暴走する理由とZB3DOSとCPMの違いが解りましたので報告です。
三種類のテキストファイル(ログ)は、ZB3.txtがZB3DOS互換DOSで、
他の二つはエミュレーターのCPMです。
三種類とも同じように、ZSIDを利用して、実行しています。
丸の番号は三種類とも、同じ処理にふってあります。
@は、カレントドライブの取得です。
 これは、みな同じように稼動しました。
 前後のFCBなどのデータも変化はしていません。
Aは、OPENの前です。
Bは、OPEN後です。
ここに、ZB3DOSの課題?=暴走の理由がありました。
Aのメモリーダンプの00A0からの内容は、
TURBO PASCALが利用しているジャンプテーブルです。
BのOPEN後ZB3DOSではジャンプテーブルが消えています。
 他のCPMでは変化がありません。
このジャンプテーブルをTURBO PASCALがFile Open後に利用した時に暴走します。
添付のTp301.DISが逆アセンブラリストですが、
これの、01EB,0348,03D6,03E9などのCALL命令が該当します。
TURBO PASCALが利用しているのが、イレギラーかと言いますと、
他のCPMでは、正常に稼動しますから一概に言えないと思います。
TURBO PASCALは、プログラムの中でDMAのセットを多用していますから
0080のメモリーは使用していないのでしょうが、ファイルのオープン時?に、
0080からのメモリーを利用するかしないかが
ZB3DOSとCPMの間の違いのようです。

こちらがそのログです。
H様はTURBO PASCALの動作の解明のために、ZSIDを使われたとのことです。
いや。ほんとにすごいです。

D>zsid turbo.com
ZSID VERS 1.4
NEXT  PC  END
7980 0100 B1FF
#g,724b
---------------------------------------
TURBO Pascal system       Version 3.01A
                           CP/M-80, Z80

Copyright (C) 1983,84,85   BORLAND Inc.
---------------------------------------

Terminal: Teleray series 10



Include error messages (Y/N)? Y

*724B
#d0050,00ff
0050: 29 03 29 03 29 03 29 1C 25 03 29 00 00 54 55 52
      )  .  )  .  )  .  )  .  %  .  )  .  .  T  U  R  
0060: 42 4F 20 20 20 4D 53 47 00 00 00 00 00 00 00 00
      B  O           M  S  G  .  .  .  .  .  .  .  .  
0070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
0080: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
      .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
0090: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
      .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
00A0: C3 17 03 C3 21 03 C3 3A 03 C3 30 03 C3 35 03 C3
      .  .  .  .  !  .  .  :  .  .  0  .  .  5  .  .  
00B0: 2B 03 C3 3A 03 C3 21 03 C1 00 82 00 43 00 C4 00
      +  .  .  :  .  .  !  .  .  .  .  .  C  .  .  .  
00C0: C5 00 C1 00 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
      .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
00D0: 00 7E D7 7A 00 00 00 00 1A 1A 1A 1A 1A 00 1A 1A
      .  ~  .  z  .  .  .  .  .  .  .  .  .  .  .  .  
00E0: FF 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
      .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
00F0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 53 21
      .  .  .  .  .  .  .  .  .  .  .  .  .  .  S  !  
#t
 -Z-E- A=00 B=0019 D=2161 H=0080 S=B1F2 P=724B      @
 ----- A'00 B'0000 D'0000 H'0000 X=0000 Y=0000 CALL 0005
*0005
#g,724e

*724E
#d0050,00ff
0050: 29 03 29 03 29 03 29 1C 25 03 29 00 00 54 55 52
      )  .  )  .  )  .  )  .  %  .  )  .  .  T  U  R  
0060: 42 4F 20 20 20 4D 53 47 00 00 00 00 00 00 00 00
      B  O           M  S  G  .  .  .  .  .  .  .  .  
0070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
0080: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
      .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
0090: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
      .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
00A0: C3 17 03 C3 21 03 C3 3A 03 C3 30 03 C3 35 03 C3
      .  .  .  .  !  .  .  :  .  .  0  .  .  5  .  .  
00B0: 2B 03 C3 3A 03 C3 21 03 C1 00 82 00 43 00 C4 00
      +  .  .  :  .  .  !  .  .  .  .  .  C  .  .  .  
00C0: C5 00 C1 00 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
      .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
00D0: 00 7E D7 7A 00 00 00 00 1A 1A 1A 1A 1A 00 1A 1A
      .  ~  .  z  .  .  .  .  .  .  .  .  .  .  .  .  
00E0: FF 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
      .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
00F0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 53 21
      .  .  .  .  .  .  .  .  .  .  .  .  .  .  S  !  
#t
 -Z-E- A=03 B=0019 D=2161 H=DC5E S=B1F2 P=724E
 ----- A'00 B'0000 D'0000 H'0000 X=0000 Y=0000 POP  IY
*7250
#g,724b

*724B
#t
 ----- A=04 B=000F D=005C H=005C S=B1F0 P=724B      A
 ----- A'00 B'0000 D'0000 H'0000 X=0000 Y=0000 CALL 0005
*0005
#d0050,00ff
0050: 29 03 29 03 29 03 29 1C 25 03 29 00 04 54 55 52
      )  .  )  .  )  .  )  .  %  .  )  .  .  T  U  R  
0060: 42 4F 20 20 20 4D 53 47 00 00 00 00 00 00 00 00
      B  O           M  S  G  .  .  .  .  .  .  .  .  
0070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
0080: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
      .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
0090: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
      .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
00A0: C3 17 03 C3 21 03 C3 3A 03 C3 30 03 C3 35 03 C3
      .  .  .  .  !  .  .  :  .  .  0  .  .  5  .  .  
00B0: 2B 03 C3 3A 03 C3 21 03 C1 00 82 00 43 00 C4 00
      +  .  .  :  .  .  !  .  .  .  .  .  C  .  .  .  
00C0: C5 00 C1 00 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
      .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
00D0: 00 7E D7 7A 00 00 00 00 1A 1A 1A 1A 1A 00 1A 1A
      .  ~  .  z  .  .  .  .  .  .  .  .  .  .  .  .  
00E0: FF 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
      .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
00F0: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 53 21
      .  .  .  .  .  .  .  .  .  .  .  .  .  .  S  !  
#g,724e

*724E
#d0050,00ff                       B
0050: 29 03 29 03 29 03 29 1C 25 03 29 00 04 54 55 52
      )  .  )  .  )  .  )  .  %  .  )  .  .  T  U  R  
0060: 42 4F 20 20 20 4D 53 47 00 00 00 0D ED 00 00 00
      B  O           M  S  G  .  .  .  .  .  .  .  .  
0070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
0080: 00 54 55 52 42 4F 20 20 20 43 4F 4D 01 00 00 71
      .  T  U  R  B  O           C  O  M  .  .  .  q  
0090: E5 00 E6 00 E7 00 E8 00 E9 00 EA 00 EB 00 EC 00
      .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
00A0: 00 54 55 52 42 4F 20 20 20 4D 53 47 00 00 00 0D
      .  T  U  R  B  O           M  S  G  .  .  .  .  
00B0: ED 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
00C0: 00 54 55 52 42 4F 20 20 20 4F 56 52 00 00 00 0A
      .  T  U  R  B  O           O  V  R  .  .  .  .  
00D0: EE 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
00E0: 00 48 45 4C 4C 4F 20 20 20 D0 41 53 00 00 00 03
      .  H  E  L  L  O           .  A  S  .  .  .  .  
00F0: EF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
#t
 C-M-I A=01 B=000F D=005C H=00C0 S=B1F0 P=724E
 ----- A'00 B'0000 D'0000 H'0000 X=0000 Y=0000 POP  IY
*7250

H様からのご指摘を受け、添付していただいたログを見まして、何がおきているのかは大体わかりましたが、しかし得心はいきませんでした。
H様はこのあとのメールで、「オリジナルのCP/Mではディレクトリを読み書きするために、通常のDMAバッファとは別にDIRバッファを使っているようですが、ZB3DOSではそうなっていないのではありませんか?」と書いてこられました。

いえ。
それはないです。
ちゃんとZB3DOSでもDIRバッファは使っていました。
あれ?
過去形…。
うむむむむ。
その後にあれこれプログラムを改良する過程で、DIRバッファなどいらんではないか、と思ってDIRバッファとしては使わなくなってしまいました。

うむむむ。
やっぱり使わなくてはだめか。
かくして、またもや大幅なプログラムの変更に取り組むこととなってしまいました。
ほんとに。
やれやれです。

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

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