Hallo Leute, ich hoffe ihr könnt mir beim portieren von Code helfen.
Hier mal der C Code
Delphi-Quellcode:
typedef union
{
UINT16 w;
struct
{
UINT8 l,h;
UINT16 pad;
} b;
} i8080Reg;
struct i8080Context
{
i8080Reg AF;
i8080Reg BC;
i8080Reg DE;
i8080Reg HL;
UINT16 PC;
UINT16 SP;
UINT32 flagC;
UINT32 flagZPS;
UINT32 flagAc;
UINT32 halted;
UINT32 intEnabled;
UINT32 intPending;
UINT16 intAddress;
UINT16 NMIAddress;
UINT32 NMIPending;
UINT8 *mainMemory;
struct readMemoryHandler *readMemoryHandler;
struct writeMemoryHandler *writeMemoryHandler;
struct readIOHandler *readIOHandler;
struct writeIOHandler *writeIOHandler;
UINT32 numMemoryBanks;
void *pBankList;
UINT32 cycleCount;
UINT32 opcodeStatistics[256];
UINT32 tracePC[256];
UINT32 traceIndex;
};
struct readMemoryHandler
{
UINT32 startAddress;
UINT32 endAddress;
UINT8 (*memoryHandler) (UINT32, struct readMemoryHandler *);
void *pUserData;
};
Bei dieser Struktur scheitere ich. Ich verstehe nicht, was diese Zeile bedeuten soll...
UINT8 (*memoryHandler) (UINT32, struct readMemoryHandler *);
Im Visual Studio steht zu der Funktion folgendes :
Uint8 (__cdecl *) (Uint32, readMemoryHandler *)
Soweit ich weiss, werden die Werte auf dem Stack abgelegt durch diese Aufrufkonvention... Wie würde man dies nun portieren, falls das überhaupt so möglich ist.
Hier mal der Delphi-Code:
Korrekturen und Vorschläge sind stets Willkommen, habe sowas noch nie gemacht.
Delphi-Quellcode:
Type TReadMemoryHandler = packed record
startAddress : LongWord;
endAddress : LongWord;
// UINT8 (*memoryHandler) (UINT32, struct readMemoryHandler *); // How to port?
pUserData : ^Pointer;
end;
Type Ti8080Register = packed record
w : Word;
h : Byte;
l : Byte;
end;
// The Cpu Context
Type Ti8080Context = class(TObject)
AF : Ti8080Register;
BC : Ti8080Register;
DE : Ti8080Register;
HL : Ti8080Register;
ProgramCounter : Word;
StackPointer : Word;
CarryFlag : Longword;
ZeroParityNegativeFlag : Longword;
AuxiliaryCarryFlag : Longword;
Halted : Longword;
intEnabled : Longword;
intPending : Longword;
intAddress : Word;
NMIAdress : Word;
NMIPending : Longword;
mainMemory : ^Byte;
readMemoryHandler : ^TReadMemoryHandler;
writeMemoryHandler : ^TWriteMemoryHandler;
readIoHandler : ^TReadIoHandler;
writeIoHandler : ^TWriteIoHandler;
numMemoryBanks : LongWord;
pBankList : ^Byte; //
cycleCount : LongWord;
opcodeStatistics : Array [0..255] of LongWord;
tracePC : Array [0..255] of LongWord;
traceIndex : LongWord;
end;
Danke im Voraus für jegliche Hilfe.
Gruß
Matthias
[edit=SirThornberry]Titel geändert - Mfg, SirThornberry[/edit]