Annotation of ntddk/src/vdd/dosioctl/dosapp/dosapp.asm, revision 1.1

1.1     ! root        1:         name    @filename
        !             2: ;*--------------------------------------------------------------------*
        !             3: ;
        !             4: ;       DOSAPP
        !             5: ;
        !             6: ;   This DOS application opens a character mode device driver
        !             7: ;   (DOSDRV00), and issues an IOCTL read to the device. It then
        !             8: ;   displays the DWORD value it read from the IOCTL.
        !             9: ;
        !            10: ;*--------------------------------------------------------------------*
        !            11: 
        !            12:         include dosapp.inc
        !            13:         include xio.inc
        !            14:         include isvbop.inc
        !            15: 
        !            16: ;*--------------------------------------------------------------------*
        !            17: ;
        !            18: ;       DATA
        !            19: ;
        !            20: ;*--------------------------------------------------------------------*
        !            21: 
        !            22: _DATA   segment word public 'DATA'
        !            23: 
        !            24: 
        !            25: DriverName db  "DOSDRV00",0
        !            26: 
        !            27: hDriver dw      ?
        !            28: errret  dw      ?
        !            29: DriverInfo dd   ?
        !            30: 
        !            31: infmsg  db      'IOCTL Read returns: '
        !            32: infmsgx dd      2 dup (?)
        !            33:         db      cr,lf
        !            34: infmsgl equ     $-infmsg
        !            35: 
        !            36: errmsg  db      'Open failed, Error='
        !            37: errmsgx dd      ?
        !            38:         db      cr,lf
        !            39: errmsgl equ     $-errmsg
        !            40: 
        !            41: _DATA   ends
        !            42: 
        !            43: 
        !            44: _TEXT   segment word public 'CODE'
        !            45:         assume cs:_TEXT,ds:_DATA,es:_DATA
        !            46: 
        !            47: ;*--------------------------------------------------------------------*
        !            48: ;
        !            49: ;       MAIN procedure
        !            50: ;
        !            51: ;*--------------------------------------------------------------------*
        !            52: 
        !            53: @filename proc  far
        !            54:         mov     ax, _DATA                   ;get addressibility
        !            55:         mov     ds, ax
        !            56:         mov     es, ax
        !            57: 
        !            58:         mov     ah, DOSOPENFILE
        !            59:         mov     al, 00010010b               ;r/w, deny all
        !            60:         mov     dx, OFFSET DriverName
        !            61:         int     21h                         ;open device
        !            62:         jc      opfail
        !            63:         mov     hDriver, ax                 ;save handle
        !            64: 
        !            65:         mov     ah, DOSIOCTL
        !            66:         mov     al, 2                       ;IOCTL read
        !            67:         mov     bx, hDriver
        !            68:         mov     cx, 4                       ;# of bytes
        !            69:         mov     dx, offset DriverInfo
        !            70:         int     21h                         ;issue IOCTL to device
        !            71: 
        !            72:         hxtrans DriverInfo, infmsgx, 4      ;make DWORD ASCII
        !            73:         Writel  infmsg                      ;output to console
        !            74: 
        !            75:         mov     ah, DOSCLOSEFILE
        !            76:         mov     bx, hDriver
        !            77:         int     21h                         ;close the driver
        !            78:         jmp     exit
        !            79: 
        !            80: opfail:
        !            81:         mov     errret, ax
        !            82:         hxtrans errret, errmsgx, 2
        !            83:         Writel  errmsg                      ;write msg if open failed
        !            84: 
        !            85: exit:
        !            86:         mov     ax,4c00h
        !            87:         int     21h
        !            88: 
        !            89: @filename endp
        !            90: 
        !            91: 
        !            92: 
        !            93: ;*--------------------------------------------------------------------*
        !            94: ;
        !            95: ;       hextrans
        !            96: ;
        !            97: ;       This subroutine formats hex values into ASCII
        !            98: ;
        !            99: ;       ENTRY:
        !           100: ;               CX    = size in bytes of operand
        !           101: ;               DS:SI-> input hex value (in memory)
        !           102: ;               ES:DI-> output area
        !           103: ;
        !           104: ;       USES:
        !           105: ;               AX, SI, DI
        !           106: ;*--------------------------------------------------------------------*
        !           107: 
        !           108: hextrans proc    near
        !           109: 
        !           110:         push    bx
        !           111:         push    cx
        !           112: 
        !           113:         cmp     cx, 0           ; must be higher
        !           114:         jna     hextexit        ; nope
        !           115:         add     si, cx          ; point to end of value
        !           116:         dec     si              ; now pointing at last byte
        !           117: hext1:
        !           118:         push    cx
        !           119:         lodsb                   ; get hex byte
        !           120:         sub     si, 2           ; make this a decrement
        !           121: 
        !           122:         mov     bx, ax          ; save for next nibble
        !           123:         mov     cx, 4           ; isolate next four bits
        !           124:         shr     ax, cl          ; get top nibble
        !           125: 
        !           126:         cvt_nibble              ; make it ascii
        !           127:         stosb                   ; save it in destination
        !           128:         mov     ax, bx          ; retrieve original byte
        !           129:         cvt_nibble              ; make it ascii
        !           130:         stosb                   ; save it in destination
        !           131:         pop     cx
        !           132:         loop    hext1
        !           133: 
        !           134: hextexit:
        !           135:         pop     cx
        !           136:         pop     bx
        !           137:         ret                     ; back to caller
        !           138: 
        !           139: hextrans endp
        !           140: 
        !           141: _TEXT   ends
        !           142: 
        !           143:         end     @filename

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.