Phar Lap汇编程序:如果可能,我需要信息/文档和二进制文件

时间:2009-04-19 01:27:06

标签: c legacy dos assembly

inherited是一个相当古老的大而复杂的代码库,适用于最初针对MSDOS的程序。事实证明,该程序的某些部分是用一种名为“Phar Lap汇编程序”的x86汇编程序的模糊方言编写的,后面是生成汇编程序的公司和产品。我做了一个相当深入的谷歌搜索,我无法找到原始的汇编程序,或任何有关它的信息或文档。 (虽然我在专家交流中发现了一些相当令人沮丧的页面,人们会问类似的问题)。

所以基本上,在找到PharLap Assembler(386asm.exe)的副本或找到有关方言的足够信息以将其转换为更“标准”之前,我将无法编译这个东西。 MASM喜欢方言。无论是那种,还是试着通过阅读它来解决问题。

或者,如果这一切都不可能,那么我只需要帮助解决这个问题,我至少应该能够让程序的一个部分进行编译。

.c文件中有一个结构声明,如下所示:

//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.

然后有一些看起来像这样的汇编程序,这可能是为了使一些汇编代码可以使用相同类型的类型声明:

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

这会在最后一行编译错误,看起来像这样(watcom汇编程序):

Error! E518: External definition different from previous one

基本上,我认为这就是说这个结构的汇编版本与这个结构的C版本不匹配。我已经尝试了WORD和DWORD的许多不同组合来代替汇编程序中的dd,但是我无法通过这个小东西。也许如果我能找到一种方法让这两个声明完美匹配,我对pharlap信息的需求就会减少。

此外,如果有人能够为这个庞大的问题想出一个更好的头衔,我会对这些想法持开放态度。

编辑:好的,事实证明我浏览了一些重要的信息。这是一个最初为Phar Lap汇编程序(我没有)编写的文件,我正在尝试使用watcom assember(wasm)进行汇编。事实证明,这个特定错误的问题似乎是Phar Lap是区分大小写的,而watcom则不是。所以它认为bhashctl和BhashCtl一样。在我的兄弟的帮助下弄清楚这一点。我永远不会想到不区分大小写的原因。

2 个答案:

答案 0 :(得分:1)

一些Phar Lap手册的ZIP(包括386 | ASM)手册:

http://www.dinigroup.com/pharlap.php

答案 1 :(得分:0)

这可能不是您需要的答案,但无论如何我都会尝试:将装配部分移植到C中有多难?我知道有些东西是C不能做的,但也许你可以使用内联汇编来实现这一点。