Turbo Pascal nach Apple II UCSD Pascal konvertieren

  • Hallo zusammen,


    ich versuche ein Turbo Pascal Programm, das einem Roboter das Mühlespielen beibringen soll, auf meinen Apple II+ zu konvertieren. Abgedruckt ist es in einem CHIP Special Heft aus den 80ern.

    Da Turbo Pascal nicht so streng in der Typisierung ist, muss das Programm an einigen stellen angepasst werden.

    Das hat meiner Meinung nach auch gut geklappt und der Compiler akzeptiert die Source.

    Leider sind in dem Heft wahrscheinlich aus Platzgründen fast alle Kommentare weggelassen worden. Das Programm ist aber noch nicht fehlerfrei und stürzt noch ab.

    Da bei UCSD Pascal auf dem Apple kein Debugger zur Verfügung steht, ist die Fehlersuche in dem schon recht komplexen Programm sehr mühselig bis unmöglich.

    In dem Heft wird erwähnt, das in einem anderen CHIP Special über Turbo Pascal das Programm schon mal veröffentlicht wurde. Meine Hoffnung ist, das dort das Programm besser dokumentiert ist.

    Leider konnte ich aber nirgendwo eine Kopie des besagten Heftes finden. Vielleicht hat ja jemand noch in seinem Archiv dieses Heft und kann mir die entsprechenden Seiten kopieren.


    Vielen Dank für das Lesen des Beitrages und ggf. die Sucharbeit.


  • Leider sind in dem Heft wahrscheinlich aus Platzgründen fast alle Kommentare weggelassen worden. Das Programm ist aber noch nicht fehlerfrei und stürzt noch ab.

    Da bei UCSD Pascal auf dem Apple kein Debugger zur Verfügung steht, ist die Fehlersuche in dem schon recht komplexen Programm sehr mühselig bis unmöglich.

    Hast Du die Möglichkeit das Turbopascal-Programm laufen zu lassen. Dort hättest Du ja einen Debugger und könntest versuchen die möglichen Fehler rauszubekommen. Außerdem könntest Du versuchen die Syntax des Quellprogramms soweit anzupassen (soweit überhaupt möglich) dass es weitgehend kompatibel mit UCSD wird. Sobald es in Turbo funktioniert, nochmal auf UCSD übersetzen.


    PAW

  • Ich würde es zwar auch erst einmal mit Free Pascal versuchen. Aber eher, da man für TP7/BP7 auch noch mind. eine DOS-Box aufsetzen muss.


    Ansonsten wurde TP laut Wikipedia mittlerweile von Borland selber als Freeware veröffentlicht:

    Turbo Pascal – Wikipedia

    TP 5.5 in Englisch, TP7 wohl offiziell nur in Französisch, wobei man auch Links zur deutschen Version im Netz findet.


    Nur laufen diese Versionen, genauso wie das (mein) original BP 7, nicht unter einem Win 10 x64.


    Da das Chip-Spezial von 1987 ist (hier ein vollständiger, offiziell genehmigter Scan inkl. allen Quelltexten)

    Chip Special fischertechnik und Computer :: fischertechnik Community

    müsste sogar die TP 5.5 Version genügen.


    Da das Programm laut Beschreibungstext auch ohne Robotersteuerung läiuft, kannst Du aber auch "einfach" überall ein Tracing einbauen. Anders habe ich das damals auf dem Apple IIe in der Schule auch nicht gemacht, wenn ich meinen Pascal-Programme vom C64 auf dem Apple übertragen musste.

  • Danke erst einmal für die Hinweise.

    Wenn Ich es irgendwo bekomme, werden ich mal Turbo Pascal auf meinem alten XP Schlepptop installieren und mal sehen ob das Programm dort läuft.

    Ansonsten probiere ich es einmal mit Freepascal.

    Die Lösung mit der Z80 Karte direkt im Apple gefällt mir auch gut. Leider hat die von mir vor 40 Jahren zusammengebratene Karte noch nie funktioniert.

  • Das Programm läuft jetzt unter AppleWin, aber noch ohne die Interfacesteuerung. Das mache ich direkt auf dem Apple.

    Das Hauptproblem lag an einer Inkompatibilität zwischen Turbo und Apple Pascal.

    Bei Variantenrecords stimmt die Speicherungsreihenfolge nicht überein:

    type Datensatz = Record of

    Case integer of

    1: (feld:array[1..4] of integer);

    2: (x,y,z : integer;

    b:boolean);

    end;

    Eine Variable diesen Typs braucht 8 Byte.

    Der Unterschied:

    Turbo Pascal

    x = Byte 1 u. 2 = feld[1]

    Y = Byte 3 u. 4 = feld[2]

    Z = Byte 5 u. 6 = feld[3]

    b = Byte 7 u. 8 = feld[4]

    Apple Pascal

    x = Byte 5 u. 6 = feld[3]

    Y = Byte 3 u. 4 = feld[2]

    Z = Byte 1 u. 2 = feld [1]

    b = Byte 7 u. 8 = feld [4]


    In Apple Pascal werden also x,y,z in der Reihenfolge z,y,x abgelegt.

    Das zu finden hat mich einige graue Haare gekostet.

  • War da nicht mal was mit Little Endian und Big Endian... ? Liegt das daran?

    Denn Feindschaft wird durch Feindschaft nimmermehr gestillt; Versöhnlichkeit schafft Ruh’ – ein Satz, der immer gilt. Man denkt oft nicht daran, sich selbst zurückzuhalten; Wer aber daran denkt, der lässt den Zorn erkalten. Sprüche von Buddha, aus dem ‹Dhammapada›.


    Mein Netz: Acorn | Atari | Milan | Amiga | Apple //e und IIGS | Macintosh | SUN Sparc | NeXT |SGI | IBM RS/6000 | DEC Vaxstation und Decstation| Raspberry Pi | PCs mit OS/2, BeOS, Linux, AROS, Windows, BSD | Stand-alone: Apple //c und III | Commodore 128D | Sinclair QL | Amstrad | PDAs

  • Klingt für mich in diesem Fall eher nach leicht unterschiedlichen Speichermodellen, bei denen Variablen im Speicher entweder zuerst an der niedrigsten bzw. der höchsten freien Adresse abgelegt werden. Weil das Array eine einzelne Variable ist, passt dann die Reihenfolge untereinander nicht mehr.

  • Das hat nichts mit Little oder Big Endian zu tun, sondern damit, wie der Compile die Variablenliste in der Deklaration "x, y, z: integer" abarbeitet, nämlich einmal die Liste vorwärts, und einmal die Liste rückwärts. Was daran liegt wie der Parser diese Liste erstellt.


    Wenn du das umformulierst in "(z : integer; y: integer; x: integer; b: boolean)" sollte es in beiden Varianten tun.


    UCSD Pascal kennt übrigens ein Endian Field für den P-Code, aber Apple UCSD implementiert nur eine Variante.

  • Sowie ich das verstanden habe ist mit Endian die Bytereihenfolge des einzelnen Datenwertes gemeint. Low oder High Byte first.

    Das hat aber nichts mit der hier gemeinten Reihenfolge mehrerer Datenwerte zu tun.

    Wenn du das umformulierst in "(z : integer; y: integer; x: integer; b: boolean)" sollte es in beiden Varianten tun.

    Das ist neben der Umsortierung natürlich eine 2. Möglichkeit.