Загрузка процессора 100% (ntvdm)

Discussion in 'WASM.BEGINNERS' started by veritas, Jul 31, 2008.

  1. veritas

    veritas New Member

    Blog Posts:
    0
    Пишу тетрис для DOS на ассемблере.

    Проблема в том, что процесс ntvdm в Windows и dosemu в Linux стремятся загрузить процессор полностью. Но TD (Turbo Debugger) отнимает лишь 3%.

    Программа находится в непрерывном цикле. Но на самом деле ей достаточно лишь просыпаться по прерыванию таймера.

    Как мне подсказать операционной системе, что программу необходимо усыпить? Может быть (ntvdm,dosemu) реагирует на какие-нибудь известные вам функции BIOS или DOS и приостанавливает выполнение?
     
  2. comrade

    comrade Константин Ёпрст

    Blog Posts:
    0
    А hlt не пробовал?
     
  3. veritas

    veritas New Member

    Blog Posts:
    0
    comrade
    Пробовал. Игнорируется как-будто это nop. Процессор грузится по прежнему.
     
  4. comrade

    comrade Константин Ёпрст

    Blog Posts:
    0
    А cli+hlt?
     
  5. veritas

    veritas New Member

    Blog Posts:
    0
    Теперь программа не просыпается по таймеру (как с hlt так и без него).
     
  6. rudik

    rudik Руденко Артём

    Blog Posts:
    0
    Посмеялсо...
     
  7. k3internal

    k3internal New Member

    Blog Posts:
    0
    http://www.citrix.pp.ru/DOS.html
     
  8. k3internal

    k3internal New Member

    Blog Posts:
    0
    http://www.tamedos.com/
     
  9. z0mailbox

    z0mailbox z0

    Blog Posts:
    0
    хальт в вдм-е не работает, вы чо! это ж привилегированная опкода
    из вдм-а заслипить тяжело, так с ходу и не посоветую, может и низя
     
  10. DeGlucker

    DeGlucker New Member

    Blog Posts:
    0
    Добавить в autoexec.nt
    lh c:\util\resfree 40000
     
  11. diamond

    diamond New Member

    Blog Posts:
    0
    int 2Fh, ax = 1680h - отдать квант времени, эту функцию поддерживают куча DOS-окружений, в том числе Win9x и dosemu. Насчёт NT, впрочем, сомневаюсь.
    Вообще под NT-линейку очень рекомендую эмулятор dosbox - http://www.dosbox.com - там DOS'овские проги идут гораздо лучше, чем под самой виндой.
     
  12. z0mailbox

    z0mailbox z0

    Blog Posts:
    0
    из ntvdm-а можно вызвать родной Sleep через 0xc4 0xc4 (и свой длл-переходник потому что параметр передать там непросто)
    и этот гемор конечно не стоит того чтобы сбить загрузку цпу