forked from KolibriOS/kolibrios
getting smaller and closer to real hardware...
git-svn-id: svn://kolibrios.org@2014 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
c7598bab12
commit
e338e5353f
@ -1,53 +1,7 @@
|
|||||||
@echo off
|
@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
|
@ -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
|
||||||
|
@ -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
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -1,209 +0,0 @@
|
|||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
;; ;;
|
|
||||||
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
|
|
||||||
;; Distributed under terms of the GNU General Public License ;;
|
|
||||||
;; ;;
|
|
||||||
;; Shutdown for Menuet ;;
|
|
||||||
;; ;;
|
|
||||||
;; Distributed under General Public License ;;
|
|
||||||
;; See file COPYING for details. ;;
|
|
||||||
;; Copyright 2003 Ville Turjanmaa ;;
|
|
||||||
;; ;;
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
|
|
||||||
$Revision$
|
|
||||||
|
|
||||||
|
|
||||||
align 4
|
|
||||||
pr_mode_exit:
|
|
||||||
|
|
||||||
; setup stack
|
|
||||||
mov ax, 0x3000
|
|
||||||
mov ss, ax
|
|
||||||
mov esp, 0x0EC00
|
|
||||||
; setup ds
|
|
||||||
push cs
|
|
||||||
pop ds
|
|
||||||
|
|
||||||
lidt [old_ints_h]
|
|
||||||
;remap IRQs
|
|
||||||
mov al,0x11
|
|
||||||
out 0x20,al
|
|
||||||
call rdelay
|
|
||||||
out 0xA0,al
|
|
||||||
call rdelay
|
|
||||||
|
|
||||||
mov al,0x08
|
|
||||||
out 0x21,al
|
|
||||||
call rdelay
|
|
||||||
mov al,0x70
|
|
||||||
out 0xA1,al
|
|
||||||
call rdelay
|
|
||||||
|
|
||||||
mov al,0x04
|
|
||||||
out 0x21,al
|
|
||||||
call rdelay
|
|
||||||
mov al,0x02
|
|
||||||
out 0xA1,al
|
|
||||||
call rdelay
|
|
||||||
|
|
||||||
mov al,0x01
|
|
||||||
out 0x21,al
|
|
||||||
call rdelay
|
|
||||||
out 0xA1,al
|
|
||||||
call rdelay
|
|
||||||
|
|
||||||
mov al,0xB8
|
|
||||||
out 0x21,al
|
|
||||||
call rdelay
|
|
||||||
mov al,0xBD
|
|
||||||
out 0xA1,al
|
|
||||||
sti
|
|
||||||
|
|
||||||
temp_3456:
|
|
||||||
xor ax,ax
|
|
||||||
mov es,ax
|
|
||||||
mov al,byte [es:0x9030]
|
|
||||||
cmp al,1
|
|
||||||
jl nbw
|
|
||||||
cmp al,4
|
|
||||||
jle nbw32
|
|
||||||
|
|
||||||
nbw:
|
|
||||||
in al,0x60
|
|
||||||
cmp al,6
|
|
||||||
jae nbw
|
|
||||||
mov bl,al
|
|
||||||
nbw2:
|
|
||||||
in al,0x60
|
|
||||||
cmp al,bl
|
|
||||||
je nbw2
|
|
||||||
cmp al,240 ;ax,240
|
|
||||||
jne nbw31
|
|
||||||
mov al,bl
|
|
||||||
dec ax
|
|
||||||
jmp nbw32
|
|
||||||
nbw31:
|
|
||||||
add bl,128
|
|
||||||
cmp al,bl
|
|
||||||
jne nbw
|
|
||||||
sub al,129
|
|
||||||
|
|
||||||
nbw32:
|
|
||||||
|
|
||||||
dec ax
|
|
||||||
dec ax ; 2 = power off
|
|
||||||
jnz no_apm_off
|
|
||||||
call APM_PowerOff
|
|
||||||
jmp $
|
|
||||||
no_apm_off:
|
|
||||||
|
|
||||||
dec ax ; 3 = reboot
|
|
||||||
jnz restart_kernel ; 4 = restart kernel
|
|
||||||
push 0x40
|
|
||||||
pop ds
|
|
||||||
mov word[0x0072],0x1234
|
|
||||||
jmp 0xF000:0xFFF0
|
|
||||||
|
|
||||||
|
|
||||||
rdelay:
|
|
||||||
ret
|
|
||||||
|
|
||||||
APM_PowerOff:
|
|
||||||
mov ax, 5304h
|
|
||||||
xor bx, bx
|
|
||||||
int 15h
|
|
||||||
;!!!!!!!!!!!!!!!!!!!!!!!!
|
|
||||||
mov ax,0x5300
|
|
||||||
xor bx,bx
|
|
||||||
int 0x15
|
|
||||||
push ax
|
|
||||||
|
|
||||||
mov ax,0x5301
|
|
||||||
xor bx,bx
|
|
||||||
int 0x15
|
|
||||||
|
|
||||||
mov ax,0x5308
|
|
||||||
mov bx,1
|
|
||||||
mov cx,bx
|
|
||||||
int 0x15
|
|
||||||
|
|
||||||
mov ax,0x530E
|
|
||||||
xor bx,bx
|
|
||||||
pop cx
|
|
||||||
int 0x15
|
|
||||||
|
|
||||||
mov ax,0x530D
|
|
||||||
mov bx,1
|
|
||||||
mov cx,bx
|
|
||||||
int 0x15
|
|
||||||
|
|
||||||
mov ax,0x530F
|
|
||||||
mov bx,1
|
|
||||||
mov cx,bx
|
|
||||||
int 0x15
|
|
||||||
|
|
||||||
mov ax,0x5307
|
|
||||||
mov bx,1
|
|
||||||
mov cx,3
|
|
||||||
int 0x15
|
|
||||||
;!!!!!!!!!!!!!!!!!!!!!!!!
|
|
||||||
ret
|
|
||||||
|
|
||||||
restart_kernel:
|
|
||||||
|
|
||||||
mov ax,0x0003 ; set text mode for screen
|
|
||||||
int 0x10
|
|
||||||
jmp 0x4000:0000
|
|
||||||
|
|
||||||
restart_kernel_4000:
|
|
||||||
cli
|
|
||||||
|
|
||||||
push ds
|
|
||||||
pop es
|
|
||||||
mov cx, 0x8000
|
|
||||||
push cx
|
|
||||||
push 0x7000
|
|
||||||
pop ds
|
|
||||||
xor si, si
|
|
||||||
xor di, di
|
|
||||||
rep movsw
|
|
||||||
pop cx
|
|
||||||
mov ds, cx
|
|
||||||
push 0x2000
|
|
||||||
pop es
|
|
||||||
rep movsw
|
|
||||||
push 0x9000
|
|
||||||
pop ds
|
|
||||||
push 0x3000
|
|
||||||
pop es
|
|
||||||
mov cx, 0xE000/2
|
|
||||||
rep movsw
|
|
||||||
|
|
||||||
wbinvd ; write and invalidate cache
|
|
||||||
|
|
||||||
mov al, 00110100b
|
|
||||||
out 43h, al
|
|
||||||
jcxz $+2
|
|
||||||
mov al, 0xFF
|
|
||||||
out 40h, al
|
|
||||||
jcxz $+2
|
|
||||||
out 40h, al
|
|
||||||
jcxz $+2
|
|
||||||
sti
|
|
||||||
|
|
||||||
; (hint by Black_mirror)
|
|
||||||
; We must read data from keyboard port,
|
|
||||||
; because there may be situation when previous keyboard interrupt is lost
|
|
||||||
; (due to return to real mode and IRQ reprogramming)
|
|
||||||
; and next interrupt will not be generated (as keyboard waits for handling)
|
|
||||||
in al, 0x60
|
|
||||||
|
|
||||||
; bootloader interface
|
|
||||||
push 0x1000
|
|
||||||
pop ds
|
|
||||||
mov si, kernel_restart_bootblock
|
|
||||||
mov ax, 'KL'
|
|
||||||
jmp 0x1000:0000
|
|
||||||
|
|
||||||
|
|
@ -323,4 +323,3 @@ sys_rdmsr:
|
|||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
3
kernel/branches/Kolibri-A/trunk/bus/SB/HUDSON.INC
Normal file
3
kernel/branches/Kolibri-A/trunk/bus/SB/HUDSON.INC
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
|
||||||
|
SB_PM_CTRL_BLK equ 0x62
|
||||||
|
|
@ -3,7 +3,14 @@ $Revision: 1598 $
|
|||||||
SMBUS_PCIE_ADDR equ 0xF00A0000 ; bdf0:20.0 = SB7xx SMBus PCI Config Registers
|
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
|
3
kernel/branches/Kolibri-A/trunk/bus/SB/SB710.INC
Normal file
3
kernel/branches/Kolibri-A/trunk/bus/SB/SB710.INC
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
|
||||||
|
SB_PM_CTRL_BLK equ 0x22
|
||||||
|
|
@ -26,6 +26,11 @@ CPU_PENTIUM equ 5
|
|||||||
CPU_P6 equ 6
|
CPU_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
|
||||||
|
@ -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,$
|
||||||
|
@ -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,$
|
||||||
|
@ -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
|
||||||
|
@ -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,$
|
||||||
|
@ -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,$
|
||||||
|
@ -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,$
|
||||||
|
@ -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,$
|
||||||
|
@ -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,$
|
||||||
|
@ -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,$
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
@ -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,$
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user