⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 format.asm

📁 msdos 3.30 source code
💻 ASM
📖 第 1 页 / 共 5 页
字号:
page 84,132
;       SCCSID = @(#)format.asm 1.26 85/10/20
;       SCCSID = @(#)format.asm 1.26 85/10/20
;***************************************************************
;
;       86-DOS FORMAT DISK UTILITY
;
;       This routine formats a new disk,clears the FAT and DIRECTORY then
;       optionally copies the SYSTEM and COMMAND.COM to this new disk
;
;       SYNTAX: FORMAT  [drive][/switch1][/switch2]...[/switch16]
;
;       Regardless of the drive designator , the user will be prompted to
;       insert the diskette to be formatted.
;
;***************************************************************

;           5/12/82 ARR Mod to ask for volume ID
;           5/19/82 ARR Fixed rounding bug in CLUSCAL:
;   REV 1.5
;           Added rev number message
;           Added dir attribute to DELALL FCB
;   REV 2.00
;           Redone for 2.0
;   REV 2.10
;           5/1/83 ARR Re-do to transfer system on small memory systems
;   REV 2.20
;           6/17/83 system size re-initialization bug -- mjb001
;   Rev 2.25
;           8/31/83 16-bit fat insertion
;   Rev 2.26
;           11/2/83 MZ fix signed compare problems for bad sectors
;   Rev 2.27
;           11/8/83 EE current directories are always saved and restored
;   Rev 2.28
;           11/9/83 NP Printf and changed to an .EXE file
;   Rev 2.29
;           11/11/83 ARR Fixed ASSIGN detection to use NameTrans call to see
;                       if drive letter remapped. No longer IBM only
;   Rev 2.30
;           11/13/83 ARR SS does NOT = CS, so all use of BP needs CS override
;   Rev 2.31
;           12/27/83 ARR REP STOSB instruction at Clean: changed to be
;                       sure ES = CS.

code    segment public 'CODE'
code    ends

printf_code segment public
        extrn   printf:far
printf_code ends

stack  segment stack
        db   (362 - 80h) + 100H dup (?) ; (362-80h) is the additional IBM ROM
                                        ; overhead recently discovered by them.
stack  ends

data    segment public 'DATA'
data    ends

public  end_of_memory
_end    segment public para 'DATA'
end_of_memory label byte
_end    ends

code    segment

        assume  cs:code,ds:nothing,es:nothing,ss:stack

;-------------------------------------------------------------------------------
; Define as public for debugging

; procedures
        public  GetSize
        public  AddToSystemSize
        public  Phase1Initialisation
        public  SetStartSector
        public  SetfBigFat
        public  Phase2Initialisation
        public  DiskFormat
        public  BadSector
        public  FormatTrack
        public  DisplayCurrentTrack
        public  NextTrack
        public  WriteFileSystem
        public  Done
        public  CurrentLogicalSector
        public  PrintErrorAbort
        public  GetDeviceParameters
        public  SetDeviceParameters

        public  START
        public  GOTBADDOS
        public  OKDOS
        public  BogusDrive
        public  DRVGD
        public  DRVSPEC
        public  NXTSWT
        public  GETPARM
        public  GETCHR
        public  INVALID
        public  SCANOFF
        public  MEMERR
        public  SAVSWT
        public  NotNet
        public  RE_ASSIGN
        public  NO_ASSIGN
        public  FatAllocated
        public  MEMERRJ
        public  MEM_OK
        public  RDFRST
        public  NEEDSYS
        public  INITCALL
        public  SWITCHCHK
        public  SYSLOOP
        public  FRMTPROB
        public  GETTRK
        public  TRKFND
        public  CLRTEST
        public  CMPTRKS
        public  PACKIT
        public  BadClus
        public  DoBig
        public  DoSet
        public  DRTFAT
        public  CLEARED
        public  LOUSE
        public  LOUSEP
        public  FATWRT
        public  SYSOK
        public  STATUS
        public  REPORTC
        public  ONCLUS
        public  MORE
        public  FEXIT
        public  SYSPRM
        public  fexitJ
        public  DoPrompt
        public  TARGPRM
        public  IsRemovable
        public  CheckRemove
        public  IsRemove
        public  NotRemove
        public  DSKPRM
        public  GOPRNIT
        public  crlf
        public  PrintString
        public  std_printf
        public  VOLID
        public  VRET
        public  DOVOL
        public  VOL_LOOP
        public  GOOD_CREATE
        public  VOLRET
        public  READDOS
        public  RDFILS
        public  FILESDONE
        public  CLSALL
        public  GOTBIOS
        public  GOTDOS
        public  CLSALLJ
        public  GOTCOM
        public  WRITEDOS
        public  GOTALLBIO
        public  BIOSDONE
        public  GOTNDOS
        public  PARTDOS
        public  GOTALLDOS
        public  DOSDONE
        public  PARTCOM
        public  GOTALLCOM
        public  COMDONE
        public  MAKEFIL
        public  CheckMany
        public  CLOSETARG
        public  IOLOOP
        public  GOTTARG
        public  GSYS
        public  TESTSYS
        public  GETOFFS
;       public  TESTSYSDISK             ; dcl 8/23/86
        public  SETBIOS
        public  BIOSCLS
        public  SETBIOSSIZ
        public  DOSOPNOK
        public  DOSCLS
        public  SETDOSSIZ
        public  GotComHand
        public  COMCLS
        public  SETCOMSIZ
        public  GETFSIZ
        public  READFILE
        public  WRITEFILE
        public  FILIO
        public  NORMIO
        public  IORETP
        public  IORET
        public  NORMALIZE
        public  GotDeviceParameters
        public  SmallFAT
        public  LoadSectorTable
        public  NotBigTotalSectors
        public  NotBig
        public  FormatLoop
        public  FormatDone
        public  FailDiskFormat
        public  FormatReallyFailed
        public  ContinueFormat
        public  ReportBadTrack
        public  NoMoreTracks
        public  ExitNextTrack
        public  ThatsAllFolks
        public  WriteFATloop
        public  WriteDIRloop
        public  CanNotWriteFAT
        public  CanNotWriteDirectory
        public  ControlC_Handler

; bytes
        public  fBigFat
        public  formatError
        public  ROOTSTR
        public  DBLFLG
        public  DRIVE
        public  FILSTAT
        public  USERDIRS
        public  VOLFCB
        public  VOLNAM
        public  TRANSRC
        public  TRANDST
        public  INBUFF
        public  driveLetter
        public  systemDriveLetter
; words
        public  startSector
        public  fatSpace
        public  firstHead
        public  firstCylinder
        public  tracksLeft
        public  tracksPerDisk
        public  sectorsInRootDirectory
        public  directorySector
        public  printStringPointer
        public  MSTART
        public  MSIZE
        public  TempHandle
        public  BEGSEG
        public  SWITCHMAP
        public  SWITCHCOPY
        public  FAT
        public  CLUSSIZ
        public  SECSIZ
        public  SYSTRKS
        public  SECTORS
        public  ptr_msgHardDiskWarning
        public  ptr_msgInsertDisk
        public  ptr_msgReInsertDisk
        public  ptr_msgInsertDosDisk
        public  ptr_msgCurrentTrack
        public  currentHead
        public  currentCylinder

; other
        public  deviceParameters
        public  formatPacket
;-------------------------------------------------------------------------------

data    segment
        extrn   msgAssignedDrive:byte
        extrn   msgBadDosVersion:byte
        extrn   msgDirectoryWriteError:byte
        extrn   msgFormatComplete:byte
        extrn   msgFormatNotSupported:byte
        extrn   msgFATwriteError:byte
        extrn   msgInvalidDeviceParameters:byte
        extrn   msgLabelPrompt:byte
        extrn   msgNeedDrive:byte
        extrn   msgNoSystemFiles:byte
        extrn   msgTooManyFilesOpen:byte
        extrn   msgNetDrive:byte
        extrn   msgInsertDisk:byte
        extrn   msgHardDiskWarning:byte
        extrn   msgSystemTransfered:byte
        extrn   msgFormatAnother?:byte
        extrn   msgBadCharacters:byte
        extrn   msgBadDrive:byte
        extrn   msgInvalidParameter:byte
        extrn   msgParametersNotSupported:byte
        extrn   msgReInsertDisk:byte
        extrn   msgInsertDosDisk:byte
        extrn   msgFormatFailure:byte
        extrn   msgNotSystemDisk:byte
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;bug007sp
;	reintroduce following extrn
	extrn	msgNoRoomDestDisk:byte
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;bug007sp
        extrn   msgDiskUnusable:byte
        extrn   msgOutOfMemory:byte
        extrn   msgCurrentTrack:byte
        extrn   msgWriteProtected:byte
        extrn   msgNotReady:byte
        extrn   msgInterrupt:byte
        extrn   msgCRLF:byte

data    ends


debug   equ     0
        .xlist
        INCLUDE VERSIONA.INC
        INCLUDE DOSMAC.INC
        INCLUDE SYSCALL.INC
        INCLUDE ERROR.INC
        INCLUDE DPB.INC
        INCLUDE CPMFCB.INC
        INCLUDE DIRENT.INC
        INCLUDE CURDIR.INC
        INCLUDE PDB.INC
        INCLUDE BPB.INC
        .list

;-------------------------------------------------------------------------------
; Constants

;Limits
BIG_FAT_THRESHOLD       equ     4086

;-------------------------------------------------------------------------------

;FORMAT Pre-defined switches
SWITCH_S   EQU     1                       ; System transfer
SWITCH_V   EQU     2                       ; Volume ID prompt
SWITCH_H   EQU     4                       ; E5 dir terminator
SWITCH_C   EQU     8
SWITCH_T   EQU     16
SWITCH_N   EQU     32
SWITCH_1   EQU     64
SWITCH_4   EQU     128
SWITCH_8   EQU     256
SWITCH_B   EQU     512

NUM_SWITCHES EQU  SWITCH_T or SWITCH_N

DRNUM   EQU     5CH

RECLEN  EQU     fcb_RECSIZ+7
RR      EQU     fcb_RR+7

;-------------------------------------------------------------------------------
; These are the data structures which we will need

        include ioctl.INC

;Per system file data structure

a_FileStructure struc
fileHandle              DW      ?
fileSizeInParagraphs    DW      ?
fileSizeInBytes         DD      ?
fileOffset              DD      ?
fileStartSegment        DW      ?
fileDate                DW      ?
fileTime                DW      ?
a_FileStructure ends

;-------------------------------------------------------------------------------
; And this is the actual data

data    segment
        public deviceParameters

validSavedDeviceParameters db   0
savedDeviceParameters   a_DeviceParameters      <>
deviceParameters        a_DeviceParameters      <>

formatPacket            a_FormatPacket          <>

startSector     dw      ?
fatSpace        dd      ?
fBigFat         db      FALSE

firstHead       dw      ?
firstCylinder   dw      ?
tracksLeft      dw      ?
tracksPerDisk   dw      ?

public NumSectors  ,TrackCnt
NumSectors      dw      0FFFFh
TrackCnt        dw      0FFFFh

public  Old_Dir
Old_Dir         db      FALSE

public fLastChance
fLastChance     db      FALSE           ; Flags reinvocation from
                                        ;   LastChanceToSaveIt. Used by DSKPRM

sectorsInRootDirectory  dw      ?

directorySector dd      0

formatError     db      0

printStringPointer      dw      0

; Exit status defines
ExitStatus      db      0
ExitOK          equ     0
ExitCtrlC       equ     3
ExitFatal       equ     4
ExitNo          equ     5

ROOTSTR DB      ?
        DB      ":\",0
DBLFLG DB       0                       ;Initialize flags to zero
IOCNT   DD      ?
MSTART  DW      ?                       ; Start of sys file buffer (para#)
MSIZE   DW      ?                       ; Size of above in paragraphs
TempHandle DW   ?
FILSTAT DB      ?                       ; In memory status of files
                                        ; XXXXXX00B BIOS not in
                                        ; XXXXXX01B BIOS partly in
                                        ; XXXXXX10B BIOS all in
                                        ; XXXX00XXB DOS not in

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -