проблема с прерыванием 10h

Тема в разделе "WASM.BEGINNERS", создана пользователем assemblerist, 3 сен 2010.

  1. assemblerist

    assemblerist New Member

    Публикаций:
    0
    Регистрация:
    12 авг 2010
    Сообщения:
    26
    Не работает один пример на тему вывода графики. Компилируется нормально, но при запуске вылетает ошибка “This system does not support fullscreen mode”. Отладчик показал, что дело в прерывании int 10h. Как это исправить? Вообще – это весьма частая ошибка.
     
  2. assemblerist

    assemblerist New Member

    Публикаций:
    0
    Регистрация:
    12 авг 2010
    Сообщения:
    26
    Вот и сам пример для наглядности
    Код (Text):
    1. .model small
    2. .stack 100h
    3. .386
    4.  
    5.  
    6. Mode_6  = 6     ; 640 X 200,  2 colors
    7. Mode_13 = 0Dh       ; 320 X 200, 16 colors
    8. Mode_14 = 0Eh       ; 640 X 200, 16 colors
    9. Mode_15 = 0Fh       ; 640 X 350,  2 colors
    10. Mode_16 = 10h       ; 640 X 350, 16 colors
    11. Mode_17 = 11h       ; 640 X 480,  2 colors
    12. Mode_18 = 12h       ; 640 X 480, 16 colors
    13. Mode_19 = 13h       ; 320 X 200, 256 colors
    14. Mode_6A = 6Ah       ; 800 X 600, 16 colors
    15.  
    16.  
    17.  
    18. .data
    19. saveMode db  ? 
    20. currentX   dw 100  
    21. currentY   dw 100  
    22. color    db 1              
    23.  
    24.  
    25. .code
    26. main proc
    27.     mov  ax,@data
    28.     mov  ds,ax
    29.  
    30.  
    31.     mov  ah,0Fh
    32.     int  10h
    33.     mov  saveMode,al
    34.  
    35.  
    36.     mov  ah,0      
    37.     mov  al,Mode_17        
    38.     int  10h
    39.    
    40.  
    41.  
    42. LineLength = 100
    43.  
    44.     mov  dx,currentY
    45.     mov  cx,LineLength 
    46.  
    47. L1:
    48.     push cx
    49.     mov  ah,0Ch      
    50.     mov  al,color      
    51.     mov  bh,0  
    52.     mov  cx,currentX
    53.     int  10h
    54.     inc  currentX
    55.     ;inc  color        
    56.     pop  cx
    57.     Loop L1
    58.  
    59.  
    60.  
    61.     mov  ah,0
    62.     int  16h    
    63.  
    64.  
    65.  
    66.     mov  ah,0      
    67.     mov  al,saveMode  
    68.     int  10h
    69.  
    70.  
    71.  
    72.     mov  ax,4C00h  
    73.     int  21h
    74. main endp
    75.  
    76. end main
     
  3. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    assemblerist
    Поставь дос или хотя бы XP.
     
  4. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    нормальный человек, если пишет не под винды, обычно проверяет свои программы под ДОС или в эмуляторе
     
  5. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    abcd008
    А разве есть способ запустить приведённую программу без ДОСа или без эмулятора? Я к тому, что сообщение-то он как-то получил, значит запустить смог. Значит эмулем каким-то воспользовался. Или может ДОС'ом, который офигев от современного железа не нашёл ни одного графического режима кроме текстового 80x25.
     
  6. DoctorWho

    DoctorWho New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2010
    Сообщения:
    87
    assemblerist
    Не волнуйся с кодом вроде всё нормально. Просто винды начиная с висты выводят такие сообщения когда 16 битная прилога хочет развернуться на весь экран. Скачай Doom, например, и запусти. И будет тебе "This system does not support fullscreen mode".

    ред. На ХР такой "проблемы" нет.
     
  7. assemblerist

    assemblerist New Member

    Публикаций:
    0
    Регистрация:
    12 авг 2010
    Сообщения:
    26
    ДОС или XP поставить можно. Но хотелось бы, чтобы пример шёл и на других виндосах кроме всякого старья. По-любому эту задачу рано или поздно придётся решать.
     
  8. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    assemblerist
    Ну так используй современное АПИ. АПИ виндоуса, а не биоса.
     
  9. KIV

    KIV Member

    Публикаций:
    0
    Регистрация:
    16 июл 2009
    Сообщения:
    231
    В семёрке эмулятор DOS вроде как выпилили. В 64-битных операционках тоже (там просто не аппаратной эмуляции 16-бит). Так что либо DosBox, либо чистый DOS (возможно, на виртуалке). Кстати, в хрюше тоже эмуляция не полная DOS и вообще на неё надеяться не стоит.
     
  10. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    Win7 и Vista точно не тянут полноэкранный пежим даже консоли не то что чего то своего 16 битного
    попробуйте открыть консоль и нажать Alt+Enter
     
  11. Guru_of_Zen

    Guru_of_Zen Member

    Публикаций:
    0
    Регистрация:
    21 янв 2010
    Сообщения:
    288
    KIV
    графические режимы работают через раз, подтверждаю.

    текстовые -- нормально, графические -- не работают. черный экран, и все.
     
  12. assemblerist

    assemblerist New Member

    Публикаций:
    0
    Регистрация:
    12 авг 2010
    Сообщения:
    26
    В таком случае теряется смысл программирования на ассемблере. API весьма медлительный. Хотелось по возможности свести его употребление к минимуму.
     
  13. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    248
    assemblerist
    int 10h - VGA же - не получите вы всех фич вашей карточки, юзая его.
     
  14. KIV

    KIV Member

    Публикаций:
    0
    Регистрация:
    16 июл 2009
    Сообщения:
    231
    Весь вывод в DOS приложении всё равно идёт через WinAPI (просто ты не вызываешь его явно) и работает даже медленнее. Хочешь скорости - грузись в чистом дос или пиши свою ОС.
     
  15. assemblerist

    assemblerist New Member

    Публикаций:
    0
    Регистрация:
    12 авг 2010
    Сообщения:
    26
    Планирую потом перейти на режимы VESA , но пока и VGA вполне сойдёт для экспериментов. На счёт использования некоторых возможностей видеоадаптера есть кое-какая литература, но данные ошибки сводят все усилия на нуль.
     
  16. assemblerist

    assemblerist New Member

    Публикаций:
    0
    Регистрация:
    12 авг 2010
    Сообщения:
    26
    Но опять тут возни на целые месяца. Грузить в чистом ДОС – есть одна проблема. Как мои программы будут запускаться на других компьютерах. Тоже через ДОС?
     
  17. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    248
    assemblerist
    VESA даст лишь режим с более высоким разрешением и линейный буфер
    Всех фич вы не задействуете
    DX и OpenGL - это не только реализация графического API - это также спецификации к соответствию которым стремятся производители видеокарт.
    Поддержка DX/OGL - это значит что видеокарта аппаратно (не софтверной реализацией) может выполнять функции описанные в DX/OGL.
     
  18. assemblerist

    assemblerist New Member

    Публикаций:
    0
    Регистрация:
    12 авг 2010
    Сообщения:
    26
    Аппаратно можно программировать и на ассемблере без посредников DX и OpenGL, нужно лишь разобраться как данные графические библиотеки взаимодействуют с видеооборудованием. Но пока давайте решать проблемы по мере их поступления. Возникла проблема на прерывание 10h и её надо как-то элегантно решить, чтобы программа могла идти на разных версиях виндоус. Надо сосредоточиться на данной теме, а потом уже двигаться дальше.
     
  19. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    248
    Вам уже ответили, что через эмулятор доса запускать нужно
    Через драйвер - как же еще.
    М. Руссинович, Д. Соломон "Внутреннее устройство Microsoft Windows 2000/XP/2003 Server"
     
  20. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    assemblerist
    Задержки минимальны и обусловлены гибкостью. По сравнению с NTVDM ось летает. Вобще забудьте про DOS. Он остался только в стенах отсталых учебных заведений.