2009-04-19 2 views
1

Ich habe inherited eine ziemlich alte große und komplexe Codebasis für ein Programm ursprünglich auf MSDOS ausgerichtet. Es stellt sich heraus, dass einige Abschnitte dieses Programms in einem obskuren Dialekt des x86-Assembler namens "Phar Lap Assembler" geschrieben sind, nach der Firma und dem Produkt, das das Assembler-Programm produziert hat. Ich habe eine ziemlich tiefe Google-Suche gemacht und finde weder das ursprüngliche Assembler-Programm noch irgendwelche Informationen oder Dokumentationen darüber. (Obwohl ich einige ziemlich frustrierende Seiten im Expertenaustausch von Leuten gefunden habe, die ähnliche Fragen stellen).Phar Lap Assembler: Ich brauche Informationen/Dokumentation und Binärdateien, wenn möglich

Also im Grunde werde ich nicht in der Lage sein, dieses Ding zu kompilieren, bis ich entweder eine Kopie von PharLap Assembler (386asm.exe) finden kann, oder genug Informationen über den Dialekt finden, um es zu einem "Standard" zu übersetzen "MASM wie Dialekt. Entweder das, oder versuchen Sie es zu durchforschen, indem Sie es einfach durchlesen.

Alternativ, wenn nichts davon möglich ist, dann brauche ich nur Hilfe mit diesem Problem, und ich sollte zumindest in der Lage sein, einen Abschnitt des Programms zu kompilieren.

Es gibt eine Strukturdeklaration in einer C-Datei, die wie folgt aussieht:

//static struct bhash *bhash; 

typedef struct bhash_control { 
void *cachedata; 
Rgb3 *ctab; 
int rederr; 
int grnerr; 
int bluerr; 
ULONG drgb; // temp var used by dithering, blackbox to us here 
#ifdef SHOW_STATS 
int calls, hits1, hits2, fhits, misses; 
#endif 
} BhashCtl; 

BhashCtl bhashctl; // global so assembler code can see it. 

und dann gibt es einige Assembler, der so aussieht, die vermutlich versucht, die gleiche Art Erklärung zu machen, so dass einige Assembler-Code kann die gleiche Art verwenden:

BhashCtl struct 
cachedata dd ? ; pointer to alloc'd cache data area 
ctab dd ? ; contains vb.pencel->cmap->ctab 
rederr dd ? ; error diffusion dithering variables... 
grnerr dd ? 
bluerr dd ? 
drgb dd ? ; rgb value with dithering rolled in 

;calls  dd ? ; cache stats... 
;hits1  dd ? ; to use these, you also need to 
;hits2  dd ? ; uncomment a few lines below. 
;fhits  dd ? ; search for 'bhashctl.' to find them. 
;misses  dd ? 

BhashCtl ends 

extern bhashctl:BhashCtl ; the one-and-only lives in bhash.c 

dies mit einem Fehler in der letzten Zeile erstellt, die wie dieser (watcom Assembler) aussieht:

Error! E518: External definition different from previous one 

Also im Grunde denke ich, was das sagen ist, dass die Assembler-Version dieser Struktur nicht mit der C-Version dieser Struktur übereinstimmt. Ich habe eine Reihe von verschiedenen Kombinationen von WORD und DWORD anstelle von dd im Assembler versucht, aber ich komme nicht über diese kleine Sache hinaus. Vielleicht würde ich, wenn ich einen Weg finden könnte, um diese beiden Erklärungen perfekt zusammenzuführen, meinen Bedarf an Informationen über Pharlap verringern.

Auch wenn jemand einen besseren Titel für diese ausufernde Frage denken kann, bin ich offen für Ideen.

Edit: Okay, es stellt sich heraus, ich überflogen einige wichtige Informationen. Dies ist eine Datei, die ursprünglich für einen Phar Lap-Assembler geschrieben wurde (den ich nicht habe), den ich mit Hilfe der Watcom Assembly (Wasm) zusammenbauen möchte. Das Problem mit diesem speziellen Fehler, so stellt sich heraus, ist, dass Phar Lap Groß- und Kleinschreibung unterscheidet, während es bei Watcom nicht der Fall ist. Daher sieht es bhashctl genauso wie BhashCtl. Ich habe das mit Hilfe meines Schwagers herausgefunden. Ich hätte nie gedacht, dass die Groß- und Kleinschreibung die Ursache dafür ist.

Antwort

0

Dies ist vielleicht nicht die Antwort, die Sie brauchen, aber ich werde trotzdem versuchen: Wie schwer ist es, Ihre Baugruppenabschnitte in C zu portieren? Ich weiß, dass es Sachen gibt, die C nicht kann, aber vielleicht können Sie Inline-Assembly verwenden, um das zu erreichen.

+1

während in der Regel ist das eine gute Idee, ich den Code möchten zumindest sehen kompilieren, bevor ich anfangen erheblich damit zu tun haben. Wenigstens werde ich dann wissen, was es zu tun hat, wenn es richtig funktioniert. – Breton