getting smaller and closer to real hardware...

git-svn-id: svn://kolibrios.org@2014 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Artem Jerdev (art_zh) 2011-07-23 15:27:18 +00:00
parent c7598bab12
commit e338e5353f
23 changed files with 1795 additions and 2581 deletions

View File

@ -1,53 +1,7 @@
@echo off @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 if not exist bin mkdir bin
echo lang fix %lang% > lang.inc fasm -m 65536 kernel.asm bin\kernel.mnt
c:\fasm\fasm -m 65536 kernel.asm bin\kernel.mnt
if not %errorlevel%==0 goto :Error_FasmFailed
erase lang.inc
goto :eof
:Error_FasmFailed
echo error: fasm execution failed
erase lang.inc
pause pause
exit 1 exit 0
:Exit_OK
echo all operations has been done
pause
exit 0

View File

@ -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: boot_read_floppy:
push si push si
@ -80,8 +38,6 @@ boot_read_floppy:
ret ret
sayerr_plain: sayerr_plain:
jmp $
sayerr: sayerr:
jmp $ jmp $
@ -163,6 +119,7 @@ no_hd_load:
push cs push cs
pop es pop es
if 0
; set videomode ; set videomode
mov ax, 3 mov ax, 3
int 0x10 int 0x10
@ -172,6 +129,7 @@ no_hd_load:
pop es pop es
xor di, di xor di, di
mov ah, 1*16+15 mov ah, 1*16+15
end if
cpugood: cpugood:
@ -302,6 +260,7 @@ cfgmanager:
; pop ax ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ?? ; pop ax ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ??
jmp .continue jmp .continue
.loader_block dd -1 .loader_block dd -1
.continue: .continue:
sti sti
@ -344,314 +303,6 @@ include 'detect/biosmem.inc'
; READ DISKETTE TO MEMORY ; 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 ; SET GRAPHICS

View File

@ -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 ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@ -14,53 +14,4 @@
$Revision$ $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 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

View File

@ -78,7 +78,7 @@ virtual at $A000
mi VBE_ModeInfo mi VBE_ModeInfo
modes_table: modes_table:
end virtual end virtual
cursor_pos dw 0 ;âðåìåííîå õðàíåíèå êóðñîðà. cursor_pos dw 0 ;temporary cursor storage.
home_cursor dw 0 ;current shows rows a table home_cursor dw 0 ;current shows rows a table
end_cursor dw 0 ;end of position 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 scroll_start dw 0 ;start position of scroll bar

View File

@ -10,9 +10,9 @@ $Revision$
; READ RAMDISK IMAGE FROM HD ; READ RAMDISK IMAGE FROM HD
cmp [boot_dev+OS_BASE+0x10000],1 ; cmp [boot_dev+OS_BASE+0x10000],1
; jne no_sys_on_hd jmp no_sys_on_hd
if 0
test [DRIVE_DATA+1],byte 0x40 test [DRIVE_DATA+1],byte 0x40
jz position_2 jz position_2
mov [hdbase],0x1f0 mov [hdbase],0x1f0
@ -97,6 +97,7 @@ read_image:
mov edi, 12 mov edi, 12
call file_read call file_read
ret ret
end if
image_retrieved db 0 image_retrieved db 0
counter_of_partitions db 0 counter_of_partitions db 0

View File

@ -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

View File

@ -174,29 +174,29 @@ map_pcie_pages:
; ---- stepping 10h CPUs and Fusion APUs: the configspace is stored in MSR_C001_0058 ---- ; ---- stepping 10h CPUs and Fusion APUs: the configspace is stored in MSR_C001_0058 ----
align 4 align 4
fusion_pcie_init: fusion_pcie_init:
mov ecx, 0xC0010058 mov ecx, 0xC0010058
rdmsr rdmsr
or edx, edx or edx, edx
jnz $ ; PCIe is in the upper memory. Stop. jnz $ ; PCIe is in the upper memory. Stop.
xchg dl, al xchg dl, al
mov dword[mmio_pcie_cfg_addr-OS_BASE], eax ; store the physical address mov dword[mmio_pcie_cfg_addr-OS_BASE], eax ; store the physical address
mov ecx, edx mov ecx, edx
and dl, 1 and dl, 1
jz $ ; bit[0] = 1 means no PCIe mapping allowed. Stop. jz $ ; bit[0] = 1 means no PCIe mapping allowed. Stop.
shr cl, 2 ; ecx = log2(number of buses) shr cl, 2 ; ecx = log2(number of buses)
mov word[PCIe_bus_range-OS_BASE], cx mov word[PCIe_bus_range-OS_BASE], cx
sub cl, 2 sub cl, 2
jae @f jae @f
xor cl, cl xor cl, cl
@@: @@:
shl edx, cl ; edx = number of 4M pages to map shl edx, cl ; edx = number of 4M pages to map
mov word[mmio_pcie_cfg_pdes-OS_BASE], dx mov word[mmio_pcie_cfg_pdes-OS_BASE], dx
shl edx, 22 shl edx, 22
dec edx dec edx
add edx, eax ; the upper configspace limit add edx, eax ; the upper configspace limit
mov dword[mmio_pcie_cfg_lim-OS_BASE], edx mov dword[mmio_pcie_cfg_lim-OS_BASE], edx
jmp map_pcie_pages jmp map_pcie_pages
; ================================================================================ ; ================================================================================
@ -315,12 +315,11 @@ sys_rdmsr:
; out: [esp+8] = MSR[63:32] ; out: [esp+8] = MSR[63:32]
; [eax] = MSR[31: 0] ; [eax] = MSR[31: 0]
;------------------------------------------------ ;------------------------------------------------
push ecx edx push ecx edx
mov ecx, [esp+16] mov ecx, [esp+16]
rdmsr rdmsr
mov [esp+16], edx mov [esp+16], edx
pop edx ecx pop edx ecx
ret ret

View File

@ -0,0 +1,3 @@
SB_PM_CTRL_BLK equ 0x62

View File

@ -1,9 +1,16 @@
$Revision: 1598 $ $Revision: 1598 $
SMBUS_PCIE_ADDR equ 0xF00A0000 ; bdf0:20.0 = SB7xx SMBus PCI Config Registers 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 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 align 4
@ -43,10 +50,38 @@ lpc_write_pciconfig:
align 4 align 4
read_sio_cfg: read_sio_cfg:
; in: al = reg# | out: al = data ; in: al = reg# | out: al = data
push edx
mov dx, SB_SIO_INDEX mov dx, SB_SIO_INDEX
out dx, al out dx, al
inc dl inc dl
in al, dx 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 ret
;------------------------------------------------ ;------------------------------------------------
@ -54,12 +89,14 @@ align 4
write_sio_cfg: write_sio_cfg:
; in: al = reg#; ah = data ; in: al = reg#; ah = data
;------------------------------------------------ ;------------------------------------------------
push edx
mov dx, SB_SIO_INDEX mov dx, SB_SIO_INDEX
out dx, al out dx, al
inc dl inc dl
xchg al, ah xchg al, ah
out dx, al out dx, al
xchg al, ah xchg al, ah
pop edx
ret ret
;------------------------------------------------ ;------------------------------------------------
align 4 align 4
@ -78,12 +115,12 @@ enter_sio_cfg_mode:
ret ret
;----------------------------------------------------------------------- ;-----------------------------------------------------------------------
; ATTENTION: the functions assume that RESET# signals use pins 84 and 34 ; ATTENTION: the functions assume that RESET# signals use pins 84 and 34
; of IT8712F SuperIO chip. These signals may be (and will be!) different ; of IT8712F SuperIO chip. These signals may be (and will be!) different
; for every particular motherboard and SIO. Please refer to your m/board ; for every particular motherboard and SIO. Please refer to your m/board
; documentation to define the correct pins and GPIO lines! ; documentation to define the correct pins and GPIO lines!
; ;
; Note this example DOES NOT PRETEND to be 100% correct implementation ; Note this example DOES NOT PRETEND to be 100% correct implementation
; of PCIe hotplug techniques !! ; of PCIe hotplug techniques !!
;----------------------------------------------------------------------- ;-----------------------------------------------------------------------
align 4 align 4
@ -111,7 +148,7 @@ init_pcie_slot_control:
mov ax, 0x0202 ; Lock SIO config ports mov ax, 0x0202 ; Lock SIO config ports
call write_sio_cfg call write_sio_cfg
ret ret
align 4 align 4
reset_pcie_slot: reset_pcie_slot:
;------------------------------------------------ ;------------------------------------------------
@ -122,7 +159,7 @@ reset_pcie_slot:
call read_sio_cfg ; ah = regB0h (Pin polarity) call read_sio_cfg ; ah = regB0h (Pin polarity)
and ah, 0xFC ; invert bits 0, 1 and ah, 0xFC ; invert bits 0, 1
call write_sio_cfg call write_sio_cfg
or ah, 3 ; restore bits 0, 1 or ah, 3 ; restore bits 0, 1
call write_sio_cfg call write_sio_cfg
mov ax, 0x0202 ; Lock SIO config ports mov ax, 0x0202 ; Lock SIO config ports
call write_sio_cfg call write_sio_cfg

View File

@ -0,0 +1,3 @@
SB_PM_CTRL_BLK equ 0x22

View File

@ -26,6 +26,11 @@ CPU_PENTIUM equ 5
CPU_P6 equ 6 CPU_P6 equ 6
CPU_PENTIUM4 equ 0x0F 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_FPU equ 00 ;on-chip x87 floating point unit
CAPS_VME equ 01 ;virtual-mode enhancements CAPS_VME equ 01 ;virtual-mode enhancements
CAPS_DE equ 02 ;debugging extensions CAPS_DE equ 02 ;debugging extensions

File diff suppressed because it is too large Load Diff

View File

@ -1441,5 +1441,5 @@ proc create_ring_buffer stdcall, size:dword, flags:dword
.fail: .fail:
ret ret
endp endp
diff16 "memman code end",0,$ ;diff16 "memman code end",0,$
diff16 "memman code sze",alloc_page,$ diff10 "memman code sze",alloc_page,$

View File

@ -7,7 +7,7 @@
$Revision$ $Revision$
keymap: keymap:
db '6',27 db '6',27
@ -47,28 +47,26 @@ keymap_alt:
db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
boot_memdetect db 'Determining amount of memory',0 ; boot_memdetect db 'Determining amount of memory',0
boot_fonts db 'Fonts loaded',0 ; boot_fonts db 'Fonts loaded',0
boot_tss db 'Setting TSSs',0 ; boot_tss db 'Setting TSSs',0
boot_cpuid db 'Reading CPUIDs',0 ; boot_cpuid db 'Reading CPUIDs',0
boot_devices db 'Detecting devices',0 ; boot_devices db 'Detecting devices',0
boot_timer db 'Setting timer',0 boot_timer db 'Setting timer',0
boot_irqs db 'Reprogramming IRQs',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_windefs db 'Setting window defaults',0
boot_bgr db 'Calculating background',0 ; boot_bgr db 'Calculating background',0
; boot_resirqports db 'Reserving IRQs & ports',0 ; boot_setostask db 'Setting OS task',0
; boot_setrports db 'Setting addresses for IRQs',0
boot_setostask db 'Setting OS task',0
boot_allirqs db 'Unmasking all IRQs',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_cpufreq db 'CPU frequency is ',' ',' MHz',0
boot_failed db 'Failed to start first app',0 ; boot_failed db 'Failed to start first app',0
boot_mtrr db 'Setting MTRR',0 ; boot_mtrr db 'Setting MTRR',0
boot_uDMA_ok db 'Set user DMA OK',0 ; boot_uDMA_ok db 'Set user DMA OK',0
if preboot_blogesc ;if preboot_blogesc
boot_tasking db 'All set - press ESC to start',0 ; boot_tasking db 'All set - press ESC to start',0
end if ;end if
;new_process_loading db 'K : New Process - loading',13,10,0 ;new_process_loading db 'K : New Process - loading',13,10,0
;new_process_running db 'K : New Process - done',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 szPS2MDriver db 'PS2MOUSE',0
;szCOM_MDriver db 'COM_MOUSE',0 ;szCOM_MDriver db 'COM_MOUSE',0
szUSB db 'USB',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 szSTART db 'START',0
szEXPORTS db 'EXPORTS',0 szEXPORTS db 'EXPORTS',0
@ -318,23 +316,23 @@ srv.bk rd 1
;align 64 ;align 64
;img_draw_core_fn rd 1 ; putimage variables & helpers ;img_draw_core_fn rd 1 ; putimage variables & helpers
;img_draw_edge_fn rd 1 ;img_draw_edge_fn rd 1
;img_lfb_origin rd 1 ;img_lfb_origin rd 1
;img_buf_origin rd 1 ;img_buf_origin rd 1
;img_buf_line_size rd 1 ;img_buf_line_size rd 1
;img_palette rd 1 ;img_palette rd 1
;img_bitoffset rd 1 ;img_bitoffset rd 1
;img_edgeoffset rd 1 ;img_edgeoffset rd 1
;img_bytes_per_pix rd 1 ;img_bytes_per_pix rd 1
;img_map_right rd 1 ;img_map_right rd 1
;img_map_x rd 1 ;img_map_x rd 1
;img_pix_x rd 1 ; real Xsize ;img_pix_x rd 1 ; real Xsize
;img_pix_y rd 1 ; real Ysize ;img_pix_y rd 1 ; real Ysize
;img_screen_x rd 1 ;img_screen_x rd 1
;img_screen_y rd 1 ;img_screen_y rd 1
align 64 align 64
;_WinMapWidth rd 1 ;_WinMapWidth rd 1
;_WinMapHeight rd 1 ;_WinMapHeight rd 1
_WinMapAddress rd 1 _WinMapAddress rd 1
_WinMapSize rd 1 _WinMapSize rd 1

View File

@ -9,7 +9,7 @@ $Revision$
; // Alver 22.06.2008 // { ; // Alver 22.06.2008 // {
align 4 align 4
dtext_asciiz_esi: ; for skins title out dtext_asciiz_esi: ; for skins title out
push eax push eax
xor eax, eax xor eax, eax
inc eax inc eax
@ -17,118 +17,118 @@ dtext_asciiz_esi: ; for skins title out
; } \\ Alver \\ ; } \\ Alver \\
align 4 align 4
dtext: ; Text String Output (rw by Johnny_B[john@kolibrios.org]) dtext: ; Text String Output (rw by Johnny_B[john@kolibrios.org])
; ebx x & y ; ebx x & y
; ecx style ( 0xX0000000 ) & color ( 0x00RRGGBB ) ; ecx style ( 0xX0000000 ) & color ( 0x00RRGGBB )
; X = ABnnb: ; X = ABnnb:
; nn = font ; nn = font
; A = 0 <=> output esi characters; otherwise output ASCIIZ string ; A = 0 <=> output esi characters; otherwise output ASCIIZ string
; B = 1 <=> fill background with color eax ; B = 1 <=> fill background with color eax
; edx start of text ; edx start of text
; edi 1 force ; edi 1 force
; // Alver 22.06.2008 // { ; // Alver 22.06.2008 // {
push eax push eax
xor eax, eax xor eax, eax
.1: .1:
; } \\ Alver \\ ; } \\ Alver \\
pushad pushad
call [_display.disable_mouse] call [_display.disable_mouse]
movsx eax, bx ; eax=y movsx eax, bx ; eax=y
sar ebx, 16 ; ebx=x sar ebx, 16 ; ebx=x
xchg eax, ebx ; eax=x, ebx=y xchg eax, ebx ; eax=x, ebx=y
cmp esi, 255 cmp esi, 255
jb .loop jb .loop
mov esi, 255 mov esi, 255
.loop: .loop:
test ecx, ecx test ecx, ecx
js .test_asciiz js .test_asciiz
dec esi dec esi
js .end js .end
jmp @f jmp @f
.test_asciiz: .test_asciiz:
cmp byte [edx], 0 cmp byte [edx], 0
jz .end jz .end
; // Alver 22.06.2008 // { ; // Alver 22.06.2008 // {
cmp byte [esp+28], 1 ; was the entry point = dtext.1 ? cmp byte [esp+28], 1 ; was the entry point = dtext.1 ?
jne @f jne @f
dec esi dec esi
js .end js .end
; } \\ Alver \\ ; } \\ Alver \\
@@: @@:
inc edx inc edx
pushad ; esp -= 64 ! pushad ; esp -= 64 !
movzx edx, byte [edx-1] movzx edx, byte [edx-1]
test ecx, 0x10000000 test ecx, 0x10000000
jnz .font2 jnz .font2
mov esi, 9 mov esi, 9
lea ebp, [FONT_I+8*edx+edx] lea ebp, [FONT_I+8*edx+edx]
.symloop1: .symloop1:
mov dl, byte [ebp] mov dl, byte [ebp]
or dl, 1 shl 6 or dl, 1 shl 6
.pixloop1: .pixloop1:
shr dl, 1 shr dl, 1
jz .pixloop1end jz .pixloop1end
jnc .nopix jnc .nopix
call [putpixel] call [putpixel]
jmp .pixloop1cont jmp .pixloop1cont
.nopix: .nopix:
test ecx, 0x40000000 test ecx, 0x40000000
jz .pixloop1cont jz .pixloop1cont
push ecx push ecx
mov ecx, [esp+4+20h+20h] ; original eax? mov ecx, [esp+4+20h+20h] ; original eax?
call [putpixel] call [putpixel]
pop ecx pop ecx
.pixloop1cont: .pixloop1cont:
inc eax inc eax
jmp .pixloop1 jmp .pixloop1
.pixloop1end: .pixloop1end:
sub eax, 6 sub eax, 6
inc ebx inc ebx
inc ebp inc ebp
dec esi dec esi
jnz .symloop1 jnz .symloop1
popad popad
add eax, 6 add eax, 6
jmp .loop jmp .loop
.font2: .font2:
add edx, edx add edx, edx
lea ebp, [FONT_II+4*edx+edx+1] lea ebp, [FONT_II+4*edx+edx+1]
push 9 push 9
movzx esi, byte [ebp-1] movzx esi, byte [ebp-1]
.symloop2: .symloop2:
mov dl, byte [ebp] mov dl, byte [ebp]
push esi push esi
.pixloop2: .pixloop2:
shr dl, 1 shr dl, 1
jnc .nopix2 jnc .nopix2
call [putpixel] call [putpixel]
jmp .pixloop2cont jmp .pixloop2cont
.nopix2: .nopix2:
test ecx, 0x40000000 test ecx, 0x40000000
jz .pixloop2cont jz .pixloop2cont
push ecx push ecx
mov ecx, [esp+12+20h+20h] mov ecx, [esp+12+20h+20h]
call [putpixel] call [putpixel]
pop ecx pop ecx
.pixloop2cont: .pixloop2cont:
inc eax inc eax
dec esi dec esi
jnz .pixloop2 jnz .pixloop2
pop esi pop esi
sub eax, esi sub eax, esi
inc ebx inc ebx
inc ebp inc ebp
dec dword [esp] dec dword [esp]
jnz .symloop2 jnz .symloop2
pop eax pop eax
add dword [esp+28], esi add dword [esp+28], esi
popad popad
jmp .loop jmp .loop
.end: .end:
popad popad
pop eax ; << // Alver 22.06.2008 // << pop eax ; << // Alver 22.06.2008 // <<
ret ret
diff16 "font code end ",0,$ ;diff16 "font code end ",0,$
diff16 "font code size",dtext,$ diff10 "font code size",dtext,$

View File

@ -381,7 +381,7 @@ mouse._.move_handler: ;////////////////////////////////////////////////////////
mov [mouse.active_sys_window.new_box.left], eax mov [mouse.active_sys_window.new_box.left], eax
mov eax, [mouse.state.pos.y] mov eax, [mouse.state.pos.y]
sub eax, [mouse.active_sys_window.delta.y] sub eax, [mouse.active_sys_window.delta.y]
mov [mouse.active_sys_window.new_box.top], eax mov [mouse.active_sys_window.new_box.top], eax
mov eax, [mouse.active_sys_window.new_box.left] mov eax, [mouse.active_sys_window.new_box.left]
or eax, eax or eax, eax
@ -513,11 +513,11 @@ mouse._.find_sys_window_under_cursor: ;////////////////////////////////////////
;< esi = process slot ;< esi = process slot
;< edi = pointer to WDATA struct ;< edi = pointer to WDATA struct
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
mov esi, [Screen_Max_X] mov esi, [Screen_Max_X]
inc esi inc esi
imul esi, [mouse.state.pos.y] imul esi, [mouse.state.pos.y]
add esi, [_WinMapAddress] add esi, [_WinMapAddress]
add esi, [mouse.state.pos.x] add esi, [mouse.state.pos.x]
movzx esi, byte[esi] movzx esi, byte[esi]
mov edi, esi mov edi, esi
shl edi, 5 shl edi, 5
@ -700,5 +700,5 @@ mouse._.check_sys_window_actions: ;////////////////////////////////////////////
.exit: .exit:
ret ret
diff16 "mouse code end ",0,$ ;diff16 "mouse code end ",0,$
diff10 "mouse code size",mouse_check_events,$ diff10 "mouse code size",mouse_check_events,$

View File

@ -13,34 +13,34 @@ include "skindata.inc"
;skin_data = 0x00778000 ;skin_data = 0x00778000
read_skin_file: read_skin_file:
stdcall load_file, ebx stdcall load_file, ebx
test eax, eax test eax, eax
jz .notfound jz .notfound
cmp dword [eax], 'SKIN' cmp dword [eax], 'SKIN'
jnz .noskin jnz .noskin
cmp ebx, 32*1024 cmp ebx, 32*1024
jb @f jb @f
mov ebx, 32*1024 mov ebx, 32*1024
@@: @@:
lea ecx, [ebx+3] lea ecx, [ebx+3]
shr ecx, 2 shr ecx, 2
mov esi, eax mov esi, eax
mov edi, skin_data mov edi, skin_data
rep movsd rep movsd
stdcall kernel_free, eax stdcall kernel_free, eax
call parse_skin_data call parse_skin_data
xor eax, eax xor eax, eax
ret ret
.notfound: .notfound:
xor eax, eax xor eax, eax
inc eax inc eax
ret ret
.noskin: .noskin:
stdcall kernel_free, eax stdcall kernel_free, eax
push 2 push 2
pop eax pop eax
ret ret
struct SKIN_HEADER struct SKIN_HEADER
.ident dd ? .ident dd ?
@ -51,19 +51,19 @@ struct SKIN_HEADER
ends ends
struct SKIN_PARAMS struct SKIN_PARAMS
.skin_height dd ? .skin_height dd ?
.margin.right dw ? .margin.right dw ?
.margin.left dw ? .margin.left dw ?
.margin.bottom dw ? .margin.bottom dw ?
.margin.top dw ? .margin.top dw ?
.colors.inner dd ? .colors.inner dd ?
.colors.outer dd ? .colors.outer dd ?
.colors.frame dd ? .colors.frame dd ?
.colors_1.inner dd ? .colors_1.inner dd ?
.colors_1.outer dd ? .colors_1.outer dd ?
.colors_1.frame dd ? .colors_1.frame dd ?
.dtp.size dd ? .dtp.size dd ?
.dtp.data db 40 dup (?) .dtp.data db 40 dup (?)
ends ends
struct SKIN_BUTTONS struct SKIN_BUTTONS
@ -83,203 +83,203 @@ struct SKIN_BITMAPS
ends ends
load_default_skin: load_default_skin:
mov [_skinh],22 mov [_skinh],22
mov ebx,_skin_file_default mov ebx,_skin_file_default
call read_skin_file call read_skin_file
ret ret
parse_skin_data: parse_skin_data:
mov ebp,skin_data mov ebp,skin_data
cmp [ebp+SKIN_HEADER.ident],'SKIN' cmp [ebp+SKIN_HEADER.ident],'SKIN'
jne .exit jne .exit
mov edi,skin_udata mov edi,skin_udata
mov ecx,(skin_udata.end-skin_udata)/4 mov ecx,(skin_udata.end-skin_udata)/4
xor eax,eax xor eax,eax
cld cld
rep stosd rep stosd
mov ebx,[ebp+SKIN_HEADER.params] mov ebx,[ebp+SKIN_HEADER.params]
add ebx,skin_data add ebx,skin_data
mov eax,[ebx+SKIN_PARAMS.skin_height] mov eax,[ebx+SKIN_PARAMS.skin_height]
mov [_skinh],eax mov [_skinh],eax
mov eax,[ebx+SKIN_PARAMS.colors.inner] mov eax,[ebx+SKIN_PARAMS.colors.inner]
mov [skin_active.colors.inner],eax mov [skin_active.colors.inner],eax
mov eax,[ebx+SKIN_PARAMS.colors.outer] mov eax,[ebx+SKIN_PARAMS.colors.outer]
mov [skin_active.colors.outer],eax mov [skin_active.colors.outer],eax
mov eax,[ebx+SKIN_PARAMS.colors.frame] mov eax,[ebx+SKIN_PARAMS.colors.frame]
mov [skin_active.colors.frame],eax mov [skin_active.colors.frame],eax
mov eax,[ebx+SKIN_PARAMS.colors_1.inner] mov eax,[ebx+SKIN_PARAMS.colors_1.inner]
mov [skin_inactive.colors.inner],eax mov [skin_inactive.colors.inner],eax
mov eax,[ebx+SKIN_PARAMS.colors_1.outer] mov eax,[ebx+SKIN_PARAMS.colors_1.outer]
mov [skin_inactive.colors.outer],eax mov [skin_inactive.colors.outer],eax
mov eax,[ebx+SKIN_PARAMS.colors_1.frame] mov eax,[ebx+SKIN_PARAMS.colors_1.frame]
mov [skin_inactive.colors.frame],eax mov [skin_inactive.colors.frame],eax
lea esi,[ebx+SKIN_PARAMS.dtp.data] lea esi,[ebx+SKIN_PARAMS.dtp.data]
mov edi,common_colours mov edi,common_colours
mov ecx,[ebx+SKIN_PARAMS.dtp.size] mov ecx,[ebx+SKIN_PARAMS.dtp.size]
and ecx,127 and ecx,127
rep movsb rep movsb
mov eax,dword[ebx+SKIN_PARAMS.margin.right] mov eax,dword[ebx+SKIN_PARAMS.margin.right]
mov dword[_skinmargins+0],eax mov dword[_skinmargins+0],eax
mov eax,dword[ebx+SKIN_PARAMS.margin.bottom] mov eax,dword[ebx+SKIN_PARAMS.margin.bottom]
mov dword[_skinmargins+4],eax mov dword[_skinmargins+4],eax
mov ebx,[ebp+SKIN_HEADER.bitmaps] mov ebx,[ebp+SKIN_HEADER.bitmaps]
add ebx,skin_data add ebx,skin_data
.lp1: cmp dword[ebx],0 .lp1: cmp dword[ebx],0
je .end_bitmaps je .end_bitmaps
movzx eax,[ebx+SKIN_BITMAPS.kind] movzx eax,[ebx+SKIN_BITMAPS.kind]
movzx ecx,[ebx+SKIN_BITMAPS.type] movzx ecx,[ebx+SKIN_BITMAPS.type]
dec eax dec eax
jnz .not_left jnz .not_left
xor eax,eax xor eax,eax
mov edx,skin_active.left.data mov edx,skin_active.left.data
or ecx,ecx or ecx,ecx
jnz @f jnz @f
mov edx,skin_inactive.left.data mov edx,skin_inactive.left.data
@@: jmp .next_bitmap @@: jmp .next_bitmap
.not_left: .not_left:
dec eax dec eax
jnz .not_oper jnz .not_oper
mov esi,[ebx+SKIN_BITMAPS.data] mov esi,[ebx+SKIN_BITMAPS.data]
add esi,skin_data add esi,skin_data
mov eax,[esi+0] mov eax,[esi+0]
neg eax neg eax
mov edx,skin_active.oper.data mov edx,skin_active.oper.data
or ecx,ecx or ecx,ecx
jnz @f jnz @f
mov edx,skin_inactive.oper.data mov edx,skin_inactive.oper.data
@@: jmp .next_bitmap @@: jmp .next_bitmap
.not_oper: .not_oper:
dec eax dec eax
jnz .not_base jnz .not_base
mov eax,[skin_active.left.width] mov eax,[skin_active.left.width]
mov edx,skin_active.base.data mov edx,skin_active.base.data
or ecx,ecx or ecx,ecx
jnz @f jnz @f
mov eax,[skin_inactive.left.width] mov eax,[skin_inactive.left.width]
mov edx,skin_inactive.base.data mov edx,skin_inactive.base.data
@@: jmp .next_bitmap @@: jmp .next_bitmap
.not_base: .not_base:
add ebx,8 add ebx,8
jmp .lp1 jmp .lp1
.next_bitmap: .next_bitmap:
mov ecx,[ebx+SKIN_BITMAPS.data] mov ecx,[ebx+SKIN_BITMAPS.data]
add ecx,skin_data add ecx,skin_data
mov [edx+4],eax mov [edx+4],eax
mov eax,[ecx+0] mov eax,[ecx+0]
mov [edx+8],eax mov [edx+8],eax
add ecx,8 add ecx,8
mov [edx+0],ecx mov [edx+0],ecx
add ebx,8 add ebx,8
jmp .lp1 jmp .lp1
.end_bitmaps: .end_bitmaps:
mov ebx,[ebp+SKIN_HEADER.buttons] mov ebx,[ebp+SKIN_HEADER.buttons]
add ebx,skin_data add ebx,skin_data
.lp2: cmp dword[ebx],0 .lp2: cmp dword[ebx],0
je .end_buttons je .end_buttons
mov eax,[ebx+SKIN_BUTTONS.type] mov eax,[ebx+SKIN_BUTTONS.type]
dec eax dec eax
jnz .not_close jnz .not_close
mov edx,skin_btn_close mov edx,skin_btn_close
jmp .next_button jmp .next_button
.not_close: .not_close:
dec eax dec eax
jnz .not_minimize jnz .not_minimize
mov edx,skin_btn_minimize mov edx,skin_btn_minimize
jmp .next_button jmp .next_button
.not_minimize: .not_minimize:
add ebx,12 add ebx,12
jmp .lp2 jmp .lp2
.next_button: .next_button:
movsx eax,[ebx+SKIN_BUTTONS.left] movsx eax,[ebx+SKIN_BUTTONS.left]
mov [edx+SKIN_BUTTON.left],eax mov [edx+SKIN_BUTTON.left],eax
movsx eax,[ebx+SKIN_BUTTONS.top] movsx eax,[ebx+SKIN_BUTTONS.top]
mov [edx+SKIN_BUTTON.top],eax mov [edx+SKIN_BUTTON.top],eax
movsx eax,[ebx+SKIN_BUTTONS.width] movsx eax,[ebx+SKIN_BUTTONS.width]
mov [edx+SKIN_BUTTON.width],eax mov [edx+SKIN_BUTTON.width],eax
movsx eax,[ebx+SKIN_BUTTONS.height] movsx eax,[ebx+SKIN_BUTTONS.height]
mov [edx+SKIN_BUTTON.height],eax mov [edx+SKIN_BUTTON.height],eax
add ebx,12 add ebx,12
jmp .lp2 jmp .lp2
.end_buttons: .end_buttons:
.exit: .exit:
ret ret
sys_putimage_with_check: sys_putimage_with_check:
or ebx,ebx or ebx,ebx
jz @f jz @f
call sys_putimage.forced call sys_putimage.forced
@@: ret @@: ret
drawwindow_IV_caption: drawwindow_IV_caption:
mov ebp,skin_active mov ebp,skin_active
or al,al or al,al
jnz @f jnz @f
mov ebp,skin_inactive mov ebp,skin_inactive
@@: @@:
mov esi,[esp+4] mov esi,[esp+4]
mov eax,[esi+WDATA.box.width] ; window width mov eax,[esi+WDATA.box.width] ; window width
mov edx,[ebp+SKIN_DATA.left.left] mov edx,[ebp+SKIN_DATA.left.left]
shl edx,16 shl edx,16
mov ecx,[ebp+SKIN_DATA.left.width] mov ecx,[ebp+SKIN_DATA.left.width]
shl ecx,16 shl ecx,16
add ecx,[_skinh] add ecx,[_skinh]
mov ebx, [ebp+SKIN_DATA.left.data] mov ebx, [ebp+SKIN_DATA.left.data]
call sys_putimage_with_check call sys_putimage_with_check
mov esi,[esp+4] mov esi,[esp+4]
mov eax,[esi+WDATA.box.width] mov eax,[esi+WDATA.box.width]
sub eax,[ebp+SKIN_DATA.left.width] sub eax,[ebp+SKIN_DATA.left.width]
sub eax,[ebp+SKIN_DATA.oper.width] sub eax,[ebp+SKIN_DATA.oper.width]
cmp eax,[ebp+SKIN_DATA.base.left] cmp eax,[ebp+SKIN_DATA.base.left]
jng .non_base jng .non_base
xor edx,edx xor edx,edx
mov ecx,[ebp+SKIN_DATA.base.width] mov ecx,[ebp+SKIN_DATA.base.width]
jecxz .non_base jecxz .non_base
div ecx div ecx
inc eax inc eax
mov ebx,[ebp+SKIN_DATA.base.data] mov ebx,[ebp+SKIN_DATA.base.data]
mov ecx,[ebp+SKIN_DATA.base.width] mov ecx,[ebp+SKIN_DATA.base.width]
shl ecx,16 shl ecx,16
add ecx,[_skinh] add ecx,[_skinh]
mov edx,[ebp+SKIN_DATA.base.left] mov edx,[ebp+SKIN_DATA.base.left]
sub edx,[ebp+SKIN_DATA.base.width] sub edx,[ebp+SKIN_DATA.base.width]
shl edx,16 shl edx,16
.baseskinloop: .baseskinloop:
shr edx,16 shr edx,16
add edx,[ebp+SKIN_DATA.base.width] add edx,[ebp+SKIN_DATA.base.width]
shl edx,16 shl edx,16
push eax ebx ecx edx push eax ebx ecx edx
call sys_putimage_with_check call sys_putimage_with_check
pop edx ecx ebx eax pop edx ecx ebx eax
dec eax dec eax
jnz .baseskinloop jnz .baseskinloop
.non_base: .non_base:
mov esi,[esp+4] mov esi,[esp+4]
mov edx,[esi+WDATA.box.width] mov edx,[esi+WDATA.box.width]
sub edx,[ebp+SKIN_DATA.oper.width] sub edx,[ebp+SKIN_DATA.oper.width]
inc edx inc edx
shl edx,16 shl edx,16
mov ebx,[ebp+SKIN_DATA.oper.data] mov ebx,[ebp+SKIN_DATA.oper.data]
mov ecx,[ebp+SKIN_DATA.oper.width] mov ecx,[ebp+SKIN_DATA.oper.width]
shl ecx,16 shl ecx,16
add ecx,[_skinh] add ecx,[_skinh]
call sys_putimage_with_check call sys_putimage_with_check
ret ret
;//mike.dld, 2006-08-02 ] ;//mike.dld, 2006-08-02 ]
@ -287,176 +287,176 @@ drawwindow_IV_caption:
drawwindow_IV: drawwindow_IV:
;param1 - aw_yes ;param1 - aw_yes
pusha pusha
push edx push edx
mov edi,edx mov edi,edx
mov ebp,skin_active mov ebp,skin_active
cmp byte [esp+32+4+4],0 cmp byte [esp+32+4+4],0
jne @f jne @f
mov ebp,skin_inactive mov ebp,skin_inactive
@@: @@:
mov eax,[edi+WDATA.box.left] mov eax,[edi+WDATA.box.left]
shl eax,16 shl eax,16
mov ax,word [edi+WDATA.box.left] mov ax,word [edi+WDATA.box.left]
add ax,word [edi+WDATA.box.width] add ax,word [edi+WDATA.box.width]
mov ebx,[edi+WDATA.box.top] mov ebx,[edi+WDATA.box.top]
shl ebx,16 shl ebx,16
mov bx,word [edi+WDATA.box.top] mov bx,word [edi+WDATA.box.top]
add bx,word [edi+WDATA.box.height] add bx,word [edi+WDATA.box.height]
; mov esi,[edi+24] ; mov esi,[edi+24]
; shr esi,1 ; shr esi,1
; and esi,0x007f7f7f ; and esi,0x007f7f7f
mov esi,[ebp+SKIN_DATA.colors.outer] mov esi,[ebp+SKIN_DATA.colors.outer]
call draw_rectangle call draw_rectangle
mov ecx,3 mov ecx,3
_dw3l: _dw3l:
add eax,1*65536-1 add eax,1*65536-1
add ebx,1*65536-1 add ebx,1*65536-1
test ax,ax test ax,ax
js no_skin_add_button js no_skin_add_button
test bx,bx test bx,bx
js no_skin_add_button js no_skin_add_button
mov esi,[ebp+SKIN_DATA.colors.frame] ;[edi+24] mov esi,[ebp+SKIN_DATA.colors.frame] ;[edi+24]
call draw_rectangle call draw_rectangle
dec ecx dec ecx
jnz _dw3l jnz _dw3l
mov esi,[ebp+SKIN_DATA.colors.inner] mov esi,[ebp+SKIN_DATA.colors.inner]
add eax,1*65536-1 add eax,1*65536-1
add ebx,1*65536-1 add ebx,1*65536-1
test ax,ax test ax,ax
js no_skin_add_button js no_skin_add_button
test bx,bx test bx,bx
js no_skin_add_button js no_skin_add_button
call draw_rectangle call draw_rectangle
cmp dword[skin_data],'SKIN' cmp dword[skin_data],'SKIN'
je @f je @f
xor eax,eax xor eax,eax
xor ebx,ebx xor ebx,ebx
mov esi,[esp] mov esi,[esp]
mov ecx,[esi+WDATA.box.width] mov ecx,[esi+WDATA.box.width]
inc ecx inc ecx
mov edx,[_skinh] mov edx,[_skinh]
mov edi,[common_colours+4] ; standard grab color mov edi,[common_colours+4] ; standard grab color
call [drawbar] call [drawbar]
jmp draw_clientbar jmp draw_clientbar
@@: @@:
mov al,[esp+32+4+4] mov al,[esp+32+4+4]
call drawwindow_IV_caption call drawwindow_IV_caption
draw_clientbar: draw_clientbar:
mov esi,[esp] mov esi,[esp]
mov edx,[esi+WDATA.box.top] ; WORK AREA mov edx,[esi+WDATA.box.top] ; WORK AREA
add edx,21+5 add edx,21+5
mov ebx,[esi+WDATA.box.top] mov ebx,[esi+WDATA.box.top]
add ebx,[esi+WDATA.box.height] add ebx,[esi+WDATA.box.height]
cmp edx,ebx cmp edx,ebx
jg _noinside2 jg _noinside2
mov eax,5 mov eax,5
mov ebx,[_skinh] mov ebx,[_skinh]
mov ecx,[esi+WDATA.box.width] mov ecx,[esi+WDATA.box.width]
mov edx,[esi+WDATA.box.height] mov edx,[esi+WDATA.box.height]
sub ecx,4 sub ecx,4
sub edx,4 sub edx,4
mov edi,[esi+WDATA.cl_workarea] mov edi,[esi+WDATA.cl_workarea]
test edi,0x40000000 test edi,0x40000000
jnz _noinside2 jnz _noinside2
call [drawbar] call [drawbar]
_noinside2: _noinside2:
cmp dword[skin_data],'SKIN' cmp dword[skin_data],'SKIN'
jne no_skin_add_button jne no_skin_add_button
;* close button ;* close button
mov edi,[BTN_ADDR] mov edi,[BTN_ADDR]
movzx eax,word [edi] movzx eax,word [edi]
cmp eax,1000 cmp eax,1000
jge no_skin_add_button jge no_skin_add_button
inc eax inc eax
mov [edi],ax mov [edi],ax
shl eax,4 shl eax,4
add eax,edi add eax,edi
mov bx,[CURRENT_TASK] mov bx,[CURRENT_TASK]
mov [eax],bx mov [eax],bx
add eax,2 ; save button id number add eax,2 ; save button id number
mov bx,1 mov bx,1
mov [eax],bx mov [eax],bx
add eax,2 ; x start add eax,2 ; x start
xor ebx,ebx xor ebx,ebx
cmp [skin_btn_close.left],0 cmp [skin_btn_close.left],0
jge _bCx_at_right jge _bCx_at_right
mov ebx,[esp] mov ebx,[esp]
mov ebx,[ebx+WDATA.box.width] mov ebx,[ebx+WDATA.box.width]
inc ebx inc ebx
_bCx_at_right: _bCx_at_right:
add ebx,[skin_btn_close.left] add ebx,[skin_btn_close.left]
mov [eax],bx mov [eax],bx
add eax,2 ; x size add eax,2 ; x size
mov ebx,[skin_btn_close.width] mov ebx,[skin_btn_close.width]
dec ebx dec ebx
mov [eax],bx mov [eax],bx
add eax,2 ; y start add eax,2 ; y start
mov ebx,[skin_btn_close.top] mov ebx,[skin_btn_close.top]
mov [eax],bx mov [eax],bx
add eax,2 ; y size add eax,2 ; y size
mov ebx,[skin_btn_close.height] mov ebx,[skin_btn_close.height]
dec ebx dec ebx
mov [eax],bx mov [eax],bx
;* minimize button ;* minimize button
mov edi,[BTN_ADDR] mov edi,[BTN_ADDR]
movzx eax,word [edi] movzx eax,word [edi]
cmp eax,1000 cmp eax,1000
jge no_skin_add_button jge no_skin_add_button
inc eax inc eax
mov [edi],ax mov [edi],ax
shl eax,4 shl eax,4
add eax,edi add eax,edi
mov bx,[CURRENT_TASK] mov bx,[CURRENT_TASK]
mov [eax],bx mov [eax],bx
add eax,2 ; save button id number add eax,2 ; save button id number
mov bx,65535 ;999 mov bx,65535 ;999
mov [eax],bx mov [eax],bx
add eax,2 ; x start add eax,2 ; x start
xor ebx,ebx xor ebx,ebx
cmp [skin_btn_minimize.left],0 cmp [skin_btn_minimize.left],0
jge _bMx_at_right jge _bMx_at_right
mov ebx,[esp] mov ebx,[esp]
mov ebx,[ebx+WDATA.box.width] mov ebx,[ebx+WDATA.box.width]
inc ebx inc ebx
_bMx_at_right: _bMx_at_right:
add ebx,[skin_btn_minimize.left] add ebx,[skin_btn_minimize.left]
mov [eax],bx mov [eax],bx
add eax,2 ; x size add eax,2 ; x size
mov ebx,[skin_btn_minimize.width] mov ebx,[skin_btn_minimize.width]
dec ebx dec ebx
mov [eax],bx mov [eax],bx
add eax,2 ; y start add eax,2 ; y start
mov ebx,[skin_btn_minimize.top] mov ebx,[skin_btn_minimize.top]
mov [eax],bx mov [eax],bx
add eax,2 ; y size add eax,2 ; y size
mov ebx,[skin_btn_minimize.height] mov ebx,[skin_btn_minimize.height]
dec ebx dec ebx
mov [eax],bx mov [eax],bx
no_skin_add_button: no_skin_add_button:
pop edi pop edi
popa popa
ret 4 ret 4
diff16 "skin code end ",0,$ ;diff16 "skin code end ",0,$
diff16 "skin code size",read_skin_file,$ diff10 "skin code size",read_skin_file,$

View File

@ -1637,25 +1637,25 @@ window._.set_screen: ;/////////////////////////////////////////////////////////
imul edi, ebx imul edi, ebx
add edi, eax add edi, eax
add edi, [_WinMapAddress] add edi, [_WinMapAddress]
pop eax ; al = process# pop eax ; al = process#
mov ah, al mov ah, al
push ax push ax
shl eax, 16 shl eax, 16
pop ax ; eax = 4 dup PROCESS_NUM pop ax ; eax = 4 dup PROCESS_NUM
.next_line: .next_line:
push ecx push ecx
shr ecx, 2 shr ecx, 2
rep stosd ; filling the screen map rep stosd ; filling the screen map
mov ecx,[esp] mov ecx,[esp]
and ecx, 3 and ecx, 3
rep stosb rep stosb
pop ecx pop ecx
add edi, esi add edi, esi
sub edi, ecx sub edi, ecx
dec edx dec edx
jnz .next_line jnz .next_line
; jmp .exit ; jmp .exit
.shaped_window: .shaped_window:
; (not supported any more) ; (not supported any more)
@ -1947,5 +1947,5 @@ window._.draw_negative_box: ;//////////////////////////////////////////////////
pop esi ebx eax pop esi ebx eax
ret ret
diff16 "window code end",0,$ ;diff16 "window code end",0,$
diff10 "window.inc size",syscall_draw_window,$ diff10 "window.inc size",syscall_draw_window,$

View File

@ -7,7 +7,7 @@
$Revision$ $Revision$
; check mouse ; check mouse
; ;
; ;
@ -93,21 +93,21 @@ save_draw_mouse:
movzx ebx,word [MOUSE_X] movzx ebx,word [MOUSE_X]
push eax push eax
push ebx push ebx
mov ecx, [Screen_Max_X] mov ecx, [Screen_Max_X]
inc ecx inc ecx
mul ecx mul ecx
add eax, [_WinMapAddress] add eax, [_WinMapAddress]
movzx edx, byte [ebx+eax] movzx edx, byte [ebx+eax]
shl edx, 8 shl edx, 8
mov esi, [edx+SLOT_BASE+APPDATA.cursor] mov esi, [edx+SLOT_BASE+APPDATA.cursor]
cmp esi, [current_cursor] cmp esi, [current_cursor]
je .draw je .draw
push esi push esi
call [_display.select_cursor] call [_display.select_cursor]
mov [current_cursor], esi mov [current_cursor], esi
.draw: .draw:
stdcall [_display.move_cursor], esi stdcall [_display.move_cursor], esi
popad popad
@ -115,7 +115,7 @@ save_draw_mouse:
.fail: .fail:
mov ecx, [def_cursor] mov ecx, [def_cursor]
mov [edx+SLOT_BASE+APPDATA.cursor], ecx mov [edx+SLOT_BASE+APPDATA.cursor], ecx
stdcall [_display.move_cursor], ecx ; stdcall: [esp]=ebx,eax stdcall [_display.move_cursor], ecx ; stdcall: [esp]=ebx,eax
popad popad
ret ret
@ -156,7 +156,7 @@ drm:
mov esi, edi mov esi, edi
add edi, esi add edi, esi
add edi, esi ; *3 add edi, esi ; *3
add edi, mousepointer ;[MOUSE_PICTURE] ; we have our str address add edi, mousepointer ;[MOUSE_PICTURE] ; we have our str address
mov esi, edi mov esi, edi
add esi, 16*24*3 add esi, 16*24*3
push ecx push ecx
@ -439,5 +439,5 @@ mouse_acceleration:
@@: @@:
ret ret
diff16 "window code end",0,$ ;diff16 "window code end",0,$
diff10 "mousedrv size ",draw_mouse_under,$ diff10 "mousedrv size ",draw_mouse_under,$

View File

@ -219,8 +219,17 @@ diff16 "32-bit code start ",0,$
call init_BIOS32 ; (init.inc - to be removed later) call init_BIOS32 ; (init.inc - to be removed later)
; PCIe extended config space access ; PCIe extended config space access
; call rs7xx_pcie_init ; (bus/HT.inc)
call fusion_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 ; MEMORY MODEL
call init_mem ; (init.inc) call init_mem ; (init.inc)
@ -242,10 +251,11 @@ align 4
bios32_entry dd ? bios32_entry dd ?
tmp_page_tabs dd ? tmp_page_tabs dd ?
use16 ;use16
org $-0x10000 ;org $-0x10000
include "boot/shutdown.inc" ; shutdown or restart ;include "boot/shutdown.inc" ; shutdown or restart
org $+0x10000 ;org $+0x10000
use32 use32
__DEBUG__ fix 1 __DEBUG__ fix 1
@ -572,28 +582,18 @@ include 'detect/disks.inc'
include 'vmodeld.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 ; LOAD FONTS I and II
stdcall read_file, char, FONT_I, 0, 2304 stdcall read_file, char, FONT_I, 0, 2304
stdcall read_file, char2, FONT_II, 0, 2560 stdcall read_file, char2, FONT_II, 0, 2560
mov esi,boot_fonts ; mov esi,boot_fonts
call boot_log ; call boot_log
; PRINT AMOUNT OF MEMORY ; PRINT AMOUNT OF MEMORY
mov esi, boot_memdetect ; mov esi, boot_memdetect
call boot_log ; call boot_log
movzx ecx, word [boot_y] movzx ecx, word [boot_y]
or ecx, (10+29*6) shl 16 ; "Determining amount of memory" or ecx, (10+29*6) shl 16 ; "Determining amount of memory"
@ -610,8 +610,8 @@ end if
call build_scheduler ; sys32.inc call build_scheduler ; sys32.inc
mov esi,boot_devices ; mov esi,boot_devices
call boot_log ; call boot_log
mov [pci_access_enabled],1 mov [pci_access_enabled],1
@ -624,15 +624,15 @@ end if
; SET BACKGROUND DEFAULTS ; SET BACKGROUND DEFAULTS
mov esi,boot_bgr ; mov esi,boot_bgr
call boot_log ; call boot_log
call init_background ; call init_background ;
call calculatebackground call calculatebackground
; SET UP OS TASK ; SET UP OS TASK
mov esi,boot_setostask ; mov esi,boot_setostask
call boot_log ; call boot_log
xor eax, eax xor eax, eax
mov dword [SLOT_BASE+APPDATA.fpu_state], fpu_data mov dword [SLOT_BASE+APPDATA.fpu_state], fpu_data
@ -683,8 +683,8 @@ end if
; READ TSC / SECOND ; READ TSC / SECOND
mov esi,boot_tsc ; mov esi,boot_tsc
call boot_log ; call boot_log
cli cli
rdtsc ;call _rdtsc rdtsc ;call _rdtsc
mov ecx,eax mov ecx,eax
@ -724,8 +724,8 @@ end if
;call detect_devices ;call detect_devices
stdcall load_driver, szPS2MDriver stdcall load_driver, szPS2MDriver
mov esi,boot_setmouse ; mov esi,boot_setmouse
call boot_log ; call boot_log
; call setmouse ; call setmouse
; mov [MOUSE_PICTURE],dword mousepointer ; mov [MOUSE_PICTURE],dword mousepointer
cli cli
@ -754,8 +754,8 @@ end if
call init_userDMA ; <<<<<<<<< ============== core/memory.inc ================= call init_userDMA ; <<<<<<<<< ============== core/memory.inc =================
mov esi, boot_uDMA_ok ; mov esi, boot_uDMA_ok
call boot_log ; call boot_log
; LOAD FIRST APPLICATION ; LOAD FIRST APPLICATION
cli cli
@ -779,8 +779,8 @@ no_load_vrr_m:
sub eax,2 sub eax,2
jz first_app_found jz first_app_found
mov esi, boot_failed ; mov esi, boot_failed
call boot_log ; call boot_log
mov eax, 0xDEADBEEF ; otherwise halt mov eax, 0xDEADBEEF ; otherwise halt
hlt hlt
@ -825,13 +825,13 @@ first_app_found:
; START MULTITASKING ; START MULTITASKING
if preboot_blogesc ;if preboot_blogesc
mov esi, boot_tasking ; mov esi, boot_tasking
call boot_log ; call boot_log
.bll1: in al, 0x60 ; wait for ESC key press ;.bll1: in al, 0x60 ; wait for ESC key press
cmp al, 129 ; cmp al, 129
jne .bll1 ; jne .bll1
end if ;end if
stdcall attach_int_handler, 1, irq1, 0 stdcall attach_int_handler, 1, irq1, 0
@ -4468,230 +4468,50 @@ system_shutdown: ; shut down the system
yes_shutdown_param: yes_shutdown_param:
cli 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 mov al, 0xFF
out 0x21, al out 0x21, al ;IntrCntrl1Reg2
out 0xA1, al out 0xA1, al ;IntrCntrl2Reg2
cmp byte [BOOT_VAR + 0x9030], 2
jnz pm_restart
if 0 if 0
mov word [OS_BASE+0x467+0],pr_mode_exit mov al, SB_PM_CTRL_BLK
mov word [OS_BASE+0x467+2],0x1000 mov ah, al
inc ah
mov al,0x0F mov dx, 0x0CD6
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]
out dx, al out dx, al
mov edx, [ebx+64] inc dl
@@: in al, dx
in ax, dx mov cl, al
test al, 1 dec dl
jz @b mov al, ah
.nosmi: out dx, al
and cx, 0x0707 inc dl
shl cx, 2 in al, dx
or cx, 0x2020 mov ch, al
mov edx, [ebx+64] end if
in ax, dx mov dx, 0x0804 ;cx
and ax, 203h mov ax, 0x03400
or ah, cl
out dx, ax out dx, ax
mov edx, [ebx+68] ; THE END...
test edx, edx jmp $ ; just to be absolutely sure
jz @f
in ax, dx
and ax, 203h
or ah, ch
out dx, ax
@@:
jmp $
no_acpi_power_off: pm_restart:
mov word [OS_BASE+0x467+0],pr_mode_exit
mov word [OS_BASE+0x467+2],0x1000
mov al,0x0F mov al,0x0F
out 0x70,al out 0x70,al ; NmiEnable
mov al,0x05 mov al,0x05
out 0x71,al out 0x71,al ; RtcData
mov al,0xFE mov ax, 6
out 0x64,al mov dx, 0xCF9 ; reset reg
out dx, ax
hlt hlt
jmp $-1 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,$ diff16 "End of 32-code ",0,$

View File

@ -15,7 +15,7 @@
$Revision$ $Revision$
struc POINT { struc POINT {
.x dd ? .x dd ?
@ -220,13 +220,13 @@ include "fs/ext2.inc" ; read / write for ext2 filesystem
; sound ; sound
include "sound/playnote.inc" ; player Note for Speaker PC include "sound/playnote.inc" ; player Note for Speaker PC
;include "sound/FHT.inc" ; fast Fourier transform routines ;include "sound/FHT.inc" ; fast Fourier transform routines
; display ; display
;include "video/graph32.inc" ; 32bpp graphics ;include "video/graph32.inc" ; 32bpp graphics
include "video/vesa20.inc" ; older graphics engine include "video/vesa20.inc" ; older graphics engine
include "video/cursors.inc" ; cursors functions include "video/cursors.inc" ; cursors functions
; Network Interface & TCPIP Stack ; Network Interface & TCPIP Stack
@ -247,6 +247,7 @@ include "gui/skincode.inc"
include "bus/pci/pci32.inc" include "bus/pci/pci32.inc"
;include "bus/pci/PCIe.inc" ;include "bus/pci/PCIe.inc"
include "bus/HT.inc" ; AMD HyperTransport bus control include "bus/HT.inc" ; AMD HyperTransport bus control
include "bus/SB/SB.inc"
; Floppy drive controller ; Floppy drive controller

View File

@ -149,11 +149,11 @@
; in the current version: ; in the current version:
; -> 00B3C 16-bit code end ; -> 00B3C 16-bit code end
; -> 00C40 16-bit data end ; -> 00C40 16-bit data end
; -> 10C40 32-bit code start ; -> 105F0 32-bit code start
; -> 2D07E 32-bit code end ; -> 2C889 32-bit code end
; -> 30418..end_of_kernel zero-filled zone after preinit_mem ; -> 2FC28..end_of_kernel zero-filled zone after preinit_mem
; -> 33D63 uninitialized globals start ; -> 33563 uninitialized globals start
; -> 3BF52 end_of_kernel ; -> 3B752 end_of_kernel
; -> 3C000 not used (>200k) ; -> 3C000 not used (>200k)
; 0x80050000 -> 090000 zero-filled zone after preinit_mem ; 0x80050000 -> 090000 zero-filled zone after preinit_mem
; 0x8006CC00 -> 6DBFF stack at boot time (4Kb) ; 0x8006CC00 -> 6DBFF stack at boot time (4Kb)

View File

@ -463,7 +463,7 @@ align 4
ret ret
align 4 align 4
.drawtable: .drawtable:
dd .check_overlap ; general case dd .check_overlap ; general case
dd .invert_color dd .invert_color
dd .putpixel ; force to draw it dd .putpixel ; force to draw it
dd .invert_force dd .invert_force
@ -497,18 +497,18 @@ vline:
shl eax, 1 shl eax, 1
add eax, ebx add eax, ebx
add eax, LFB_BASE add eax, LFB_BASE
pop ebx ; restore ebx = y1 pop ebx ; restore ebx = y1
cmp edx, [Screen_Max_Y] ; the last check cmp edx, [Screen_Max_Y] ; the last check
jb .draw jb .draw
mov edx, [Screen_Max_Y] ; to prevent off-screen drawing mov edx, [Screen_Max_Y] ; to prevent off-screen drawing
.draw: .draw:
jmp dword [vline.drawtable + edi*4] jmp dword [vline.drawtable + edi*4]
align 4 align 4
.invert_color: .invert_color:
mov ecx, [eax] mov ecx, [eax]
xor ecx, 0x00FFFFFF xor ecx, 0x00FFFFFF
or ecx, 0x01000000 or ecx, 0x01000000
align 4 align 4
.check_overlap: .check_overlap:
movzx esi, byte [ebp] movzx esi, byte [ebp]
@ -520,7 +520,7 @@ align 4
.invert_force: .invert_force:
mov ecx, [eax] mov ecx, [eax]
xor ecx, 0x00FFFFFF xor ecx, 0x00FFFFFF
or ecx, 0x01000000 or ecx, 0x01000000
align 4 align 4
.putpixel: .putpixel:
mov [eax], ecx mov [eax], ecx
@ -531,7 +531,7 @@ align 4
inc ebx inc ebx
cmp ebx, edx cmp ebx, edx
ja .exit ja .exit
jmp dword [vline.drawtable + edi*4] jmp dword [vline.drawtable + edi*4]
.exit: .exit:
shr edi, 1 shr edi, 1
pop edx ebx esi ebp eax pop edx ebx esi ebp eax
@ -539,7 +539,7 @@ align 4
ret ret
align 4 align 4
.drawtable: .drawtable:
dd .check_overlap ; general case dd .check_overlap ; general case
dd .invert_color dd .invert_color
dd .putpixel ; force to draw it dd .putpixel ; force to draw it
dd .invert_force dd .invert_force
@ -576,9 +576,9 @@ vesa20_drawbar:
sub esp, drbar.stack_data sub esp, drbar.stack_data
mov [drbar.color], edi mov [drbar.color], edi
sub edx, ebx sub edx, ebx
jle .exit jle .exit
sub ecx, eax sub ecx, eax
jle .exit jle .exit
mov [drbar.bar_sy], edx mov [drbar.bar_sy], edx
mov [drbar.bar_sx], ecx mov [drbar.bar_sx], ecx
mov [drbar.bar_cx], eax mov [drbar.bar_cx], eax
@ -594,7 +594,7 @@ vesa20_drawbar:
inc ebx inc ebx
sub ebx, [drbar.bar_cx] sub ebx, [drbar.bar_cx]
ja @f ja @f
.exit: .exit:
add esp, drbar.stack_data add esp, drbar.stack_data
popad popad
xor eax, eax xor eax, eax
@ -755,7 +755,7 @@ nbgp:
add esi, 3 add esi, 3
add edi, 3 add edi, 3
@@: @@:
inc edi ; +1 for 32 bpp inc edi ; +1 for 32 bpp
add ebp, edx add ebp, edx
add eax, edx add eax, edx
cmp eax, [draw_data+32+RECT.right] cmp eax, [draw_data+32+RECT.right]
@ -1042,23 +1042,23 @@ init_background:
align 16 align 16
overlapping_of_points_mmx: overlapping_of_points_mmx:
movd mm0, eax movd mm0, eax
movd mm4, eax movd mm4, eax
movd mm1, ebx movd mm1, ebx
pxor mm2, mm2 pxor mm2, mm2
punpcklbw mm0, mm2 punpcklbw mm0, mm2
punpcklbw mm1, mm2 punpcklbw mm1, mm2
psubw mm1, mm0 psubw mm1, mm0
movd mm3, ecx movd mm3, ecx
psrld mm3, 24 psrld mm3, 24
packuswb mm3, mm3 packuswb mm3, mm3
packuswb mm3, mm3 packuswb mm3, mm3
pmullw mm1, mm3 pmullw mm1, mm3
psrlw mm1, 8 psrlw mm1, 8
packuswb mm1, mm2 packuswb mm1, mm2
paddb mm4, mm1 paddb mm4, mm1
movd eax, mm4 movd eax, mm4
ret ret
diff16 "VESA2 code end ",0,$ ;diff16 "VESA2 code end ",0,$
diff16 "VESA2 code size",get_pixel,$ diff10 "VESA2 code size",get_pixel,$