RESIDENT COMMAND INTERPRETER BY JOHN CHAPMAN 844 S. MADISON ST. HINSDALE, ILLINOIS 60521 COMPUSERV ID 70205,1217 DISCLAIMER THIS MODIFICATION IS PROVIDED WITHOUT WARRANTY OF ANY KIND. THE AUTHOR ASSUMES NO LIABILITY FOR FAILURE OF THIS CODE TO PERFORM IN ANY ENVIRONMENT. THE USER IS COMPLETELY RESPONSIBLE FOR DETERMINING THE APPLICABILITY OF THIS MODIFICATION TO A PARTICULAR ENVIRONMENT. LIMITATIONS THIS MODIFICATION CAUSES THE TRANSIENT PORTION OF COMMAND.COM TO BE MADE RESIDENT AT SYSTEM IPL. RE-BOOTING THE SYSTEM WITH AN UNMODIFIED COMMAND.COM IS THE ONLY WAY TO REMOVE THIS MODIFICATION. THIS MODIFICATION ALTERS THE STARTING SEGMENT [PARAGRAPH] ADDRESS AVAILABLE TO PROGRAMS, LOWERING THE AMOUNT OF STORAGE AVAILABLE BY 4288 BYTES [FOR PC/DOS 1.1 WITH A NORMAL LOAD SEGMENT ADDRESS OF 02C1. THE STARTING SEGMENT OF COMMAND.COM CAN BE FOUND AT LOCATION 0000:9E, AND SHOULD DISPLAY [DEBUG] AS 0000:009E 2C 01 PAGE 1 THIS SET OF TWO DEBUG SCRIPTS WILL ALTER THE IBM PERSONAL COMPUTER DOS COMMAND INTERPRETER (COMMAND.COM) TO REMAIN ENTIRELY RESIDENT, RATHER THAN BE HALF RESIDENT AND HALF TRANSIENT. THE WHOLE PURPOSE OF THIS MODIFICATION IS TO SUPPRESS 99% OF THE OCCURRANCES OF THE REFRESH OF THE TRANSIENT PORTION. THIS WILL REMOVE THE REQUIREMENT TO ALWAYS HAVE A DISK WITH A VALID COMMAND.COM IN DRIVE A. THIS CHANGE HAS BEEN ESPECIALLY USEFUL WITH MULTIPLE DISKCOPY TYPE ACTIVITIES, AND WITH THOSE APPLICATION PACKAGES WHICH USE ALL OF MEMORY, INCLUDING THE TOP 4880 BYTES WHERE THE TRANSIENT COMMAND.COM RESIDES. **NOTE** WE HAVE EXPERIENCED A LIMITED NUMBER OF CASES WHERE THE REFRESHABLE, OR TRANSIENT PORTION OF COMMAND.COM, WHICH NOW RESIDES IN LOW MEMORY, HAS BEEN DAMAGED. THIS DAMAGE CAUSES THE CHECKSUM CODE TO REFRESH THE TRANSIENT PORTION FROM DISK. IF YOU EXPERIENCE REPEATED OCCURANCES OF THIS, SEE PART TWO OF THIS MODIFICATION. PAGE 2 PART ONE BEGIN INSTALLATION BY COPYING THE "MODEL" PC/DOS DISKETTE YOU WISH TO MODIFY ONTO A FRESH DISKETTE USING DISKCOPY. IF YOU ARE PRODUCING A SYSTEM DISKETTE THAT WILL NOT HAVE A COPY OF THE DEBUG COMMAND ON IT, YOU MUST HAVE A DISKETTE WITH DEBUG AVAILABLE. PART ONE: DEBUG SCRIPT DEBUG COMMAND.COM -D,44D,450 XXXX:44D 04 01 00 XXXX:450 00 -D,3ED,3EE XXXX:3ED 01 00 -D,0460,0479 XXXX:0460 46 00 A3 03 01 A1 02 00-8C 1E 05 01 A3 52 04 2D -D,10D3,10D7 XXXX:10D3 8C C8 05 C0 00 **VERIFY THE ABOVE DISPLAYED BYTES. THE CONTENTS OF THIS DISPLAY MUST MATCH EXACTLY. IF ANY DISCREPANCIES ARE DETECTED, DO NOT INSTALL ANY OF THE PATCH WHICH FOLLOWS. -E,3ED,00 -E,44F,54,00 -E,103,61,01 -E,45F,01,06,4F,04,01,06,03,01 -E,467,8C,1E,05,01,A1,02,00 -E,46E,A3,52,04,90,90,90,90,90 -E,479,90,90,90 -E,658,A1,02,00,2B,06,9F,0F -E,65F,BA,10,00,F7,E2,90,71,03 -E,10D3,A1,02,00,2D,02,00 **THE ABOVE ENTERS THE FIRST SECTION OF THE PATCH. PAGE 3 PART ONE (CONTINUED) NEXT, WE WILL DISPLAY THE MODIFIED CODE, TO VERIFY THAT THE PATCH WAS CORRECTLY INSTALLED: -U,045D,047B MOV AX,CS ADD [044F],AX ADD [0103],AX MOV [0105],DS MOV AX,[0002] MOV [0452],AX NOP NOP NOP NOP NOP CALL 0294 NOP NOP NOP -U,0656,0665 INT 21 MOV AX,[0002] SUB AX,[0F9F] MOV DX,0010 MUL AX,DX NOP JNO 066A BE SURE THAT THE ABOVE MATCHES THE DISPLAY PRODUCED BY "UNASSEMBLE" ON YOUR MACHINE. -W WRITING 135F BYTES -Q A> ***WHEN THE "A" PROMPT APPEARS YOU ARE READY TO REBOOT*** YOU SHOULD USE THIS MODIFICATION WITH ONLY THIS PORTION INSTALLED UNLESS YOU ENCOUNTER ANY OF THE PROBLEMS DESCRIBED IN THE SECOND SECTION. PLEASE DO NOT INSTALL PART TWO OF THIS MODIFICATION UNLESS YOU EXPERIENCE A PROBLEM USING PART ONE BY ITSELF. PAGE 4 PART TWO: REFRESH SUPPRESSION WE HAVE EXPERIENCED A LIMITED NUMBER OF CASES WHERE THE 'REFRESH' OF THE TRANSIENT PORTION OF COMMAND.COM, WHICH NOW RESIDES IN LOW MEMORY, HAS BEEN DAMAGED. THIS DAMAGE CAUSES THE CHECKSUM CODE TO REFRESH THE TRANSIENT PORTION FROM DISK. THE CHANGES PROVIDED IN PART TWO ALLOW SPECIFIC PROTECTION AGAINST THE DAMAGE POSSIBLE IN AN ENVIRONMENT WHERE A PROGRAM[S] HAS BEEN WRITTEN WITH SPECIFIC ARCHITECTURE DEPENDENCIES. IF, AND ONLY IF, YOU RECEIVE THE "INSERT DOS DISK IN DRIVE A AND STRIKE ANY KEY WHEN READY" MESSAGE, OR SEE THAT AN UNSOLICITED I/O HAS OCCURRED ON THE DEFAULT DRIVE DURING PROGRAM EXECUTION.. AND ONE OF THESE OCCURANCES IS FOLLOWED BY A SYSTEM "HANG" IF IT BECOMES NECESSARY TO APPLY PART TWO, PLEASE DOCUMENT TO THE AUTHOR THE CIRCUMSTANCES THAT CAUSED THE HANG, INCLUDING, IF POSSIBLE, THE [SOURCE] PROGRAM THAT WAS EXECUTING. IF THE SOFTWARE YOU WERE USING IS PROPRIETARY, PLEASE INDICATE: A) THE PACKAGE NAME, VENDOR, ETC. B) THE MEMORY SIZE ON YOUR MACHINE, AND C) THE LANGUAGE USED TO PRODUCE THE PROGRAM WHICH CAUSED THE MODIFIED COMMAND INTERPRETER TO "HANG". **PLEASE REPORT BUGS** TO THE ADDRESS/ID SHOWN ON THE FIRST PAGE. PAGE 5 PART TWO: DEBUG SCRIPT DEBUG COMMAND.COM -D,111B,111E XXXX:111B 3B D1 77 51 -D,1134,1137 XXXX:1136 3B D1 77 38 AS BEFORE, BE SURE THAT THE DISPLAYS ABOVE MATCH YOUR SYSTEM, AND DO NOT ENTER THE PATCH BELOW UNLESS EACH BYTE VERIFIES. -E,023A,90,90 -E,0242,90,90 -E,0246,90,90 -E,111D,90,90 -E,1136,90,90 -W WRITING 135F BYTES -Q A> *** REBOOT AT THIS POINT *** 1136,90,90 -W WRITING 135F BYTES -Q IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII