091924 / 19-09-2024
MS-DOS Player for Windows
Accuracy
Performance
Features
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)
--2024/09/19--
Corrected processing of INT 21h and AH=49h. After a block of memory is released, it is no longer combined with the subsequent free memory. Processing of INT 21h, AH=4Ah has been modified.
When the size of a specified memory block is successfully changed, the owner of the memory block is changed to the calling process. the owner of the memory block to the calling process. If the resizing fails, it will still be resized to the largest size possible.
As far as the DOS 4.0 source is concerned, the behavior is as follows. The size is increased as much as possible by combining it with the subsequent free memory block. If the size exceeds the specified size, divide the memory block up to the specified size (regardless of whether the original owner is another process or a free memory block). The owner of the memory block is set to its own process. If the size of the memory block is not enough, it returns to the BX how much the size of the memory block has been increased. At this time, the memory block is not restored to its original size. It seems that there is a process in the VZ editor that resizes the memory block that was released. I think this may have improved the behavior.
--2024/09/11--
Corrected INT 13h, AH=15h. In addition to correcting the reversed return of disk types for hard disks and floppy disks, the identification of 2D and 2DD/2HD has also been changed.
Also, the number of blocks on a disk is now returned in CX:DX.
--2024/9/8--
For executing internal commands with “COOMAND.COM /C” in the absence of COMMAND.COM, TRUENAME and VER are now also executed by MS-DOS Player's internal process.
As for TRUENAME, it is not supported by Windows NT's cmd.exe in the first place, As for VER, we want to display the MS-DOS version, not Windows.
For INT 13h, AH=08h, the number of floppy drives connected to DL, BH is now modified to set 0. However, only A: and B: are checked for floppy drive connections.
--2024/9/7--
We have reorganized the code around process startup. There are some changes that may have a large impact, so please help us test them.
When executing an internal command in a child process, such as “COMMAND.COM /C TYPE (file), A-Z:/CHDIR/PATH/SET should be executed in the internal process of MS-DOS Player. This is because executing these commands in the child process is not reflected in the caller. Other commands are executed by starting COMMAND.COM as a child process. If COMMAND.COM is not present, though, they are passed to cmd.exe via system() and processed on the Windows side, TYPE command is executed by MS-DOS Player's internal process so that it goes through INT 29h.
If you try to start “COMMAND.COM /C executable” and there is no COMMAND.COM, Executable file directly, but at this time, update the first and second FCBs of the new process, In this case, the first and second FCBs of the new process are updated to include the arguments specified in the executable file.
When displaying characters on the screen with INT 10h or INT 21h via INT 29h, (Only when INT 29h is hooked, it is now via INT 29h.)
Fixed a problem in which control codes were displayed as symbols as if INT 29h was called directly.
When searching for COMMAND.COM at startup, the paths specified in PATH and MSDOS_PATH
Fixed a problem where the path specified in PATH and MSDOS_PATH was not searched when looking for COMMAND. It appears that when we were reorganizing the code in the past, we accidentally changed the order of the processes.
--2024/9/4--
When trying to launch “COMMAND.COM /C executable argument” as a child process, If COMMAND.COM is not found, the executable file specified by /C will be started directly.
In this case, though, only the “argument” part will be set in the PSP of the new process, I put a space at the beginning of the argument. Kobayashi-sama's ported GREP seems to expect the argument to be prefixed with a space.
Fixed to set ES-1 to AX if INT 21h, AH=49h process succeeds. This is an Undocumented specification, but looking at the DOS 4.0 source, it certainly seems to be the case.
When ^G (bell) is output to the console, INT 29h is not called. When invoking a child process, set 0x0d at the end of the command argument. This is a workaround for the problem pointed out by Mr. Suzuki when calling GREP from an older version of VZ.
--2024/8/31--
The process of loading executable files has been improved. When only the program name is specified, the file is read with .COM / .EXE / .BAT, but , COM / .EXE / .BAT, but if there is a file with the same name as the program name without extension (e.g. JGAWK.EXE and JGAWK),
EXE / .BAT, but if there was a file with the same name as the program name (e.g. JGAWK.EXE and JGAWK) without extension, that file was loaded first. This has been corrected so that files without extensions are not loaded as executable files.
--2024/7/31--
I have reworked it so that it can be built with Visual Studio C++ 6.0 SP6. However, only the MAME core is supported, not the NP21/W core. We have confirmed that the built binaries work on Windows NT 4.0.
Starting this time, the x86 version is built with VC++2008 and the x64 version is built with VC++2017. The x86 version built with VC++2008 runs on Windows 2000.
--2024/7/17--
Eventually, we also added error messages in home country Portuguese.
For non-Brazilian Portuguese, it will be in home country Portuguese.
--2024/7/16--
Added Brazilian Portuguese error messages.
This is valid for Code Page 850 or 860 and when the language setting is Portuguese-based.
However, if the language setting is home country Portuguese, the error message will be in Brazilian Portuguese.
Please note that this is in consideration of the population ratio of the speakers.
--2024/07/05--
Fixed INT 2Fh, AX=0502h.
Added getting parameter error messages instead of extended error codes.
Changed Japanese messages from being hard-coded in SJIS to a const BYTE array. The problem of garbled characters when changing the source encoding has been resolved.
While we are at it, we have added French, German, Spanish, and Korean error messages.
Japanese when the active codepage is 932, and Korean when 949, When the active code page is 932, the error message is in Japanese; when the active code page is 949, the error message is in Korean; when the active code page is 850, the error message is in French, German, or Spanish if Windows language setting is French, German, or Spanish, Otherwise, the error message is in English.
It seems that the Chinese and Taiwanese versions of Windows 98's COMMAND.COM are not localized.
--2024/07/03--
We have reorganized the code around the process of manipulating the IME.
I had not checked that the return value of ImmGetDefaultIMEWnd was not null,
This may have been a problem in non-Asian Windows environments without an IME.
--2024/07/01--
Corrected INT 10h, AX=8200h.
When BL is other than FFh, the scroll mode value before the change is returned to AL has been modified.
INT 16h, AH=02h/12h/51h has been corrected.
The state of the key to be toggled can now be obtained correctly.
However, the state of VK_KANA seems to not be acquired properly in Windows 10 due to an IME issue? However, the state of VK_KANA does not seem to be acquired properly on Windows 10 due to IME-related issues.
Added support for INT 10h, AX=5000h/5001h, AH=85h.
Obtains and changes the cursor mode of the J-3100, and obtains the attribute of the character at the cursor position.
Added support for INT 16h, AH=F0h/F1h/F5h/F6h.
Beep the J-3100, change the lock status of a key, add to the key buffer or get the status.
Added support for INT 6Fh, AH=01h/02h/03h/04h/05h/0Bh/66h.
Changes and retrieves the on/off and status of ATOK5/6 used in the J-3100.
Also, a dummy driver for ATOK5/6 has been incorporated.
Mainly supports services like those used in J31BASIC.
Added support for INT 10h/16h, AX=5000h/5001h.
Get/change the country code of the video keyboard BIOS for AX.
However, changing the value does not affect BIOS operation.
Added support for INT 16h, AX=1300h/1301h.
Turns the DOS/V IME on/off and changes/gets its status.
The new IME in Windows 10 seems to have all sorts of weird behavior on the console app,
It is not possible to correctly retrieve the status of romaji/kana input.
For this reason, the process to switch between Romaji and Kana input is currently disabled.
It seems to be able to determine whether or not a conventional IME is being used, though,
We are still investigating how to determine if a user is using an IME other than the Microsoft IME.
--2024/03/02--
Fixed a problem in which INT 21h AH=43h and BL=08h had the same behavior as BL=06h.
The built-in debugger has been improved.
The R command can now change the value of flags in addition to registers.
The V30 disassembler has been integrated with the disassembler for i386.
Some instructions other than V30-specific instructions that were not recognized correctly have been resolved.
Register names are now displayed with standard names.
(We plan to do the same for the Common Source Code Project.)
We have incorporated further fixes from roytam's fork.
We have also incorporated further fixes from the work by roytam.
We have improved the anti-crash measures of conhost-v2 and fixed it for Windows NT 3.51/4. ..I have never used NT 3.51...
--2024/02/28--
Corrected INT 21h, AX=4404h/4405h/440Ah. The handle was incorrectly handled as BX to specify the handle or BL to specify the drive. AX=440Ah has been corrected to specify handle and AX=4404h/4405h to specify drive.
The built-in debugger has been improved. Processing of code pages in protected mode has been corrected. In addition, the execution trace now records whether each instruction was executed in 16-bit or 32-bit mode. (In the case of V30, whether the 8080 mode is used or not is recorded.) I think that the U and UT commands can now display the instructions correctly.
I put in an anti-crash measure for conhost-v2, referring to roytam's forking. It seems to be easy to crash if the window size is changed when the cursor is on the last line. I have also included a fix to make it work on Windows NT4.0 / 2000, although it has not been tested yet.
--2024/02/19--
When a string longer than the specified buffer length is specified as the copy source in strcpy_s(), exception 0xc0000417 may occur.
I am not sure why, since the function is supposed to copy strings safely in such cases. However, we have taken a countermeasure to use strncpy for the time being.
I have long misunderstood the specification of strcpy_s. I am ashamed of this. I was under the impression that it was supposed to work like strlcpy.
--2023/12/14--
For INT 10h AH=08h, the character code of Kanji characters has been corrected so that the character code can be obtained.
This bug was pointed out to us by Mr. Kinno.
It seems that if you use ReadConsoleOutputCharacterA to get only one Kanji character, 20h is returned.
I think that by retrieving the entire line, both the first and second byte of the Kanji character can be read.
--31/12/2022--
The I386 core of NP21/W has been updated to ver0.86 rev88 beta4.
However, for fpemul_softfloat.c, an exception occurred in testi386.exe, so I haven't taken it in yet this time.
--21/09/2022--
Normally, when an application running on MS-DOS Player tries to access COMMAND.COM,
--30/08/2022--
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.
--16/08/2022--
Fixed so that playback does not stop when BEEP sounds are uttered continuously. I am trying to play with double buffer with waveOut API.
--21/07/2022--
Supported the reproduction of BEEP sound.
--21072022--
I needed to run an old ROM writer, so I made improvements around serial communication.
Supported DTR / DSR flow control and RTS / CTS flow control. It is enabled with the -sd and -sc options, respectively.
When shifting from transmission to reception, when DTR and RTS are on and only RTS is off,
--31/12/2021--
I needed to run an old ROM writer, so I made improvements around serial communication.
Supported DTR / DSR flow control and RTS / CTS flow control.
In addition, the flow control is performed by actually reading the DSR / CTS status.
--31/12/2021--
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 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.
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...