Phar Lap Assembler: мне нужна информация / документация и двоичные файлы, если это возможно - PullRequest
1 голос
/ 19 апреля 2009

Я унаследовал довольно старую большую и сложную кодовую базу для программы, изначально предназначенной для MSDOS. Оказывается, некоторые разделы этой программы написаны на малопонятном диалекте ассемблера x86, называемом «ассемблер Phar Lap», после компании и продукта, который создал программу на ассемблере. Я сделал довольно глубокий поиск в Google, и я не могу найти ни оригинальную программу на ассемблере, ни какую-либо информацию или документацию о ней. (Хотя я нашел несколько довольно разочаровывающих страниц на бирже экспертов людей, задающих подобные вопросы).

Так что, по сути, я не смогу заставить эту вещь скомпилироваться, пока не найду копию 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

Так что, по сути, я думаю, что это говорит о том, что версия ассемблера этой структуры не совпадает с версией С этой структуры. Я пробовал несколько различных комбинаций WORD и DWORD вместо dd в ассемблере, но я не могу обойти эту мелочь. Возможно, если бы я мог найти способ сделать эти два объявления идеально подходящими, моя потребность в информации о pharlap уменьшилась бы.

Кроме того, если кто-то может придумать лучшее название для этого растягивающегося вопроса, я открыт для идей.

Редактировать: Хорошо, оказывается, я пролистал некоторую важную информацию. Это файл, изначально написанный для ассемблера Phar Lap (которого у меня нет), который я пытаюсь собрать, используя сборку watcom (wasm). Оказывается, проблема с этой конкретной ошибкой заключается в том, что Phar Lap чувствителен к регистру, а watcom - нет. Таким образом, он видит bhashctl так же, как BhashCtl. Разобрался с помощью моего зятя. Я никогда бы не подумал, что причиной этого является нечувствительность к регистру.

Ответы [ 2 ]

1 голос
/ 19 апреля 2009

ZIP некоторых руководств Phar Lap (включая 386 | ASM) по адресу:

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

0 голосов
/ 19 апреля 2009

Возможно, это не тот ответ, который вам нужен, но я все равно попробую: насколько сложно перенести разделы сборки на C? Я знаю, что есть вещи, которые С не может сделать, но, возможно, вы можете использовать встроенную сборку для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...