Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Infocom Interpreter (https://www.delphipraxis.net/146927-infocom-interpreter.html)

Peter666 29. Jan 2010 14:09


Infocom Interpreter
 
Liste der Anhänge anzeigen (Anzahl: 1)
Wer kennt sie nicht diese alten Textadventures? Vor geraumer Zeit hatte ich angefangen den No$Cash Interpreter nach Windows zu portieren, allerdings musste ich feststellen das das nicht wirklich so einfach ist. Pascal war damals ziemlich gutmütig beim Umwandeln von Word in Byte und Überläufe waren nicht wirklich dramatisch. Wie dem auch seih, ich bin fast am verzweifeln. Die Testversion unter Windows will einfach nicht so recht laufen. Es kommen permanent an etlichen Stellen Bereich und Überlauffehler :( Ich denke mal da sind mehrere fehlerhafte Speicherzugriffe zu finden. Getestet hab ich es mit Zork1: http://www.xs4all.nl/~pot/infocom/zork1.html

Peter

Peter666 31. Jan 2010 17:50

Re: Infocom Interpreter
 
Okay, ich hab den Fehler nach etlichen Stunden (bei dem Schnee lohnt sich auch nix anderes) gefunden. Longint in Delphi/Freepascal ist nicht gleich Longint bei Pascal. Bei Interesse lade ich die lauffähige Testversion gerne hoch...

Peter

himitsu 31. Jan 2010 18:10

Re: Infocom Interpreter
 
Zitat:

Zitat von Peter666
Longint in Delphi/Freepascal ist nicht gleich Longint bei Pascal.

Wiebitte? :shock:

LongInt ist ein fester Typ und dieser sollte überall ein 32-Bit signed Integer sein.

Peter666 31. Jan 2010 19:23

Re: Infocom Interpreter
 
Tja, das hat was mit dem Vorzeichen zu tun. Probier doch mal folgendes in Pascal (oder in FPC mit aktivierter Turbo Pascal Kompatibilität):

Delphi-Quellcode:
var adr: longint;
 reqsec: byte;
 reqinbl: word;
 param1: word;

reqsec := 42;
reqinbl :=196;
param1 := 65495;

adr := longint(longint(reqsec) * $200 + reqinbl + integer(param1 - 2))
In Pascal kommt da 21657 ($5499) und in Delphi 87193 ($15499) heraus :)

Im Prinzip sind es 3 Zeilen die es in dem "Windows-Port" zusätzlich zu berücksichtigen gilt, danach läuft der Interpreter mit allen verfügbaren Infocom Textadventuren.

Peter

[edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit]

andylu 27. Nov 2011 10:03

AW: Re: Infocom Interpreter
 
Zitat:

Zitat von Peter666 (Beitrag 994281)
Tja, das hat was mit dem Vorzeichen zu tun. Probier doch mal folgendes in Pascal (oder in FPC mit aktivierter Turbo Pascal Kompatibilität):

Delphi-Quellcode:
var adr: longint;
 reqsec: byte;
 reqinbl: word;
 param1: word;

reqsec := 42;
reqinbl :=196;
param1 := 65495;

adr := longint(longint(reqsec) * $200 + reqinbl + integer(param1 - 2))
In Pascal kommt da 21657 ($5499) und in Delphi 87193 ($15499) heraus :)

Im Prinzip sind es 3 Zeilen die es in dem "Windows-Port" zusätzlich zu berücksichtigen gilt, danach läuft der Interpreter mit allen verfügbaren Infocom Textadventuren.

Peter

[edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit]

Es hat nichts mit LONGINT zu tun aber mit INTEGER. In Turbo Pascal ist ein INTEGER 16 bit. In Delphi 32 (oder 64). When man in die ganze QuelCode INTEGER andert in SMALLINT dan arbeitet alles problemlos.

Es is schon 4 jahre her (ich weiss) aber ich lese diese thread heute :)
Entschuldige fur mein Deutsch.

Andy


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz