Помощь - Поиск - Пользователи - Календарь
Полная версия: Reboot, Power Off и т.д.
Форум «Всё о Паскале» > Pascal, Object Pascal > 32 битные компиляторы
Probel
Доброго времени суток!
Хочу вот процедуры для TMT Pascal для:
- перезагрузки компьютера (желательно холодную и теплую)
- выключения компьютера (это где есть поддержка APM)
- и другие, вроде остановки компа (Hang Mashine)
есть исходник модуля для TP со всеми этими делами, кроме вырубления компа, но там ассемблер 16-битный и в TMT не пашет sad.gif Скажите: возможно ли вообще перезагрузиться вырубить комп и др. под защищенным режимом?
дело в том что как-то я смотрел одну операционку "MenuetOS"(может кто слыхал) она вся на асме написана, но главное что все эти процедуры там есть и на сколько я понял, они пашут в 32-битном PMode... вот к примеру я выдрал для выключения компа:

org 100h
use16 ; это я для проверки написал, на самом деле
; там все в 32-битном пашет...

call APM_PowerOff

APM_PowerOff:
mov ax,0x5300
xor bx,bx
int 0x15
push ax

mov ax,0x5301
xor bx,bx
int 0x15

mov ax,0x5308
mov bx,1
mov cx,bx
int 0x15

mov ax,0x530E
xor bx,bx
pop cx
int 0x15

mov ax,0x530D
mov bx,1
mov cx,bx
int 0x15

mov ax,0x530F
mov bx,1
mov cx,bx
int 0x15

mov ax,0x5307
mov bx,1
mov cx,3
int 0x15

написано на fasm. можно ли это как-нить внидрить в TMT Pascal?
Дож
А в чем проблемы? Есть же встроенный асм... Попробуй, внедри.
Romtek
To: Probel
Я тебе же говорил, что нужен 32-битный асм!
Исправь все
ax->eax
dx->edx
и т.д.
Probel
спасиб, просто я не очень то селен в асме, думал что у кого-нить завалялись исходники по сабжу...
а вырубать камп я как-то странно умудрился %) просто поменял все цыфорки(там где ax) из шестнацатиричной->десятичную систему счисления и камп стал вырубаться в TMT... хотелось бы перезагрузку как-нибудь сделать...
вот была у меня для fasm:
Код

Org 100h
    mov ax, 40h
    mov es, ax
    mov di, 72h
    xor ax, ax
    db  0eah, 0, 0, 0ffh, 0ffh
    ret

переделал в pascal 32bit(если похоже wacko.gif )
Код

procedure Reboot;
asm
    mov eax, 40h
    mov es, ax
    mov edi, 72h
    xor ax, ax
    db  0eah, 0, 0, 0ffh, 0ffh
    ret
end;

и получаю RunError 216 sad.gif
такая же фигня, когда мне посоветовали на другом форуме:
Код
type
 p_word = ^word;
Var
 hook : p_word;

Procedure Reboot(Cold : Boolean);
begin
 hook := p_word(ptr($472));
 if (Cold = True) then
   hook^ := $0000
 else
   hook^ := $1234;

 ExitProc := pointer(ptr($FFFF0));
end;

begin
 Reboot(False);
 Halt;
end.
с чем это может быть связано?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.