当前位置:中国易下载软件教材中心文章中心编程语言汇编语言 → 纯DOS下无需加载MSCDEX,直接弹出或关闭CD-ROM舱

纯DOS下无需加载MSCDEX,直接弹出或关闭CD-ROM舱

减小字体 增大字体 作者:佚名  来源:不详  发布时间:2007-8-21 1:04:28
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
喜欢这些内容嘛,请告诉你身边的朋友,易下载中心-QQ资源-itnetcn.com一起享受这份乐趣,本站内容来源互联网
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    ;===================================================45y海岸线网络安全资讯站
  ;45y海岸线网络安全资讯站
  ; Program: Detect ATAPI device exist or not45y海岸线网络安全资讯站
  ;        If exist, change status.45y海岸线网络安全资讯站
  ;        If now exist, do nothing.45y海岸线网络安全资讯站
  ;        Not affect ATA device.45y海岸线网络安全资讯站
  ; Environment: Pure DOS.45y海岸线网络安全资讯站
  ; Author: Jim Yu (Yu Ling)45y海岸线网络安全资讯站
  ; Data:   2004.07.1545y海岸线网络安全资讯站
  ; Version: 1.0.045y海岸线网络安全资讯站
  ; Mail: Jim.Yu@Mic.Com.Tw45y海岸线网络安全资讯站
  ;45y海岸线网络安全资讯站
  .MODEL SMALL45y海岸线网络安全资讯站
  .586P45y海岸线网络安全资讯站
  .STACK 102445y海岸线网络安全资讯站
  .DATA45y海岸线网络安全资讯站
      BSY    EQU    80h45y海岸线网络安全资讯站
      DRQ    EQU    845y海岸线网络安全资讯站
      START_STOP_UNIT    EQU    1Bh45y海岸线网络安全资讯站
      EJECT_TRAY    EQU    245y海岸线网络安全资讯站
      CLOSE_TRAY    EQU    345y海岸线网络安全资讯站
      MODE_SENCE    EQU    5Ah45y海岸线网络安全资讯站
      STATUS_PAGE    EQU    2Ah45y海岸线网络安全资讯站
      SIZE_OF_CHANNEL_ITEM    EQU    15h45y海岸线网络安全资讯站
      SHOW_DOOR_OPEN    DB 'Door Opened.',0dh, 0ah, '$'45y海岸线网络安全资讯站
      SHOW_DOOR_CLOSE    DB 'Door Closed.',0dh, 0ah, '$'45y海岸线网络安全资讯站
      NOT_EXIST    DB 'Not Exist.',0dh, 0ah, '$'45y海岸线网络安全资讯站
      SS_CHANNEL    DB '4.Secondary Slave   $'45y海岸线网络安全资讯站
      SM_CHANNEL    DB '3.Secondary Master  $'45y海岸线网络安全资讯站
      PS_CHANNEL    DB '2.Primany Slave     $'45y海岸线网络安全资讯站
      PM_CHANNEL    DB '1.Primany Master    $'45y海岸线网络安全资讯站
      PACKET_COMMAND    DB 12 DUP(0)45y海岸线网络安全资讯站
  .CODE45y海岸线网络安全资讯站
  START:45y海岸线网络安全资讯站
      MOV    AX, @code45y海岸线网络安全资讯站
      MOV    DSAX45y海岸线网络安全资讯站
      PUSH    DS45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
  ;Code start45y海岸线网络安全资讯站
      push    seg PACKET_COMMAND45y海岸线网络安全资讯站
      pop    ds45y海岸线网络安全资讯站
      mov    cx, 445y海岸线网络安全资讯站
  next_device:45y海岸线网络安全资讯站
      call    show_channel45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      call    detect_atapi45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      jne    not_atapi45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      call    detect_device45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      jc    @f45y海岸线网络安全资讯站
      call    open_device45y海岸线网络安全资讯站
      call    open_device             Some ATAPI (e.g. DVD-ROM)45y海岸线网络安全资讯站
      call    open_device             Need send command 3 times.45y海岸线网络安全资讯站
      mov    dxoffset SHOW_DOOR_OPEN45y海岸线网络安全资讯站
      jmp    show_and_reset_device45y海岸线网络安全资讯站
  @@:45y海岸线网络安全资讯站
      call    close_device45y海岸线网络安全资讯站
      call    close_device             Some ATAPI (e.g. DVD-ROM)45y海岸线网络安全资讯站
      call    close_device             Need send command 3 times.45y海岸线网络安全资讯站
      mov    dxoffset SHOW_DOOR_CLOSE45y海岸线网络安全资讯站
  show_and_reset_device:45y海岸线网络安全资讯站
      mov    ah, 945y海岸线网络安全资讯站
      int    21h45y海岸线网络安全资讯站
      call    reset_device45y海岸线网络安全资讯站
      jmp    check_device_finish45y海岸线网络安全资讯站
  not_atapi:45y海岸线网络安全资讯站
      mov    dxoffset NOT_EXIST45y海岸线网络安全资讯站
      mov    ah, 945y海岸线网络安全资讯站
      int    21h45y海岸线网络安全资讯站
  check_device_finish:45y海岸线网络安全资讯站
      loop    next_device45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
  ;Code end45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      POP    DS45y海岸线网络安全资讯站
      MOV    AX, 4C00h45y海岸线网络安全资讯站
      INT    21h45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
  ;===================================================45y海岸线网络安全资讯站
  ;    procedure:    show_channel45y海岸线网络安全资讯站
  ;    in:    cx45y海岸线网络安全资讯站
  ;    out:    none45y海岸线网络安全资讯站
  ;    destroy:none45y海岸线网络安全资讯站
  show_channel    proc45y海岸线网络安全资讯站
      push    cx45y海岸线网络安全资讯站
      push    seg SS_CHANNEL45y海岸线网络安全资讯站
      pop    ds45y海岸线网络安全资讯站
      mov    dlcl45y海岸线网络安全资讯站
      dec    dl45y海岸线网络安全资讯站
      mov    ax, SIZE_OF_CHANNEL_ITEM45y海岸线网络安全资讯站
      mul    dl45y海岸线网络安全资讯站
      mov    dxax45y海岸线网络安全资讯站
      add    dxoffset SS_CHANNEL45y海岸线网络安全资讯站
      mov    ah, 945y海岸线网络安全资讯站
      int    21h45y海岸线网络安全资讯站
      pop    cx45y海岸线网络安全资讯站
      ret45y海岸线网络安全资讯站
  show_channel    endp45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
  ;===================================================45y海岸线网络安全资讯站
  ;    procedure:    waid_idle45y海岸线网络安全资讯站
  ;    in:    dx45y海岸线网络安全资讯站
  ;    out:    CY = time out45y海岸线网络安全资讯站
  ;        NC = device idle45y海岸线网络安全资讯站
  ;    destroy:none45y海岸线网络安全资讯站
  wait_idle    proc45y海岸线网络安全资讯站
      push    cx45y海岸线网络安全资讯站
      push    dx45y海岸线网络安全资讯站
      push    ax45y海岸线网络安全资讯站
      45y海岸线网络安全资讯站
      or    dl, 745y海岸线网络安全资讯站
      mov    cx, 0ffffh45y海岸线网络安全资讯站
  @@:45y海岸线网络安全资讯站
      call    in_al_dx45y海岸线网络安全资讯站
      test    al, BSY45y海岸线网络安全资讯站
      jz    @f45y海岸线网络安全资讯站
      loop    @b45y海岸线网络安全资讯站
  @@:45y海岸线网络安全资讯站
      pop    ax45y海岸线网络安全资讯站
      pop    dx45y海岸线网络安全资讯站
      pop    cx45y海岸线网络安全资讯站
      ret45y海岸线网络安全资讯站
  wait_idle    endp45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
  ;===================================================45y海岸线网络安全资讯站
  ;    procedure:    req_data45y海岸线网络安全资讯站
  ;    in:    dx45y海岸线网络安全资讯站
  ;    out:    CY = time out45y海岸线网络安全资讯站
  ;        NC = device request data45y海岸线网络安全资讯站
  ;    destroy:none45y海岸线网络安全资讯站
  req_data    proc45y海岸线网络安全资讯站
      push    cx45y海岸线网络安全资讯站
      push    dx45y海岸线网络安全资讯站
      push    ax45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      or    dl, 745y海岸线网络安全资讯站
      mov    cx, 0ffffh45y海岸线网络安全资讯站
  @@:45y海岸线网络安全资讯站
      call    in_al_dx45y海岸线网络安全资讯站
      test    al, DRQ45y海岸线网络安全资讯站
      jnz    @f45y海岸线网络安全资讯站
      loop    @b45y海岸线网络安全资讯站
  @@:45y海岸线网络安全资讯站
      pop    ax45y海岸线网络安全资讯站
      pop    dx45y海岸线网络安全资讯站
      pop    cx45y海岸线网络安全资讯站
      ret45y海岸线网络安全资讯站
  req_data    endp45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
  ;===================================================45y海岸线网络安全资讯站
  ;    procedure:    set_feature45y海岸线网络安全资讯站
  ;    in:    ax45y海岸线网络安全资讯站
  ;    out:    none45y海岸线网络安全资讯站
  ;    destroy:ax45y海岸线网络安全资讯站
  ;    Set 1X1 = 045y海岸线网络安全资讯站
  ;    Set 1X4 = AL45y海岸线网络安全资讯站
  ;    Set 1X5 = AH45y海岸线网络安全资讯站
  ;    Send 1X7 0A0h45y海岸线网络安全资讯站
  set_feature    proc45y海岸线网络安全资讯站
      push    dx45y海岸线网络安全资讯站
      push    ax45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      inc    dl45y海岸线网络安全资讯站
      xor    alal45y海岸线网络安全资讯站
      call    out_dx_al45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      pop    ax45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      add    dl, 345y海岸线网络安全资讯站
      call    out_dx_al45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      inc    dl45y海岸线网络安全资讯站
      xchg    ahal45y海岸线网络安全资讯站
      call    out_dx_al45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      add    dl, 245y海岸线网络安全资讯站
      mov    al, 0a0h45y海岸线网络安全资讯站
      call    out_dx_al45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      pop    dx45y海岸线网络安全资讯站
      ret45y海岸线网络安全资讯站
  set_feature    endp45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
  ;===================================================45y海岸线网络安全资讯站
  ;    procedure:    send_packet_command45y海岸线网络安全资讯站
  ;    in:    dx, si45y海岸线网络安全资讯站
  ;    out:    none45y海岸线网络安全资讯站
  ;    destroy:ax, si45y海岸线网络安全资讯站
  send_packet_command    proc45y海岸线网络安全资讯站
      push    cx45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      mov    cx, 645y海岸线网络安全资讯站
  @@:45y海岸线网络安全资讯站
      mov    axds:[si]45y海岸线网络安全资讯站
      call    out_dx_ax45y海岸线网络安全资讯站
      xor    axax45y海岸线网络安全资讯站
      mov    ds:[si], ax45y海岸线网络安全资讯站
      add    si, 245y海岸线网络安全资讯站
      loop    @b45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      call    wait_idle45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      pop    cx45y海岸线网络安全资讯站
      ret45y海岸线网络安全资讯站
  send_packet_command    endp45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
  ;===================================================45y海岸线网络安全资讯站
  ;    procedure:    detect_device45y海岸线网络安全资讯站
  ;    in:    cx45y海岸线网络安全资讯站
  ;    out:    CY = Tray Open45y海岸线网络安全资讯站
  ;        NC = Tray Close45y海岸线网络安全资讯站
  ;    destroy:dx, ax, si45y海岸线网络安全资讯站
  ;    Detect atapi device tray45y海岸线网络安全资讯站
  detect_device    proc45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      call    set_device45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      mov    ax, 090h45y海岸线网络安全资讯站
      call    set_feature45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      call    wait_idle45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
  @@:45y海岸线网络安全资讯站
      mov    sioffset PACKET_COMMAND45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      mov    ax, (STATUS_PAGE * 100h) + MODE_SENCE45y海岸线网络安全资讯站
      mov    ds:[si], al45y海岸线网络安全资讯站
      mov    ds:[si+2], ah45y海岸线网络安全资讯站
      mov    al, 90h45y海岸线网络安全资讯站
      mov    ds:[si+8], al45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      call    send_packet_command45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      call    req_data45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      call    in_al_dx45y海岸线网络安全资讯站
      call    in_al_dx45y海岸线网络安全资讯站
      cmp    al, 70h45y海岸线网络安全资讯站
      je    door_close45y海岸线网络安全资讯站
      stc45y海岸线网络安全资讯站
      ret45y海岸线网络安全资讯站
  door_close:45y海岸线网络安全资讯站
      clc45y海岸线网络安全资讯站
      ret45y海岸线网络安全资讯站
  detect_device    endp45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
  ;===================================================45y海岸线网络安全资讯站
  ;    procedure:    reset_device45y海岸线网络安全资讯站
  ;    in:    cx45y海岸线网络安全资讯站
  ;    out:    none45y海岸线网络安全资讯站
  ;        none45y海岸线网络安全资讯站
  ;    destroy:dx, ax, si45y海岸线网络安全资讯站
  ;    Open atapi device tray45y海岸线网络安全资讯站
  reset_device    proc45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      call    set_device45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      mov    ax, 0ffffh45y海岸线网络安全资讯站
      call    set_feature45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      call    wait_idle45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      call    req_data45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      mov    sioffset PACKET_COMMAND45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      xor    axax45y海岸线网络安全资讯站
      call    send_packet_command45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      ret45y海岸线网络安全资讯站
  reset_device    endp45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
  ;=====================================================45y海岸线网络安全资讯站
  ;    procedure:    open_device45y海岸线网络安全资讯站
  ;    in:    cx45y海岸线网络安全资讯站
  ;    out:    none45y海岸线网络安全资讯站
  ;        none45y海岸线网络安全资讯站
  ;    destroy:dx, ax, si45y海岸线网络安全资讯站
  ;    Open atapi device tray45y海岸线网络安全资讯站
  open_device    proc45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      call    set_device45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      mov    ax, 0fffeh45y海岸线网络安全资讯站
      call    set_feature45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      call    wait_idle45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      call    req_data45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      mov    sioffset PACKET_COMMAND45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      mov    ax, (EJECT_TRAY * 100h) + START_STOP_UNIT45y海岸线网络安全资讯站
      mov    ds:[si], al45y海岸线网络安全资讯站
      mov    ds:[si+4], ah45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      call    send_packet_command45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      ret45y海岸线网络安全资讯站
  open_device    endp45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
  ;===================================================45y海岸线网络安全资讯站
  ;    procedure:    close_device45y海岸线网络安全资讯站
  ;    in:    cx45y海岸线网络安全资讯站
  ;    out:    none45y海岸线网络安全资讯站
  ;        none45y海岸线网络安全资讯站
  ;    destroy:dx, ax, si45y海岸线网络安全资讯站
  ;    Close atapi device tray45y海岸线网络安全资讯站
  close_device    proc45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      call    set_device45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      xor    axax45y海岸线网络安全资讯站
      call    set_feature45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      call    wait_idle45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      call    req_data45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      mov    sioffset PACKET_COMMAND45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      mov    ax, (CLOSE_TRAY * 100h) + START_STOP_UNIT45y海岸线网络安全资讯站
      mov    ds:[si], al45y海岸线网络安全资讯站
      mov    ds:[si+4], ah45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      call    send_packet_command45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      ret45y海岸线网络安全资讯站
  close_device    endp45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
  ;===================================================45y海岸线网络安全资讯站
  ;    procedure:    detect_atapi45y海岸线网络安全资讯站
  ;    in:    cx45y海岸线网络安全资讯站
  ;    out:    PO = not atapi device45y海岸线网络安全资讯站
  ;        PE = is atapi device45y海岸线网络安全资讯站
  ;    destroy:none45y海岸线网络安全资讯站
  detect_atapi    proc45y海岸线网络安全资讯站
      push    cx45y海岸线网络安全资讯站
      call    set_device45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      call    wait_idle45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      add    dl, 745y海岸线网络安全资讯站
      mov    al, 0ech45y海岸线网络安全资讯站
      call    out_dx_al45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      call    wait_idle45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      sub    dx, 345y海岸线网络安全资讯站
      call    in_al_dx45y海岸线网络安全资讯站
      xchg    ahal45y海岸线网络安全资讯站
      inc    dx45y海岸线网络安全资讯站
      call    in_al_dx45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      cmp    ax, 014ebh45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      pop    cx45y海岸线网络安全资讯站
      ret45y海岸线网络安全资讯站
  detect_atapi    endp45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
  ;===================================================45y海岸线网络安全资讯站
  ;    procedure:    set_device45y海岸线网络安全资讯站
  ;    in:    cx45y海岸线网络安全资讯站
  ;    out:    none45y海岸线网络安全资讯站
  ;    45y海岸线网络安全资讯站
  ;    destroy:dx, ax45y海岸线网络安全资讯站
  ;45y海岸线网络安全资讯站
  ;    Out 1X6 = 0A0h or 0B0h45y海岸线网络安全资讯站
  ;    Set DX = 1X045y海岸线网络安全资讯站
  ;    Set AL = 0A0h or 0B0h45y海岸线网络安全资讯站
  set_device    proc45y海岸线网络安全资讯站
      mov    dxcx45y海岸线网络安全资讯站
      cmp    dx, 245y海岸线网络安全资讯站
      mov    dx, 1f6h45y海岸线网络安全资讯站
      ja    @f45y海岸线网络安全资讯站
      mov    dx, 176h45y海岸线网络安全资讯站
  @@:45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      mov    axcx45y海岸线网络安全资讯站
      and    al, 145y海岸线网络安全资讯站
      shl    al, 445y海岸线网络安全资讯站
      or    al, 0a0h45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      call    out_dx_al45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
      and    dl, 0F0h45y海岸线网络安全资讯站
      ret45y海岸线网络安全资讯站
  set_device    endp45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
  in_al_dx    proc45y海岸线网络安全资讯站
      in    aldx45y海岸线网络安全资讯站
      out    0edh, al45y海岸线网络安全资讯站
      ret45y海岸线网络安全资讯站
  in_al_dx    endp45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
  in_ax_dx    proc45y海岸线网络安全资讯站
      in    axdx45y海岸线网络安全资讯站
      out    0edh, al45y海岸线网络安全资讯站
      ret45y海岸线网络安全资讯站
  in_ax_dx    endp45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
  out_dx_al    proc45y海岸线网络安全资讯站
      out    dxal45y海岸线网络安全资讯站
      out    0edh, al45y海岸线网络安全资讯站
      ret45y海岸线网络安全资讯站
  out_dx_al    endp45y海岸线网络安全资讯站
  45y海岸线网络安全资讯站
  out_dx_ax    proc45y海岸线网络安全资讯站
&