mirror of
https://github.com/Microsoft/MS-DOS.git
synced 2025-08-21 05:53:37 -07:00
MS-DOS v2.0 Release
This commit is contained in:
parent
fce0f75959
commit
80ab2fddfd
156 changed files with 56403 additions and 0 deletions
342
v2.0/source/MSDATA.ASM
Normal file
342
v2.0/source/MSDATA.ASM
Normal file
|
@ -0,0 +1,342 @@
|
|||
SUBTTL Initialized data and data used at DOS initialization
|
||||
PAGE
|
||||
; DATA AREA for MS-DOS
|
||||
|
||||
IFNDEF KANJI
|
||||
KANJI EQU 0 ;FALSE
|
||||
ENDIF
|
||||
|
||||
CONSTANTS SEGMENT BYTE PUBLIC 'CONST'
|
||||
EXTRN international_table:BYTE
|
||||
EXTRN Current_Country:WORD
|
||||
|
||||
|
||||
ORG 0
|
||||
CONSTRT EQU $ ; Start of constants segment
|
||||
|
||||
PUBLIC DevStrLen
|
||||
DEVSTRLEN DB 3 ; Size of below
|
||||
PUBLIC DevString
|
||||
DEVSTRING DB "DEV" ; Dummy device directory
|
||||
|
||||
;
|
||||
; Table of routines for assignable devices
|
||||
;
|
||||
; MSDOS allows assignment if the following standard devices:
|
||||
; stdin (usually CON input)
|
||||
; stdout (usually CON output)
|
||||
; auxin (usually AUX input)
|
||||
; auxout (usually AUX output)
|
||||
; stdlpt (usually PRN output)
|
||||
;
|
||||
; SPECIAL NOTE:
|
||||
; Status of a file is a strange idea. We choose to handle it in this manner:
|
||||
; If we're not at end-of-file, then we always say that we have a character.
|
||||
; Otherwise, we return ^Z as the character and set the ZERO flag. In this
|
||||
; manner we can support program written under the old DOS (they use ^Z as EOF
|
||||
; on devices) and programs written under the new DOS (they use the ZERO flag
|
||||
; as EOF).
|
||||
|
||||
; Default FCBs for boot up
|
||||
|
||||
sftabl LABEL DWORD ; file table
|
||||
DW -1
|
||||
DW -1
|
||||
DW sf_default_number ; Number of entries in table
|
||||
DB sf_default_number DUP ( (SIZE sf_entry) DUP (0))
|
||||
|
||||
I_AM NoSetDir,BYTE ; true -> do not set directory
|
||||
I_am DidCTRLC,BYTE ; true -> we did a ^C exit
|
||||
I_am SpaceFlag,BYTE ; true -> embedded spaces are allowed
|
||||
; in FCB
|
||||
; the next two variables relate to the position of the logical stdout/stdin
|
||||
; cursor. They are only meaningful when stdin/stdout are assigned to the
|
||||
; console.
|
||||
|
||||
i_am CARPOS,BYTE ; cursor position in stdin
|
||||
i_am STARTPOS,BYTE ; position of cursor at beginning
|
||||
; of buffered input call
|
||||
I_AM PFLAG,BYTE
|
||||
I_AM VERFLG,BYTE ; Initialize with verify off
|
||||
I_AM CONTPOS,WORD
|
||||
PUBLIC CHARCO
|
||||
CHARCO DB 00000011B ; Allows statchks every 4 chars...
|
||||
|
||||
I_AM DMAADD,DWORD ; User's disk transfer address
|
||||
; (disp/seg)
|
||||
ORG $-CONSTRT-4
|
||||
DW 80H
|
||||
DW ?
|
||||
|
||||
ENDMEM DW ?
|
||||
|
||||
PUBLIC switch_character
|
||||
switch_character DB '/'
|
||||
|
||||
PUBLIC device_availability
|
||||
device_availability DB 0FFH
|
||||
|
||||
I_AM FirstArena,WORD ; first free block found
|
||||
I_AM BestArena,WORD ; best free block found
|
||||
I_AM LastArena,WORD ; last free block found
|
||||
I_AM AllocMethod,BYTE ; how to alloc first(best)last
|
||||
I_AM arena_head,WORD
|
||||
|
||||
; The following block of data is used by SYSINIT. Do not change the order or
|
||||
; size of this block
|
||||
|
||||
PUBLIC SYSINITVAR
|
||||
SYSINITVAR LABEL WORD
|
||||
I_AM DPBHEAD,DWORD ; Pointer to head of DPB-FAT list
|
||||
I_AM sft_addr,DWORD ; Pointer to first FCB table
|
||||
ORG $-CONSTRT-4
|
||||
short_addr sftabl
|
||||
DW ? ; DOS segment set at INIT
|
||||
|
||||
; The following address points to the CLOCK device
|
||||
i_am BCLOCK,DWORD
|
||||
; The following address is used by DISKSTATCHK it is always points to the
|
||||
; console input device header
|
||||
I_AM BCON,DWORD ; Console device entry points
|
||||
i_am NUMIO,BYTE ; Number of disk tables
|
||||
MAXSEC DW 0 ; Maximum allowed sector size
|
||||
I_AM BUFFHEAD,DWORD ; Pointer to head of buffer queue
|
||||
DEVHEAD LABEL DWORD
|
||||
I_AM NULDEV,DWORD ; Set to list start passed by
|
||||
; BIOS at DOS Init
|
||||
|
||||
DW DEVTYP OR ISNULL
|
||||
short_addr SNULDEV
|
||||
short_addr INULDEV
|
||||
DB "NUL "
|
||||
|
||||
|
||||
i_am DAY,BYTE
|
||||
i_am MONTH,BYTE
|
||||
i_am YEAR,WORD
|
||||
i_am DAYCNT,WORD
|
||||
i_am WEEKDAY,BYTE
|
||||
ORG $-CONSTRT-7
|
||||
DB 0,0
|
||||
DW 0,-1
|
||||
DB 0
|
||||
|
||||
I_AM CURDRV,BYTE ; Default to drive A
|
||||
I_AM LASTENT,WORD
|
||||
i_am INDOS,BYTE ; DOS status for interrupt processing
|
||||
ORG $-CONSTRT-1
|
||||
DB 0
|
||||
I_AM ErrorMode,BYTE ; Flag for INT 24 processing
|
||||
PUBLIC WPErr
|
||||
WPERR DB -1 ; Write protect error flag
|
||||
I_AM CONSWAP,BYTE
|
||||
PUBLIC IDLEINT
|
||||
IDLEINT DB 1
|
||||
PUBLIC CNTCFLAG
|
||||
CNTCFLAG DB 0 ; ^C check in dispatch disabled
|
||||
|
||||
PUBLIC LastBuffer
|
||||
LASTBUFFER LABEL DWORD ; Buffer queue recency pointer
|
||||
DW -1
|
||||
DW -1
|
||||
|
||||
; Combination of all device call parameters
|
||||
|
||||
PUBLIC DEVCALL
|
||||
DEVCALL SRHEAD <>
|
||||
CALLUNIT LABEL BYTE
|
||||
CALLFLSH LABEL WORD
|
||||
I_AM CALLMED,BYTE
|
||||
CALLBR LABEL DWORD
|
||||
PUBLIC CALLXAD
|
||||
CALLXAD LABEL DWORD
|
||||
I_AM CALLRBYT,BYTE
|
||||
DB 3 DUP(?)
|
||||
PUBLIC CallBPB
|
||||
CALLBPB LABEL DWORD
|
||||
I_AM CALLSCNT,WORD
|
||||
CALLSSEC DW ?
|
||||
|
||||
I_AM CALLDEVAD,DWORD ; stash for device entry point
|
||||
|
||||
; Same as above for I/O calls
|
||||
|
||||
PUBLIC IOCall
|
||||
IOCALL SRHEAD <>
|
||||
IOFLSH LABEL WORD
|
||||
PUBLIC IORCHR
|
||||
IORCHR LABEL BYTE
|
||||
I_AM IOMED,BYTE
|
||||
I_AM IOXAD,DWORD
|
||||
I_AM IOSCNT,WORD
|
||||
I_AM IOSSEC,WORD
|
||||
|
||||
; Call struct for DSKSTATCHK
|
||||
PUBLIC DSKSTCALL
|
||||
DSKSTCALL DB DRDNDHL
|
||||
DB 0
|
||||
PUBLIC DSKSTCOM
|
||||
DSKSTCOM DB DEVRDND
|
||||
I_AM DSKSTST,WORD
|
||||
DB 8 DUP (0)
|
||||
I_AM DSKCHRET,BYTE
|
||||
short_addr DEVIOBUF
|
||||
DW ? ; DOS segment set at Init
|
||||
PUBLIC DSKSTCNT
|
||||
DSKSTCNT DW 1
|
||||
DW 0
|
||||
|
||||
; Days in year
|
||||
i_am YRTAB,8
|
||||
ORG $-CONSTRT-8
|
||||
DB 200,166 ; Leap year
|
||||
DB 200,165
|
||||
DB 200,165
|
||||
DB 200,165
|
||||
|
||||
; Days of each month
|
||||
i_am MONTAB,12
|
||||
ORG $-CONSTRT-12
|
||||
DB 31 ; January
|
||||
DB 28 ; February--reset each
|
||||
; time year changes
|
||||
DB 31 ; March
|
||||
DB 30 ; April
|
||||
DB 31 ; May
|
||||
DB 30 ; June
|
||||
DB 31 ; July
|
||||
DB 31 ; August
|
||||
DB 30 ; September
|
||||
DB 31 ; October
|
||||
DB 30 ; November
|
||||
DB 31 ; December
|
||||
|
||||
IF NOT IBM
|
||||
PUBLIC OEM_HANDLER
|
||||
OEM_HANDLER DD -1
|
||||
ENDIF
|
||||
|
||||
;WARNING For HIGHMEM version, these two vars must be at the end of the
|
||||
; Constants segment to prevent them getting overwritten.
|
||||
I_AM CurrentPDB,WORD
|
||||
i_am CreatePDB,BYTE ; flag for creating a process
|
||||
|
||||
PUBLIC LEAVEADDR
|
||||
LEAVEADDR LABEL WORD
|
||||
short_addr LEAVE
|
||||
|
||||
CONSTANTS ENDS
|
||||
|
||||
SUBTTL Uninitialized data overlayed by initialization code
|
||||
PAGE
|
||||
DATA SEGMENT WORD PUBLIC 'DATA'
|
||||
; Init code overlaps with data area below
|
||||
|
||||
ORG 0
|
||||
i_am INBUF,128
|
||||
I_AM CONBUF,131 ; The rest of INBUF and console buffer
|
||||
i_am TIMEBUF,6
|
||||
I_AM DEVIOBUF,2 ; Buffer for I/O under file assignment
|
||||
I_AM EXITHOLD,DWORD
|
||||
|
||||
PUBLIC DevFCB
|
||||
DEVFCB LABEL BYTE ; Uses NAME1, NAME2, NAME3 combined
|
||||
; WARNING.. do not alter size or relative location of the following 4 items
|
||||
; without first examining FCB_RENAME
|
||||
I_AM NAME1,12 ; File name buffer
|
||||
I_AM ATTRIB,BYTE
|
||||
I_AM NAME2,13
|
||||
I_AM NAME3,14
|
||||
|
||||
I_AM EXTFCB,BYTE
|
||||
|
||||
; WARNING - the following two items are accessed as a word
|
||||
I_AM CREATING,BYTE
|
||||
I_AM DELALL,BYTE
|
||||
|
||||
I_AM FoundDel,BYTE
|
||||
|
||||
I_AM user_SP,WORD
|
||||
I_AM user_SS,WORD
|
||||
I_AM CONTSTK,WORD
|
||||
I_AM SECCLUSPOS,BYTE ; Position of first sector
|
||||
; within cluster
|
||||
I_AM DSKERR,BYTE
|
||||
I_AM TRANS,BYTE
|
||||
I_AM READOP,BYTE
|
||||
I_AM THISDRV,BYTE
|
||||
I_AM THISDPB,DWORD
|
||||
I_AM CLUSFAC,BYTE
|
||||
|
||||
; WARNING - the following two items are accessed as a word
|
||||
I_AM DRIVESPEC,BYTE
|
||||
I_AM ROOTSTART,BYTE
|
||||
|
||||
I_AM CLUSSPLIT,BYTE
|
||||
i_am INSMODE,BYTE
|
||||
I_AM CLUSSAVE,WORD
|
||||
I_AM CLUSSEC,WORD
|
||||
I_AM PREREAD,WORD ; 0 means preread; 1 means optional
|
||||
I_AM FATBYT,WORD
|
||||
I_AM DEVPT,DWORD
|
||||
I_AM THISFCB,DWORD ; Address of user FCB
|
||||
|
||||
I_AM NEXTADD,WORD
|
||||
I_AM RECPOS,4
|
||||
I_AM RECCNT,WORD
|
||||
I_AM LASTPOS,WORD
|
||||
I_AM CLUSNUM,WORD
|
||||
I_AM DIRSEC,WORD
|
||||
I_AM DIRSTART,WORD
|
||||
I_AM SECPOS,WORD ; Position of first sector accessed
|
||||
I_AM VALSEC,WORD ; Number of valid (previously written)
|
||||
; sectors
|
||||
I_AM BYTSECPOS,WORD ; Position of first byte within sector
|
||||
I_AM BYTPOS,4 ; Byte position in file of access
|
||||
I_AM BYTCNT1,WORD ; No. of bytes in first sector
|
||||
I_AM BYTCNT2,WORD ; No. of bytes in last sector
|
||||
I_AM SECCNT,WORD ; No. of whole sectors
|
||||
I_AM ENTFREE,WORD
|
||||
I_AM ENTLAST,WORD
|
||||
I_AM NXTCLUSNUM,WORD
|
||||
I_AM GROWCNT,DWORD
|
||||
I_AM CURBUF,DWORD
|
||||
I_AM VOLID,BYTE
|
||||
I_AM NULLDEVPT,DWORD
|
||||
I_AM CINSAV,DWORD
|
||||
I_AM CINDSAV,BYTE
|
||||
I_AM COUTDSAV,BYTE
|
||||
I_AM COUTSAV,DWORD
|
||||
PUBLIC SaveBX
|
||||
SaveBX DW ?
|
||||
PUBLIC SaveDS
|
||||
SaveDS DW ?
|
||||
I_AM ConC_spsave,WORD
|
||||
|
||||
I_AM exit_code,WORD ; exit code of last proc.
|
||||
I_am exit_type,BYTE ; type of exit...
|
||||
|
||||
IF IBM
|
||||
;For 2.00 this pads the DOS so that on a 2 disk IBM PC with no
|
||||
;CONFIG.SYS file the space taken up by BIOS, DOS, res COMMAND is
|
||||
;about 24K
|
||||
IBMPAD DB 540h DUP(?)
|
||||
ENDIF
|
||||
|
||||
; make those pushes fast!!!
|
||||
EVEN
|
||||
DB 0A0H DUP (?)
|
||||
I_am AuxStack,0A0h
|
||||
I_AM DSKSTACK,0A0h ; Stack space
|
||||
PUBLIC IOSTACK
|
||||
IOSTACK LABEL BYTE
|
||||
|
||||
PUBLIC NSS
|
||||
NSS DW ?
|
||||
PUBLIC NSP
|
||||
NSP DW ?
|
||||
|
||||
PAGE
|
||||
INCLUDE MSINIT.ASM
|
||||
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue