How to create an OS/2 2.1 boot disk

Volume in drive A is unlabeled     Serial number is 2240:C014 Morton F. Kaplon CIS : 73457,437 Directory of a:\*.* Boot Disk for OS/2 2.1 GA isomg FAT File System  Mon  06-28-1993 This is the minimum I have been able to attain. It will just fit on a 1.2 MB floppy

Use sysinstx to create the bootable floppy; From c:  sysinstx a:

sysinstx.com is on the Installation Diskette

The rest should already be on the C: drive of installed 2.1

4-22-93 14:50     401   0   ___A_  BKSCALLS.DLL 4-22-93 14:51     398   0   ___A_  BMSCALLS.DLL 4-25-93 16:04    9443   0   ___A_  BVHINIT.DLL 4-22-93 14:54     454   0   ___A_  BVSCALLS.DLL 4-22-93 16:59    3632   0   ___A_  CLOCK01.SYS   Use CLOCK02.SYS if PS-2 4-29-93 21:41   90624  53   ___A_  CMD.EXE 6-28-93 20:29     411   0   ___A_  CONFIG.SYS 4-29-93 21:52   25610   0   ___A_  COUNTRY.SYS 4-29-93 21:30   90854   0   ___A_  DOSCALL1.DLL 6-24-93 22:45    1536   0   RHSA_  EA DATA. SF  Created by sysinstx 4-25-93 17:47   25102   0   ___A_  IBM1FLPY.ADD  Use IBM2FLPY.ADD if PS-2 4-25-93 20:30    9684   0   ___A_  IBMINT13.I13 4-22-93 17:37   29525   0   ___A_  KBD01.SYS     Use KBD02.SYS if PS-2 4-22-93 15:32     858   0   ___A_  KBDCALLS.DLL 4-22-93 16:09     508   0   ___A_  MSG.DLL 4-22-93 16:08     466   0   ___A_  NLS.DLL 6-24-93 22:39    1099   0   RHSA_  OS2BOOT       Created by sysinstx 4-25-93 16:12   56000   0   ___A_  OS2CHAR.DLL 4-22-93 15:39   33236   0   ___A_  OS2DASD.DMD 5-06-93 16:13  734366   0   ___A_  OS2KRNL 4-25-93 15:19   28160   0   ___A_  OS2LDR 4-22-93 11:31    8516   0   ___A_  OS2LDR.MSG 4-29-93 21:27   15250   0   ___A_  QUECALLS.DLL 5-03-93 20:12    5590   0   ___A_  SCREEN01.SYS  Use SCREEN02.SYS if PS-2 4-25-93 16:18   32806   0   ___A_  SESMGR.DLL 4-25-93 16:11    1825   0   ___A_  VIOCALLS.DLL 1,206,354 bytes in 26 file(s)        1,211,392 bytes allocated 246,272 bytes free

Config.sys to be used with above file set

buffers=32 iopl=yes memman=noswap SET OS2_SHELL=CMD.EXE protshell=cmd.exe diskcache=64,LW protectonly=yes libpath=.;\; set path=\;\ set dpath=\; set keys=on BASEDEV=OS2DASD.DMD basedev=ibm1flpy.add      If PS-2 use ibm2flpy.add basedev=ibmint13.i13 REM basedev=print01.sys   Remove REM if print01.sys used

Note that print01.sys is not used. This means that printing is not supported from this floppy. If used be sure basedev=print01.sys is in config.sys. REPLACE PRINT01.SYS with PRINT02.SYS if PS-2

The basedev=ibmint13.i13 should support just about any hard drive I believe and this has the smallest size. It is smaller than the os2scsi.dmd which also supports SCSI but is not required.

If installing High Performance File System the following should be in config.sys and the files on the floppy IFS=HPFS.IFS /CACHE:64 /CRECL:4   129090 bytes IFS=CDFS.IFS /Q                    40292 bytes I am not sure the CDFS.IFS is required if CDROM not used. In any event when these are added to the floppy it does require a 1.44 MB floppy.

/* BOOTDISK.CMD for OS/2 2.1 GA by James K. Beard CIS 71675,566       */ /* Two-disk OS/2 2.1 GA boot; packs 1.2 MB in A:, 1.1 MB in B:  Supported on floppy are CHKDSK, FORMAT, FDISK, BACKUP, RESTORE Sufficient room remains on B: (if 1.44 MB) for HPFS, your SCSI drivers, the IBM Tiny Editor, etc. Use the procedure in Appendix C   of the OS/2 manual to backup and restore the worplace shell, or use the shareware WPSBACKUP.

Modified from MAKEBOOT.CMD version 1.00 by Donald L. Meyer, internet:  dlmeyer@uiuc.edu

This program accepts one parameter: * "RECON" tells program to skip main install, and only do optional installation of things like SCSI support, etc.   Thanks go out to Morton Kaplon  (73457,437 @ Compuserve) for doing the legwork determining which files/drivers were/weren't   necessary for Donald L. Meyer's 2.0 version, and David Moskowitz's    article in "OS/2 2.1 Unleashed" (Sams, 1993) pp 57-59. */

'@ECHO OFF' /* Don't echo system commands to screen */

version=1.00

/* Initializations */

call get_utils /* Install the RexxUtil functions */

IF (\(SysOS2Ver='2.10')) THEN DO /* Verify OS/2 2.10 */ SAY 'Installed OS/2 version is 'SysOS2Ver SAY 'BOOTDISK/CMD 'version' is tested only for OS/2 2.10' SAY 'Continue?' IF y_or_n='N' THEN EXIT END

/* Parse arguments */ /* Copy command line argument string to "all_args" & convert to upper case */ PARSE UPPER ARG all_args CALL parse_all_args(all_args)

CALL find_os2 /* Find OS/2 (define "instfrom," ususaly 'C:' */

CALL SysCls /* Clear screen; "dots" won't work if screen scrolls */ SAY 'BOOTDISK/CMD 'version' for OS/2 2.1' SAY 'Utility to create two OS/2 2.1 Boot Diskettes for drives A: and B:'

/* Echo instructions on use to screen */ SAY 'Syntax:  BOOTDISK {RECON}' SAY '       [RECON = Reconfigure existing boot disk. *Optional]' SAY

CALL find_config /* Determine type: ISA - EISA, or MCA - PS/2; HPFS=Y or N */

/* Begin creating the two boot disks */ /* Files from Disk 1, copied to A:\*.* */ inst_files = 'OS2KRNL* OS2LDR OS2LDR.MSG SYSINSTX.COM' /* Disk 0 to temp. dir*/ boot_files='OS2KRNL' 'OS2LDR' 'OS2LDR.MSG' /* Temp. dir to A: */ disk1_to_A='KEYBOARD.DCP SYSINST1.EXE COUNTRY.SYS MOUSE.SYS' /* IF (type='1') THEN disk1_to_A=disk1_to_A' IBM1S506.ADD' */

IF (ReConfig='N') THEN DO temp_dir=instfrom'\OS2\INSTALL\BOOTDISK' k=SysFileTree(temp_dir'\SYSINSTX.COM', 'file', 'FO') /*****************************************************************/ /*** Copy necessary files from installation DISK 0 and DISK 1 ****/ if file.0='0' THEN DO /* If SYSINSTX.COM isn't on C:, use installation disks*/ k=SysFileTree(temp_dir, 'file', 'DO') /* If not alread there ... */   if file.0=0 THEN CALL SysMkDir temp_dir /* Create scratch subdirectory */

/* Copy files from installation disk into temporary subdirectory */ CALL copy_from_a temp_dir 'inst' 'SYSINSTX.COM' inst_files 'RENAME 'temp_dir'\OS2KRNL* OS2KRNL' /* Correct this file name */

/* Copy specific files from Disk 1 into temporary subdirectory */ CALL copy_from_a temp_dir '1' 'FDISK.COM' disk1_to_A call evict_disk /* Make sure OS/2 2.1 disks are out of A: */ END /*****************************************************************/ /******************* Create the boot disks ***********************/

CALL saywrap('Do you want to format the floppy disks before copying files?') IF y_or_n='Y' THEN CALL format_a_b ELSE CALL label_a_b

/* Install boot track, kernal, loader */ CALL saywrap('Installing boot track ...') temp_dir'\SYSINSTX A: >NUL' /* Boot track */

k=WORDS(disk1_to_A) /* Add Disk 1 files to boot file list */ DO i=1 TO k   boot_files=boot_files WORD(disk1_to_A,i) END DROP disk1_to_A

source=temp_dir extension='' /* Null strings disrupt argument transfer--use globals */ CALL copy_to_boot 'A:' boot_files ; /* Copy boot files to A: */

/* Copy the DLL's to B:\DLL */

/* Begin by making the directory B:\DLL */ i=SysFileTree('B:\DLL', 'file', 'DO') /* If not alread there ... */ IF file.0=0 THEN CALL SysMkDir 'B:\DLL' /* Create B:\DLL */

dll_list='ANSICALL DOSCALL1 NLS BKSCALLS BMSCALLS BVHINIT BVSCALLS KBDCALLS MOUCALLS MSG NAMPIPES OS2CHAR QUECALLS SESMGR VIOCALLS' IF hpfs='Y' THEN dll_list=dll_list UHPFS

source=instfrom'\OS2\DLL' extension='.DLL' CALL copy_to_boot 'B:\DLL' dll_list

/* Copy files from "instfrom" drive to A: */ A_list='CMD.EXE OS2DASD.DMD HARDERR.EXE SYSLEVEL.OS2 IBMINT13.I13 IBM'type'FLPY.ADD CLOCK0'type'.SYS KBD0'type'.SYS PRINT0'type'.SYS SCREEN0'type'.SYS IBM1S506.ADD' IF hpfs='Y' THEN A_list=A_list HPFS.IFS

source='' /* Source is various subdirectories in \os2 */ extension='' /* Extensions are supplied in file list */ CALL copy_to_boot 'A:' A_list

/* Copy files from "instfrom" drive to B: */ B_list='CHKDSK.COM FDISK.COM FORMAT.COM DOS.SYS OSO001H.MSG OSO001.MSG' 'BACKUP.EXE' 'RESTORE.EXE'

CALL copy_to_boot 'B:' B_list /* "source" and "extension" are null strings */

/**********************/ CALL saywrap('Do you want to leave the temporary directory 'temp_dir' for future') CALL saywrap('runs of BOOTDISK/CMD without the OS/2 2.1 installation diskettes?') IF y_or_n='N' THEN DO /* Erase the temporary files and remove the temporary directory */ 'ECHO Y | DEL 'temp_dir' >NUL' /* Delete files; echo "Y" to prompt */ CALL SysRmDir temp_dir /* Delete the subdirectory */ END /**********************/

IF type='2' THEN DO /* Create ABIOS.SYS if a PS/2 boot disk. */   abios_file='A:\ABIOS.SYS' CALL lineout abios_file, '', 1 k=lineout(abios_file) DROP abios_file CALL saywrap('ABIOS.SYS Created on drive A:.') END END

/*  The Optionals Area  */ /* CALL SysCls */

/* Get drive space */ DriveInfo=SysDriveInfo('B:') disk_space=WORD(DriveInfo,2)

/* Get co-processor emulator size */ rc = SysFileTree(instfrom'\OS2\DLL\NPXEMLTR.DLL', 'file_c',,) math_size=WORD(file_c.1,3)

/* Get SCSI driver data */ rc = SysFileTree(instfrom'OS2SCSI.DMD', 'file_s', 'FS') scsi_size=WORD(file_s.1,3) scsi_filespec=WORD(file_s.1,5)

/* Check for Tiny Editor */ CALL saywrap('Looking for Tiny Editor IBM freeware ...') DriveMap=SysDriveMap('C:', 'LOCAL') /* Find all attached hard drives */

DO i=1 to WORDS(DriveMap) /* Loop over the number of drives */ ed_from=WORD(DriveMap,i) rc=SysFileTree(ed_from'THELP.HLP', 'file_e', 'FS') /* Locate TinyEd */ IF (file_e.0>0) THEN LEAVE /* Define "instfrom" */ END IF file_e.0>0 THEN DO editor='Y'  t_hlpsize=WORD(file_e.1,3) /* HELP file size */ t_hlpspec=WORD(file_e.1,5) /* HELP file pathname */ sp=LASTPOS('\',t_hlpspec) /* Find pathname for T2.EXE */ t_exespec=SUBSTR(t_hlpspec,1,sp)'T2.EXE' k=SysFileTree(t_exespec, 'file_e', 'F') /* Find executable */ t_exesize=WORD(file_e.1,3) /* T2.EXE file size */ t_size=t_hlpsize+t_exesize END ELSE editor='N'

/* Start interactive configuration process */ CALL saywrap('Drive B: space is            'disk_space' bytes.') CALL saywrap('Co-processor emulator size is 'math_size' bytes.') CALL saywrap('SCSI driver size is          'scsi_size' bytes.') IF editor='Y' THEN CALL saywrap('Editor size is               't_size' bytes.')

IF (disk_spaceNUL' DriveInfo=SysDriveInfo('B:') disk_space=WORD(DriveInfo,2) CALL saywrap('Remaining disk space on B: is 'disk_space' bytes.') END

IF (disk_space < scsi_size) & (file_s.0='0') THEN DO CALL saywrap('There isn''t enough space to install the SCSI Driver...') scsi='N' END ELSE DO CALL saywrap('Will you need the SCSI Driver installed?') scsi=y_or_n END

IF scsi='Y' THEN DO /* Add on SCSI driver size */ 'COPY 'instfrom'\OS2\OS2SCSI.DMD B:\*.* /B >NUL' /* Copy the SCSI driver */ DriveInfo=SysDriveInfo('B:') disk_space=WORD(DriveInfo,2) CALL saywrap('Remaining disk space on B: is 'disk_space' bytes.') END

IF editor='Y' THEN DO IF (disk_space < t_size) THEN DO    CALL saywrap('There isn''t enough space to install the Tiny Editor.') edits='N'   END ELSE DO   CALL saywrap('Will you need the Tiny Editor installed?') edits=y_or_n END END ELSE edits='N'

IF edits='Y' THEN DO 'COPY 't_exespec' B:\edit.exe /B >NUL' /* Rename it EDIT.EXE */ 'COPY 't_hlpspec' B:\*.* /B >NUL' END

CALL create_config_sys hpfs type scsi /* Create A:\CONFIG.SYS dynamically */

CALL saywrap('Boot Diskettes have been created.')

DriveInfo=SysDriveInfo('B:') /* Give remaining space on B: */ disk_space=WORD(DriveInfo,2) CALL saywrap('Remaining disk space on B: is 'disk_space' bytes.')

DriveInfo=SysDriveInfo('A:') /* Give space on A:, too */ disk_space=WORD(DriveInfo,2) CALL saywrap('Remaining disk space on A: is 'disk_space' bytes.')

EXIT /************************************************************/ /************* Utility functions and procedures *************/ /************************************************************/ get_utils: PROCEDURE/* Add the RexxUtil functions */ CALL addit 'SysOS2Ver' CALL addit 'SysCls' CALL addit 'SysCurPos' CALL addit 'SysFileTree' CALL addit 'SysDriveMap' CALL addit 'SysDriveInfo' CALL addit 'SysTextScreenRead' CALL addit 'SysMkDir' CALL addit 'SysRmDir' CALL addit 'SysTempFileName' CALL addit 'SysFileDelete' RETURN /*****/ addit: PROCEDURE; ARG funcname CALL RxFuncAdd funcname, 'RexxUtil', funcname RETURN /************************************************************/ parse_all_args: PROCEDURE EXPOSE ReConfig; ARG arg_string

IF (WORD(arg_string,1)='RECON') THEN ReConfig='Y' ELSE ReConfig='N'

RETURN /************************************************************/ find_os2: PROCEDURE EXPOSE instfrom /*Find the drive where OS/2 is installed */ DriveMap=SysDriveMap('C:', 'LOCAL') /* Find all attached hard drives */ DO i=1 TO WORDS(DriveMap) /* Loop over the number of drives */ k=SysFileTree(WORD(DriveMap,i)'\OS2\HELP.CMD', 'file',,) /*Locate OS/2 */ IF (file.0='1') THEN instfrom=WORD(DriveMap,i) /* Define "instfrom" */ END RETURN /************************************************************/ find_config: PROCEDURE EXPOSE instfrom type hpfs /* Determine configuration */ rc=SysFileTree(instfrom'\OS2\KBD01.SYS', 'file',,) /* Check: ISA or MCA? */ IF (file.0='1') THEN type=1 /* ISA or EISA */ ELSE type=2 /* MCA or PS/2 */

rc=SysFileTree(instfrom'\OS2\HPFS.IFS', 'file', 'FO') /* Check: HPFS? */ IF file.0=1 THEN hpfs='Y' ELSE hpfs='N' RETURN /************************************************************/ copy_from_a: PROCEDURE; ARG temp_dir id filename file_list /* Copy files from A: */ /* temp_dir Temporary directory to which files are copied */ /* id        Disk ID; 'INST', '1', or '2' */ /* filename  File on OS/2 disk whose existence identifies it */ /* file_list List of files to copy */ CALL get_inst_disk id filename /* Get the OS/2 2.1 disk */ CALL get_files_a temp_dir id file_list /* Copy the files to the temp subdir */ RETURN /************************************************************/ get_inst_disk: PROCEDURE; ARG id filename /* Get OS/2 disk in A: */ /* id        Disk ID; 'INST', '1', or '2' */ /* filename  File on OS/2 disk whose existence identifies it */ k=0 DO WHILE k='0' CALL BEEP 392, 250 /* Beep 392 Hz for 250 milliseconds */ if(id='INST') THEN SAY 'Insert OS/2 INSTALLATION DISK in drive A:.' ELSE SAY 'Insert OS/2 Disk 'id' in drive A:.' 'PAUSE' k=SysFileTree('A:\'filename, 'file',,) /* Check for filename */ k=file.0 /* Try again until filename is found */ END RETURN /************************************************************/ get_files_a: PROCEDURE; ARG temp_dir id file_list /* Copy files from OS/2 disk in A: */ /* temp_dir Temporary directory to which files are copied */ /* id        Disk ID; 'INST', '1', or '2' */ /* file_list List of files to copy */ k=SysFileTree(temp_dir, 'file', 'DO') /* Make sure directory exists */ IF file.0=0 THEN DO SAY 'Error in "get_files," directory 'temp_dir' does not exist.' EXIT END k=SysCurPos /* Find row of cursor on screen */ k=WORD(k,1) IF id='INST' THEN message='Copying files from OS/2 2.1 installation disk' ELSE message='Copying files from OS/2 2.1 Disk 'id SAY message dot_pos=LENGTH(message) n=WORDS(file_list) DO i=1 TO n /* Loop over file names in "file_list" */ 'COPY A:\'WORD( file_list, i) temp_dir' /B >NUL' CALL SysCurPos k, dot_pos+i /* Echo a dot for each file */ SAY '.' END RETURN /************************************************************/ evict_disk: PROCEDURE /* Evicts OS/2 2.1 installation disk from A: before writing to A: */ /* filename File name that identifies an installation disk */ k=1 DO FOREVER /* Get the OS/2 2.1 installation disks out of A: */ sdi=SysDriveInfo('A:') IF sdi='' THEN LEAVE /* Disk not ready */ IF \(WORD(sdi,4)='DISK') THEN LEAVE /* OS/2 disk label is "DISK ' */ CALL BEEP 392, 250  SAY 'Insert OS/2 2.1 BOOT DISKS [To Be Created] in drives A: and B:.'  'PAUSE'  END RETURN /************************************************************/ format_a_b: PROCEDURE /* Format A: and B: */

SAY 'FORMATting the boot disks ...'

tempfile=SysTempFileName('TEMP????') /* Write response file for FORMAT */ CALL LINEOUT tempfile, '', 1 /* Open the file, write blank line */ CALL LINEOUT tempfile, 'N' CALL LINEOUT tempfile /* Close the file */

'FORMAT A: /V:OS21_BOOT_A <'tempfile' >NUL' /* Format and label the disks */ 'FORMAT B: /V:OS21_BOOT_B <'tempfile' >NUL'

CALL SysFileDelete tempfile

RETURN /************************************************************/ label_a_b: PROCEDURE /* Label A: and B: */ 'LABEL A:OS21_BOOT_A' 'LABEL B:OS21_BOOT_B' RETURN /************************************************************/ copy_to_boot: PROCEDURE EXPOSE source extension instfrom; ARG ab file_list /* ab        Destination drive, 'A:' or 'B:' */ /* file_list List of files to copy */ /****Arguments passed as variables to allow null strings****/ /* source    Source path, or blank string '' */ /* extension Extension, such as '.DLL' to be applied to all file names */ /* instfrom  Hard drive where OS/2 2.1 is installed */

k=SysCurPos /* Move the cursor to column dot_pos */ k=WORD(k,1) IF k>21 THEN k=0 /* End-around, don't scroll */

message='Installing Files on new BOOT DISKETTE 'ab dot_pos=LENGTH(message) CALL saywrap(message) /* CALL SysCurPos k, dot_pos qqqq */ n=WORDS(file_list) DO i=1 TO n CALL SysCurPos k+1, 0 /* Echo file names to screen */ SAY '                                                    ' /* Erase line */ CALL SysCurPos k+1, 0 /* Echo file names to screen */ call saywrap(WORD(file_list,i)extension)

IF source='' THEN DO   rc=SysFileTree(instfrom'\'WORD(file_list,i)extension,'file','FSO') IF (rc>0 | file.0='0') THEN DO     SAY 'File 'WORD(file_list,i)extension' not found on C:' EXIT END filespec=file.1 END ELSE filespec=source'\'WORD(file_list,i)extension 'COPY 'filespec ab'\*.* /B >NUL' /* System files to ab: */ CALL SysCurPos k, dot_pos+i /* Echo dots */ SAY '.' END CALL SysCurPos k+1, 0 /* Clear last file name */ SAY '                                                    ' CALL SysCurPos k+1, 0 /* Leave cursor on beginning of blank line */ DROP file_list RETURN /************************************************************/ saywrap: PROCEDURE; PARSE ARG msg /* Erase line, then write to screen */ k=WORD(SysCurPos, 1) /* Find line number */ IF k>21 THEN DO k=0 /* End-around, don't scroll */ CALL SysCurPos 0, 0 END call syscurpos k,0 /*qqqq*/ DO 3 SAY COPIES(' ', 75) /* Erase lines */ END CALL SysCurPos k, 0 /* Back up and write on blank line */ SAY msg RETURN /************************************************************/ y_or_n: PROCEDURE /* Get 'Y' or 'N' from console */ /* Syntax: response=y_or_n  */ resp='X' DO UNTIL (resp='Y' | resp='N') CALL saywrap('Y or N?') PULL resp resp=WORD(resp,1) /* Eliminate leading & trailing blanks, etc. */ END RETURN resp /************************************************************/ create_config_sys: PROCEDURE; ARG hpfs type scsi /* Create the Config.Sys dynamically... */ CALL saywrap('Creating CONFIG.SYS on drive A: ...') config_file='A:\CONFIG.SYS' IF hpfs='Y' THEN DO CALL lineout config_file, 'ifs=a:\hpfs.ifs /c:64', 1 /* Opens the file */ CALL lineout config_file, 'protshell=sysinst1.exe' END ELSE CALL lineout config_file, 'protshell=sysinst1.exe', 1 CALL lineout config_file, 'set os2_shell=a:\cmd.exe' CALL lineout config_file, 'libpath=.;\;b:\dll;' CALL lineout config_file, 'set path=a:\;b:\;b:\dll;c:\os2' CALL lineout config_file, 'set dpath=a:\;b:\;b:\dll' CALL lineout config_file, 'set prompt=$i[$p]' CALL lineout config_file, 'buffers=32' CALL lineout config_file, 'iopl=yes' CALL lineout config_file, 'diskcache=64,LW' CALL lineout config_file, 'memman=noswap' CALL lineout config_file, 'basedev=print01.sys' CALL lineout config_file, 'basedev=ibm1flpy.add' IF (type='1') THEN CALL lineout config_file, 'BASEDEV=IBM1S506.ADD' IF (scsi='Y') THEN CALL lineout config_file, 'BASEDEV=B:\IBMSCSI.DMD' CALL lineout config_file, 'basedev=ibmint13.i13' CALL lineout config_file, 'basedev=os2dasd.dmd' CALL lineout config_file, 'protectonly=yes' CALL lineout config_file, 'pauseonerror=yes' CALL lineout config_file, 'codepage=437,850' CALL lineout config_file, 'devinfo=kbd,us,keyboard.dcp' CALL lineout config_file, 'device=b:\dos.sys' CALL lineout config_file, 'device=mouse.sys' CALL lineout config_file, 'set keys=on' CALL lineout config_file, 'rem device=b:\os2scsi.sys' CALL lineout config_file, 'rem device=\testcfg.sys' CALL lineout config_file /* Close the file */ RETURN /************************************************************/