Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Free Pascal, Pascal ABC и другие _ Reboot, Power Off и т.д.

Автор: Probel 29.11.2005 22:04

Доброго времени суток!
Хочу вот процедуры для 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?

Автор: Дож 1.12.2005 1:19

А в чем проблемы? Есть же встроенный асм... Попробуй, внедри.

Автор: Romtek 1.12.2005 3:21

To: Probel
Я тебе же говорил, что нужен 32-битный асм!
Исправь все
ax->eax
dx->edx
и т.д.

Автор: Probel 8.12.2005 0:06

спасиб, просто я не очень то селен в асме, думал что у кого-нить завалялись исходники по сабжу...
а вырубать камп я как-то странно умудрился %) просто поменял все цыфорки(там где 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.
с чем это может быть связано?