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
exit 1
:Exit_OK
echo all operations has been done
pause pause
exit 0 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

@ -323,4 +323,3 @@ sys_rdmsr:
ret ret

View File

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

View File

@ -3,7 +3,14 @@ $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

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

View File

@ -1539,5 +1539,5 @@ proc shmem_close stdcall, name:dword
.fail: .fail:
ret ret
endp endp
diff16 "heap code end ",0,$ ;diff16 "heap code end ",0,$
diff16 "heap code size",init_kernel_heap,$ diff10 "heap code size",init_kernel_heap,$

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

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

View File

@ -130,5 +130,5 @@ dtext: ; Text String Output (rw by Johnny_B[john@kolibrios.org])
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

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

@ -458,5 +458,5 @@ drawwindow_IV:
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

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

@ -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)
display '** Platform chosen (const.inc): '
if PLATFORM>PLATFORM_RS780
call fusion_pcie_init ; (bus/HT.inc) 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

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

@ -1059,6 +1059,6 @@ overlapping_of_points_mmx:
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,$