mirror of
https://github.com/KolibriOS/kolibrios.git
synced 2024-12-17 04:12:34 +03:00
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
|
pause
|
||||||
exit 1
|
exit 0
|
||||||
|
|
||||||
:Exit_OK
|
|
||||||
echo all operations has been done
|
|
||||||
pause
|
|
||||||
exit 0
|
|
@ -20,48 +20,6 @@ $Revision$
|
|||||||
;
|
;
|
||||||
;==========================================================================
|
;==========================================================================
|
||||||
|
|
||||||
if 0
|
|
||||||
putchar:
|
|
||||||
; in: al=character
|
|
||||||
mov ah, 0Eh
|
|
||||||
mov bh, 0
|
|
||||||
int 10h
|
|
||||||
ret
|
|
||||||
|
|
||||||
print:
|
|
||||||
; in: si->string
|
|
||||||
mov al, 186
|
|
||||||
call putchar
|
|
||||||
mov al, ' '
|
|
||||||
call putchar
|
|
||||||
|
|
||||||
printplain:
|
|
||||||
; in: si->string
|
|
||||||
pusha
|
|
||||||
lodsb
|
|
||||||
@@:
|
|
||||||
call putchar
|
|
||||||
lodsb
|
|
||||||
test al,al
|
|
||||||
jnz @b
|
|
||||||
popa
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
setcursor:
|
|
||||||
; in: dl=column, dh=row
|
|
||||||
mov ah, 2
|
|
||||||
mov bh, 0
|
|
||||||
int 10h
|
|
||||||
ret
|
|
||||||
|
|
||||||
macro _setcursor row,column
|
|
||||||
{
|
|
||||||
mov dx, row*256 + column
|
|
||||||
call setcursor
|
|
||||||
}
|
|
||||||
|
|
||||||
end if
|
|
||||||
|
|
||||||
boot_read_floppy:
|
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
|
|
||||||
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
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
|
||||||
|
|
@ -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
|
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
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -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,$
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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,$
|
||||||
|
@ -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,$
|
||||||
|
@ -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,$
|
||||||
|
@ -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,$
|
||||||
|
@ -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,$
|
||||||
|
@ -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,$
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
@ -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,$
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user