2005-10-06 19:56:22 +02:00
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
|
;;
|
|
|
|
|
;; Shutdown for Menuet
|
|
|
|
|
;;
|
|
|
|
|
;; Distributed under General Public License
|
|
|
|
|
;; See file COPYING for details.
|
|
|
|
|
;; Copyright 2003 Ville Turjanmaa
|
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
system_shutdown: ; shut down the system
|
|
|
|
|
|
|
|
|
|
mov eax,3 ; stop playing cd
|
|
|
|
|
call sys_cd_audio
|
|
|
|
|
cli
|
|
|
|
|
cld
|
|
|
|
|
|
|
|
|
|
mov al,[0x2f0000+0x9030]
|
|
|
|
|
cmp al,1
|
|
|
|
|
jl no_shutdown_parameter
|
|
|
|
|
cmp al,4
|
|
|
|
|
jg no_shutdown_parameter
|
|
|
|
|
jmp yes_shutdown_param
|
|
|
|
|
no_shutdown_parameter:
|
|
|
|
|
|
|
|
|
|
movzx ecx,word [0x2f0000+0x900A]
|
|
|
|
|
movzx esi,word [0x2f0000+0x900C]
|
|
|
|
|
imul ecx,esi ;[0xfe04]
|
|
|
|
|
; mov ecx,0x500000/4 ;3fff00/4 ; darken screen
|
|
|
|
|
push ecx
|
|
|
|
|
mov esi,[0xfe80]
|
|
|
|
|
cmp esi,32*0x100000
|
|
|
|
|
jbe no_darken_screen
|
|
|
|
|
mov edi,16*0x100000
|
|
|
|
|
sdnewpix:
|
|
|
|
|
mov eax,[esi]
|
|
|
|
|
add esi,4
|
|
|
|
|
shr eax,1
|
|
|
|
|
and eax,0x7f7f7f7f
|
|
|
|
|
stosd
|
|
|
|
|
loop sdnewpix
|
|
|
|
|
pop ecx
|
|
|
|
|
mov esi,16*0x100000
|
|
|
|
|
mov edi,[0xfe80]
|
|
|
|
|
cld
|
|
|
|
|
rep movsd
|
|
|
|
|
no_darken_screen:
|
|
|
|
|
|
|
|
|
|
mov eax,[0xfe00]
|
|
|
|
|
shr eax,1
|
|
|
|
|
sub eax,220
|
|
|
|
|
|
|
|
|
|
mov ebx,[0xfe04]
|
|
|
|
|
shr ebx,1
|
|
|
|
|
mov [shutdownpos],ebx
|
|
|
|
|
sub ebx,120
|
|
|
|
|
|
|
|
|
|
mov edi,1
|
|
|
|
|
mov ecx,0x0000ff
|
|
|
|
|
|
|
|
|
|
sdnewpix2:
|
|
|
|
|
|
|
|
|
|
call [putpixel]
|
|
|
|
|
|
|
|
|
|
inc eax
|
|
|
|
|
mov esi,[0xfe00]
|
|
|
|
|
shr esi,1
|
|
|
|
|
add esi,220
|
|
|
|
|
cmp eax,esi
|
|
|
|
|
jnz sdnewpix2
|
|
|
|
|
|
|
|
|
|
dec ecx
|
|
|
|
|
|
|
|
|
|
mov eax,[0xfe00]
|
|
|
|
|
shr eax,1
|
|
|
|
|
sub eax,220
|
|
|
|
|
|
|
|
|
|
inc ebx
|
|
|
|
|
|
|
|
|
|
mov edx,[shutdownpos]
|
|
|
|
|
add edx,105
|
|
|
|
|
cmp ebx,edx
|
|
|
|
|
jnz sdnewpix2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mov esi,[0xfe00] ; menuet version
|
|
|
|
|
shr esi,1
|
|
|
|
|
sub esi,220
|
|
|
|
|
add esi,27
|
|
|
|
|
shl esi,16
|
|
|
|
|
mov eax,esi
|
|
|
|
|
add eax,[shutdownpos]
|
|
|
|
|
sub eax,105
|
|
|
|
|
mov ebx,0xffff00
|
|
|
|
|
mov ecx,version
|
|
|
|
|
mov edx,34
|
|
|
|
|
mov edi,1
|
|
|
|
|
call dtext
|
|
|
|
|
|
|
|
|
|
mov esi,[0xfe00] ; 'it is safe..'
|
|
|
|
|
shr esi,1
|
|
|
|
|
sub esi,220
|
|
|
|
|
add esi,27
|
|
|
|
|
shl esi,16
|
|
|
|
|
mov eax,esi
|
|
|
|
|
add eax,[shutdownpos]
|
|
|
|
|
add eax,33
|
|
|
|
|
mov esi,6
|
|
|
|
|
mov ebx,0xffffff
|
|
|
|
|
mov ecx,shutdowntext
|
|
|
|
|
mov edx,40
|
|
|
|
|
mov edi,1
|
|
|
|
|
newsdt:
|
|
|
|
|
call dtext
|
|
|
|
|
add eax,10
|
|
|
|
|
add ecx,40
|
|
|
|
|
dec esi
|
|
|
|
|
jnz newsdt
|
|
|
|
|
|
|
|
|
|
mov eax,rosef ; load rose.txt
|
|
|
|
|
mov ebx,0
|
|
|
|
|
mov ecx,16800
|
|
|
|
|
mov edx,0x90000
|
|
|
|
|
mov esi,12
|
|
|
|
|
call fileread
|
|
|
|
|
|
|
|
|
|
mov esi,[0xfe00] ; draw rose
|
|
|
|
|
shr esi,1
|
|
|
|
|
add esi,20
|
|
|
|
|
shl esi,16
|
|
|
|
|
mov eax,esi
|
|
|
|
|
add eax,[shutdownpos]
|
|
|
|
|
sub eax,110
|
|
|
|
|
|
|
|
|
|
mov ebx,0x00ff00
|
|
|
|
|
mov ecx,0x90001
|
|
|
|
|
mov edx,27
|
|
|
|
|
mov edi,1
|
|
|
|
|
|
|
|
|
|
nrl:
|
|
|
|
|
call dtext
|
|
|
|
|
sub ebx,0x050000
|
|
|
|
|
add eax,8
|
|
|
|
|
add ecx,31
|
|
|
|
|
cmp ecx,dword 0x90001+25*31
|
|
|
|
|
jnz nrl
|
|
|
|
|
|
|
|
|
|
call checkEgaCga
|
|
|
|
|
|
|
|
|
|
yes_shutdown_param:
|
|
|
|
|
|
|
|
|
|
cli
|
|
|
|
|
|
|
|
|
|
mov eax,kernel ; load kernel.mnt to 0x8000:0
|
|
|
|
|
mov esi,12
|
|
|
|
|
mov ebx,0
|
|
|
|
|
mov ecx,-1
|
|
|
|
|
mov edx,0x80000
|
|
|
|
|
call fileread
|
|
|
|
|
|
|
|
|
|
mov esi,restart_kernel_4000 ; move kernel re-starter to 0x4000:0
|
|
|
|
|
mov edi,0x40000
|
|
|
|
|
mov ecx,1000
|
|
|
|
|
cld
|
|
|
|
|
rep movsb
|
|
|
|
|
|
|
|
|
|
mov eax,0x2F0000 ; restore 0x0 - 0xffff
|
|
|
|
|
mov ebx,0x0000
|
|
|
|
|
mov ecx,0xffff
|
|
|
|
|
call memmove
|
|
|
|
|
|
|
|
|
|
call restorefatchain
|
|
|
|
|
|
|
|
|
|
mov eax,pr_mode_exit
|
|
|
|
|
mov [0x467+0],ax
|
|
|
|
|
mov [0x467+2],word 0x1000
|
|
|
|
|
|
|
|
|
|
mov al,0x0F
|
|
|
|
|
out 0x70,al
|
|
|
|
|
mov al,0x05
|
|
|
|
|
out 0x71,al
|
|
|
|
|
|
|
|
|
|
mov al,0xFE
|
|
|
|
|
out 0x64,al
|
|
|
|
|
hlt
|
|
|
|
|
|
|
|
|
|
use16
|
|
|
|
|
|
|
|
|
|
pr_mode_exit:
|
|
|
|
|
|
|
|
|
|
mov ax,1000
|
|
|
|
|
mov ds,ax
|
|
|
|
|
mov es,ax
|
|
|
|
|
mov fs,ax
|
|
|
|
|
mov gs,ax
|
|
|
|
|
mov ss,ax
|
|
|
|
|
; mov bl,[shutdown_parameter]
|
|
|
|
|
; mov [es:shutdown_parameter-0x10000],bl
|
|
|
|
|
|
|
|
|
|
jmp real_mode-0x10000
|
|
|
|
|
|
|
|
|
|
old_ints_h:
|
|
|
|
|
dw 4*0x20
|
|
|
|
|
dd 0
|
|
|
|
|
dw 0
|
|
|
|
|
|
2005-11-25 17:46:29 +01:00
|
|
|
|
rdelay:
|
|
|
|
|
ret
|
2005-10-06 19:56:22 +02:00
|
|
|
|
real_mode:
|
|
|
|
|
|
|
|
|
|
lidt [cs:old_ints_h-0x10000]
|
|
|
|
|
mov sp,0xfff0
|
2005-11-25 17:46:29 +01:00
|
|
|
|
;remap IRQs
|
|
|
|
|
mov al,0x11
|
|
|
|
|
out 0x20,al
|
|
|
|
|
call rdelay
|
|
|
|
|
out 0xA0,al
|
|
|
|
|
call rdelay
|
|
|
|
|
|
|
|
|
|
mov al,0x08
|
|
|
|
|
out 0x21,al
|
|
|
|
|
call rdelay
|
|
|
|
|
mov al,0x70
|
|
|
|
|
out 0xA1,al
|
|
|
|
|
call rdelay
|
|
|
|
|
|
|
|
|
|
mov al,0x04
|
|
|
|
|
out 0x21,al
|
|
|
|
|
call rdelay
|
|
|
|
|
mov al,0x02
|
|
|
|
|
out 0xA1,al
|
|
|
|
|
call rdelay
|
|
|
|
|
|
|
|
|
|
mov al,0x01
|
|
|
|
|
out 0x21,al
|
|
|
|
|
call rdelay
|
|
|
|
|
out 0xA1,al
|
|
|
|
|
call rdelay
|
|
|
|
|
|
|
|
|
|
mov al,2
|
|
|
|
|
out 0x21,al
|
|
|
|
|
mov al,0
|
|
|
|
|
out 0xA1,al
|
2005-10-06 19:56:22 +02:00
|
|
|
|
sti
|
|
|
|
|
|
|
|
|
|
jmp temp_3456
|
|
|
|
|
|
|
|
|
|
nbw:
|
|
|
|
|
xor ax,ax
|
|
|
|
|
in al,0x60
|
|
|
|
|
call pause_key
|
|
|
|
|
cmp al,7
|
|
|
|
|
jge nbw
|
|
|
|
|
mov bl,al
|
|
|
|
|
nbw2:
|
|
|
|
|
in al,0x60
|
|
|
|
|
call pause_key
|
|
|
|
|
cmp al,bl
|
|
|
|
|
je nbw2
|
|
|
|
|
cmp al,240 ;ax,240
|
|
|
|
|
jne nbw31
|
|
|
|
|
mov al,bl
|
|
|
|
|
dec al
|
|
|
|
|
jmp nbw32
|
|
|
|
|
nbw31:
|
|
|
|
|
add bl,128
|
|
|
|
|
cmp al,bl
|
|
|
|
|
jne nbw
|
|
|
|
|
sub al,129
|
|
|
|
|
|
|
|
|
|
nbw32:
|
|
|
|
|
|
|
|
|
|
cmp al,1 ; write floppy
|
|
|
|
|
jne no_floppy_write
|
|
|
|
|
call floppy_write
|
|
|
|
|
jmp temp_3456 ;nbw
|
|
|
|
|
no_floppy_write:
|
|
|
|
|
|
|
|
|
|
cmp al,2 ; poweroff
|
|
|
|
|
jne no_apm_off
|
|
|
|
|
call APM_PowerOff
|
|
|
|
|
no_apm_off:
|
|
|
|
|
|
|
|
|
|
cmp al,3 ; boot
|
|
|
|
|
jnz no_sys_boot
|
|
|
|
|
mov ax,0x0040
|
|
|
|
|
mov ds,ax
|
|
|
|
|
mov word[0x0072],0x1234
|
|
|
|
|
jmp 0xF000:0xFFF0
|
|
|
|
|
no_sys_boot:
|
|
|
|
|
|
|
|
|
|
cmp al,4 ; restart kernel
|
|
|
|
|
je restart_kernel
|
|
|
|
|
|
|
|
|
|
temp_3456:
|
|
|
|
|
push word 0x0000
|
|
|
|
|
pop es
|
|
|
|
|
mov al,byte [es:0x9030]
|
|
|
|
|
cmp al,1
|
|
|
|
|
jl nbw
|
|
|
|
|
cmp al,4
|
|
|
|
|
jg nbw
|
|
|
|
|
jmp nbw32
|
|
|
|
|
|
|
|
|
|
; jmp nbw
|
|
|
|
|
pause_key:
|
|
|
|
|
mov ecx,100
|
|
|
|
|
pause_key_1:
|
|
|
|
|
loop pause_key_1
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
iglobal
|
|
|
|
|
kernel db 'KERNEL MNT'
|
|
|
|
|
; shutdown_parameter db 0
|
|
|
|
|
endg
|
|
|
|
|
|
|
|
|
|
restart_kernel:
|
|
|
|
|
|
|
|
|
|
mov ax,0x0003 ; set text mode for screen
|
|
|
|
|
int 0x10
|
|
|
|
|
|
|
|
|
|
jmp 0x4000:0000
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
restart_kernel_4000:
|
2005-12-22 12:38:36 +01:00
|
|
|
|
cli
|
2005-10-06 19:56:22 +02:00
|
|
|
|
|
|
|
|
|
mov di,0x1000 ; load kernel image from 0x8000:0 -> 0x1000:0
|
|
|
|
|
|
|
|
|
|
new_kernel_block_move:
|
|
|
|
|
|
|
|
|
|
mov ebx,0
|
|
|
|
|
|
|
|
|
|
new_kernel_byte_move:
|
|
|
|
|
|
|
|
|
|
mov ax,di
|
|
|
|
|
add ax,0x7000
|
|
|
|
|
mov es,ax
|
|
|
|
|
mov dl,[es:bx]
|
|
|
|
|
mov es,di
|
|
|
|
|
mov [es:bx],dl
|
|
|
|
|
|
|
|
|
|
inc ebx
|
|
|
|
|
cmp ebx,65536
|
|
|
|
|
jbe new_kernel_byte_move
|
|
|
|
|
|
|
|
|
|
add di,0x1000
|
|
|
|
|
cmp di,0x2000
|
|
|
|
|
jbe new_kernel_block_move
|
|
|
|
|
|
|
|
|
|
wbinvd ; write and invalidate cache
|
|
|
|
|
|
|
|
|
|
mov ax,0x1000
|
|
|
|
|
mov es,ax
|
2005-12-22 12:38:36 +01:00
|
|
|
|
mov ax,0x3000
|
2005-10-06 19:56:22 +02:00
|
|
|
|
mov ss,ax
|
2005-12-22 12:38:36 +01:00
|
|
|
|
mov sp,0xec00
|
|
|
|
|
sti
|
2005-10-06 19:56:22 +02:00
|
|
|
|
|
|
|
|
|
jmp 0x1000:0000
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
;!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|
|
|
ret
|
|
|
|
|
uglobal
|
|
|
|
|
flm db 0
|
|
|
|
|
endg
|
|
|
|
|
|
|
|
|
|
floppy_write: ; write diskette image to physical floppy
|
|
|
|
|
|
|
|
|
|
pusha
|
|
|
|
|
|
|
|
|
|
mov ax,0x1000
|
|
|
|
|
mov es,ax
|
|
|
|
|
cmp [es:flm-0x10000],byte 1
|
|
|
|
|
je fwwritedone
|
|
|
|
|
mov [es:flm-0x10000],byte 1
|
|
|
|
|
|
|
|
|
|
mov ax,0x0000 ; reset drive
|
|
|
|
|
mov dx,0x0000
|
|
|
|
|
int 0x13
|
|
|
|
|
|
|
|
|
|
mov cx,0x0001 ; startcyl,startsector
|
|
|
|
|
mov dx,0x0000 ; starthead,drive
|
|
|
|
|
push word 80*2 ; read no of sect
|
|
|
|
|
|
|
|
|
|
fwwrites:
|
|
|
|
|
pusha
|
|
|
|
|
|
|
|
|
|
; move 1mb+ -> 0:a000
|
|
|
|
|
|
|
|
|
|
pusha
|
|
|
|
|
mov si,fwmovedesc -0x10000
|
|
|
|
|
push word 0x1000
|
|
|
|
|
pop es
|
|
|
|
|
mov cx,256*18
|
|
|
|
|
mov ah,0x87
|
|
|
|
|
int 0x15
|
|
|
|
|
mov eax,[es:fwmovedesc-0x10000+0x12]
|
|
|
|
|
add eax,512*18
|
|
|
|
|
mov [es:fwmovedesc-0x10000+0x12],eax
|
|
|
|
|
popa
|
|
|
|
|
|
|
|
|
|
xor si,si
|
|
|
|
|
fwnewwrite:
|
|
|
|
|
push word 0x0
|
|
|
|
|
pop es
|
|
|
|
|
mov bx,0xa000 ; es:bx -> data area
|
|
|
|
|
mov ax,0x0300+18 ; read, no of sectors to read
|
|
|
|
|
int 0x13
|
|
|
|
|
|
|
|
|
|
cmp ah,0
|
|
|
|
|
jz fwgoodwrite
|
|
|
|
|
|
|
|
|
|
add si,1
|
|
|
|
|
cmp si,10
|
|
|
|
|
jnz fwnewwrite
|
|
|
|
|
|
|
|
|
|
add esp,32+2
|
|
|
|
|
|
|
|
|
|
popa ; can't access diskette
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
fwgoodwrite:
|
|
|
|
|
|
|
|
|
|
popa
|
|
|
|
|
|
|
|
|
|
inc dh
|
|
|
|
|
cmp dh,2
|
|
|
|
|
jnz fwbb2
|
|
|
|
|
mov dh,0
|
|
|
|
|
inc ch
|
|
|
|
|
|
|
|
|
|
fwbb2:
|
|
|
|
|
|
|
|
|
|
cld
|
|
|
|
|
pop ax
|
|
|
|
|
dec ax
|
|
|
|
|
push ax
|
|
|
|
|
cmp ax,0
|
|
|
|
|
jnz fwrs
|
|
|
|
|
|
|
|
|
|
pop ax
|
|
|
|
|
|
|
|
|
|
jmp fwwritedone
|
|
|
|
|
fwrs:
|
|
|
|
|
jmp fwwrites
|
|
|
|
|
|
|
|
|
|
fwmovedesc:
|
|
|
|
|
|
|
|
|
|
db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0
|
|
|
|
|
db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0
|
|
|
|
|
db 0xff,0xff,0x0,0x00,0x10,0x93,0x0,0x0
|
|
|
|
|
db 0xff,0xff,0x0,0xa0,0x00,0x93,0x0,0x0
|
|
|
|
|
db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0
|
|
|
|
|
db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0
|
|
|
|
|
db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0
|
|
|
|
|
db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0
|
|
|
|
|
|
|
|
|
|
fwwritedone:
|
|
|
|
|
|
|
|
|
|
popa
|
|
|
|
|
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
use32
|
|
|
|
|
|
|
|
|
|
uglobal
|
|
|
|
|
shutdownpos dd 0x0
|
|
|
|
|
endg
|
|
|
|
|
|
|
|
|
|
iglobal
|
|
|
|
|
;shutdowntext:
|
|
|
|
|
; db "IT'S SAFE TO POWER OFF COMPUTER OR "
|
|
|
|
|
; db ' '
|
|
|
|
|
; db '1) SAVE RAMDISK TO FLOPPY '
|
|
|
|
|
; db '2) APM - POWEROFF '
|
|
|
|
|
; db '3) REBOOT '
|
|
|
|
|
; db '4) RESTART KERNEL '
|
|
|
|
|
shutdowntext:
|
|
|
|
|
db "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>᭮<EFBFBD> <20>몫<EFBFBD>祭<EFBFBD><E7A5AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> "
|
|
|
|
|
db ' '
|
|
|
|
|
db '1) <20><><EFBFBD>࠭<EFBFBD><E0A0AD><EFBFBD> ࠬ<><E0A0AC><EFBFBD><EFBFBD> <20><> <20><>᪥<EFBFBD><E1AAA5> '
|
|
|
|
|
db '2) APM - <20>몫<EFBFBD>祭<EFBFBD><E7A5AD> <20><>⠭<EFBFBD><E2A0AD> '
|
|
|
|
|
db '3) <20><>१<EFBFBD><E0A5A7><EFBFBD>㧪<EFBFBD> <20><><EFBFBD>⥬<EFBFBD> '
|
|
|
|
|
db '4) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> '
|
|
|
|
|
rosef:
|
|
|
|
|
db 'ROSE TXT'
|
|
|
|
|
endg
|