mirror of
https://github.com/microsoft/MS-DOS.git
synced 2024-12-03 02:55:46 +00:00
342 lines
11 KiB
NASM
342 lines
11 KiB
NASM
|
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
|
|||
|
|
|||
|
|