mirror of
https://github.com/microsoft/MS-DOS.git
synced 2025-08-25 15:51:26 +00:00
MS-DOS v2.0 Release
This commit is contained in:
198
v2.0/source/MSHEAD.ASM
Normal file
198
v2.0/source/MSHEAD.ASM
Normal file
@@ -0,0 +1,198 @@
|
||||
; TITLE MSHEAD.ASM -- MS-DOS DEFINITIONS
|
||||
PAGE
|
||||
; MS-DOS High-performance operating system for the 8086 version 1.28
|
||||
; by Microsoft MSDOS development group:
|
||||
; Tim Paterson (Ret.)
|
||||
; Aaron Reynolds
|
||||
; Nancy Panners (Parenting)
|
||||
; Mark Zbikowski
|
||||
; Chris Peters (BIOS) (ret.)
|
||||
|
||||
; ****************** Revision History *************************
|
||||
; >> EVERY change must noted below!! <<
|
||||
;
|
||||
; 0.34 12/29/80 General release, updating all past customers
|
||||
; 0.42 02/25/81 32-byte directory entries added
|
||||
; 0.56 03/23/81 Variable record and sector sizes
|
||||
; 0.60 03/27/81 Ctrl-C exit changes, including register save on user stack
|
||||
; 0.74 04/15/81 Recognize I/O devices with file names
|
||||
; 0.75 04/17/81 Improve and correct buffer handling
|
||||
; 0.76 04/23/81 Correct directory size when not 2^N entries
|
||||
; 0.80 04/27/81 Add console input without echo, Functions 7 & 8
|
||||
; 1.00 04/28/81 Renumber for general release
|
||||
; 1.01 05/12/81 Fix bug in `STORE'
|
||||
; 1.10 07/21/81 Fatal error trapping, NUL device, hidden files, date & time,
|
||||
; RENAME fix, general cleanup
|
||||
; 1.11 09/03/81 Don't set CURRENT BLOCK to 0 on open; fix SET FILE SIZE
|
||||
; 1.12 10/09/81 Zero high half of CURRENT BLOCK after all (CP/M programs don't)
|
||||
; 1.13 10/29/81 Fix classic "no write-through" error in buffer handling
|
||||
; 1.20 12/31/81 Add time to FCB; separate FAT from DPT; Kill SMALLDIR; Add
|
||||
; FLUSH and MAPDEV calls; allow disk mapping in DSKCHG; Lots
|
||||
; of smaller improvements
|
||||
; 1.21 01/06/82 HIGHMEM switch to run DOS in high memory
|
||||
; 1.22 01/12/82 Add VERIFY system call to enable/disable verify after write
|
||||
; 1.23 02/11/82 Add defaulting to parser; use variable escape character Don't
|
||||
; zero extent field in IBM version (back to 1.01!)
|
||||
; 1.24 03/01/82 Restore fcn. 27 to 1.0 level; add fcn. 28
|
||||
; 1.25 03/03/82 Put marker (00) at end of directory to speed searches
|
||||
; 1.26 03/03/82 Directory buffers searched as a circular queue, current buffer
|
||||
; is searched first when possible to minimize I/O
|
||||
; 03/03/82 STORE routine optimized to tack on partial sector tail as
|
||||
; full sector write when file is growing
|
||||
; 03/09/82 Multiple I/O buffers
|
||||
; 03/29/82 Two bugs: Delete all case resets search to start at beginning
|
||||
; of directory (infinite loop possible otherwise), DSKRESET
|
||||
; must invalidate all buffers (disk and directory).
|
||||
; 1.27 03/31/82 Installable device drivers
|
||||
; Function call 47 - Get pointer to device table list
|
||||
; Function call 48 - Assign CON AUX LIST
|
||||
; 04/01/82 Spooler interrupt (INT 28) added.
|
||||
; 1.28 04/15/82 DOS retructured to use ASSUMEs and PROC labels around system
|
||||
; call entries. Most CS relative references changed to SS
|
||||
; relative with an eye toward putting a portion of the DOS in
|
||||
; ROM. DOS source also broken into header, data and code pieces
|
||||
; 04/15/82 GETDMA and GETVECT calls added as 24 and 32. These calls
|
||||
; return the current values.
|
||||
; 04/15/82 INDOS flag implemented for interrupt processing along with
|
||||
; call to return flag location (call 29)
|
||||
; 04/15/82 Volume ID attribute added
|
||||
; 04/17/82 Changed ABORT return to user to a long ret from a long jump to
|
||||
; avoid a CS relative reference.
|
||||
; 04/17/82 Put call to STATCHK in dispatcher to catch ^C more often
|
||||
; 04/20/82 Added INT int_upooler into loop ^S wait
|
||||
; 04/22/82 Dynamic disk I/O buffer allocation and call to manage them
|
||||
; call 49.
|
||||
; 04/23/82 Added GETDSKPTDL as call 50, similar to GETFATPT(DL), returns
|
||||
; address of DPB
|
||||
; 04/29/82 Mod to WRTDEV to look for ^C or ^S at console input when
|
||||
; writting to console device via file I/O. Added a console
|
||||
; output attribute to devices.
|
||||
; 04/30/82 Call to en/dis able ^C check in dispatcher Call 51
|
||||
; 04/30/82 Code to allow assignment of func 1-12 to disk files as well
|
||||
; as devices.... pipes, redirection now possible
|
||||
; 04/30/82 Expanded GETLIST call to 2.0 standard
|
||||
; 05/04/82 Change to INT int_fatal_abort callout int HARDERR. DOS SS
|
||||
; (data segment) stashed in ES, INT int_fatal_abort routines must
|
||||
; preserve ES. This mod so HARDERR can be ROMed.
|
||||
; 1.29 06/01/82 Installable block and character devices as per 2.0 spec
|
||||
; 06/04/82 Fixed Bug in CLOSE regarding call to CHKFATWRT. It got left
|
||||
; out back about 1.27 or so (oops). ARR
|
||||
; 1.30 06/07/82 Directory sector buffering added to main DOS buffer queue
|
||||
; 1.40 06/15/82 Tree structured directories. XENIX Path Parser MKDIR CHDIR
|
||||
; RMDIR Xenix calls
|
||||
; 1.41 06/13/82 Made GETBUFFR call PLACEBUF
|
||||
; 1.50 06/17/82 FATs cached in buffer pool, get FAT pointer calls disappear
|
||||
; Frees up lots of memory.
|
||||
; 1.51 06/24/82 BREAKDOWN modified to do EXACT one sector read/write through
|
||||
; system buffers
|
||||
; 1.52 06/30/82 OPEN, CLOSE, READ, WRITE, DUP, DUP2, LSEEK implemented
|
||||
; 1.53 07/01/82 OPEN CLOSE mod for Xenix calls, saves and gets remote dir
|
||||
; 1.54 07/11/82 Function calls 1-12 make use of new 2.0 PDB. Init code
|
||||
; changed to set file handle environment.
|
||||
; 2.00 08/01/82 Number for IBM release
|
||||
; 01/19/83 No environ bug in EXEC
|
||||
; 01/19/83 MS-DOS OEM INT 21 extensions (SET_OEM_HANDLER)
|
||||
; 01/19/83 Performance bug fix in cooked write to NUL
|
||||
; 01/27/83 Growcnt fixed for 32-bits
|
||||
; 01/27/83 Find-first problem after create
|
||||
; 2.01 02/17/83 International DOS
|
||||
; 2.11 08/12/83 Dos split into several more modules for assembly on
|
||||
; an IBM PC
|
||||
;
|
||||
; *************************************************************
|
||||
|
||||
|
||||
SUBTTL EQUATES
|
||||
PAGE
|
||||
; Interrupt Entry Points:
|
||||
|
||||
; INTBASE: ABORT
|
||||
; INTBASE+4: COMMAND
|
||||
; INTBASE+8: BASE EXIT ADDRESS
|
||||
; INTBASE+C: CONTROL-C ABORT
|
||||
; INTBASE+10H: FATAL ERROR ABORT
|
||||
; INTBASE+14H: BIOS DISK READ
|
||||
; INTBASE+18H: BIOS DISK WRITE
|
||||
; INTBASE+1CH: END BUT STAY RESIDENT (NOT SET BY DOS)
|
||||
; INTBASE+20H: SPOOLER INTERRUPT
|
||||
; INTBASE+40H: Long jump to CALL entry point
|
||||
|
||||
ENTRYPOINTSEG EQU 0CH
|
||||
MAXDIF EQU 0FFFH
|
||||
SAVEXIT EQU 10
|
||||
|
||||
INCLUDE DOSSYM.ASM
|
||||
INCLUDE DEVSYM.ASM
|
||||
|
||||
SUBTTL ^C, terminate/abort/exit and Hard error actions
|
||||
PAGE
|
||||
;
|
||||
; There are three kinds of context resets that can occur during normal DOS
|
||||
; functioning: ^C trap, terminate/abort/exit, and Hard-disk error. These must
|
||||
; be handles in a clean fashion that allows nested executions along with the
|
||||
; ability to trap one's own errors.
|
||||
;
|
||||
; ^C trap - A process may elect to catch his own ^Cs. This is achieved by
|
||||
; using the $GET_INTERRUPT_VECTOR and $SET_INTERRUPT_VECTOR as
|
||||
; follows:
|
||||
;
|
||||
; $GET_INTERRUPT_VECTOR for INT int_ctrl_c
|
||||
; Save it in static memory.
|
||||
; $SET_INTERRUPT_VECTOR for INT int_ctrl_c
|
||||
;
|
||||
; The interrupt service routine must preserve all registers and
|
||||
; return carry set iff the operation is to be aborted (via abort
|
||||
; system call), otherwise, carry is reset and the operation is
|
||||
; restarted. ANY DEVIATION FROM THIS WILL LEAD TO UNRELIABLE
|
||||
; RESULTS.
|
||||
;
|
||||
; To restore original ^C processing (done on terminate/abort/exit),
|
||||
; restore INT int_ctrl_c from the saved vector.
|
||||
;
|
||||
; Hard-disk error -- The interrupt service routine for INT int_fatal_abort must
|
||||
; also preserve registers and return one of three values in AL: 0 and
|
||||
; 1 imply retry and ignore (???) and 2 indicates an abort. The user
|
||||
; himself is not to issue the abort, rather, the dos will do it for
|
||||
; him by simulating a normal abort/exit system call. ANY DEVIATION
|
||||
; FROM THIS WILL LEAD TO UNRELIABLE RESULTS.
|
||||
;
|
||||
; terminate/abort/exit -- The user may not, under any circumstances trap an
|
||||
; abort call. This is reserved for knowledgeable system programs.
|
||||
; ANY DEVIATION FROM THIS WILL LEAD TO UNRELIABLE RESULTS.
|
||||
|
||||
SUBTTL SEGMENT DECLARATIONS
|
||||
PAGE
|
||||
|
||||
; The following are all of the segments used. They are declared in the order
|
||||
; that they should be placed in the executable
|
||||
|
||||
;
|
||||
; segment ordering for MSDOS
|
||||
;
|
||||
|
||||
START SEGMENT BYTE PUBLIC 'START'
|
||||
START ENDS
|
||||
|
||||
CONSTANTS SEGMENT BYTE PUBLIC 'CONST'
|
||||
CONSTANTS ENDS
|
||||
|
||||
DATA SEGMENT WORD PUBLIC 'DATA'
|
||||
DATA ENDS
|
||||
|
||||
CODE SEGMENT BYTE PUBLIC 'CODE'
|
||||
CODE ENDS
|
||||
|
||||
LAST SEGMENT BYTE PUBLIC 'LAST'
|
||||
LAST ENDS
|
||||
|
||||
DOSGROUP GROUP CODE,CONSTANTS,DATA,LAST
|
||||
|
||||
; The following segment is defined such that the data/const classes appear
|
||||
; before the code class for ROMification
|
||||
|
||||
START SEGMENT BYTE PUBLIC 'START'
|
||||
ASSUME CS:DOSGROUP,DS:NOTHING,ES:NOTHING,SS:NOTHING
|
||||
JMP DOSINIT
|
||||
START ENDS
|
||||
|
||||
|
Reference in New Issue
Block a user