Hallo Hagen,
danke für die Antworten. Das Problem war eigentlich schon gelöst.
Der Delphi-Mode war schon eingeschaltet.
MOV CRCDef.Polynomial,EDX ist ja nix anderes als MOV [EAX].TCRCDef.Polynomial, EDX das würde schon passen, denke ich...
Dieses Problem ist wohl noch zu lösen. Allerdings ist der
ASM-Anteil am
DEC doch recht hoch und es geht dann mit solchen Sachen weiter...
Generating PIC, but reference is not PIC-safe
Da musste ich erstmal googlen, was das überhaupt bedeutet.
Es geht um die Verwendbarkeit des Codes in DLLs unter Linux, oder so.
Wenn ich auf die Art weiterporte kommt hinten garantiert irgendwas raus, was sich zwar kompilieren lässt, aber mit
DEC nicht mehr allzuviel zu tun haben dürfte.
Das PIC-Problem trat hier auf, wenn ich mich nicht irre: (Handelt sich wohl um eine globale Referenz auf FCRC16. Könnte man vielleicht lösen, wenn man FCRC16 als Parameter übergibt)
Delphi-Quellcode:
function CRC16(CRC: Word;
const Buffer; Size: Cardinal): Word;
asm
JECXZ @@2
PUSH EDI
PUSH ESI
MOV EDI,ECX
{$IFDEF PIC}
MOV ESI,[EBX].FCRC16
// hier kracht's auch! Not PIC-Safe
{$ELSE}
MOV ESI,FCRC16
{$ENDIF}
XOR ECX,ECX
TEST ESI,ESI
JZ @@3
@@1: MOV CL,[EDX]
XOR CL,AL
SHR EAX,8
INC EDX
XOR EAX,[ESI + ECX * 4]
DEC EDI
JNZ @@1
POP ESI
POP EDI
@@2: RET
@@3: PUSH EAX
PUSH EDX
CALL CRC16Init
MOV ESI,EAX
XOR ECX,ECX
POP EDX
POP EAX
JMP @@1
end;
Der Fehler kommt unabhängig davon ob PIC definiert ist oder nicht.
Wahrscheinlich wird es noch einige Stellen im Code von
DEC geben, über die FPC oder Lazarus stolpert. Wenn ich dich dann jedesmal nerven darf, würde ich weitermachen.
Grüße,
Uwe