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

📄 drivers.mac

📁 Dos6.0
💻 MAC
📖 第 1 页 / 共 2 页
字号:
;***
;* $Workfile:   drivers.mac  $
;* $Revision:   1.2  $
;*   $Author:   Dave Sewell  $
;*     $Date:   08 Aug 1989 16:44:04  $
;***

                SUBTTL  MS-DOS device driver definitions
                PAGE    66, 132

COMMENT @
    drivers.mac : December 9, 1988 : Alan Butt

    This files contains a set of "Standard" definitions for all Expansion
    Box device drivers
@

OPTION PROC:PRIVATE

recover    MACRO
        jmp     short $+2
        ENDM

MICROSOFT_OEM_ID        EQU  0
SEWELL_OEM_ID           EQU  (298 SHL 5)
INTERLNK_ID             EQU  0

VFXD_Device_ID EQU  SEWELL_OEM_ID OR INTERLNK_ID
EXECUTION_TIME_BOOST        EQU 10000  ; Time in milliseconds to extend slice
RELEASE_TIME_SLICE_2F       EQU 1680h  ; Int 2F API function to release slice
SERIAL_IDLER                EQU 0
SET_VMSTAT_HIGH_PRI_BACK    EQU 1      ; Set High_Priority_Background flag for VM
RESET_VMSTAT_HIGH_PRI_BACK  EQU 2      ; Reset  "          "           "
ADJUST_EXECUTION_TIME       EQU 3      ; Extend current time slice for VM
RELEASE_TIME_SLICE          EQU 4      ; Release current time slice for VM
PARALLEL_IDLER              EQU 5

INTERLNK_MULTIPLEX_ID       EQU 56H
                                        
;--- Definition of bits in the sequence number/flags byte

BYTE_LENGTH             EQU     10000000B
CONTINUED_PACKET        EQU     01000000B
COMPRESSED              EQU     00100000B
SEVEN_WIRE              EQU     00010000B
USE_CHECKSUM            EQU     00001000B
ECHOPLEX                EQU     00000100B
SEQUENCE_BITS           EQU     00000011B
IDLE_BITS               EQU     11111100B

COMM_CRIT_ERR   EQU     (88 - 13H)

MINIMUM_TICKS           EQU 5
RECV_PACK_TICKS         EQU 401
SYNC_TICKS              EQU (2 * 18)
CONNECT_TICKS           EQU 5

SEQUENCE_BITS           EQU     00000011B

MAX_FIXUPS      EQU     5

; Device attribute codes:  ATT_* define the various bits to be used in th
; device driver attribute word of the device header.

ATT_CHARACTER   equ     8000H           ; Character device
ATT_BLOCK       equ     0000H           ; Block device
ATT_IOCTL       equ     4000H           ; IOCTL read and write supported
ATT_NON_IBM     equ     2000H           ; Non-IBM format (block)
ATT_OUTBUSY     equ     2000H           ; Output Until Busy supported (Char)
ATT_OCRM        equ     0800H           ; Open/Close/Removeable media supported*
ATT_GEN_IOCTL   equ     0040H           ; Generic IOCTL & Get/Set log dev**
ATT_INT29       equ     0010H           ; accepts special interupt 29h
ATT_CLOCK       equ     0008H           ; this is the CLOCK device
ATT_NUL         equ     0004H           ; Current NUL device
ATT_HUGE        equ     0002H           ; 32-bit sector addressing (block)
ATT_STDOUT      equ     0002H           ; Current standard output (character)
ATT_STDIN       equ     0001H           ; Current standard input
                                        ; *  MS-DOS 3.0+
                                        ; ** MS-DOS 3.2+

DEVICE_NAME_SIZE    EQU 8               ; Characters in device_header.name_num

device_header   STRUC                   ; Device header structure
    next_offset dw  -1                  ; Link to next driver (offset)
    next_seg    dw  -1                  ; Link to next driver (segment)
    attribute   dw  ATT_CHARACTER       ; Device driver attribute word
    strategy    dw  ?                   ; Offset to strategy entry point
    inter       dw  ?                   ; Offset to interrupt entry point
    name_num    db  "        "          ; Device name or number of units
device_header   ENDS

STATUS_ERROR    equ     8000H           ; error status
STATUS_BUSY     equ     0200H           ; busy status
STATUS_DONE     equ     0100H           ; Done

ERR_WRITE_PROT  equ     00H             ; write-protect error
ERR_UNK_UNIT    equ     01H             ; Unknown unit
ERR_NOT_READY   equ     02H             ; Drive not ready
ERR_UNK_COMMAND equ     03H             ; Unknown command
ERR_CRC         equ     04H             ; CRC error
ERR_BAD_LENGTH  equ     05H             ; Bad drive request structure length
ERR_SEEK        equ     06H             ; Seek error
ERR_UNK_MEDIA   equ     07H             ; Unknown media
ERR_NOT_FOUND   equ     08H             ; Sector not found
ERR_PAPER_OUT   equ     09H             ; Printer out of paper
ERR_WRITE_FAULT equ     0aH             ; Write fault
ERR_READ_FAULT  equ     0bH             ; Read fault
ERR_FAILURE     equ     0ch             ; General Failure
ERR_DISK_CHANGE equ     0fh             ; Invalid disk change


INIT_DRIVER         EQU      0
MEDIA_CHECK         EQU      1
BUILD_BPB           EQU      2
IOCTL_READ          EQU      3
READ                EQU      4
ND_READ             EQU      5
INPUT_STATUS        EQU      6
FLUSH_INPUT         EQU      7
WRITE               EQU      8
WRITE_VERIFY        EQU      9
OUTPUT_STATUS       EQU     10
FLUSH_OUTPUT        EQU     11
IOCTL_WRITE         EQU     12
DEVICE_OPEN         EQU     13
DEVICE_CLOSE        EQU     14
REMOVABLE_MEDIA     EQU     15
OUTPUT_UNTIL_BUSY   EQU     16
GENERIC_IOCTL       EQU     19
GET_LOGICAL_DEVICE  EQU     23
SET_LOGICAL_DEVICE  EQU     24

MAX_VOLUME      EQU     12              ; Maximum volume label length

MEDIA_CHANGED       equ -1              ; Media changed code
MEDIA_DONT_KNOW     equ 0               ; Don't know if media has changed or not
MEDIA_NOT_CHANGED   equ 1               ; Media has not changed code

bios_parameter_block    STRUC
    bytes_per_sector    dw  ?           ; Bytes per sector
    sectors_per_unit    db  ?           ; Sectors per cluster (power of 2)
    reserved_sectors    dw  ?           ; Number of reserved sectors (start @ 0)
    number_of_fats      db  ?           ; Number of file allocation tables
    root_dir_entries    dw  ?           ; Maximum root directory entries
    total_sectors       dw  ?           ; Total number of sectors for media
    media_id_byte       db  ?           ; Media ID byte
    sectors_per_fat     dw  ?           ; Number of sectors occupied by one FAT
    sectors_per_track   dw  ?           ; Sectors per track (MS-DOS 3.0+)
    number_of_heads     dw  ?           ; Number of heads (MS-DOS 3.0+)
    hidden_sectors      dw  ?           ; Number of hidden sectors (MS-DOS 3.0+)
    high_hidden         dw  ?           ; High order word of hidden sects (3.2+)
    long_total_sectors  dd  ?           ; Total number of sectors if 08H-09H
                                        ; (total_sectors) is zero (MS-DOS 3.2+)
                        db  6 dup (?)
bios_parameter_block    ENDS

; If number of clusters addressable on a device is greater than or equal to
; MIN_16_BIT_CLUSTERS, then 16-bit FAT table entries must be used

MIN_16_BIT_CLUSTERS     EQU 4087        ; 0FF7H

;   The disk paramenter structure is used by undocumented DOS calls 0x32, 0x52,
;   and 0x53.  This structure is defined for MS-DOS 2.0 - MS-DOS 4.0.
;
;   The structures for the disk parameter blocks differ according to the DOS
;   version.

dpb_dos2                STRUC           ; DOS's Disk Parameter Block

    dpb2_drive              db  ?       ; Drive # (0 = A, 1 = B, ...)
    dpb2_unit               db  ?       ; Unit number within device driver
    dpb2_bytes_per_sector   dw  ?       ; Number of bytes per sector
    dpb2_max_cluster        db  ?       ; Largest sector number in cluster
                                        ;  add one for number of sectors/cluster
    dpb2_log2_cluster       db  ?       ; Log base two of the cluster size
    dpb2_reserved_sectors   dw  ?       ; Number of reserved (boot) sectors
    dpb2_number_of_fats     db  ?       ; Number of copies of the FAT
    dpb2_root_dir_entries   dw  ?       ; Number of root directory entries
    dpb2_first_data         dw  ?       ; First sector of data on medium
    dpb2_max_number         dw  ?       ; Largest possible cluster number
                                        ;  subtract one for number of clusters
    dpb2_sectors_per_fat    db  ?       ; Number of sectors in one FAT copy
    dpb2_first_root         dw  ?       ; First sector of root directory
    dpb2_device_driver      dd  ?       ; Corresponding device driver address
    dpb2_media_id           db  ?       ; Media descriptor byte
    dpb2_valid              db  ?       ; 0FF indicates block must be rebuild
    dpb2_next_block         dd  ?       ; address of next device block in list

    dpb2_dir_start          dw  ?       ; Starting cluster of current directory
                                        ;  zero indicates the root directory
    dpb2_path_name          db 64 DUP(?) ; ASCIIZ current directory path string

dpb_dos2                ENDS

dpb_dos3                STRUC           ; DOS's Disk Parameter Block

    dpb3_drive              db  ?       ; Drive # (0 = A, 1 = B, ...)
    dpb3_unit               db  ?       ; Unit number within device driver
    dpb3_bytes_per_sector   dw  ?       ; Number of bytes per sector
    dpb3_max_cluster        db  ?       ; Largest sector number in cluster
                                        ;  add one for number of sectors/cluster
    dpb3_log2_cluster       db  ?       ; Log base two of the cluster size
    dpb3_reserved_sectors   dw  ?       ; Number of reserved (boot) sectors
    dpb3_number_of_fats     db  ?       ; Number of copies of the FAT
    dpb3_root_dir_entries   dw  ?       ; Number of root directory entries
    dpb3_first_data         dw  ?       ; First sector of data on medium
    dpb3_max_number         dw  ?       ; Largest possible cluster number
                                        ;  subtract one for number of clusters
    dpb3_sectors_per_fat    db  ?       ; Number of sectors in one FAT copy
    dpb3_first_root         dw  ?       ; First sector of root directory
    dpb3_device_driver      dd  ?       ; Corresponding device driver address
    dpb3_media_id           db  ?       ; Media descriptor byte
    dpb3_valid              db  ?       ; 0FF indicates block must be rebuild
    dpb3_next_block         dd  ?       ; address of next device block in list

    dpb3_unknown_zero       dw  ?       ; Unknown value (usually zero?)
    dpb3_unknown_ffff       dw  ?       ; Unknown value (usually ffff?)

dpb_dos3                ENDS

dpb_dos4                STRUC           ; DOS's Disk Parameter Block

    dpb4_drive              db  ?       ; Drive # (0 = A, 1 = B, ...)
    dpb4_unit               db  ?       ; Unit number within device driver
    dpb4_bytes_per_sector   dw  ?       ; Number of bytes per sector
    dpb4_max_cluster        db  ?       ; Largest sector number in cluster
                                        ;  add one for number of sectors/cluster
    dpb4_log2_cluster       db  ?       ; Log base two of the cluster size
    dpb4_reserved_sectors   dw  ?       ; Number of reserved (boot) sectors
    dpb4_number_of_fats     db  ?       ; Number of copies of the FAT
    dpb4_root_dir_entries   dw  ?       ; Number of root directory entries
    dpb4_first_data         dw  ?       ; First sector of data on medium
    dpb4_max_number         dw  ?       ; Largest possible cluster number
                                        ;  subtract one for number of clusters
    dpb4_sectors_per_fat    db  ?       ; Number of sectors in one FAT copy
    dpb4_unknown_byte       db  ?       ; Unknown byte (usually 00)
    dpb4_first_root         dw  ?       ; First sector of root directory
    dpb4_device_driver      dd  ?       ; Corresponding device driver address
    dpb4_media_id           db  ?       ; Media descriptor byte
    dpb4_valid              db  ?       ; 0FF indicates block must be rebuild
    dpb4_next_block         dd  ?       ; address of next device block in list

    dpb4_unknown_zero       dw  ?       ; Unknown value (usually zero?)
    dpb4_unknown_ffff       dw  ?       ; Unknown value (usually ffff?)

dpb_dos4                ENDS

MAX_DEVICES         EQU     26          ; Maximum number of units for the block
                                        ; device drivers.

MAX_CHAR_DEVICES    EQU     20          ; Max # of character devices

MAX_PORTS           EQU     8           ; Size of ports array (in words)

; Minimum and maximum serial block sizes.

PRODUCT_DOSLINK     EQU     0
PRODUCT_VERSION     EQU     ((MAJOR_VER SHL 8) OR MINOR_VER)

static_rhp      STRUC                   ; Static RHP definition
    rhp_length      db  ?               ; Request header length
    rhp_unit        db  ?               ; Block-device unit number
    rhp_command     db  ?               ; Command code (driver subfunction)
    rhp_status      dw  ?               ; Driver return status
                    db  8 DUP (?)
static_rhp      ENDS

init_req        STRUC                   ; initialize request
                    db  TYPE static_rhp DUP (?)
                    db  (12H - (TYPE static_rhp)) DUP (?)
    init_cmd        dd  ?               ; Segment:Offset of line loading driver
    init_first      db  ?               ; First unit number
init_req        ENDS

init_ans        STRUC                   ; Initialization answer
                    db  TYPE static_rhp DUP (?)
    init_units      db  ?               ; Units supported
    init_end        dd  ?               ; Segment:offset free mem above driver
    init_bpb        dd  ?               ; Segment:Offset BPB pointer array
init_ans        ENDS


⌨️ 快捷键说明

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