Hello
thanks for the hints.
I have no test application running, only my bare own test.c with 20 lines of code. This just queries successfully the device version. To define the parameters for a sweep and to start it, I need MUCH more knowledge about the Analyzer than that
I have uploaded the DLLs ... see below.
I have digged further and have moved some very small steps forward.
The Morrow V9054 is a "message based" VXI device. But it does not speak the nice strings known from other devices (like "VOLTS:DC:MEASURE"). It only supports the Word Serial Protocol. This protocol consists of commands with word size (=2 bytes), 0x7e00 for example means "VXI_GETSTATUS" and returns a status byte from the analyzer. There are many predefined commands (predefined by VXI spec) and a handful commands defined by Morrow. VXI defines a complete protocol for (even "high speed") data transfer around that.
The driver consists of a Windows 95 PnP-Driver named mtcpnp32.dll, another Library implementing the Analyzer-functions named mtcsa32.dll and finally a whole bunch of "transport layer" libraries. I have one for visa (called mtcvsa32.dll) and another one for the ISA bus. The software is targeted to Window 95.
In my setup, the analyzer can be accessed via SCPI only. No Windows PC, the analyzer is inside a VXI mainframe which runs HP/UX. SCPI includes the Words Serial Protocol.
After wasting some time with the Snowman decompiler, which gave me more or less no clue whats going on, I tried the "retdec" Decompiler from github. This thing was able to decompile all libraries, so that I could find some command codes and started to analyze the code. This is for example a decompiled function, some symbols renamed by me after finding out what they mean:
// DD: This function sends a word to acquisition CPU "P1"
// Address range: 0x100019c8 - 0x10001a09
int32_t VISA_SendWord(int32_t deviceId, int16_t command) {
int16_t v1 = -2; // bp-8
g2 = deviceId;
// DD: 0x7f00 = VXI_ENGINECOMMAND
int32_t v2 = function_10001a0a(deviceId, 0x7f00); // 0x100019db
g2 = v2;
if (v2 != 0) {
// 0x10001a02
return (int32_t)v1 | v2 & -0x10000;
}
int32_t v3 = function_10001a0a(deviceId, command); // 0x100019f0
if (v3 == 0) {
// 0x100019fc
v1 = 0;
// branch -> 0x10001a02
}
// 0x10001a02
return (int32_t)v1 | v3 & -0x10000;
}
Theoretically I can move forward, but problem is, the three libraries have decompiled to >100.000 lines of code
. I estimate more than 2000 function definitions. The Morrow people were really going to town, Dave would say.
I've put everything I have to github. This is the directory with the DLLs:
https://github.com/DennisD2/tomorrow/tree/master/tomorrow/src/morrow/libInteresting dlls are: mtcsa32.dll (spectrum analyzer code), mtcvsa32.dll (VISA transport layer code) and mtcpnp32.dll (API for programmers which combines the other two libs).
The decompiler output is here:
https://github.com/DennisD2/tomorrow/tree/master/tomorrow/src/morrow/decompiledI commented out large parts in these files because it looks as if they are part of code from Microsoft libs which is not needed...
Finally, here are the headers I found on the driver disk.
https://github.com/DennisD2/tomorrow/tree/master/tomorrow/src/morrow/includeHmm, this looks like very VERY much work
Dennis