Управление CD-приводом

Тема в разделе "WASM.ASSEMBLER", создана пользователем judgedim, 4 мар 2008.

  1. judgedim

    judgedim New Member

    Публикаций:
    0
    Регистрация:
    4 мар 2008
    Сообщения:
    1
    Помогите пож-та!
    Необходимо написать прогу для простого открытия и закрытия лотка CD-привода. Написал вот
    Код (Text):
    1.         jumps
    2.         locals
    3.         model compact
    4. include fmt.inc
    5. include codes.inc
    6. public _CheckCD    ;Їа®ўҐаЁвм «ЁзЁҐ ¤а ©ўҐа
    7. public _DoorOpen   ;®вЄалвм ¤ўҐажг
    8. public _DoorClose  ;§ Єалвм ¤ўҐажг
    9.  
    10. DATA        SEGMENT  public
    11. num_drives  db ?
    12. first_drive db ?
    13. tabl        ReadWriteL_Hdr ?
    14. help        db ?
    15. help1       db ?
    16. DATA        ENDS
    17.  
    18. CODE       SEGMENT
    19. ASSUME ds:DATA, cs:CODE
    20.  
    21. _CheckCD PROC C FAR
    22.         push    ds
    23.         push    DATA
    24.         pop     ds
    25.         mov     ax, 1500H              
    26.         xor     bx,bx
    27.         int     2FH
    28.         mov     first_drive,cl
    29.         mov     num_drives,bl
    30.         mov     ax, 150BH              
    31.         xor     bx,bx
    32.         int     2FH
    33.         cmp     bx,0ADADH
    34.         jne     @@egog
    35.         jmp     short @@exit
    36. @@egog:
    37.         xor     al,al
    38.         xor     cl,cl
    39. @@exit:
    40.         mov     al,num_drives
    41.         mov     cl,first_drive
    42.         pop     ds
    43.         retf
    44. ENDP    _CheckCD
    45.  
    46. ;„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„
    47. _DoorOpen PROC C FAR
    48.      ARG  dev:byte, letter:byte
    49.         push    ds
    50.         push    DATA
    51.         pop     ds
    52.  
    53.         mov al,num_drives
    54.         mov cl,first_drive
    55.     mov dev, al
    56.     mov letter, cl
    57.  
    58.         mov     bx,offset tabl        
    59.         mov     help,0                  
    60. sendopen:
    61.         mov     [bx].rh_Len,size Ioctl_Hdr
    62.         mov     al,dev
    63.         mov     [bx].rh_Subunit,al
    64.         mov     [bx].rh_Code,cmIoctl_Output
    65.         mov     [bx].ioctl_media,0
    66.         mov     [bx].ioctl_xfer_off,offset help
    67.         push    ds
    68.         pop     [bx].ioctl_xfer_seg
    69.         mov     [bx].ioctl_nbytes,1
    70.         mov     [bx].ioctl_sector,0
    71.         mov     word ptr [bx].ioctl_volid,0
    72.         mov     word ptr [bx].ioctl_volid+2,0
    73.  
    74.  
    75.         push    es
    76.         push    ds
    77.         pop     es
    78.         mov     ax,1510h
    79.         mov     bx,offset tabl
    80.         xor     cx,cx
    81.         mov     cl,letter
    82.         int     2fh
    83.         mov     ax,[bx].rh_Status
    84.         pop     es
    85.         pop     ds
    86.         pop     bp
    87.         retf
    88. ENDP    _DoorOpen
    89.  
    90. ;„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„
    91. _DoorClose PROC C FAR
    92.      ARG  dev:byte, letter:byte
    93.         push    ds
    94.         push    DATA
    95.         pop     ds
    96.         mov     bx,offset tabl        
    97.         mov     help,5                
    98.         jmp     sendopen
    99. ENDP    _DoorClose
    100.  
    101.  
    102. startup:
    103.  mov ax,DATA
    104.  mov ds,ax
    105.  
    106.  call _CheckCD
    107.  call _DoorOpen
    108.  
    109.  call _DoorClose
    110.  mov ax,4c00h
    111.  int 021h
    112. CODE    ENDS
    113. end startup
    Лоток открывает, но не закрывает, ошибок при компиляции нет, помогите кто-чем может (или отправте ссылочкой на какую-нибудь лит-ру)
     
  2. Barbos

    Barbos Slavon

    Публикаций:
    0
    Регистрация:
    13 ноя 2007
    Сообщения:
    280
    Адрес:
    Kharkov
    я с сидюками не работал, но мне кажется странным, что ты вызываешь _DoorClose сразу же после _DoorOpen. Может между ними вставить "пресс эни кей"? или на крайний случай задержку секунд на 5-10.
     
  3. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    judgedim
    ИМХО в процедуре Close локальные переменные dev, letter имеют хз какие значения. Те значения, которые им были присвоены в Open так там и остались.
     
  4. your_enemy

    your_enemy New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2003
    Сообщения:
    9
    judgedim
    Похоже, что, всё-таки, не ты писал этот код.
     
  5. tester3000

    tester3000 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2006
    Сообщения:
    140
    Вот если надо пример на FASM