A2 & Oberon GOOGLE trans to English      Помощь      Поиск      Пользователи  Файловый архив


 Страниц (1): [1]   

> Без описания
BohdanT Администратор
Отправлено: 15 Января, 2009 - 20:28:13
Post Id



Super Member


Покинул форум
Сообщений всего: 606
Дата рег-ции: Июль 2008  
Откуда: Киев, Украина
Репутация: 2




Наверное тот, кто пробовал A2 сразу же заметил - она не выключается.
Виснит и все...
Сегодня случайно заглянул в исходники - долго смеялся Ха-ха
(** Shut down the system. If parameter reboot is set, attempt to reboot the system. *)
PROCEDURE Shutdown* (reboot: BOOLEAN);
VAR i: LONGINT;
BEGIN
SYSTEM.CLI;
IF reboot THEN (* attempt reboot *)
SYSTEM.PORTOUT (70H, 8FX); (* Reset type: p. 5-37 AT Tech. Ref. *)
Wait; SYSTEM.PORTOUT (71H, 0X); (* Note: soft boot flag was set in InitMemory *)
Wait; SYSTEM.PORTOUT (70H, 0DX);
Wait; SYSTEM.PORTOUT (64H, 0FEX); (* reset CPU *)
FOR i := 1 TO 10000 DO END;
Reboot
END;
LOOP END
END Shutdown;

Как видно, если хотим сделать reboot то что то делаем, а иначе просло LOOP END Ха-ха

Когда то выключал комп, но исходники потерялись...
Вот надыбал в инете, может кто то захочет протестить:
mov ax, 5301H  
xor bx, bx
int 15H
mov ax, 5308H
mov bx, 1
mov cx, bx
int 15H
mov ax, 530DH
mov bx, 1
mov cx, bx
int 15H
mov ax, 530FH
mov bx, 1
mov cx, bx
int 15H
mov ax, 530EH
xor bx, bx
mov cx, 102H
int 15h
mov ax, 5307H
mov bx, 1
mov cx, 3
int 15H
jmp $

(Добавление)
;------------------------------------------------------------------
; Turn off PC via ACPI soft off
;------------------------------------------------------------------
pushad
mov word ptr [PM1a_CNT_SLP_S5], -1
; first, map bios' F segment
_call MmMapIoSpace, 0F0000h, 0, 64 K, 0
push eax
; now search RSDP struc
mov ecx, 64 K - 8

@@srch_rsdp: cmp dword ptr [eax], ' DSR' ; scan for "RSD PTR "
jnz @@rsdp_next
cmp dword ptr [eax+4], ' RTP'
jz @@fnd_rsdp
@@rsdp_next: inc eax
loop @@srch_rsdp
jmp @@done ; RSDP signature not found

@@fnd_rsdp: _call MmMapIoSpace, dword ptr [eax+10h], 0, 36, 0
push eax
xchg eax, esi
; esi --> RSDT
lodsd
cmp eax, 'TDSR'
jnz @@rsdt_done
lodsd

sub eax, 36
add esi, 36 - 8
shr eax, 2 ; eax = number of RSDT entries
xchg eax, edi

@@l_rsdt: lodsd
_call MmMapIoSpace, eax, 0, 60h, 0 ; should be enough
push eax
xchg eax, ebx
cmp dword ptr [ebx], 'PCAF'
jnz @@entry_done
; ebx --> FADT, get ACPI I/O ranges
mov eax, [ebx+38h]
mov [PM1a_EVT_BLK], eax
mov eax, [ebx+3Ch]
mov [PM1b_EVT_BLK], eax
mov eax, [ebx+40h]
mov [PM1a_CNT_BLK], eax
mov eax, [ebx+44h]
mov [PM1b_CNT_BLK], eax
movzx eax, byte ptr [ebx+58h]
mov [PM1_EVT_LEN], eax
movzx eax, byte ptr [ebx+59h]
mov [PM1_CNT_LEN], eax
mov ebx, [ebx+28h] ; ebx = DSDT phys addr
; get full mapping len
_call MmMapIoSpace, ebx, 0, 8, 0
mov edi, dword ptr [eax+4] ; edi = DSDT length in bytes
_call MmUnmapIoSpace, eax, 8
; now map the whole DSDT range
_call MmMapIoSpace, ebx, 0, edi, 0
push edi
push eax
xchg eax, edx
; edx --> DSDT data, edi = DSDT length, scan for _S5 object

sub edi, 8

@@l_srch_s5: cmp dword ptr [edx], '_5S_'
jnz @@s5_next
cmp byte ptr [edx+4], 12h
jnz @@s5_next
mov al, [edx+8]
mov [PM1a_CNT_SLP_S5], al
mov al, [edx+0Ah]
mov [PM1b_CNT_SLP_S5], al
jmp short @@s5_done
@@s5_next: inc edx
dec edi
jnz @@l_srch_s5

@@s5_done: pop eax
pop edi
_call MmUnmapIoSpace, eax, edi ; unmap DSDT

push 1
pop edi ; break

@@entry_done: pop eax
_call MmUnmapIoSpace, eax, 60h
dec edi
jnz @@l_rsdt

@@rsdt_done: pop eax
_call MmUnmapIoSpace, eax, 36

@@done: ; unmap F segment
pop eax
_call MmUnmapIoSpace, eax, 64 K

; phew! no more f**king mappings
cmp word ptr [PM1a_CNT_SLP_S5], -1
jz @@done_off ; probably system doesn't support Soft Off
; do the actual transition to the S5 state
mov ebx, [PM1_EVT_LEN]
shr ebx, 1
xor eax, eax

mov edx, [PM1a_EVT_BLK]
test edx, edx
jz @@done_pm1a_evt
add edx, ebx ; edx = _EN-register I/O address
cmp ebx, 2
jnz @@not_2
out dx, ax
jmp short @@done_pm1a_evt
@@not_2: out dx, eax
@@done_pm1a_evt:
mov edx, [PM1b_EVT_BLK]
test edx, edx
jz @@done_pm1b_evt
add edx, ebx ; edx = _EN-register I/O address
cmp ebx, 2
jnz @@not_2_
out dx, ax
jmp short @@done_pm1b_evt
@@not_2_: out dx, eax
@@done_pm1b_evt:

; first, write to PM1a_CNT.SLP_TYP, then to PM1b_CNT.SLP_TYP
movzx eax, byte ptr [PM1a_CNT_SLP_S5]
shl eax, 10 ; move it to SLP_TYPx position
bts eax, 13 ; set SLP_EN
mov edx, [PM1a_CNT_BLK]
test edx, edx
jz @@done_pm1a_cnt
out dx, ax ; compatible with both 16 and 32 bits
@@done_pm1a_cnt:
movzx eax, byte ptr [PM1b_CNT_SLP_S5]
shl eax, 10 ; move it to SLP_TYPx position
bts eax, 13 ; set SLP_EN
mov edx, [PM1b_CNT_BLK]
test edx, edx
jz @@done_pm1b_cnt
out dx, ax ; compatible with both 16 and 32 bits
@@done_pm1b_cnt:
; There is only one reason to get here -- if all the above crap didn't work

@@done_off: popad
 
 Top
BohdanT Администратор
Отправлено: 16 Апреля, 2013 - 00:26:04
Post Id



Super Member


Покинул форум
Сообщений всего: 606
Дата рег-ции: Июль 2008  
Откуда: Киев, Украина
Репутация: 2




чо то я так и не отписался.
если кому нужно выключить - способ есть. Пару раз в порт прописать да и готово(если надо пропишу, да и в инете валяется).
А вот с этими способами не сложилось А2 портит таблицы ACPI при загрузке, т.ч. не судьба.
 
 Top
OLzenizin
Отправлено: 30 Апреля, 2014 - 18:08:19
Post Id



Newbie


Покинул форум
Сообщений всего: 1
Дата рег-ции: Апр. 2014  
Откуда: Россия Москва
Репутация: 0




А вот с этими способами не сложилось А2 портит таблицы ACPI при загрузке, т.ч. не судьба.
 
 Top
NZavaloff
Отправлено: 05 Июня, 2014 - 09:50:31
Post Id



Newbie


Покинул форум
Сообщений всего: 1
Дата рег-ции: Июнь 2014  
Откуда: Астраханская область, Камызякский р-н, п. Станья
Репутация: 0




Как видно, если хотим сделать reboot то что то делаем, а иначе просло LOOP END
 
 Top
BohdanT Администратор
Отправлено: 10 Июня, 2014 - 14:54:03
Post Id



Super Member


Покинул форум
Сообщений всего: 606
Дата рег-ции: Июль 2008  
Откуда: Киев, Украина
Репутация: 2




Вот так у меня выключался:
PROCEDURE PowerOff*;
CODE{SYSTEM.i386}
MOV AX,0
MOV DX, 804H
OUT DX, AX
MOV AX, 03C00H
OUT DX, AX
END PowerOff;
 
 Top
Esevroff
Отправлено: 09 Июля, 2014 - 12:39:58
Post Id



Newbie


Покинул форум
Сообщений всего: 1
Дата рег-ции: Июль 2014  
Откуда: Россия Москва
Репутация: 0




 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0, скрытых: 0)
« Дрова »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Locations of visitors to this page
[Valid RSS]

RSS

Valid CSS!


Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0256]     [ Gzipped ]