Open bdhirsch-code opened 2 years ago
I "commented out" this line in serialport.cpp to see if the overrun was being caused by it meeting the condition (if(LCR != LCR_DIVISOR_Enable_MASK)). The overrun continued to happen so this isn't the offending line of code.
updatePortConfig(baud_divider, LCR);
I've been doing some more research, and the buffer overrun errors happen each time our application polls the serial port (about once/second). The errors will start to be generated after resizing the DOSBox-X window and seem to be linked to the Synchronize Time = true setting in the config. When I set Synchronize Time = false resizing the window doesn't seem to cause the issue. Perhaps there's some type of interrupt call to retrieve the BIOS time which is resetting or interfering with our application's use of the serial port.
Describe the bug
Our application reads/writes to a serial smart card reader that exposes a virtual com port 4 to Windows 10 64-bit using a serial-to-USB adapter based on the FTDI chipset. The debugging window reported that DOSBox-X attempted to initialize the serial port (redirected to directserialport Serial1) using 38400,n,5,1, which throws an error. Although our application runs fullscreen, we have noted a serial port overrun error that causes the serial port to become unresponsive. When resizing the DOSBox-X window in windowed mode, the debugger reports serial port overrun errors every second for a couple of minutes, most likely filling the buffer until the serial port becomes unresponsive. Exiting the application and re-executing within the same DOSBox-X window evidently releases the serial port, and clears the buffer, because everything goes back to normal until the same overrun happens. Other users have reported similar events using DOSBox SVN, and it appears this bug has carried through to the X version.
I manually applied the following patch (wrapping the updatePortConfig with a conditional IF statement) which eliminated the initial 38400,n,5,1 error, but the overruns continue.
--- /cygdrive/c/Users/adamconnell.VTMDI/Downloads/dosbox-0.74/src/hardware/serialport/serialport.cpp 2010-05-10 13:43:54.000000000 -0400 +++ src/hardware/serialport/serialport.cpp 2011-07-28 11:32:54.826387700 -0400 @@ -230,8 +230,15 @@ const char const dbgtext[]={"none","odd","none","even","none","mark","none","space"}; log_ser(dbg_serialtraffic,"New COM parameters: baudrate %5.0f, parity %s, wordlen %d, stopbits %d", 1.0/bitlen1000.0f,dbgtext[(LCR&0x38)>>3],(LCR&0x3)+5,((LCR&0x4)>>2)+1); -#endif
} }
static void Serial_EventHandler(Bitu val) {
Steps to reproduce the behaviour
Expected behavior
We would expect the serial port to continue functioning normally without buffer overruns.
What operating system(s) this bug have occurred on?
Windows 10 Enterprise LTSC OS build 17763.3406
What version(s) of DOSBox-X have this bug?
Built it myself from the source code link on the homepage on 10/1/2022
Used configuration
Output log
Additional information
No response
Have you checked that no similar bug report(s) exist?
Code of Conduct & Contributing Guidelines