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