Hi, I have looked and I have looked at what the interruptions make and which memory values you need to know, I am lost in a Proc0 zone, in this zone there are a lot of comparations between the values used to introduced the serial number. I don't know why is so much confirmation, I guess it confirms that the serial number is valid, but it is hard. Also I've seen that the interruption vectors change, I don't know if windows will allow this. I can't see very clear for what is used the XOR instruction WORD PTR CS:[BX+SI+Data10], 5251h, I mean, What this instruction does and where. At the beginning of Proc0 a chain is stored but I can't see the buffer data(it should appear one byte with the maximun of characters and another one with the counter of the ones that has been introduced) Proc2 should be disassembled for seeing what it does, why is machine code. The rest is simple but without the above stated I don't know if it can be done. This is about sending codes to the port to make the box do things. Yours would be to make a list of the box ports and the values that can be send. I didn't even know they existed. I can't do anything else. If you have any concrete doubt about the language I will try to help you.
This code like it is will not work in Windows for several reasons, First, because a normal application for ring-3(made in visual, delphi, etc) can not use the comm ports registers (COM, LPT). The drivers can, but it will need the knowing of assembler and the study of the Windows Nt architecture to make a driver. Also, if the protocol is designed to work in real time, there is no way to make a real time application in Windows. It is possible I recommnend to leave this application in DOS. It is not to dissapoint you, but you are dealing with a complex problem.
if Ring 3 in winxp can be used Multiple WinXP kernel http://www.governmentsecurity.org/archive/t6739.html