loading_reduced.jpg

21092022 / 22-09-2022

MS-DOS Player for Windows

Accuracy

Performance

Features

competition

MS-DOS Player is a MS-DOS emulator running on Windows (32/64-bit) command prompt. Its 16-bit MS-DOS compatible commands can be executed on Win32/x64 environments.

It basically inherits the environment variables from the host Windows, and a target command can access the host's file path directly. As such, you can execute 16bit MS-DOS compatible commands on your 64bit Windows in the same sence as you did on 32bit Windows, and you do not need to copy any files to/from a virtual machine (VMware, Virtual PC, XP mode, or others).


Note: This emulator DOES NOT support Win16 execution files. It aims to support character user interface utilities, for example file converters, compilers, assemblers, debuggers, and text editors. For now, doesn't support graphic/sound hardwares nor is intended to support game softwares.

...

Most Recent Changes (all translated)

--21092022--

Normally, when an application running on MS-DOS Player tries to access COMMAND.COM,
It will be redirected to COMMAND.COM in the path as described on 2015/12/28,
If the COMSPEC value is changed on the virtual machine, refer to that path.



--30082022--

Changed to set the contents of the 1st and 2nd FCBs for the PSP at process startup. It corresponds to the first process startup and INT 2Eh, INT 2Fh AX=AE01h.



--16082022--

Fixed so that playback does not stop when BEEP sounds are uttered continuously. I am trying to play with double buffer with waveOut API.
You were able to receive a callback by specifying a function instead of a window procedure (bitter smile)

Changed FPU type from SOFTFLOAT to DOSBOX2 for I386 core of NP21/W.


Also, DOSBOX's FPU_ST80() was modified to take into account the NaN/INF case.



--21072022--

Supported the reproduction of BEEP sound.
When bit0,1 of the system port is on, it plays at the frequency corresponding to the count value of Ch.3 of PIT.
It is also possible to change the count value during playback.
When the PIT count value is set for both low and high, the playback frequency is updated.

It is implemented by the waveOut API, but to play the generated sound buffer in a loop,
Since the number of loops is specified without using the callback function, if you continue to play the BEEP sound,
Playback will stop in 2 minutes.
It seems to be troublesome to use the callback function on the console, so it is a sloppy implementation (bitter smile)



--21072022--

I needed to run an old ROM writer, so I made improvements around serial communication.

At INT 14h AH = 01h, turn on DTR and RTS, wait until DSR and CTS are on. Fixed to write the transmission data after waiting until the transmission buffer becomes free.
At INT 14h AH = 02h, turn DTR on, RTS off, wait until DSR is on. Modified to read the received data after waiting for the data to enter the receive buffer.


At this time, when the timeout time has elapsed, I fixed it so that it would fail by setting bit7 of AH.
Also, the initial value of the timeout time is put in the work area of the BIOS.


Supported DTR / DSR flow control and RTS / CTS flow control. It is enabled with the -sd and -sc options, respectively.
When flow control is enabled, it actually manipulates the DTR / RTS state of the serial port. In addition, the flow control is performed by actually reading the DSR / CTS status.


When flow control is disabled, the serial port DTR / RTS remains on.


From the virtual machine, the value set for DTR / RTS (not reflected in the actual serial port) is
It is read as it is as a DSR / CTS value.


When shifting from transmission to reception, when DTR and RTS are on and only RTS is off,
If there is any unsent data left in the send buffer, it will wait until all is sent.

When sending the data in the send buffer with WriteFile (), the number of bytes actually sent,
Fixed to erase the data from the send buffer.



--31122021--

I needed to run an old ROM writer, so I made improvements around serial communication.

At INT 14h AH = 01h, turn on DTR and RTS, wait until DSR and CTS are on.


Fixed to write the transmission data after waiting until the transmission buffer becomes free.


At INT 14h AH = 02h, turn DTR on, RTS off, wait until DSR is on.


Modified to read the received data after waiting for the data to enter the receive buffer.


At this time, when the timeout time has elapsed, I fixed it so that it would fail by setting bit7 of AH.
Also, the initial value of the timeout time is put in the work area of the BIOS.


Supported DTR / DSR flow control and RTS / CTS flow control.


It is enabled with the -sd and -sc options, respectively.
When flow control is enabled, it actually manipulates the DTR / RTS state of the printer port.

In addition, the flow control is performed by actually reading the DSR / CTS status.
When flow control is disabled, the DTR / RTS on the printer port remains on.


From the virtual machine, the value set in DTR / RTS (actually it is not reflected in the printer port),
It is read as it is as the value of DSR / CTS.

To shift from transmission to reception, when DTR, RTS is on and only RTS is off


If there is any unsent data left in the send buffer, it will wait until all is sent.

When sending the data in the send buffer with WriteFile (), the number of bytes actually sent,
Fixed to erase the data from the send buffer.




--31122021--

I modified the I386 core of NP21 / W by referring to testi386.exe of QEMU. It is a binary of ia32_x86 version, and the same result as the actual machine can be obtained.
The specific changes are as follows.

  • The DAA / DAS / AAA / AAS / AAM / AAD instructions have been modified based on the DOSBox implementation.

  • Corrected the processing when shifting 16 bits or more with the SHLD / SHRD instruction.

  • Corrected the values of C1, C2, C3 flags for NaN and INF in the FCOM / FCOMI / FXAM instruction.

  • Fixed to clear C1 with FDECSTP / FINCSTP instruction.

  • Fixed FLD instructions to set and clear C1 with or without stack overflow.

  • Fixed to reflect the data16 prefix in the FSTENV / FLDENV / FSAVE / FLDENV instruction.


In addition, with ia32_x64 version, an exception will occur in the floating point test. It seems that the processing is not equivalent between x86 build and x64 build, it is necessary to investigate.

Show Previous Changes
  • Fixed an issue where standard I / O handles could not be closed properly. For example, the problem that the output cannot be output to a file with the SYMDEB> command has been solved.

--

  • Whether to display control characters as symbols for each of INT10h, INT 21h AH = 02h / 06h / 40h, INT 29h,
    Treated as a control character or separated processing.
    Also, fixed the scan code when pressing keys other than letters while holding down Ctrl or Alt.

  • Fixed the process of reverting the code page when exiting not working properly.
    Also, the process to determine that it was started from the command prompt or Power Shell has been fixed.

  • Supported INT 16h, AH = 51h.

  • Added service to get the shift status of the AX keyboard, which was called by the Windows 3.1 installer.

--

View more here...