This is a detailed list of the changes I made in PC DOS 7.0
IBMBIO.COM
- Decreased the number of resident floppy drive tables from 4 to 2 saving 200 bytes. Additional floppy drive tables will be added dynamically if 3 or 4 floppy drives are present.
- Build A20 compare pointers inline instead of loading them from memory. Also building the pointers is faster than loading them.
- Use indirect near call instead of direct far call in INT 6Ch power management handler so that far call check A20 entry can be deleted.
- Deleted unreferenced disable A20 routine.
- Added assume DS to clock device routine (daycnt_to_day) saving 27 bytes due to unneeded CS overrides.
- Moved the clock device routines (daycnt_to_day and bin_to_bcd) from the resident portion to the relocatable portion which loads in the HMA and and combined them saving 193 bytes.
- Deleted month_table and modified power management read date routine to use smaller month_tab saving 24 bytes.
- Moved constants fat_12_id, fat_16_id, and vol_no_name from the resident portion to the relocatable portion which loads in the HMA saving 30 bytes.
- Deleted duplicate null volser definition (NO NAME).
- Deleted duplicate translations in disk error code table.
- Defined BPB array table in tracktable area which is unused at init time saving 52 bytes.
- Call EnsureA20on instead of separate IsA20off and EnableA20 routines.
- Optimized INT 2Fh path by jumping directly to interrupt handler routine instead of using indirect jump.
- Deleted pseudo disk parameter table (sm92) and loaded values inline.
- Disabled interrupts while updating INT 13h and 19h vectors in INT 2Fh function 13h code.
- Added CONFIG.SYS command DOSDATA=UMB to allow the DOS system tables (FILES,FCBS,BUFFERS,LASTDRIVE,STACKS) to be moved to upper memory. Windows verifies that at least 10 SFTs are available by opening CON 10 times and searching the first 512K twice for 5 occurrences of 'CON ' assuming that each occurrence is an SFT entry. Since Windows doesn't verify that each occurrence is actually in an SFT it can be fooled into loading when DOSDATA=UMB is in effect by storing 5 'CON ' strings in the DOS console input buffer during startup (INT 2Fh function 1605h).
- Added ESC to selective startup prompt.
- Added support for preloading DRVSPACE.BIN and STACKER.BIN.
IBMDOS.COM
- Removed 255-byte unused area FAKE_COUNT from the DOS data area and moved AuxSft into newly freed area saving 59 bytes.
- Use REP MOVSD when copying data to and from the HMA transfer buffer when buffers are in the HMA by checking the 386 flag in the DOS data area.
- Aligned DOS HMA interrupt vector jump table on a doubleword boundary for faster access.
- Reverted to DOS 5.0 behavior of not flushing buffers immediately after releasing a FAT chain because of noticeable slowdown on DEL command.
- Fixed bug which caused infinite loop when trying to create a temp file in a full root directory (INT 21h function 5Ah).
- Fixed bug which caused INT 21h functions 65A0h-65A2h to not work.
- Optimized code in EXEPATCH.ASM to decrease kernel code size.
- Optimized INT 21h function 33h code to decrease kernel code size.
- Correctly initialize disk volume change flag to -1 instead of 0.
COMMAND.COM
- Added /H option to load COMMAND.COM and its environment into upper memory.
- Add /O option to COMMAND.COM to disable the overwrite prompt on COPY, XCOPY, and MOVE commands.
- Moved init time message "Top level process aborted, cannot continue" out of resident portion saving 48 bytes.
- Moved output redirection filename to the transient portion of COMMAND.COM saving 80 bytes (input redirection filename was already there).
- Merge QueryA20 and EnableA20 routines inline into CheckA20 routine.
- Documented TRUENAME command in online help.
- Made commonly used PROMPT $P$G the default setting.
- Reset extended error message sublist so transient isn't reloaded needlessly.
- Deleted duplicated "Bad command or file name" message from resident portion.
- Moved loadhigh UMB variables to common data area (MsgBuffer/SafePathBuffer) saving 48 bytes.
- Combined common resident substitution list data.
- Added support for REXX batch files.
- Added ESC to selective startup prompt.
- Reduced size of arg parse buffer from 256 bytes to correct size of 128 bytes.
- Combined arg buffer and temp buffer saving 128 bytes.
ANSI.SYS
- Moved video mode initialization tables out of resident portion.
- Optimized CON driver chaining code.
- Get blink/intensity state by checking 3x8h register setting in BIOS data area instead of using functionality call (INT 10h function 1Bh).
ATTRIB.EXE
- Removed defunct extended attribute handling code.
DISKCOPY.COM
- Added code to use XMS when copying a disk in a single-drive system.
DOSKEY.COM
- Decreased resident size by using the PSP command line for data.
- Move code to HMA if available.
DYNALOAD.COM
- Wrote new program to load a device driver after system startup.
EMM386.EXE
- Added MOVEXBDAHI option to move the XBDA to upper memory.
- Fixed bug which caused hang on Ctrl-Alt-Del if stack is in upper memory.
- Fixed V86 fault handler to correctly reflect exception 13 hits.
- Added private API (INT 67h AX=FFA6h) to provide page mapping functions.
- Changed internal driver version to 4.50.
- Decreased resident size by deleting unnecessary hardware A20 code.
- Added code to correctly emulate instructions with operand size and address size overrides.
- Changed segment alignments from paragraph to doubleword.
- Moved Windows EMM Global Import product info out of resident.
- Moved error handler code and data from conventional to extended memory.
- Removed debugging routines from production version.
- Optimized driver request handler code.
- Optimized INT 15h function 87h move block code.
- Moved protected mode VCPI code from conventional to extended memory.
- Fixed OUTS instruction handler to correctly update SI/ESI.
FC.EXE
- Fixed code to not process lines with %s as a printf format specifier.
FDISK.EXE
- Fixed code to not increment drive letter for non-DOS extended partitions.
FIND.EXE
- Added support for wildcards in filename specification(s).
- Added /S option to search subdirectories.
HIMEM.SYS
- Decreased resident size by 64 bytes by deleting unused variables and providing only a minimum device header since HIMEM doesn't use device driver functionality.
- Optimized 386+ move block handler code for better performance.
- Changed internal driver version to 3.15.
- Added fast A20 handler support via /FASTA20 option.
- Optimized A20 checking code.
- Moved VDISK check and INT 15h hook code out of resident portion.
- Combined A20 routines error exit paths.
- Fixed code to get extended memory size above 16M on MCA machines.
- Moved Addmem routine out of resident relocatable code.
- Correctly handle error return for XMS 3.0 super extended memory functions on 286 machines.
JOIN.EXE
- Fixed bug causing an extraneous parameter to be processed if non-zero data was at beginning of the data area.
LABEL.COM
- Correctly restore current directory when labeling a drive other than the current drive.
MEM.EXE
- Changed code which checks for EMM386 to look for id within EMM386 instead of issuing general EMM check and IOCTL function.
- Corrected sizes displayed for first 3 entries on /D (Interrupt Vector, ROM Communication Area, and DOS Communication Area).
- Corrected sizes displayed for IBMBIO and IBMDOS data area.
- Display correct segment for device drivers on MEM /M.
- Added XMS handle info to MEM output.
- Removed undocumented /A option and always display HMA available space info.
- Added EMS page frame info to MEM /D output.
- Corrected sizes displayed for system blocks.
- Reduced size by combining some assembly routines and providing dummy entries for unneeded C startup routines.
- Changed output fields to handle values >64M and use XMS 3.0 query function if available.
- Removed EMM386 EMS/XMS pooled memory message.
MOVE.EXE
- Fixed uninitialized pointer bug which caused random data to be overwritten.
MSCDEX.EXE
- Optimized code and reduced the resident size of MSCDEX.
RAMDRIVE.SYS
- Decreased resident code size by modifying code to keep only required memory resident depending on driver type (XMS, EMS, or conventional memory).
- Decrease size of boot sector signature data from 128 to 64 bytes.
- Disallow sector size 1024 as a valid parameter.
REPLACE.EXE
- Fixed bug causing an extraneous parameter to be processed if non-zero data was at beginning of the data area.
- Removed defunct extended attribute data.
SHARE.EXE
- Rebuilt due to changes to DOS data area.
- Move code to HMA if available and added /NOHMA option force loading low.
- Created STRIPSHR utility to strip excess data from SHARE to reduce EXE size.
SUBST.EXE
- Fixed bug causing an extraneous parameter to be processed if non-zero data was at beginning of the data area.
SYS.COM
- Fixed bug which caused SYS to fail if an allocated cluster ended with F7h.
XCOPY.EXE
- Exit with return code 4 if an invalid drive is specified.
Common code
- Removed exact version checking from most programs except for COMMAND.COM and SHARE.EXE. Programs instead check for DOS 5 or above.
REXX
- Made numerous optimizations and bug fixes to REXX.EXE.
- Wrote REXXDUMP utility to dump all of the variables of an active REXX program.
- Wrote most of the external REXX functions (*.RX).