forked from KolibriOS/kolibrios
getting smaller and closer to real hardware...
git-svn-id: svn://kolibrios.org@2014 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
c7598bab12
commit
e338e5353f
@ -1,53 +1,7 @@
|
||||
@echo off
|
||||
|
||||
set languages=en ru
|
||||
|
||||
call :Check_Lang en
|
||||
call :Target_kernel
|
||||
|
||||
if ERRORLEVEL 0 goto Exit_OK
|
||||
|
||||
echo There was an error executing script.
|
||||
echo For any help, please send a report.
|
||||
pause
|
||||
goto :eof
|
||||
|
||||
|
||||
|
||||
|
||||
:Check_Lang
|
||||
set res=%1
|
||||
:Check_Lang_loop
|
||||
for %%a in (%languages%) do if %%a==%res% set lang=%res%
|
||||
if defined lang goto :eof
|
||||
|
||||
echo Language '%res%' is incorrect
|
||||
echo Enter valid language [ %languages% ]:
|
||||
|
||||
set /P res=">
|
||||
goto Check_Lang_loop
|
||||
goto :eof
|
||||
|
||||
|
||||
:Target_kernel
|
||||
echo *** building kernel with language '%lang%' ...
|
||||
|
||||
if not exist bin mkdir bin
|
||||
echo lang fix %lang% > lang.inc
|
||||
c:\fasm\fasm -m 65536 kernel.asm bin\kernel.mnt
|
||||
if not %errorlevel%==0 goto :Error_FasmFailed
|
||||
erase lang.inc
|
||||
goto :eof
|
||||
fasm -m 65536 kernel.asm bin\kernel.mnt
|
||||
|
||||
|
||||
|
||||
:Error_FasmFailed
|
||||
echo error: fasm execution failed
|
||||
erase lang.inc
|
||||
pause
|
||||
exit 1
|
||||
|
||||
:Exit_OK
|
||||
echo all operations has been done
|
||||
pause
|
||||
exit 0
|
@ -20,48 +20,6 @@ $Revision$
|
||||
;
|
||||
;==========================================================================
|
||||
|
||||
if 0
|
||||
putchar:
|
||||
; in: al=character
|
||||
mov ah, 0Eh
|
||||
mov bh, 0
|
||||
int 10h
|
||||
ret
|
||||
|
||||
print:
|
||||
; in: si->string
|
||||
mov al, 186
|
||||
call putchar
|
||||
mov al, ' '
|
||||
call putchar
|
||||
|
||||
printplain:
|
||||
; in: si->string
|
||||
pusha
|
||||
lodsb
|
||||
@@:
|
||||
call putchar
|
||||
lodsb
|
||||
test al,al
|
||||
jnz @b
|
||||
popa
|
||||
ret
|
||||
|
||||
|
||||
setcursor:
|
||||
; in: dl=column, dh=row
|
||||
mov ah, 2
|
||||
mov bh, 0
|
||||
int 10h
|
||||
ret
|
||||
|
||||
macro _setcursor row,column
|
||||
{
|
||||
mov dx, row*256 + column
|
||||
call setcursor
|
||||
}
|
||||
|
||||
end if
|
||||
|
||||
boot_read_floppy:
|
||||
push si
|
||||
@ -80,8 +38,6 @@ boot_read_floppy:
|
||||
ret
|
||||
|
||||
sayerr_plain:
|
||||
jmp $
|
||||
|
||||
sayerr:
|
||||
jmp $
|
||||
|
||||
@ -163,6 +119,7 @@ no_hd_load:
|
||||
push cs
|
||||
pop es
|
||||
|
||||
if 0
|
||||
; set videomode
|
||||
mov ax, 3
|
||||
int 0x10
|
||||
@ -172,6 +129,7 @@ no_hd_load:
|
||||
pop es
|
||||
xor di, di
|
||||
mov ah, 1*16+15
|
||||
end if
|
||||
|
||||
cpugood:
|
||||
|
||||
@ -302,6 +260,7 @@ cfgmanager:
|
||||
|
||||
; pop ax ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ??
|
||||
jmp .continue
|
||||
|
||||
.loader_block dd -1
|
||||
.continue:
|
||||
sti
|
||||
@ -344,314 +303,6 @@ include 'detect/biosmem.inc'
|
||||
|
||||
; READ DISKETTE TO MEMORY
|
||||
|
||||
if 0
|
||||
----
|
||||
cmp [boot_dev],0
|
||||
jne no_sys_on_floppy
|
||||
xor ax, ax ; reset drive
|
||||
xor dx, dx
|
||||
int 0x13
|
||||
; do we boot from CD-ROM?
|
||||
mov ah, 41h
|
||||
mov bx, 55AAh
|
||||
xor dx, dx
|
||||
int 0x13
|
||||
jc .nocd
|
||||
cmp bx, 0AA55h
|
||||
jnz .nocd
|
||||
mov ah, 48h
|
||||
push ds
|
||||
push es
|
||||
pop ds
|
||||
mov si, 0xa000
|
||||
mov word [si], 30
|
||||
int 0x13
|
||||
pop ds
|
||||
jc .nocd
|
||||
push ds
|
||||
lds si, [es:si+26]
|
||||
test byte [ds:si+10], 40h
|
||||
pop ds
|
||||
jz .nocd
|
||||
; yes - read all floppy by 18 sectors
|
||||
|
||||
; TODO: !!!! read only first sector and set variables !!!!!
|
||||
; ...
|
||||
; TODO: !!! then read flippy image track by track
|
||||
|
||||
mov cx, 0x0001 ; startcyl,startsector
|
||||
.a1:
|
||||
push cx dx
|
||||
mov al, 18
|
||||
mov bx, 0xa000
|
||||
call boot_read_floppy
|
||||
mov si, movedesc
|
||||
push es
|
||||
push ds
|
||||
pop es
|
||||
mov cx, 256*18
|
||||
mov ah, 0x87
|
||||
int 0x15
|
||||
pop es
|
||||
pop dx cx
|
||||
test ah, ah
|
||||
jnz sayerr_floppy
|
||||
add dword [si+8*3+2], 512*18
|
||||
inc dh
|
||||
cmp dh, 2
|
||||
jnz .a1
|
||||
mov dh, 0
|
||||
inc ch
|
||||
cmp ch, 80
|
||||
jae ok_sys_on_floppy
|
||||
mov al, ch
|
||||
shr ch, 2
|
||||
jmp .a1
|
||||
.nocd:
|
||||
; no - read only used sectors from floppy
|
||||
; now load floppy image to memory
|
||||
; at first load boot sector and first FAT table
|
||||
|
||||
; read only first sector and fill variables
|
||||
mov cx, 0x0001 ; first logical sector
|
||||
xor dx, dx ; head = 0, drive = 0 (a:)
|
||||
mov al, 1 ; read one sector
|
||||
mov bx, 0xB000 ; es:bx -> data area
|
||||
call boot_read_floppy
|
||||
; fill the necessary parameters to work with a floppy
|
||||
mov ax, word [es:bx+24]
|
||||
mov word [BPB_SecPerTrk], ax
|
||||
mov ax, word [es:bx+26]
|
||||
mov word [BPB_NumHeads], ax
|
||||
mov ax, word [es:bx+17]
|
||||
mov word [BPB_RootEntCnt], ax
|
||||
mov ax, word [es:bx+14]
|
||||
mov word [BPB_RsvdSecCnt], ax
|
||||
mov ax, word [es:bx+19]
|
||||
mov word [BPB_TotSec16], ax
|
||||
mov al, byte [es:bx+13]
|
||||
mov byte [BPB_SecPerClus], al
|
||||
mov al, byte [es:bx+16]
|
||||
mov byte [BPB_NumFATs], al
|
||||
;<Lrz> 18.11.2008
|
||||
mov ax, word [es:bx+22]
|
||||
mov word [BPB_FATSz16], ax
|
||||
mov cx, word [es:bx+11]
|
||||
mov word [BPB_BytsPerSec], cx
|
||||
|
||||
; count of clusters in FAT12 ((size_of_FAT*2)/3)
|
||||
; mov ax, word [BPB_FATSz16]
|
||||
; mov cx, word [BPB_BytsPerSec]
|
||||
;end <Lrz> 18.11.2008
|
||||
xor dx, dx
|
||||
mul cx
|
||||
shl ax, 1
|
||||
mov cx, 3
|
||||
div cx ; now ax - number of clusters in FAT12
|
||||
mov word [end_of_FAT], ax
|
||||
|
||||
; load first FAT table
|
||||
mov cx, 0x0002 ; startcyl,startsector ; TODO!!!!!
|
||||
xor dx, dx ; starthead,drive
|
||||
mov al, byte [BPB_FATSz16] ; no of sectors to read
|
||||
add bx, word [BPB_BytsPerSec] ; es:bx -> data area
|
||||
call boot_read_floppy
|
||||
mov bx, 0xB000
|
||||
|
||||
; and copy them to extended memory
|
||||
mov si, movedesc
|
||||
mov [si+8*2+3], bh ; from
|
||||
|
||||
mov ax, word [BPB_BytsPerSec]
|
||||
shr ax, 1 ; words per sector
|
||||
mov cx, word [BPB_RsvdSecCnt]
|
||||
add cx, word [BPB_FATSz16]
|
||||
mul cx
|
||||
push ax ; save to stack count of words in boot+FAT
|
||||
xchg ax, cx
|
||||
|
||||
push es
|
||||
push ds
|
||||
pop es
|
||||
mov ah, 0x87
|
||||
int 0x15
|
||||
pop es
|
||||
test ah, ah
|
||||
jz @f
|
||||
sayerr_floppy:
|
||||
mov dx, 0x3f2
|
||||
mov al, 0
|
||||
out dx, al
|
||||
; mov si, memmovefailed
|
||||
jmp $
|
||||
@@:
|
||||
pop ax ; restore from stack count of words in boot+FAT
|
||||
shl ax, 1 ; make bytes count from count of words
|
||||
and eax, 0ffffh
|
||||
add dword [si+8*3+2], eax
|
||||
|
||||
; copy first FAT to second copy
|
||||
; TODO: BPB_NumFATs !!!!!
|
||||
add bx, word [BPB_BytsPerSec] ; !!! TODO: may be need multiply by BPB_RsvdSecCnt !!!
|
||||
mov byte [si+8*2+3], bh ; bx - begin of FAT
|
||||
|
||||
mov ax, word [BPB_BytsPerSec]
|
||||
shr ax, 1 ; words per sector
|
||||
mov cx, word [BPB_FATSz16]
|
||||
mul cx
|
||||
mov cx, ax ; cx - count of words in FAT
|
||||
|
||||
push es
|
||||
push ds
|
||||
pop es
|
||||
mov ah, 0x87
|
||||
int 0x15
|
||||
pop es
|
||||
test ah, ah
|
||||
jnz sayerr_floppy
|
||||
|
||||
mov ax, cx
|
||||
shl ax, 1
|
||||
and eax, 0ffffh ; ax - count of bytes in FAT
|
||||
add dword [si+8*3+2], eax
|
||||
|
||||
; reading RootDir
|
||||
; TODO: BPB_NumFATs
|
||||
add bx, ax
|
||||
add bx, 100h
|
||||
and bx, 0ff00h ; bx - place in buffer to write RootDir
|
||||
push bx
|
||||
|
||||
mov bx, word [BPB_BytsPerSec]
|
||||
shr bx, 5 ; divide bx by 32
|
||||
mov ax, word [BPB_RootEntCnt]
|
||||
xor dx, dx
|
||||
div bx
|
||||
push ax ; ax - count of RootDir sectors
|
||||
|
||||
mov ax, word [BPB_FATSz16]
|
||||
xor cx, cx
|
||||
mov cl, byte [BPB_NumFATs]
|
||||
mul cx
|
||||
add ax, word [BPB_RsvdSecCnt] ; ax - first sector of RootDir
|
||||
|
||||
mov word [FirstDataSector], ax
|
||||
pop bx
|
||||
push bx
|
||||
add word [FirstDataSector], bx ; Begin of data region of floppy
|
||||
|
||||
; read RootDir
|
||||
call conv_abs_to_THS
|
||||
pop ax
|
||||
pop bx ; place in buffer to write
|
||||
push ax
|
||||
call boot_read_floppy ; read RootDir into buffer
|
||||
; copy RootDir
|
||||
mov byte [si+8*2+3], bh ; from buffer
|
||||
pop ax ; ax = count of RootDir sectors
|
||||
mov cx, word [BPB_BytsPerSec]
|
||||
mul cx
|
||||
shr ax, 1
|
||||
mov cx, ax ; count of words to copy
|
||||
push es
|
||||
push ds
|
||||
pop es
|
||||
mov ah, 0x87
|
||||
int 0x15
|
||||
pop es
|
||||
|
||||
mov ax, cx
|
||||
shl ax, 1
|
||||
and eax, 0ffffh ; ax - count of bytes in RootDir
|
||||
add dword [si+8*3+2], eax ; add count of bytes copied
|
||||
|
||||
; Reading data clusters from floppy
|
||||
mov byte [si+8*2+3], bh
|
||||
push bx
|
||||
|
||||
mov di, 2 ; First data cluster
|
||||
.read_loop:
|
||||
mov bx, di
|
||||
shr bx, 1 ; bx+di = di*1.5
|
||||
jnc .even
|
||||
test word [es:bx+di+0xB200], 0xFFF0 ; TODO: may not be 0xB200 !!!
|
||||
jmp @f
|
||||
.even:
|
||||
test word [es:bx+di+0xB200], 0xFFF ; TODO: may not be 0xB200 !!!
|
||||
|
||||
@@:
|
||||
jz .skip
|
||||
; read cluster di
|
||||
;.read:
|
||||
;conv cluster di to abs. sector ax
|
||||
; ax = (N-2) * BPB_SecPerClus + FirstDataSector
|
||||
mov ax, di
|
||||
sub ax, 2
|
||||
xor bx, bx
|
||||
mov bl, byte [BPB_SecPerClus]
|
||||
mul bx
|
||||
add ax, word [FirstDataSector]
|
||||
call conv_abs_to_THS
|
||||
pop bx
|
||||
push bx
|
||||
mov al, byte [BPB_SecPerClus] ; number of sectors in cluster
|
||||
call boot_read_floppy
|
||||
push es
|
||||
push ds
|
||||
pop es
|
||||
pusha
|
||||
;
|
||||
mov ax, word [BPB_BytsPerSec]
|
||||
xor cx, cx
|
||||
mov cl, byte [BPB_SecPerClus]
|
||||
mul cx
|
||||
shr ax, 1 ; ax = (BPB_BytsPerSec * BPB_SecPerClus)/2
|
||||
mov cx, ax ; number of words to copy (count words in cluster)
|
||||
;
|
||||
mov ah, 0x87
|
||||
int 0x15 ; copy data
|
||||
test ah, ah
|
||||
popa
|
||||
pop es
|
||||
jnz sayerr_floppy
|
||||
; skip cluster di
|
||||
.skip:
|
||||
mov ax, word [BPB_BytsPerSec]
|
||||
xor cx, cx
|
||||
mov cl, byte [BPB_SecPerClus]
|
||||
mul cx
|
||||
and eax, 0ffffh ; ax - count of bytes in cluster
|
||||
add dword [si+8*3+2], eax
|
||||
|
||||
mov ax, word [end_of_FAT] ; max cluster number
|
||||
pusha
|
||||
; draw percentage
|
||||
; total clusters: ax
|
||||
; read clusters: di
|
||||
xchg ax, di
|
||||
mov cx, 100
|
||||
mul cx
|
||||
div di
|
||||
aam
|
||||
xchg al, ah
|
||||
add ax, '00'
|
||||
@@:
|
||||
popa
|
||||
inc di
|
||||
cmp di, word [end_of_FAT] ; max number of cluster
|
||||
jnz .read_loop
|
||||
pop bx ; clear stack
|
||||
|
||||
ok_sys_on_floppy:
|
||||
no_sys_on_floppy:
|
||||
xor ax, ax ; reset drive
|
||||
xor dx, dx
|
||||
int 0x13
|
||||
mov dx, 0x3f2 ; floppy motor off
|
||||
mov al, 0
|
||||
out dx, al
|
||||
---
|
||||
end if
|
||||
|
||||
|
||||
; SET GRAPHICS
|
||||
|
@ -1,6 +1,6 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
@ -14,53 +14,4 @@
|
||||
$Revision$
|
||||
|
||||
|
||||
;d80x25_bottom:
|
||||
; db 186,' KolibriOS is based on MenuetOS and comes with ABSOLUTELY '
|
||||
; db 'NO WARRANTY ',186
|
||||
; db 186,' See file COPYING for details '
|
||||
; db ' ',186
|
||||
; line_full_bottom
|
||||
;d80x25_bottom_num = 3
|
||||
|
||||
;msg_apm db " APM x.x ", 0
|
||||
;vervesa db "Version of Vesa: Vesa x.x",13,10,0
|
||||
;novesa db "Display: EGA/CGA",13,10,0
|
||||
;s_vesa db "Version of VESA: "
|
||||
; .ver db "?.?",13,10,0
|
||||
|
||||
;gr_mode db "Select a videomode: ",13,10,0
|
||||
|
||||
;vrrmprint db "Apply VRR? (picture frequency greater than 60Hz"
|
||||
; db " only for transfers:",13,10
|
||||
; db 186," 1024*768->800*600 and 800*600->640*480) [1-yes,2-no]:",0
|
||||
|
||||
|
||||
;ask_bd db "Add disks visible by BIOS emulated in V86-mode? [1-yes, 2-no]: ",0
|
||||
|
||||
;bdev db "Load ramdisk from [1-floppy; 2-C:\kolibri.img (FAT32);"
|
||||
; db 13,10,186," "
|
||||
; db "3-use preloaded ram-image from kernel restart;"
|
||||
; db 13,10,186," "
|
||||
; db "4-create blank image]: ",0
|
||||
;probetext db 13,10,13,10,186," Use standart graphics mode? [1-yes, "
|
||||
; db "2-probe bios (Vesa 3.0)]: ",0
|
||||
;prnotfnd db "Fatal - Videomode not found.",0
|
||||
;btns db "Fatal - Can't determine color depth.",0
|
||||
;badsect db 13,10,186," Fatal - Bad sector. Replace floppy.",0
|
||||
;memmovefailed db 13,10,186," Fatal - Int 0x15 move failed.",0
|
||||
;okt db " ... OK"
|
||||
;linef db 13,10,0
|
||||
;diskload db "Loading diskette: 00 %",8,8,8,8,0
|
||||
;pros db "00"
|
||||
;backspace2 db 8,8,0
|
||||
boot_dev db 0 ; 0=floppy, 1=hd
|
||||
;start_msg db "Press [abcd] to change settings, press [Enter] to continue booting",13,10,0
|
||||
;time_msg db " or wait "
|
||||
;time_str db " 5 seconds"
|
||||
; db " before automatical continuation",13,10,0
|
||||
;current_cfg_msg db "cfgmanager.printcfg reached",13,10,0
|
||||
;curvideo_msg db " [a] Videomode: ",0
|
||||
|
||||
;loading_msg db "Loading KolibriOS...",0
|
||||
;save_quest db "Remember current settings? [y/n]: ",0
|
||||
;loader_block_error db "Invalid boot data",0
|
||||
|
@ -78,7 +78,7 @@ virtual at $A000
|
||||
mi VBE_ModeInfo
|
||||
modes_table:
|
||||
end virtual
|
||||
cursor_pos dw 0 ;âðåìåííîå õðàíåíèå êóðñîðà.
|
||||
cursor_pos dw 0 ;temporary cursor storage.
|
||||
home_cursor dw 0 ;current shows rows a table
|
||||
end_cursor dw 0 ;end of position current shows rows a table
|
||||
scroll_start dw 0 ;start position of scroll bar
|
||||
|
@ -10,9 +10,9 @@ $Revision$
|
||||
|
||||
; READ RAMDISK IMAGE FROM HD
|
||||
|
||||
cmp [boot_dev+OS_BASE+0x10000],1
|
||||
; jne no_sys_on_hd
|
||||
|
||||
; cmp [boot_dev+OS_BASE+0x10000],1
|
||||
jmp no_sys_on_hd
|
||||
if 0
|
||||
test [DRIVE_DATA+1],byte 0x40
|
||||
jz position_2
|
||||
mov [hdbase],0x1f0
|
||||
@ -97,6 +97,7 @@ read_image:
|
||||
mov edi, 12
|
||||
call file_read
|
||||
ret
|
||||
end if
|
||||
|
||||
image_retrieved db 0
|
||||
counter_of_partitions db 0
|
||||
|
@ -1,209 +0,0 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;; Shutdown for Menuet ;;
|
||||
;; ;;
|
||||
;; Distributed under General Public License ;;
|
||||
;; See file COPYING for details. ;;
|
||||
;; Copyright 2003 Ville Turjanmaa ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
|
||||
|
||||
align 4
|
||||
pr_mode_exit:
|
||||
|
||||
; setup stack
|
||||
mov ax, 0x3000
|
||||
mov ss, ax
|
||||
mov esp, 0x0EC00
|
||||
; setup ds
|
||||
push cs
|
||||
pop ds
|
||||
|
||||
lidt [old_ints_h]
|
||||
;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,0xB8
|
||||
out 0x21,al
|
||||
call rdelay
|
||||
mov al,0xBD
|
||||
out 0xA1,al
|
||||
sti
|
||||
|
||||
temp_3456:
|
||||
xor ax,ax
|
||||
mov es,ax
|
||||
mov al,byte [es:0x9030]
|
||||
cmp al,1
|
||||
jl nbw
|
||||
cmp al,4
|
||||
jle nbw32
|
||||
|
||||
nbw:
|
||||
in al,0x60
|
||||
cmp al,6
|
||||
jae nbw
|
||||
mov bl,al
|
||||
nbw2:
|
||||
in al,0x60
|
||||
cmp al,bl
|
||||
je nbw2
|
||||
cmp al,240 ;ax,240
|
||||
jne nbw31
|
||||
mov al,bl
|
||||
dec ax
|
||||
jmp nbw32
|
||||
nbw31:
|
||||
add bl,128
|
||||
cmp al,bl
|
||||
jne nbw
|
||||
sub al,129
|
||||
|
||||
nbw32:
|
||||
|
||||
dec ax
|
||||
dec ax ; 2 = power off
|
||||
jnz no_apm_off
|
||||
call APM_PowerOff
|
||||
jmp $
|
||||
no_apm_off:
|
||||
|
||||
dec ax ; 3 = reboot
|
||||
jnz restart_kernel ; 4 = restart kernel
|
||||
push 0x40
|
||||
pop ds
|
||||
mov word[0x0072],0x1234
|
||||
jmp 0xF000:0xFFF0
|
||||
|
||||
|
||||
rdelay:
|
||||
ret
|
||||
|
||||
APM_PowerOff:
|
||||
mov ax, 5304h
|
||||
xor bx, bx
|
||||
int 15h
|
||||
;!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
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
|
||||
|
||||
restart_kernel:
|
||||
|
||||
mov ax,0x0003 ; set text mode for screen
|
||||
int 0x10
|
||||
jmp 0x4000:0000
|
||||
|
||||
restart_kernel_4000:
|
||||
cli
|
||||
|
||||
push ds
|
||||
pop es
|
||||
mov cx, 0x8000
|
||||
push cx
|
||||
push 0x7000
|
||||
pop ds
|
||||
xor si, si
|
||||
xor di, di
|
||||
rep movsw
|
||||
pop cx
|
||||
mov ds, cx
|
||||
push 0x2000
|
||||
pop es
|
||||
rep movsw
|
||||
push 0x9000
|
||||
pop ds
|
||||
push 0x3000
|
||||
pop es
|
||||
mov cx, 0xE000/2
|
||||
rep movsw
|
||||
|
||||
wbinvd ; write and invalidate cache
|
||||
|
||||
mov al, 00110100b
|
||||
out 43h, al
|
||||
jcxz $+2
|
||||
mov al, 0xFF
|
||||
out 40h, al
|
||||
jcxz $+2
|
||||
out 40h, al
|
||||
jcxz $+2
|
||||
sti
|
||||
|
||||
; (hint by Black_mirror)
|
||||
; We must read data from keyboard port,
|
||||
; because there may be situation when previous keyboard interrupt is lost
|
||||
; (due to return to real mode and IRQ reprogramming)
|
||||
; and next interrupt will not be generated (as keyboard waits for handling)
|
||||
in al, 0x60
|
||||
|
||||
; bootloader interface
|
||||
push 0x1000
|
||||
pop ds
|
||||
mov si, kernel_restart_bootblock
|
||||
mov ax, 'KL'
|
||||
jmp 0x1000:0000
|
||||
|
||||
|
@ -323,4 +323,3 @@ sys_rdmsr:
|
||||
ret
|
||||
|
||||
|
||||
|
||||
|
3
kernel/branches/Kolibri-A/trunk/bus/SB/HUDSON.INC
Normal file
3
kernel/branches/Kolibri-A/trunk/bus/SB/HUDSON.INC
Normal file
@ -0,0 +1,3 @@
|
||||
|
||||
SB_PM_CTRL_BLK equ 0x62
|
||||
|
@ -3,7 +3,14 @@ $Revision: 1598 $
|
||||
SMBUS_PCIE_ADDR equ 0xF00A0000 ; bdf0:20.0 = SB7xx SMBus PCI Config Registers
|
||||
LPC_PCIE_ADDR equ 0xF00A3000 ; bdf0:20.3 = SB7xx LPC ISA bridge Config Registers
|
||||
|
||||
SB_SIO_INDEX equ 0x2e
|
||||
SB_SIO_INDEX equ 0x2E
|
||||
SB_PM_INDEX equ 0xCD6
|
||||
|
||||
if PLATFORM>PLATFORM_RS780
|
||||
include "bus/sb/hudson.inc"
|
||||
else
|
||||
include "bus/sb/sb710.inc"
|
||||
end if
|
||||
|
||||
;---------------------------------------------------------------------
|
||||
align 4
|
||||
@ -43,10 +50,38 @@ lpc_write_pciconfig:
|
||||
align 4
|
||||
read_sio_cfg:
|
||||
; in: al = reg# | out: al = data
|
||||
push edx
|
||||
mov dx, SB_SIO_INDEX
|
||||
out dx, al
|
||||
inc dl
|
||||
in al, dx
|
||||
pop edx
|
||||
ret
|
||||
|
||||
;------------------------------------------------
|
||||
align 4
|
||||
write_pm_cfg:
|
||||
; in: al = reg#; ah = data
|
||||
;------------------------------------------------
|
||||
push edx
|
||||
mov dx, SB_PM_INDEX
|
||||
out dx, al
|
||||
inc dl
|
||||
xchg al, ah
|
||||
out dx, al
|
||||
xchg al, ah
|
||||
pop edx
|
||||
ret
|
||||
;--------------------------------------------------------------------
|
||||
align 4
|
||||
read_pm_cfg:
|
||||
; in: al = reg# | out: al = data
|
||||
push edx
|
||||
mov dx, SB_PM_INDEX
|
||||
out dx, al
|
||||
inc dl
|
||||
in al, dx
|
||||
pop edx
|
||||
ret
|
||||
|
||||
;------------------------------------------------
|
||||
@ -54,12 +89,14 @@ align 4
|
||||
write_sio_cfg:
|
||||
; in: al = reg#; ah = data
|
||||
;------------------------------------------------
|
||||
push edx
|
||||
mov dx, SB_SIO_INDEX
|
||||
out dx, al
|
||||
inc dl
|
||||
xchg al, ah
|
||||
out dx, al
|
||||
xchg al, ah
|
||||
pop edx
|
||||
ret
|
||||
;------------------------------------------------
|
||||
align 4
|
3
kernel/branches/Kolibri-A/trunk/bus/SB/SB710.INC
Normal file
3
kernel/branches/Kolibri-A/trunk/bus/SB/SB710.INC
Normal file
@ -0,0 +1,3 @@
|
||||
|
||||
SB_PM_CTRL_BLK equ 0x22
|
||||
|
@ -26,6 +26,11 @@ CPU_PENTIUM equ 5
|
||||
CPU_P6 equ 6
|
||||
CPU_PENTIUM4 equ 0x0F
|
||||
|
||||
PLATFORM equ 0x14
|
||||
PLATFORM_RS780 equ 0x0F
|
||||
PLATFORM_RS880 equ 0x10
|
||||
PLATFORM_FUSION equ 0x14
|
||||
|
||||
CAPS_FPU equ 00 ;on-chip x87 floating point unit
|
||||
CAPS_VME equ 01 ;virtual-mode enhancements
|
||||
CAPS_DE equ 02 ;debugging extensions
|
||||
|
@ -1539,5 +1539,5 @@ proc shmem_close stdcall, name:dword
|
||||
.fail:
|
||||
ret
|
||||
endp
|
||||
diff16 "heap code end ",0,$
|
||||
diff16 "heap code size",init_kernel_heap,$
|
||||
;diff16 "heap code end ",0,$
|
||||
diff10 "heap code size",init_kernel_heap,$
|
||||
|
@ -1441,5 +1441,5 @@ proc create_ring_buffer stdcall, size:dword, flags:dword
|
||||
.fail:
|
||||
ret
|
||||
endp
|
||||
diff16 "memman code end",0,$
|
||||
diff16 "memman code sze",alloc_page,$
|
||||
;diff16 "memman code end",0,$
|
||||
diff10 "memman code sze",alloc_page,$
|
||||
|
@ -47,28 +47,26 @@ keymap_alt:
|
||||
db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
||||
|
||||
|
||||
boot_memdetect db 'Determining amount of memory',0
|
||||
boot_fonts db 'Fonts loaded',0
|
||||
boot_tss db 'Setting TSSs',0
|
||||
boot_cpuid db 'Reading CPUIDs',0
|
||||
boot_devices db 'Detecting devices',0
|
||||
; boot_memdetect db 'Determining amount of memory',0
|
||||
; boot_fonts db 'Fonts loaded',0
|
||||
; boot_tss db 'Setting TSSs',0
|
||||
; boot_cpuid db 'Reading CPUIDs',0
|
||||
; boot_devices db 'Detecting devices',0
|
||||
boot_timer db 'Setting timer',0
|
||||
boot_irqs db 'Reprogramming IRQs',0
|
||||
boot_setmouse db 'Setting mouse',0
|
||||
; boot_setmouse db 'Setting mouse',0
|
||||
boot_windefs db 'Setting window defaults',0
|
||||
boot_bgr db 'Calculating background',0
|
||||
; boot_resirqports db 'Reserving IRQs & ports',0
|
||||
; boot_setrports db 'Setting addresses for IRQs',0
|
||||
boot_setostask db 'Setting OS task',0
|
||||
; boot_bgr db 'Calculating background',0
|
||||
; boot_setostask db 'Setting OS task',0
|
||||
boot_allirqs db 'Unmasking all IRQs',0
|
||||
boot_tsc db 'Reading TSC',0
|
||||
; boot_tsc db 'Reading TSC',0
|
||||
boot_cpufreq db 'CPU frequency is ',' ',' MHz',0
|
||||
boot_failed db 'Failed to start first app',0
|
||||
boot_mtrr db 'Setting MTRR',0
|
||||
boot_uDMA_ok db 'Set user DMA OK',0
|
||||
if preboot_blogesc
|
||||
boot_tasking db 'All set - press ESC to start',0
|
||||
end if
|
||||
; boot_failed db 'Failed to start first app',0
|
||||
; boot_mtrr db 'Setting MTRR',0
|
||||
; boot_uDMA_ok db 'Set user DMA OK',0
|
||||
;if preboot_blogesc
|
||||
; boot_tasking db 'All set - press ESC to start',0
|
||||
;end if
|
||||
|
||||
;new_process_loading db 'K : New Process - loading',13,10,0
|
||||
;new_process_running db 'K : New Process - done',13,10,0
|
||||
@ -90,7 +88,7 @@ szHwMouse db 'ATI2D',0
|
||||
szPS2MDriver db 'PS2MOUSE',0
|
||||
;szCOM_MDriver db 'COM_MOUSE',0
|
||||
szUSB db 'USB',0
|
||||
szAtiHW db '/rd/1/drivers/ati2d.drv',0
|
||||
;szAtiHW db '/rd/1/drivers/ati2d.drv',0
|
||||
|
||||
szSTART db 'START',0
|
||||
szEXPORTS db 'EXPORTS',0
|
||||
|
@ -130,5 +130,5 @@ dtext: ; Text String Output (rw by Johnny_B[john@kolibrios.org])
|
||||
popad
|
||||
pop eax ; << // Alver 22.06.2008 // <<
|
||||
ret
|
||||
diff16 "font code end ",0,$
|
||||
diff16 "font code size",dtext,$
|
||||
;diff16 "font code end ",0,$
|
||||
diff10 "font code size",dtext,$
|
||||
|
@ -700,5 +700,5 @@ mouse._.check_sys_window_actions: ;////////////////////////////////////////////
|
||||
.exit:
|
||||
ret
|
||||
|
||||
diff16 "mouse code end ",0,$
|
||||
;diff16 "mouse code end ",0,$
|
||||
diff10 "mouse code size",mouse_check_events,$
|
||||
|
@ -458,5 +458,5 @@ drawwindow_IV:
|
||||
|
||||
ret 4
|
||||
|
||||
diff16 "skin code end ",0,$
|
||||
diff16 "skin code size",read_skin_file,$
|
||||
;diff16 "skin code end ",0,$
|
||||
diff10 "skin code size",read_skin_file,$
|
||||
|
@ -1947,5 +1947,5 @@ window._.draw_negative_box: ;//////////////////////////////////////////////////
|
||||
pop esi ebx eax
|
||||
ret
|
||||
|
||||
diff16 "window code end",0,$
|
||||
;diff16 "window code end",0,$
|
||||
diff10 "window.inc size",syscall_draw_window,$
|
||||
|
@ -439,5 +439,5 @@ mouse_acceleration:
|
||||
@@:
|
||||
ret
|
||||
|
||||
diff16 "window code end",0,$
|
||||
;diff16 "window code end",0,$
|
||||
diff10 "mousedrv size ",draw_mouse_under,$
|
||||
|
@ -219,8 +219,17 @@ diff16 "32-bit code start ",0,$
|
||||
call init_BIOS32 ; (init.inc - to be removed later)
|
||||
|
||||
; PCIe extended config space access
|
||||
; call rs7xx_pcie_init ; (bus/HT.inc)
|
||||
|
||||
display '** Platform chosen (const.inc): '
|
||||
if PLATFORM>PLATFORM_RS780
|
||||
call fusion_pcie_init ; (bus/HT.inc)
|
||||
display 'RS880/Fusion '
|
||||
else
|
||||
call rs7xx_pcie_init ; (bus/HT.inc)
|
||||
display 'RS780 '
|
||||
end if
|
||||
display 10,13
|
||||
|
||||
|
||||
; MEMORY MODEL
|
||||
call init_mem ; (init.inc)
|
||||
@ -242,10 +251,11 @@ align 4
|
||||
bios32_entry dd ?
|
||||
tmp_page_tabs dd ?
|
||||
|
||||
use16
|
||||
org $-0x10000
|
||||
include "boot/shutdown.inc" ; shutdown or restart
|
||||
org $+0x10000
|
||||
;use16
|
||||
;org $-0x10000
|
||||
;include "boot/shutdown.inc" ; shutdown or restart
|
||||
;org $+0x10000
|
||||
|
||||
use32
|
||||
|
||||
__DEBUG__ fix 1
|
||||
@ -572,28 +582,18 @@ include 'detect/disks.inc'
|
||||
include 'vmodeld.inc'
|
||||
;!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
if 0
|
||||
mov ax,[OS_BASE+0x10000+bx_from_load]
|
||||
cmp ax,'r1' ; if using not ram disk, then load librares and parameters {SPraid.simba}
|
||||
je no_lib_load
|
||||
; LOADING LIBRARES
|
||||
stdcall dll.Load,@IMPORT ; loading librares for kernel (.obj files)
|
||||
call load_file_parse_table ; prepare file parse table
|
||||
call set_kernel_conf ; configure devices and gui
|
||||
no_lib_load:
|
||||
end if
|
||||
|
||||
; LOAD FONTS I and II
|
||||
|
||||
stdcall read_file, char, FONT_I, 0, 2304
|
||||
stdcall read_file, char2, FONT_II, 0, 2560
|
||||
|
||||
mov esi,boot_fonts
|
||||
call boot_log
|
||||
; mov esi,boot_fonts
|
||||
; call boot_log
|
||||
|
||||
; PRINT AMOUNT OF MEMORY
|
||||
mov esi, boot_memdetect
|
||||
call boot_log
|
||||
; mov esi, boot_memdetect
|
||||
; call boot_log
|
||||
|
||||
movzx ecx, word [boot_y]
|
||||
or ecx, (10+29*6) shl 16 ; "Determining amount of memory"
|
||||
@ -610,8 +610,8 @@ end if
|
||||
|
||||
call build_scheduler ; sys32.inc
|
||||
|
||||
mov esi,boot_devices
|
||||
call boot_log
|
||||
; mov esi,boot_devices
|
||||
; call boot_log
|
||||
|
||||
mov [pci_access_enabled],1
|
||||
|
||||
@ -624,15 +624,15 @@ end if
|
||||
|
||||
; SET BACKGROUND DEFAULTS
|
||||
|
||||
mov esi,boot_bgr
|
||||
call boot_log
|
||||
; mov esi,boot_bgr
|
||||
; call boot_log
|
||||
call init_background ;
|
||||
call calculatebackground
|
||||
|
||||
; SET UP OS TASK
|
||||
|
||||
mov esi,boot_setostask
|
||||
call boot_log
|
||||
; mov esi,boot_setostask
|
||||
; call boot_log
|
||||
|
||||
xor eax, eax
|
||||
mov dword [SLOT_BASE+APPDATA.fpu_state], fpu_data
|
||||
@ -683,8 +683,8 @@ end if
|
||||
|
||||
; READ TSC / SECOND
|
||||
|
||||
mov esi,boot_tsc
|
||||
call boot_log
|
||||
; mov esi,boot_tsc
|
||||
; call boot_log
|
||||
cli
|
||||
rdtsc ;call _rdtsc
|
||||
mov ecx,eax
|
||||
@ -724,8 +724,8 @@ end if
|
||||
;call detect_devices
|
||||
stdcall load_driver, szPS2MDriver
|
||||
|
||||
mov esi,boot_setmouse
|
||||
call boot_log
|
||||
; mov esi,boot_setmouse
|
||||
; call boot_log
|
||||
; call setmouse
|
||||
; mov [MOUSE_PICTURE],dword mousepointer
|
||||
cli
|
||||
@ -754,8 +754,8 @@ end if
|
||||
|
||||
|
||||
call init_userDMA ; <<<<<<<<< ============== core/memory.inc =================
|
||||
mov esi, boot_uDMA_ok
|
||||
call boot_log
|
||||
; mov esi, boot_uDMA_ok
|
||||
; call boot_log
|
||||
|
||||
; LOAD FIRST APPLICATION
|
||||
cli
|
||||
@ -779,8 +779,8 @@ no_load_vrr_m:
|
||||
sub eax,2
|
||||
jz first_app_found
|
||||
|
||||
mov esi, boot_failed
|
||||
call boot_log
|
||||
; mov esi, boot_failed
|
||||
; call boot_log
|
||||
|
||||
mov eax, 0xDEADBEEF ; otherwise halt
|
||||
hlt
|
||||
@ -825,13 +825,13 @@ first_app_found:
|
||||
|
||||
; START MULTITASKING
|
||||
|
||||
if preboot_blogesc
|
||||
mov esi, boot_tasking
|
||||
call boot_log
|
||||
.bll1: in al, 0x60 ; wait for ESC key press
|
||||
cmp al, 129
|
||||
jne .bll1
|
||||
end if
|
||||
;if preboot_blogesc
|
||||
; mov esi, boot_tasking
|
||||
; call boot_log
|
||||
;.bll1: in al, 0x60 ; wait for ESC key press
|
||||
; cmp al, 129
|
||||
; jne .bll1
|
||||
;end if
|
||||
|
||||
|
||||
stdcall attach_int_handler, 1, irq1, 0
|
||||
@ -4468,230 +4468,50 @@ system_shutdown: ; shut down the system
|
||||
yes_shutdown_param:
|
||||
cli
|
||||
|
||||
mov eax, kernel_file ; load kernel.mnt to 0x7000:0
|
||||
push 12
|
||||
pop esi
|
||||
xor ebx,ebx
|
||||
or ecx,-1
|
||||
mov edx, OS_BASE+0x70000
|
||||
call fileread
|
||||
|
||||
mov esi, restart_kernel_4000+OS_BASE+0x10000 ; move kernel re-starter to 0x4000:0
|
||||
mov edi,OS_BASE+0x40000
|
||||
mov ecx,1000
|
||||
rep movsb
|
||||
|
||||
mov esi,OS_BASE+0x2F0000 ; restore 0x0 - 0xffff
|
||||
mov edi, OS_BASE
|
||||
mov ecx,0x10000/4
|
||||
cld
|
||||
rep movsd
|
||||
|
||||
call restorefatchain
|
||||
|
||||
mov al, 0xFF
|
||||
out 0x21, al
|
||||
out 0xA1, al
|
||||
out 0x21, al ;IntrCntrl1Reg2
|
||||
out 0xA1, al ;IntrCntrl2Reg2
|
||||
|
||||
cmp byte [BOOT_VAR + 0x9030], 2
|
||||
jnz pm_restart
|
||||
if 0
|
||||
mov word [OS_BASE+0x467+0],pr_mode_exit
|
||||
mov word [OS_BASE+0x467+2],0x1000
|
||||
|
||||
mov al,0x0F
|
||||
out 0x70,al
|
||||
mov al,0x05
|
||||
out 0x71,al
|
||||
|
||||
mov al,0xFE
|
||||
out 0x64,al
|
||||
|
||||
hlt
|
||||
jmp $-1
|
||||
|
||||
else
|
||||
cmp byte [OS_BASE + 0x9030], 2
|
||||
jnz no_acpi_power_off
|
||||
|
||||
; scan for RSDP
|
||||
; 1) The first 1 Kb of the Extended BIOS Data Area (EBDA).
|
||||
movzx eax, word [OS_BASE + 0x40E]
|
||||
shl eax, 4
|
||||
jz @f
|
||||
mov ecx, 1024/16
|
||||
call scan_rsdp
|
||||
jnc .rsdp_found
|
||||
@@:
|
||||
; 2) The BIOS read-only memory space between 0E0000h and 0FFFFFh.
|
||||
mov eax, 0xE0000
|
||||
mov ecx, 0x2000
|
||||
call scan_rsdp
|
||||
jc no_acpi_power_off
|
||||
.rsdp_found:
|
||||
mov esi, [eax+16] ; esi contains physical address of the RSDT
|
||||
mov ebp, [ipc_tmp]
|
||||
stdcall map_page, ebp, esi, PG_MAP
|
||||
lea eax, [esi+1000h]
|
||||
lea edx, [ebp+1000h]
|
||||
stdcall map_page, edx, eax, PG_MAP
|
||||
and esi, 0xFFF
|
||||
add esi, ebp
|
||||
cmp dword [esi], 'RSDT'
|
||||
jnz no_acpi_power_off
|
||||
mov ecx, [esi+4]
|
||||
sub ecx, 24h
|
||||
jbe no_acpi_power_off
|
||||
shr ecx, 2
|
||||
add esi, 24h
|
||||
.scan_fadt:
|
||||
lodsd
|
||||
mov ebx, eax
|
||||
lea eax, [ebp+2000h]
|
||||
stdcall map_page, eax, ebx, PG_MAP
|
||||
lea eax, [ebp+3000h]
|
||||
add ebx, 0x1000
|
||||
stdcall map_page, eax, ebx, PG_MAP
|
||||
and ebx, 0xFFF
|
||||
lea ebx, [ebx+ebp+2000h]
|
||||
cmp dword [ebx], 'FACP'
|
||||
jz .fadt_found
|
||||
loop .scan_fadt
|
||||
jmp no_acpi_power_off
|
||||
.fadt_found:
|
||||
; ebx is linear address of FADT
|
||||
mov edi, [ebx+40] ; physical address of the DSDT
|
||||
lea eax, [ebp+4000h]
|
||||
stdcall map_page, eax, edi, PG_MAP
|
||||
lea eax, [ebp+5000h]
|
||||
lea esi, [edi+0x1000]
|
||||
stdcall map_page, eax, esi, PG_MAP
|
||||
and esi, 0xFFF
|
||||
sub edi, esi
|
||||
cmp dword [esi+ebp+4000h], 'DSDT'
|
||||
jnz no_acpi_power_off
|
||||
mov eax, [esi+ebp+4004h] ; DSDT length
|
||||
sub eax, 36+4
|
||||
jbe no_acpi_power_off
|
||||
add esi, 36
|
||||
.scan_dsdt:
|
||||
cmp dword [esi+ebp+4000h], '_S5_'
|
||||
jnz .scan_dsdt_cont
|
||||
cmp byte [esi+ebp+4000h+4], 12h ; DefPackage opcode
|
||||
jnz .scan_dsdt_cont
|
||||
mov dl, [esi+ebp+4000h+6]
|
||||
cmp dl, 4 ; _S5_ package must contain 4 bytes
|
||||
; ...in theory; in practice, VirtualBox has 2 bytes
|
||||
ja .scan_dsdt_cont
|
||||
cmp dl, 1
|
||||
jb .scan_dsdt_cont
|
||||
lea esi, [esi+ebp+4000h+7]
|
||||
xor ecx, ecx
|
||||
cmp byte [esi], 0 ; 0 means zero byte, 0Ah xx means byte xx
|
||||
jz @f
|
||||
cmp byte [esi], 0xA
|
||||
jnz no_acpi_power_off
|
||||
inc esi
|
||||
mov cl, [esi]
|
||||
@@:
|
||||
inc esi
|
||||
cmp dl, 2
|
||||
jb @f
|
||||
cmp byte [esi], 0
|
||||
jz @f
|
||||
cmp byte [esi], 0xA
|
||||
jnz no_acpi_power_off
|
||||
inc esi
|
||||
mov ch, [esi]
|
||||
@@:
|
||||
jmp do_acpi_power_off
|
||||
.scan_dsdt_cont:
|
||||
inc esi
|
||||
cmp esi, 0x1000
|
||||
jb @f
|
||||
sub esi, 0x1000
|
||||
add edi, 0x1000
|
||||
push eax
|
||||
lea eax, [ebp+4000h]
|
||||
stdcall map_page, eax, edi, PG_MAP
|
||||
push PG_MAP
|
||||
lea eax, [edi+1000h]
|
||||
push eax
|
||||
lea eax, [ebp+5000h]
|
||||
push eax
|
||||
stdcall map_page
|
||||
pop eax
|
||||
@@:
|
||||
dec eax
|
||||
jnz .scan_dsdt
|
||||
jmp no_acpi_power_off
|
||||
do_acpi_power_off:
|
||||
mov edx, [ebx+48]
|
||||
test edx, edx
|
||||
jz .nosmi
|
||||
mov al, [ebx+52]
|
||||
mov al, SB_PM_CTRL_BLK
|
||||
mov ah, al
|
||||
inc ah
|
||||
mov dx, 0x0CD6
|
||||
out dx, al
|
||||
mov edx, [ebx+64]
|
||||
@@:
|
||||
in ax, dx
|
||||
test al, 1
|
||||
jz @b
|
||||
.nosmi:
|
||||
and cx, 0x0707
|
||||
shl cx, 2
|
||||
or cx, 0x2020
|
||||
mov edx, [ebx+64]
|
||||
in ax, dx
|
||||
and ax, 203h
|
||||
or ah, cl
|
||||
inc dl
|
||||
in al, dx
|
||||
mov cl, al
|
||||
dec dl
|
||||
mov al, ah
|
||||
out dx, al
|
||||
inc dl
|
||||
in al, dx
|
||||
mov ch, al
|
||||
end if
|
||||
mov dx, 0x0804 ;cx
|
||||
mov ax, 0x03400
|
||||
out dx, ax
|
||||
mov edx, [ebx+68]
|
||||
test edx, edx
|
||||
jz @f
|
||||
in ax, dx
|
||||
and ax, 203h
|
||||
or ah, ch
|
||||
out dx, ax
|
||||
@@:
|
||||
jmp $
|
||||
; THE END...
|
||||
jmp $ ; just to be absolutely sure
|
||||
|
||||
|
||||
no_acpi_power_off:
|
||||
mov word [OS_BASE+0x467+0],pr_mode_exit
|
||||
mov word [OS_BASE+0x467+2],0x1000
|
||||
pm_restart:
|
||||
|
||||
mov al,0x0F
|
||||
out 0x70,al
|
||||
out 0x70,al ; NmiEnable
|
||||
mov al,0x05
|
||||
out 0x71,al
|
||||
out 0x71,al ; RtcData
|
||||
|
||||
mov al,0xFE
|
||||
out 0x64,al
|
||||
mov ax, 6
|
||||
mov dx, 0xCF9 ; reset reg
|
||||
out dx, ax
|
||||
|
||||
hlt
|
||||
jmp $-1
|
||||
|
||||
scan_rsdp:
|
||||
add eax, OS_BASE
|
||||
.s:
|
||||
cmp dword [eax], 'RSD '
|
||||
jnz .n
|
||||
cmp dword [eax+4], 'PTR '
|
||||
jnz .n
|
||||
xor edx, edx
|
||||
xor esi, esi
|
||||
@@:
|
||||
add dl, [eax+esi]
|
||||
inc esi
|
||||
cmp esi, 20
|
||||
jnz @b
|
||||
test dl, dl
|
||||
jz .ok
|
||||
.n:
|
||||
add eax, 10h
|
||||
loop .s
|
||||
stc
|
||||
.ok:
|
||||
ret
|
||||
end if
|
||||
|
||||
diff16 "End of 32-code ",0,$
|
||||
|
||||
|
@ -247,6 +247,7 @@ include "gui/skincode.inc"
|
||||
include "bus/pci/pci32.inc"
|
||||
;include "bus/pci/PCIe.inc"
|
||||
include "bus/HT.inc" ; AMD HyperTransport bus control
|
||||
include "bus/SB/SB.inc"
|
||||
|
||||
; Floppy drive controller
|
||||
|
||||
|
@ -149,11 +149,11 @@
|
||||
; in the current version:
|
||||
; -> 00B3C 16-bit code end
|
||||
; -> 00C40 16-bit data end
|
||||
; -> 10C40 32-bit code start
|
||||
; -> 2D07E 32-bit code end
|
||||
; -> 30418..end_of_kernel zero-filled zone after preinit_mem
|
||||
; -> 33D63 uninitialized globals start
|
||||
; -> 3BF52 end_of_kernel
|
||||
; -> 105F0 32-bit code start
|
||||
; -> 2C889 32-bit code end
|
||||
; -> 2FC28..end_of_kernel zero-filled zone after preinit_mem
|
||||
; -> 33563 uninitialized globals start
|
||||
; -> 3B752 end_of_kernel
|
||||
; -> 3C000 not used (>200k)
|
||||
; 0x80050000 -> 090000 zero-filled zone after preinit_mem
|
||||
; 0x8006CC00 -> 6DBFF stack at boot time (4Kb)
|
||||
|
@ -1059,6 +1059,6 @@ overlapping_of_points_mmx:
|
||||
paddb mm4, mm1
|
||||
movd eax, mm4
|
||||
ret
|
||||
diff16 "VESA2 code end ",0,$
|
||||
diff16 "VESA2 code size",get_pixel,$
|
||||
;diff16 "VESA2 code end ",0,$
|
||||
diff10 "VESA2 code size",get_pixel,$
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user