проект ДОС оболочки типа NC

Тема в разделе "WASM.PROJECTS", создана пользователем Rockphorr, 16 сен 2009.

  1. trox07

    trox07 New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2007
    Сообщения:
    14
  2. trox07

    trox07 New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2007
    Сообщения:
    14
    Блин, как непревычно, что нет редактирования. Забыл описать про скриншот. Диск D: отсутствует в менеджере, хотя он присутствует в системе (логический диск) =)
    з.ы. Модераторы, если можно-объедините пост пожалуйста со скриншотом.
     
  3. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.625
    Адрес:
    Russia
    посмотрю поподробней
    но логика построения списка букв дисков такова
    начиная с С вызывается функция установить диск а следом получить диск если результаты совпадают
    то диск помещается в список
    может твой диск D не доступен твоим дос функциям int 21h???
     
  4. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.625
    Адрес:
    Russia
    вот собственно код который строит список букв дисков

    Код (Text):
    1. ;=======[ SUBROUTINE ]============================
    2. ; Set current drive
    3. ;-------------------------------------------------
    4. ; Return:
    5. ;-------------------------------------------------
    6. ; Parameters:
    7. ; AL - drive leter
    8. dos_fn\
    9.     =   0Eh
    10. ;-------------------------------------------------
    11. @Service_public\
    12.     Set_Drive
    13.     push    DX
    14.     push    AX
    15.     ;-----------------------------------------
    16.     IF  @Alone
    17. @Call_far\
    18.     wrap_bem,@AL_Case_Up_ID
    19.     ELSE
    20.     call    AL_Case_Up
    21.     ENDIF
    22.     ;-----------------------------------------
    23.     mov DL,'Z'
    24.     cmp DL,AL
    25.     jb  _exit
    26.     ;-----------------------------------------
    27.     mov DL,'A'
    28.     cmp AL,DL
    29.     jb  _exit
    30.     ;-----------------------------------------
    31.     cmp AH,':'
    32.     stc
    33.     jnz _exit
    34.     ;-----------------------------------------
    35.     xchg    AL,DL
    36.     sub DL,AL
    37.     mov AH,dos_fn
    38.     int 21h
    39.     clc
    40.     ;-----------------------------------------
    41. _exit:
    42.     pop AX
    43.     pop DX
    44. @Service_end
    45.  
    46. ;=======[ SUBROUTINE ]============================
    47. ; Get current drive
    48. ;-------------------------------------------------
    49. ; Return:
    50. ; AL = drive letter
    51. ; AH = ':'
    52. ;-------------------------------------------------
    53. ; Parameters:
    54. dos_fn\
    55.     =   19h
    56. ;-------------------------------------------------
    57. @Service_public\
    58.     Get_Drive
    59.     ;-----------------------------------------
    60.     mov AH,dos_fn
    61.     int 21h
    62.     add AL,'A'
    63.     mov AH,':'
    64.     ;-----------------------------------------
    65. @Service_end
    66.  
    67. ;=======[ SUBROUTINE ]============================
    68. ; Create list of drive leters
    69. ;-------------------------------------------------
    70. ; Return:
    71. ; AL = current drive
    72. ; AH = total drives
    73. ;-------------------------------------------------
    74. ; Parameters:
    75. ; ES:DI - seg:ofs(area of drive letters)
    76. dos_fn\
    77.     =   0Eh
    78. dos_fn_a\
    79.     =   19h
    80. ;-------------------------------------------------
    81. @Service_public\
    82.     Create_Drive_List
    83.     push    DI
    84.     push    CX
    85.     push    DX
    86.     ;-----------------------------------------
    87.     call    Create_floppy_list
    88.     mov CH,AL
    89.     mov CL,1+26-2
    90.     ;-----------------------------------------
    91.     ; CH - total floppy drives
    92.     ; DH - current drive
    93.     ;-----------------------------------------
    94. _get:
    95.     IF  @Alone
    96. @Call_far\
    97.     storage_wos,@Get_Drive_ID
    98.     ELSE
    99.     call    Get_Drive
    100.     ENDIF
    101.     ;-----------------------------------------
    102.     cmp CL,1+26-2
    103.     je  _first
    104.     cmp AL,DL
    105.     je  _write
    106.     ;-----------------------------------------
    107. _next:
    108.     cmp CL,1
    109.     je  _last
    110.     mov DL,1+26
    111.     sub DL,CL
    112.     add DL,'A'
    113.     ;-----------------------------------------
    114.     ; DL - drive of iteration
    115.     ;-----------------------------------------
    116. _set:
    117.     mov AL,DL
    118.     mov AH,':'
    119.     ;-----------------------------------------
    120.     IF  @Alone
    121. @Call_far\
    122.     storage_wos,@Set_Drive_ID
    123.     ELSE
    124.     call    Set_Drive
    125.     ENDIF
    126.     ;-----------------------------------------
    127.     dec CL
    128.     jnz _get
    129.     jz  _exit
    130.     ;-----------------------------------------
    131. _first:
    132.     mov DH,AL
    133.     jmp\
    134.     short   _next
    135.     ;-----------------------------------------
    136. _last:
    137.     mov DL,DH
    138.     jmp\
    139.     short   _set
    140.     ;-----------------------------------------
    141. _write:
    142.     stosb
    143.     inc CH
    144.     jmp\
    145.     short   _next
    146.     ;-----------------------------------------
    147. _exit:
    148.     mov AH,CH
    149.     mov AL,DH
    150.     ;-----------------------------------------
    151.     pop DX
    152.     pop CX
    153.     pop DI
    154. @Service_end
     
  5. trox07

    trox07 New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2007
    Сообщения:
    14
    Я начинающий в программировании, а в ассемблере вообще не смыслю =) Я запускал проект под XPSP2, под админом. Может дело в том, что прерывание int21 работают только под досом?=))
     
  6. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.625
    Адрес:
    Russia
    найди скачай какую нить старую прогу хоть nc 1.0 или 3.0
     
  7. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.625
    Адрес:
    Russia
    если они тоже не видят D значит косяк в твоих дос функциях
    у меня на xp sp3 на виртуалке Sun VirtualBox вообще вируалка висла по черному при запуске моей проги
     
  8. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.625
    Адрес:
    Russia
    на win3003server все тип топ на 2ksp4 тоже на win 95 osr2 я вообще его писал и отлаживал ...
     
  9. trox07

    trox07 New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2007
    Сообщения:
    14
    Rockphorr
    Скачал NC 2.0 - диск виден и заходит.
    [​IMG]

    update: еще раз запустил твою прогу. Диск D: появился, но есть непонятная трабла. Вообщем, когда выбираешь диск D:, почему-то открывается не корень диска, а лезет глубоко в папку.
    [​IMG]

    Нортон тоже туда лезет при открытии диска, только подняться на уровень позволяет(появляются точки ".."). Где прописан этот путь, не в курсе? Почему интересно, именно туда лезут оболочки ..

    Если тебе очень нужно разобраться, я могу еще что-нибудь проверить.
     
  10. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.625
    Адрес:
    Russia
    trox07
    пуск\выполнить
    cmd
    там даешь команды
    cd d:\
    диск:\<путь>\mde_ru
    я 2.0 еще не встречал 1.0 и 3.0 видел 2 нет
     
  11. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.625
    Адрес:
    Russia
    всем кто может просьба потестить на разных винда и сп от хр и выше (где дос поддержка сохранилась)
     
  12. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.625
    Адрес:
    Russia
    Все желающие могут поправить данный недочет в хекс или просто едите - главное, как всегда в таких случаях, чтоб количество знаков в строке не изменилось
     
  13. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.625
    Адрес:
    Russia
    вообще можно даже проще в свойствах ярлыка укажи старый досовский путь и все тип топ
     
  14. trox07

    trox07 New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2007
    Сообщения:
    14
    Rockphorr
    Все работает нормально - диск виден. Видимо из-за дефолтного длинного пути, не появлялись "..."
     
  15. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.625
    Адрес:
    Russia
    релиз содержащий исправление опечатки и немного улучшена "текнолоджикал брайтнесс" в связи с чем размер уменьшился примерно на 400 байт
     
  16. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.625
    Адрес:
    Russia
  17. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.625
    Адрес:
    Russia
    про то что сделано в версии 0.22
    1. с помощью директивы assume удалось избавиться от огромного числа лишних префиксов
    2. получилось находить сегмент подгружаемого модуля по имени для дальнейшей коррекции в остальных модулях
     
  18. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.625
    Адрес:
    Russia
  19. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.625
    Адрес:
    Russia
    добавил еще одну отладочную демку с частями двига от командера
    зы: привет комеру с его советами по мультистрочному виджету :P

    http://www.cracklab.ru/f/index.php?action=vthread&forum=6&topic=16566&page=-1#17
     
  20. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.625
    Адрес:
    Russia
    выложил новую версию там же