summaryrefslogtreecommitdiff
path: root/v4.0/src/CMD/SYS/SYSHDR.INC
diff options
context:
space:
mode:
Diffstat (limited to 'v4.0/src/CMD/SYS/SYSHDR.INC')
-rw-r--r--v4.0/src/CMD/SYS/SYSHDR.INC427
1 files changed, 427 insertions, 0 deletions
diff --git a/v4.0/src/CMD/SYS/SYSHDR.INC b/v4.0/src/CMD/SYS/SYSHDR.INC
new file mode 100644
index 0000000..896d382
--- /dev/null
+++ b/v4.0/src/CMD/SYS/SYSHDR.INC
@@ -0,0 +1,427 @@
1 page 80,132
2;******************* START OF SPECIFICATIONS ***********************************
3;
4; MODULE NAME: SYS1.SAL + SYS2.SAL + SYSSR.SAL
5;
6; DESCRIPTIVE NAME: SYS
7;
8; FUNCTION: Copies system programs IBMBIO.COM and
9; IBMDOS.COM onto a specified media.
10;
11; ENTRY POINT:
12;
13; INPUT:
14;
15; EXIT NORMAL:
16;
17; EXIT ERROR:
18;
19; INTERNAL REFERENCES:
20;
21; ROUTINES:
22;
23; DATA AREAS:
24;
25; EXTERNAL REFERENCES:
26;
27; ROUTINES:
28;
29; DATA AREAS:
30;
31; NOTES: Version 4.0 is a MAJOR diversion from all previous versions of DOS.
32;
33; In all older versions of SYS the target diskette, HAD to meet the
34; following criteria in order to be SYSed:
35; - there must be enough physical room for IBMBIO and
36; IBMDOS.
37; - the first data cluster (#2) had to be either not
38; used - or owned by IBMBIO allready on the disk
39; - The first 2 root DIR entries had to be unused, deleted
40; or owned by IBMBIO and IBMDOS.
41;
42; 4.0 SYS is far less restrictive.
43; - there must still be enough physical room for IBMBIO
44; and IBMDOS.
45; - SYS will free up all required data clusters required
46; by IBMBIO.
47; - The 2 root DIR entries for IBMDOS and IBMBIO may
48; be anywhere in the root. SYS will move entrys
49; in order for IBMBIO and IBMDOS to be in their proper
50; positions.
51; *** NOTE **** - Sys will operate on DOS 3.2, 3.3 and 4.0.
52; This has reqired a HARD CODED lower bound - DOS_low
53; that is set in this file to 3.20
54;
55; REVISION HISTORY: Ax000 Version 4.0 05/01/87 - first release FG
56; Ax001 4.0 PTR P324 D Love
57; Ax002 4.0 PTR P583 FG
58; Ax003 4.0 DCR D4 - sys anything,anywhere FG
59; Ax004 4.0 DCR D201 - extended arbib change FG
60; Ax005 4.0 PTR P1334 - 1.2 MB + system hang FG
61; Ax006 4.0 PTR P1403 - BIO & DOS wrong spots FG
62; Ax007 4.0 PTR P1404,5 - DIR search error FG
63; Ax008 4.0 PTR P1406 - IOCTL to INT 21-69 FG
64; Ax009 4.0 PTR P1637 - full 720KB error FG
65; Ax010 4.0 PTR P1764 - single file error FG
66; Ax011 4.0 PTR P1772 - IBMBIO cluster chain FG
67; Ax012 4.0 PTR P1710 - ASSIGN or SUBST invalid FG
68; Ax013 4.0 PTR P1872 - ROOT restoration problem FG
69; Ax014 4.0 PTR P1884 - more ROOT problems FG
70; Ax015 4.0 PTR P2165 - ROOT DIR above #100h sec.FG
71; Ax016 4.0 DCR D304 - change in BOOT.INC FG
72; Ax017 4.0 PTR P2356 - HILDA error message FG
73; Ax018 4.0 PTR P2769 - no system on default drv FG
74; Ax019 4.0 DCR D380 - run on current VER -1 FG
75; Ax020 4.0 PTR P3028 - run using PATHGEN FG
76; Ax021 4.0 DCR D494 - add "source" & DOS 3.2 FG
77; Ax022 4.0 PTR P3728 - wrong network message FG
78; Ax023 4.0 DCR D503 - Version is now 4.0 FG
79; Ax024 4.0 PTM P3905 - fix parse error format FG
80; Ax025 4.0 PTM P4118 - fix message error FG
81;
82; PRE-VERSION 4.0 HISTORY:
83;
84; 1.6 05/21/82 Added rev number message
85; 1.61 06/04/82 Allow SYS to blank disk TimP at SCP
86; 1.70 06/30/82 NON contiguous DOS allowed on 2.00 IBM. Allows SYS to
87; 1.0 1.1 disks.
88; 1.71 07/02/82 Put in CHDIRs to make sure everything done in root dir.
89; 1.80 04/26/83 MZ make sys work in small machines; use full 2.0
90; system calls
91; 1.81 07/22/83 ARR Added check in IBM version for valid FAT ID on
92; destination because of IBM problem with SYSing to
93; unformatted disks which are really formatted. Prints
94; NoDest message for ridic IBM reasons, should have a
95; better message.
96; 1.82 08/12/83 ARR ZIBOed again. Mark fails to check for errors on
97; his file I/O. Results in SYS saying system
98; transferred when it hasn't been.
99; 1.83 09/08/83 EKE Added code to quit if sys called on a drive across
100; a net.
101; 1.84 09/09/83 CHRISP grabbed against his will to make this stupid
102; program write out a boot sector
103; 1.85 10/18/83 NP Printf to print messages and it's now an .EXE file
104; 1.86 11/8/83 MZ fix hard file output of boot sector
105; 1.87 5/1/84 MZ make sys prompt for system disk in default drive.
106; 3.20 11/9/84 RS make sys write out a correct boot sector for the
107; version of DOS. It grabs the boot sector off the system
108; disk and inserts the correct BPB.
109; Uses IOCTL Get Device Parms to get BPB for a Hard drive.
110; 3.20 08/5/85 RS Allow FAT ID byte of 0F0H for 'strange' media
111; layouts. These come about because of /T /N switches in
112; FORMAT.
113; 3.20 09/16/85 Incorporate tables of filenames to allow system files
114; used by other OEMs to be SYSed onto disks formatted on
115; other MSDOS systems. Allows the flexibility to replace
116; system files for one OEM by system files for another.
117;
118;
119; 3.30 06/04/86 MT removes initial check for IBMBIO and DOS - not needed
120; because of later search of dirs
121; 3.30 06/16/86 MT only force part of IBMBIO contig - do this by assuming
122; contig part smaller than 1.10 BIOS
123; 3.30 06/16/86 MT Check diks space for enough room to install BIO and DOS
124;
125; Label: "The DOS SHARE Utility"
126; "Version 4.00 (C) Copyright 1988 Microsoft
127; "Licenced Material - Program Property of Microsoft"
128;
129;******************* END OF SPECIFICATIONS *************************************
130 BREAK <SYS1 - Program Organization>
131;******************+ START OF PSEUDOCODE +**************************************
132;
133;ÚÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÄ¿
134;³ Main ÃÄÄ´Init_Input_OutputÃÄÄÄÄ´SysLoadMsg³ (DOS version check)
135;ÀÄÄÄÄÄÄÙ ³ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³ÀÄÄÄÄÄÄÄÄÄÄÙ
136; ³ ³ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
137; ³ À´Parse_Command_Line³
138; ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
139; ³ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
140; ôValidate_Target_DriveôCheck_Default_Drive³
141; ³ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ³ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
142; ³ ³ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
143; ³ ôCheck_Target_Drive³
144; ³ ³ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
145; ³ ³ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
146; ³ À´Check_For_Network³
147; ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
148; ³ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
149; ôGet_System_FilesÃÄÄÄÄÄ´Prompt_For_Media³
150; ³ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
151; ³ ³ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
152; ³ ôCheck_Removable³
153; ³ ³ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
154; ³ ³ÚÄÄÄÄÄÄÄÄÄ¿
155; ³ ôOpen_File³
156; ³ ³ÀÄÄÄÄÄÄÄÄÄÙ
157; ³ ³ÚÄÄÄÄÄÄÄÄÄÄÄ¿
158; ³ À´Fill_Memory³
159; ³ ÀÄÄÄÄÄÄÄÄÄÄÄÙ
160; ³ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
161; ôCheck_SYS_ConditionsÃÄ´Verify_File_System³
162; ³ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
163; ³ ³ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÚÄ Ä Ä Ä Ä Ä Ä Ä ¿
164; ³ ôRead_DirectoryÃÄÄÄÄÄÄÄÄÄ´Prompt_For_Media³
165; ³ ³ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÀÄ Ä Ä Ä Ä Ä Ä Ä Ù
166; ³ ³ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
167; ³ ôVerify_File_Location³
168; ³ ³ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
169; ³ ³ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÄÄ¿
170; ³ À´Determine_Free_SpaceÃÄÄÄ´Get_Cluster³
171; ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÀÄÄÄÄÄÄÄÄÄÄÄÙ
172; ³ÚÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÄÄ¿
173; ôDo_SYSÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´Create_SystemÃÄÄÄÄÄÄÄÄÄÄ´Create_File³
174; ³ÀÄÄÄÄÄÄÙ ³ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÀÄÄÄÄÄÄÄÄÄÄÄÙ
175; ³ ³ÚÄ Ä Ä Ä Ä Ä¿
176; ³ ôFill_Memory³
177; ³ ³ÀÄ Ä Ä Ä Ä ÄÙ
178; ³ ³ÚÄÄÄÄÄÄÄÄÄÄÄ¿
179; ³ À´Dump_Memory³
180; ³ ÀÄÄÄÄÄÄÄÄÄÄÄÙ
181; ³ÚÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÄÄ¿
182; ôDo_EndÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´Close_Files³
183; ³ÀÄÄÄÄÄÄÙ ³ÀÄÄÄÄÄÄÄÄÄÄÄÙ
184; ³ ³ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
185; ³ À´Write_Boot_RecordÃÄÄÄÄÄ´Create_Serial_ID³
186; ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
187; ³ ³ÚÄÄÄÄÄÄÄÄ¿
188; ³ À´FAT_Size³
189; ³ ÀÄÄÄÄÄÄÄÄÙ
190; ³ÚÄÄÄÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
191; À´Message ÃÄÄÄÄÄÄÄÄÄÄÄÄ´Get_DOS_Error³
192; ÀÄÄÄÄÄÄÄÄÄÄÙ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
193;
194;******************- END OF PSEUDOCODE -**************************************
195 BREAK <SYS - Segment Definition>
196 ;---------------------------------------
197 ; NOTE: Structures used by SYS include:
198 ;
199 ; find_buf - DTA mapper
200 ; a_bpb - EBPB struc
201 ; dir_entry - Directory struc
202 ; A_DeviceParameters - IOCtl struc
203 ; BootForm - Boot Rec struc
204 ;---------------------------------------
205
206
207; INCLUDE DOSSYM.INC ;also defines version of dos
208.xlist
209.xcref
210 INCLUDE DOSSYM.INC
211.cref
212.list
213
214
215; INCLUDE IOCTL.INC ; Get / Set Device Parameters IOCTL
216.xlist
217.xcref
218 INCLUDE IOCTL.INC
219.cref
220.list
221
222
223; INCLUDE BOOTFORM.INC ; Boot Record Structure
224.xlist
225.xcref
226 INCLUDE BOOTFORM.INC
227.cref
228
229
230; INCLUDE PATHMAC.INC ; PATH macro for PATHGEN
231.xlist
232.xcref
233 INCLUDE PATHMAC.INC
234.cref
235.list
236
237IBMJAPVER EQU FALSE ; this and the following are mutually
238IBMVER EQU TRUE ; exclusive
239
240CODE SEGMENT PARA PUBLIC
241CODE ENDS
242
243DATA SEGMENT PARA PUBLIC
244DATA ENDS
245
246; $SALUT (4,25,30,41)
247 ;--------------------------------------
248 ; constants
249 ;--------------------------------------
250
251DOS_low equ 0300h + 20 ; 3 in high reg, 20 in low reg. ;AN023;
252not_used equ 0 ; filler for INT 21's
253num_2_letter equ 040h ; turn dirve number to letter
254dev_local equ 9 ; IOCtl - get device parameters
255removable equ 01h ; for testing removeability
256net_drive equ 01000h ; for testing net drive
257DOS_system_atrib equ 7 ; DOS system file atributes
258DOS_volume_atrib equ 8 ; DOS volume label atribute
259error_RC equ 1 ; error return code
260any_error equ 255 ; mask for detecting errors
261success equ 0 ; successful completion of SYS
262LSeek_EOF equ 2 ; seek relative to eof
263LSeek_Start equ 0 ; seek relative to beginning
264old_type_media equ 26 ; DOS extended error - old type media
265file_not_found equ 2 ; DOS extended error - file not found
266file_spec_length equ 11 ; length of file name
267empty equ 0 ; empty directory entry
268deleted equ 0E5h ; entry is deleted
269SetAtrib equ 01h ; set file attributes
270set equ 1 ; set file date and time
271BIG_FAT_THRESHOLD equ 4086 ; size break for FAT12 - FAT16
272PRELOAD equ 1 ; normal preload
273return_error equ 1 ; SYS return error code
274FQ_DOS_DIR_CON_INP equ 07h ; Flush Queue / Direct CON in no echo
275hard_drive equ 0F8H ; Media Descriptor for Hard drive
276first_drive equ 80H ; first physical hard drive number
277noerror equ 0 ; no errors
278FAT_sect_size equ 12 ; FAT sector count
279dot equ 02Eh ; Sub DIR DOT
280bad_sector equ 0F7h ; FAT bad sector mark
281end_cluster equ 0FFh ; FAT last cluster mark
282not_found equ 0FFh ; current cluster not yet found
283cluster_ent_per_sect equ 512/2 ; (bytes/sector) / (bytes/cluster entry)
284 ; = cluster entries / sector
285clusters_loaded equ cluster_ent_per_sect * FAT_sect_size ; = # of cluster
286 ; entries loaded in 12 sectors.
287
288FAT_BUF equ 512 * 13 ; This space is used to do a number
289 ; of tasks. It existes at the START
290 ; of BUF. It is used as a 1 sector
291 ; buffer for processing DIR sector
292 ; manipulation. It is also used to
293 ; process the FAT. NOTE: a 12 bit fat
294 ; has a max. of FFFh (4K) entries - or
295 ; 6K of space - or 12 sectors (512 bytes)
296 ; an extra 512 bytes is added for safety
297
298 ;----------------------------------------
299 ; definition of the MODE bits
300 ; for an extended open
301 ;----------------------------------------
302
303; BITS DEFINED FOR THE MODE WORD
304; FORMAT = 0WF0000CISSS0AAA
305; Write ÄÄÄÄÄÄÄÄÄÄÄÙ³ ³³³ ÀÄÄÄ Access code
306; 0 = no commit ³ ³³³ 0 = read
307; 1 = auto commit ³ ³³³ 1 = write
308; ³ ³³³ 2 = read/write
309; Fail action ÄÄÄÄÄÄÄÄÄÄÄÄÙ ³³³ 3 = execute
310; 0 = INT 24h ³³³ 4 = FCB
311; 1 = return error ³³³
312; ³³ÀÄÄÄ Sharing mode
313; Code Page support ÄÄÄÄÄÄÄÄÙ³ 0 = compatability
314; 0 = validate code page ³ 1 = deny read/write
315; 1 = no code page check ³ 2 = deny write
316; ³ 3 = deny read
317; ³ 4 = deny none
318; Inherit
319; 0 = pass handle to child
320; 1 = no inherit
321;
322MODE_COM equ 0100000000000000b ; Auto Commit
323MODE_NO24 equ 0010000000000000b ; No 24 - return error
324MODE_NOCP equ 0000000100000000b ; No 24 - return error
325MODE_NOINH equ 0000000010000000b ; No child procees access
326; Sharing mode
327;MODE_SH_COMP equ 0000000000000000b 0 = compatability
328MODE_SH_D_RW equ 0000000000010000b ; 1 = deny read/write
329MODE_SH_D_W equ 0000000000100000b ; 2 = deny write
330MODE_SH_D_R equ 0000000000110000b ; 3 = deny read
331MODE_SH_D_NONE equ 0000000001000000b ; 4 = deny none
332; Access code
333;MODE_AC_R equ 0000000000000000b 0 = read
334MODE_AC_W equ 0000000000000001b ; 1 = write
335MODE_AC_RW equ 0000000000000010b ; 2 = read/write
336MODE_AC_EXE equ 0000000000000011b ; 3 = execute
337MODE_AC_FCB equ 0000000000000100b ; 4 = FCB
338
339open_mode equ MODE_NO24+MODE_NOCP+MODE_NOINH+MODE_SH_D_RW+ MODE_AC_RW
340
341;-------------------------------------------------
342; Message Skeleton File
343;-------------------------------------------------
344
345;util SYS
346
347;class 1
348
349;use EXTEND15 ; INVALID DRIVE
350
351;class 2
352
353;use PARSE1 ;1 - Too many operands
354;use PARSE2 ;2 - Required operand missing
355 ;3 - Not in switch list provided
356 ;4 - Not in keyword list provided
357 ;6 - Out of range specified
358 ;7 - Not in value list provided
359 ;8 - Not in string list provided
360;use PARSE9 ;9 - Invalid Parameter
361
362;class A
363
364;use 1 COMMON1
365
366;class B
367
368;def 7 "No room for system on destination disk",CR,LF ; Old
369;def 8 "Ivalid path or System files not found",CR,LF ; New
370;use 9 COMMON30 ; System transferred - Old
371;def 10 "No system on default drive",CR,LF ; Old
372;def 11 "Can not specify default drive",CR,LF ; New
373;def 12 "Write failure, diskette unusable",CR,LF ; New
374;use 19 COMMON25 ; Invalid path ; New
375
376;class C
377
378;use 13 COMMON12 ; Cannot %1 to a Network drive - Old
379;def 14 "Insert system disk in drive %1",CR,LF ; Old
380;use 15 COMMON19 ; Insert destination disk in drive %1 - Old
381;def 16 "Not able to SYS to %1 file system",CR,LF ; New
382;use 18 COMMON14 ; Cannot %1 a SUBSTed or ASSIGNed drive - NEW
383
384;class D
385
386;use 17 COMMON28 ; Press any key to continue. . . - Old
387
388;end
389
390 ;----------------------------------------
391 ; Message Number Equates
392 ;----------------------------------------
393
394util equ 0ffh ; all Utility messages
395DOS_error equ 1 ; DOS error CLASS
396PARSE_error equ 2 ; PARSE error CLASS
397util_B equ 0bh ; Utility CLASS B messages
398 ; (plain message)
399util_C equ 0ch ; Utility CLASS C messages
400 ; (insert message)
401util_D equ 0dh ; Utility CLASS D messages
402 ; (wait message)
403extended_15 equ 15 ; DOS extended error 15
404reqd_missing equ 2 ; PARSE error 2
405
406 ; CLASS B
407
408no_room equ 7 ; No room for system on destination disk Old
409system_not_found equ 8 ; Invalid path or System files not found Old
410done equ 9 ; System transferred Old
411no_sys_on_def equ 10 ; No system on default drive Old
412not_on_default equ 11 ; Can not specify default drive New
413write_fail equ 12 ; Write failure, diskette unusable New
414bad_path equ 19 ; Invalid path
415 ; CLASS C
416
417cant_network equ 13 ; Cannot %1 to a Network drive Old
418sys_disk equ 14 ; Insert system disk in drive %1 Old
419dest_disk equ 15 ; Insert destination disk in drive %1 Old
420cant_sys equ 16 ; Not able to SYS to %1 file system New
421cant_assign equ 18 ; Cannot %1 a SUBSTed or ASSIGNed drive Old
422
423 ; CLASS D
424
425press_key equ 17 ; Press any key to continue. . . Change
426
427 BREAK <SYS >