home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1988 / 04 / turboovr.doc < prev    next >
Encoding:
Text File  |  1988-02-01  |  2.9 KB  |  112 lines

  1.       Turbo Pascal & CP/M Plus
  2.        Der verflixte X-Befehl
  3.  
  4. Zu einem immer wieder auftauchenden
  5. Problem soll hiermit eine entgültige
  6. Lösung angeboten werden. Der X-Be-
  7. fehl, mit dem man vom Turbo Pascal-
  8. Menue aus andere Programme starten
  9. kann, funktioniert unter CP/M Plus
  10. scheinbar nur mit Glück! Ab und zu
  11. gibt es einen Absturz beim Versuch,
  12. zu Turbo Pascal zurückzukehren, z.B.
  13. nach dem Aufruf von PIP.
  14.  
  15. Es wurden schon viele Leserbriefe
  16. veröffentlicht, die über diesen
  17. Sachverhalt klagen oder rätseln - und
  18. die Sache ist auch mit einem Debugger
  19. durchaus nicht auf den ersten Anhieb
  20. zu finden. Es ist aber alles ganz
  21. logisch, wenn man CP/M einmal näher
  22. betrachtet: CP/M Plus hat einfach
  23. mehr Funktionen als CP/M 2.2, und
  24. Programme wie PIP benutzen diese
  25. halt!
  26.  
  27. Zum eigentlichen Absturz von Turbo
  28. Pascal führt eine Erhöhung des "multi
  29. sector counts" (BDOS-Funktion 44):
  30. Nachdem durch TURBO.OVR abgefangenen
  31. und simulierten Warmstart wird
  32. TURBO.COM geladen und gestartet, und
  33. zwar nach folgendem Schema:
  34.  
  35. DMA-Adresse = 100h
  36. BDOS 26: set DMA
  37. BDOS 20: read sequential
  38. DMA-Adr. = DMA-Adr. + 80h
  39. Wenn nicht Datei-Ende:
  40.   -> zurück zu BDOS 26
  41.  ...
  42.  
  43. Hier wird also jeweils ein logischer
  44. Sektor mit 128 Bytes gelesen, bis das
  45. Dateiende erreicht wird. Danach wer-
  46. den noch einige Daten in TURBO.COM
  47. geschrieben und Turbo schließlich
  48. gestartet.
  49.  
  50. Das kann natürlich nicht gutgehen,
  51. wenn durch einen geänderten "multi
  52. sector count" durch die BDOS-Funktion
  53. 20 mehrere Sektoren gelesen werden!
  54. Aber so einfach die Diagnose klingt,
  55. so schwierig ist die Kur: TURBO.OVR
  56. läßt sich nicht einfach erweitern,
  57. zumal es ja noch verschiebbar sein
  58. soll. Die hier vorgestellte Lösung
  59. ist deshalb etwas komplizierter:
  60.  
  61. 1. TURBO.OVR wie folgt "patchen":
  62.  
  63. sid turbo.ovr
  64. #a22c
  65. 022C  call 100
  66. 022F  <RETURN>
  67. #s289
  68. 0289 43 'O'
  69. 028A 4F 'V'
  70. 028B 4D '2'
  71. 028C 00 .
  72. #s2a9
  73. 02A9 43 'O'
  74. 02AA 4F 'V'
  75. 02AB 4D '2'
  76. 02AC 20 .
  77. #wturbo.ovr
  78. 0009h record(s) written.
  79. #g0
  80.  
  81. 2. Das Programm TURBO-
  82. OV2.ASM assemblieren, umbenennen  und
  83. auf die Turbo-Pascal-Diskette kopie-
  84. ren (nicht vorher umbenennen, sonst
  85. hat man auf einmal TURBO.COM über-
  86. schrieben!):
  87.  
  88. mac turboov2
  89. hexcom turboov2
  90. ren turbo.ov2=turboov2.com
  91.  
  92. Der Patch bewirkt, daß TURBO.OVR nun
  93. nicht direkt TURBO.COM lädt und star-
  94. tet, sondern zuerst das Programm
  95. TURBO.OV2. Da dies weniger als zwei
  96. Sektoren lang ist, ist wegen dem
  97. falschen "multi sector count" nichts
  98. zu befürchten. Das Kopieren des
  99. Datenbereichs und der Sprung (LDIR !
  100. JMP nnnn) werden überschrieben mit
  101. CALL 100: Nun kann TURBO.OV2 die
  102. Einsprungadresse nnnn in TURBO.COM
  103. vom Stack holen, die LDIR-Parameter
  104. zwischenspeichern, alle CP/M Plus-
  105. mässigen Default-Werte setzen (auch
  106. gleich noch "BDOS error mode", "con-
  107. sole mode" und "output delimiter"),
  108. TURBO.COM laden, die Daten kopieren
  109. und an die richtige Einsprungadresse
  110. springen - das X-Problem wäre gelöst!
  111. (Cornelius Bockemühl/MC)
  112.