forked from KolibriOS/kolibrios
merge trunk
git-svn-id: svn://kolibrios.org@2010 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
49a8960d6e
commit
f59df34e17
@ -239,10 +239,10 @@ SendPacketDatCommand:
|
|||||||
in AL,DX
|
in AL,DX
|
||||||
test AL,80h ;состояние сигнала BSY
|
test AL,80h ;состояние сигнала BSY
|
||||||
jnz @@WaitDevice0
|
jnz @@WaitDevice0
|
||||||
test AL,08h ;состояние сигнала DRQ
|
|
||||||
jz @@WaitDevice0
|
|
||||||
test AL,1 ;состояние сигнала ERR
|
test AL,1 ;состояние сигнала ERR
|
||||||
jnz @@Err6
|
jnz @@Err6
|
||||||
|
test AL,08h ;состояние сигнала DRQ
|
||||||
|
jz @@WaitDevice0
|
||||||
; Послать пакетную команду
|
; Послать пакетную команду
|
||||||
cli
|
cli
|
||||||
mov DX,[ATABasePortAddr]
|
mov DX,[ATABasePortAddr]
|
||||||
@ -282,10 +282,10 @@ SendPacketDatCommand:
|
|||||||
in AL,DX
|
in AL,DX
|
||||||
test AL,80h ;состояние сигнала BSY
|
test AL,80h ;состояние сигнала BSY
|
||||||
jnz @@WaitDevice1
|
jnz @@WaitDevice1
|
||||||
test AL,08h ;состояние сигнала DRQ
|
|
||||||
jz @@WaitDevice1
|
|
||||||
test AL,1 ;состояние сигнала ERR
|
test AL,1 ;состояние сигнала ERR
|
||||||
jnz @@Err6_temp
|
jnz @@Err6_temp
|
||||||
|
test AL,08h ;состояние сигнала DRQ
|
||||||
|
jz @@WaitDevice1
|
||||||
; Принять блок данных от контроллера
|
; Принять блок данных от контроллера
|
||||||
mov EDI,[CDDataBuf_pointer] ;0x7000 ;CDDataBuf
|
mov EDI,[CDDataBuf_pointer] ;0x7000 ;CDDataBuf
|
||||||
; Загрузить адрес регистра данных контроллера
|
; Загрузить адрес регистра данных контроллера
|
||||||
|
@ -49,6 +49,12 @@ hd_read:
|
|||||||
; Read through BIOS?
|
; Read through BIOS?
|
||||||
cmp [hdpos], 0x80
|
cmp [hdpos], 0x80
|
||||||
jae .bios
|
jae .bios
|
||||||
|
; hd_read_{dma,pio} use old ATA with 28 bit for sector number
|
||||||
|
cmp eax, 0x10000000
|
||||||
|
jb @f
|
||||||
|
inc [hd_error]
|
||||||
|
jmp return_01
|
||||||
|
@@:
|
||||||
; DMA read is permitted if [allow_dma_access]=1 or 2
|
; DMA read is permitted if [allow_dma_access]=1 or 2
|
||||||
cmp [allow_dma_access], 2
|
cmp [allow_dma_access], 2
|
||||||
ja .nodma
|
ja .nodma
|
||||||
@ -235,6 +241,8 @@ hd_write:
|
|||||||
|
|
||||||
align 4
|
align 4
|
||||||
cache_write_pio:
|
cache_write_pio:
|
||||||
|
cmp dword[esi],0x10000000
|
||||||
|
jae .bad
|
||||||
; call disable_ide_int
|
; call disable_ide_int
|
||||||
|
|
||||||
call wait_for_hd_idle
|
call wait_for_hd_idle
|
||||||
@ -295,6 +303,9 @@ cache_write_pio:
|
|||||||
pop esi ecx
|
pop esi ecx
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
.bad:
|
||||||
|
inc [hd_error]
|
||||||
|
ret
|
||||||
|
|
||||||
save_hd_wait_timeout:
|
save_hd_wait_timeout:
|
||||||
|
|
||||||
@ -686,6 +697,9 @@ write_cache_sector:
|
|||||||
write_cache_chain:
|
write_cache_chain:
|
||||||
cmp [hdpos], 0x80
|
cmp [hdpos], 0x80
|
||||||
jae bd_write_cache_chain
|
jae bd_write_cache_chain
|
||||||
|
mov eax,[cache_chain_ptr]
|
||||||
|
cmp dword[eax],0x10000000
|
||||||
|
jae .bad
|
||||||
push esi
|
push esi
|
||||||
mov eax, IDE_descriptor_table
|
mov eax, IDE_descriptor_table
|
||||||
mov edx,eax
|
mov edx,eax
|
||||||
@ -779,6 +793,9 @@ write_cache_chain:
|
|||||||
jnz hd_write_error_dma
|
jnz hd_write_error_dma
|
||||||
pop esi
|
pop esi
|
||||||
ret
|
ret
|
||||||
|
.bad:
|
||||||
|
inc [hd_error]
|
||||||
|
ret
|
||||||
|
|
||||||
uglobal
|
uglobal
|
||||||
IDEContrRegsBaseAddr dw ?
|
IDEContrRegsBaseAddr dw ?
|
||||||
@ -916,7 +933,9 @@ int13_call:
|
|||||||
mov [ebx+v86_regs.eflags], 20200h
|
mov [ebx+v86_regs.eflags], 20200h
|
||||||
mov esi, [sys_v86_machine]
|
mov esi, [sys_v86_machine]
|
||||||
mov ecx, 0x502
|
mov ecx, 0x502
|
||||||
|
push fs
|
||||||
call v86_start
|
call v86_start
|
||||||
|
pop fs
|
||||||
and [bios_hdpos], 0
|
and [bios_hdpos], 0
|
||||||
pop edi esi ecx ebx
|
pop edi esi ecx ebx
|
||||||
movzx edx, byte [OS_BASE + 512h]
|
movzx edx, byte [OS_BASE + 512h]
|
||||||
|
@ -91,6 +91,7 @@ boot_read_floppy:
|
|||||||
inc si
|
inc si
|
||||||
cmp si, 10
|
cmp si, 10
|
||||||
jb @b
|
jb @b
|
||||||
|
sayerr_badsect:
|
||||||
mov si, badsect
|
mov si, badsect
|
||||||
sayerr_plain:
|
sayerr_plain:
|
||||||
call printplain
|
call printplain
|
||||||
@ -145,8 +146,119 @@ FirstDataSector dw 0 ; begin of data
|
|||||||
;=========================================================================
|
;=========================================================================
|
||||||
|
|
||||||
include 'bootvesa.inc' ;Include source for boot vesa
|
include 'bootvesa.inc' ;Include source for boot vesa
|
||||||
|
if defined extended_primary_loader
|
||||||
|
include 'parsers.inc'
|
||||||
|
end if
|
||||||
|
|
||||||
start_of_code:
|
start_of_code:
|
||||||
|
|
||||||
|
if defined extended_primary_loader
|
||||||
|
; save data from primary loader
|
||||||
|
mov word [cs:bootcallback], si
|
||||||
|
mov word [cs:bootcallback+2], ds
|
||||||
|
push cs
|
||||||
|
pop ds
|
||||||
|
mov [bootdevice], ax
|
||||||
|
mov [bootfs], bx
|
||||||
|
|
||||||
|
; set up stack
|
||||||
|
mov ax, 3000h
|
||||||
|
mov ss, ax
|
||||||
|
mov sp, 0EC00h
|
||||||
|
|
||||||
|
; try to load configuration file
|
||||||
|
mov ax, 1
|
||||||
|
mov di, config_file_struct
|
||||||
|
call [bootcallback]
|
||||||
|
cld
|
||||||
|
push cs
|
||||||
|
pop es
|
||||||
|
; bx=0 - ok, bx=1 - part of file loaded, assume this is ok
|
||||||
|
cmp bx, 1
|
||||||
|
ja .config_bad
|
||||||
|
; configuration file was loaded, parse
|
||||||
|
; if length is too big, use first 0FFFFh bytes
|
||||||
|
test dx, dx
|
||||||
|
jz @f
|
||||||
|
mov ax, 0FFFFh
|
||||||
|
@@:
|
||||||
|
; ds:si will be pointer to current data, dx = limit
|
||||||
|
xchg ax, dx
|
||||||
|
push 4000h
|
||||||
|
pop ds
|
||||||
|
xor si, si
|
||||||
|
.parse_loop:
|
||||||
|
; skip spaces
|
||||||
|
cmp si, dx
|
||||||
|
jae .parse_done
|
||||||
|
lodsb
|
||||||
|
cmp al, ' '
|
||||||
|
jbe .parse_loop
|
||||||
|
dec si
|
||||||
|
; loop over all possible configuration values
|
||||||
|
mov bx, config_file_variables
|
||||||
|
.find_variant:
|
||||||
|
; get length
|
||||||
|
mov cx, [es:bx]
|
||||||
|
; zero length = end of list
|
||||||
|
jecxz .find_newline
|
||||||
|
; skip over length
|
||||||
|
inc bx
|
||||||
|
inc bx
|
||||||
|
mov di, bx
|
||||||
|
; skip over string
|
||||||
|
add bx, cx
|
||||||
|
; test whether we have at least cx symbols left
|
||||||
|
mov ax, cx
|
||||||
|
add ax, si
|
||||||
|
jc .next_variant1
|
||||||
|
cmp ax, dx
|
||||||
|
jae .next_variant1
|
||||||
|
; save current position
|
||||||
|
push si
|
||||||
|
; compare strings
|
||||||
|
repz cmpsb
|
||||||
|
jnz .next_variant2
|
||||||
|
; strings are equal; look for "=" with possible spaces before and after
|
||||||
|
@@:
|
||||||
|
cmp si, dx
|
||||||
|
jae .next_variant2
|
||||||
|
lodsb
|
||||||
|
cmp al, ' '
|
||||||
|
jbe @b
|
||||||
|
cmp al, '='
|
||||||
|
jnz .next_variant2
|
||||||
|
; ok, we found the true variant
|
||||||
|
; ignore saved position on the stack
|
||||||
|
pop ax
|
||||||
|
; call the parser
|
||||||
|
call word [es:bx]
|
||||||
|
; line parsed, find next
|
||||||
|
.find_newline:
|
||||||
|
cmp si, dx
|
||||||
|
jae .parse_done
|
||||||
|
lodsb
|
||||||
|
cmp al, 13
|
||||||
|
jz .parse_loop
|
||||||
|
cmp al, 10
|
||||||
|
jz .parse_loop
|
||||||
|
jmp .find_newline
|
||||||
|
.next_variant2:
|
||||||
|
; continue to the next variant, restoring current position
|
||||||
|
pop si
|
||||||
|
.next_variant1:
|
||||||
|
; continue to the next variant
|
||||||
|
; skip over the parser
|
||||||
|
inc bx
|
||||||
|
inc bx
|
||||||
|
jmp .find_variant
|
||||||
|
.parse_done:
|
||||||
|
.config_bad:
|
||||||
|
|
||||||
|
; set up segment registers
|
||||||
|
push cs
|
||||||
|
pop ds
|
||||||
|
else
|
||||||
cld
|
cld
|
||||||
; \begin{diamond}[02.12.2005]
|
; \begin{diamond}[02.12.2005]
|
||||||
; if bootloader sets ax = 'KL', then ds:si points to loader block
|
; if bootloader sets ax = 'KL', then ds:si points to loader block
|
||||||
@ -175,6 +287,7 @@ no_hd_load:
|
|||||||
pop ds
|
pop ds
|
||||||
push cs
|
push cs
|
||||||
pop es
|
pop es
|
||||||
|
end if
|
||||||
|
|
||||||
; set videomode
|
; set videomode
|
||||||
mov ax, 3
|
mov ax, 3
|
||||||
@ -378,6 +491,7 @@ wait_loop: ; variant 2
|
|||||||
apm_end:
|
apm_end:
|
||||||
_setcursor d80x25_top_num, 0
|
_setcursor d80x25_top_num, 0
|
||||||
|
|
||||||
|
if ~ defined extended_primary_loader
|
||||||
;CHECK current of code
|
;CHECK current of code
|
||||||
cmp [cfgmanager.loader_block], -1
|
cmp [cfgmanager.loader_block], -1
|
||||||
jz noloaderblock
|
jz noloaderblock
|
||||||
@ -387,6 +501,7 @@ apm_end:
|
|||||||
jnz sayerr
|
jnz sayerr
|
||||||
push 0
|
push 0
|
||||||
pop es
|
pop es
|
||||||
|
end if
|
||||||
|
|
||||||
noloaderblock:
|
noloaderblock:
|
||||||
; DISPLAY VESA INFORMATION
|
; DISPLAY VESA INFORMATION
|
||||||
@ -404,7 +519,9 @@ cfgmanager:
|
|||||||
; d) preboot_device = from what boot?
|
; d) preboot_device = from what boot?
|
||||||
|
|
||||||
; determine default settings
|
; determine default settings
|
||||||
|
if ~ defined extended_primary_loader
|
||||||
mov [.bSettingsChanged], 0
|
mov [.bSettingsChanged], 0
|
||||||
|
end if
|
||||||
|
|
||||||
;.preboot_gr_end:
|
;.preboot_gr_end:
|
||||||
mov di, preboot_device
|
mov di, preboot_device
|
||||||
@ -412,6 +529,12 @@ cfgmanager:
|
|||||||
; set it to use this preloaded image
|
; set it to use this preloaded image
|
||||||
cmp byte [di], 0
|
cmp byte [di], 0
|
||||||
jnz .preboot_device_inited
|
jnz .preboot_device_inited
|
||||||
|
if defined extended_primary_loader
|
||||||
|
inc byte [di]
|
||||||
|
cmp byte [bootdevice], 'f' ; floppy?
|
||||||
|
jz .preboot_device_inited
|
||||||
|
inc byte [di]
|
||||||
|
else
|
||||||
cmp [.loader_block], -1
|
cmp [.loader_block], -1
|
||||||
jz @f
|
jz @f
|
||||||
les bx, [.loader_block]
|
les bx, [.loader_block]
|
||||||
@ -422,6 +545,7 @@ cfgmanager:
|
|||||||
@@:
|
@@:
|
||||||
; otherwise, set [preboot_device] to 1 (default value - boot from floppy)
|
; otherwise, set [preboot_device] to 1 (default value - boot from floppy)
|
||||||
mov byte [di], 1
|
mov byte [di], 1
|
||||||
|
end if
|
||||||
.preboot_device_inited:
|
.preboot_device_inited:
|
||||||
; following 4 lines set variables to 1 if its current value is 0
|
; following 4 lines set variables to 1 if its current value is 0
|
||||||
cmp byte [di+preboot_dma-preboot_device], 1
|
cmp byte [di+preboot_dma-preboot_device], 1
|
||||||
@ -466,7 +590,11 @@ cfgmanager:
|
|||||||
mov si, preboot_device_msg
|
mov si, preboot_device_msg
|
||||||
call print
|
call print
|
||||||
mov al, [preboot_device]
|
mov al, [preboot_device]
|
||||||
|
if defined extended_primary_loader
|
||||||
|
and eax, 3
|
||||||
|
else
|
||||||
and eax, 7
|
and eax, 7
|
||||||
|
end if
|
||||||
mov si, [preboot_device_msgs+eax*2]
|
mov si, [preboot_device_msgs+eax*2]
|
||||||
call printplain
|
call printplain
|
||||||
.show_remarks:
|
.show_remarks:
|
||||||
@ -553,12 +681,18 @@ cfgmanager:
|
|||||||
_setcursor 15,0
|
_setcursor 15,0
|
||||||
mov si, bdev
|
mov si, bdev
|
||||||
call print
|
call print
|
||||||
|
if defined extended_primary_loader
|
||||||
|
mov bx, '12'
|
||||||
|
else
|
||||||
mov bx, '14'
|
mov bx, '14'
|
||||||
|
end if
|
||||||
call getkey
|
call getkey
|
||||||
mov [preboot_device], al
|
mov [preboot_device], al
|
||||||
_setcursor 13,0
|
_setcursor 13,0
|
||||||
.d:
|
.d:
|
||||||
|
if ~ defined extended_primary_loader
|
||||||
mov [.bSettingsChanged], 1
|
mov [.bSettingsChanged], 1
|
||||||
|
end if
|
||||||
call clear_vmodes_table ;clear vmodes_table
|
call clear_vmodes_table ;clear vmodes_table
|
||||||
jmp .printcfg
|
jmp .printcfg
|
||||||
.change_a:
|
.change_a:
|
||||||
@ -672,10 +806,14 @@ cfgmanager:
|
|||||||
virtual at novesa
|
virtual at novesa
|
||||||
.oldtimer dd ?
|
.oldtimer dd ?
|
||||||
.starttime dd ?
|
.starttime dd ?
|
||||||
|
if ~ defined extended_primary_loader
|
||||||
.bSettingsChanged db ?
|
.bSettingsChanged db ?
|
||||||
|
end if
|
||||||
.timer dd ?
|
.timer dd ?
|
||||||
end virtual
|
end virtual
|
||||||
|
if ~ defined extended_primary_loader
|
||||||
.loader_block dd -1
|
.loader_block dd -1
|
||||||
|
end if
|
||||||
.gettime:
|
.gettime:
|
||||||
mov ah, 0
|
mov ah, 0
|
||||||
int 1Ah
|
int 1Ah
|
||||||
@ -692,7 +830,11 @@ end virtual
|
|||||||
pushad
|
pushad
|
||||||
call .gettime
|
call .gettime
|
||||||
sub eax, [.starttime]
|
sub eax, [.starttime]
|
||||||
|
if defined extended_primary_loader
|
||||||
|
sub ax, [preboot_timeout]
|
||||||
|
else
|
||||||
sub ax, 18*5
|
sub ax, 18*5
|
||||||
|
end if
|
||||||
jae .timergo
|
jae .timergo
|
||||||
neg ax
|
neg ax
|
||||||
add ax, 18-1
|
add ax, 18-1
|
||||||
@ -748,6 +890,7 @@ end if
|
|||||||
mov si, loading_msg
|
mov si, loading_msg
|
||||||
call print
|
call print
|
||||||
_setcursor 15,0
|
_setcursor 15,0
|
||||||
|
if ~ defined extended_primary_loader
|
||||||
cmp [.bSettingsChanged], 0
|
cmp [.bSettingsChanged], 0
|
||||||
jz .load
|
jz .load
|
||||||
cmp [.loader_block], -1
|
cmp [.loader_block], -1
|
||||||
@ -788,6 +931,7 @@ end if
|
|||||||
call printplain
|
call printplain
|
||||||
_setcursor 15,0
|
_setcursor 15,0
|
||||||
.load:
|
.load:
|
||||||
|
end if
|
||||||
; \end{diamond}[02.12.2005]
|
; \end{diamond}[02.12.2005]
|
||||||
|
|
||||||
; ASK GRAPHICS MODE
|
; ASK GRAPHICS MODE
|
||||||
@ -816,7 +960,7 @@ end if
|
|||||||
mov [boot_dev], al
|
mov [boot_dev], al
|
||||||
|
|
||||||
; GET MEMORY MAP
|
; GET MEMORY MAP
|
||||||
include 'detect/biosmem.inc'
|
include '../detect/biosmem.inc'
|
||||||
|
|
||||||
; READ DISKETTE TO MEMORY
|
; READ DISKETTE TO MEMORY
|
||||||
|
|
||||||
@ -967,6 +1111,7 @@ sayerr_floppy:
|
|||||||
mov dx, 0x3f2
|
mov dx, 0x3f2
|
||||||
mov al, 0
|
mov al, 0
|
||||||
out dx, al
|
out dx, al
|
||||||
|
sayerr_memmove:
|
||||||
mov si, memmovefailed
|
mov si, memmovefailed
|
||||||
jmp sayerr_plain
|
jmp sayerr_plain
|
||||||
@@:
|
@@:
|
||||||
@ -1145,6 +1290,40 @@ no_sys_on_floppy:
|
|||||||
mov al, 0
|
mov al, 0
|
||||||
out dx, al
|
out dx, al
|
||||||
|
|
||||||
|
if defined extended_primary_loader
|
||||||
|
cmp [boot_dev], 1
|
||||||
|
jne no_sys_from_primary
|
||||||
|
; load kolibri.img using callback from primary loader
|
||||||
|
and word [movedesc + 24 + 2], 0
|
||||||
|
mov byte [movedesc + 24 + 4], 10h
|
||||||
|
; read in blocks of 64K until file is fully loaded
|
||||||
|
mov ax, 1
|
||||||
|
.repeat:
|
||||||
|
mov di, image_file_struct
|
||||||
|
call [bootcallback]
|
||||||
|
push cs
|
||||||
|
pop ds
|
||||||
|
push cs
|
||||||
|
pop es
|
||||||
|
cmp bx, 1
|
||||||
|
ja sayerr_badsect
|
||||||
|
push bx
|
||||||
|
mov si, movedesc
|
||||||
|
and word [si + 16 + 2], 0
|
||||||
|
mov byte [si + 16 + 4], 4
|
||||||
|
mov ah, 87h
|
||||||
|
mov cx, 8000h
|
||||||
|
int 15h
|
||||||
|
pop bx
|
||||||
|
test ah, ah
|
||||||
|
jnz sayerr_memmove
|
||||||
|
inc byte [si + 24 + 4]
|
||||||
|
test bx, bx
|
||||||
|
jz no_sys_from_primary
|
||||||
|
mov ax, 2
|
||||||
|
jmp .repeat
|
||||||
|
no_sys_from_primary:
|
||||||
|
end if
|
||||||
|
|
||||||
; SET GRAPHICS
|
; SET GRAPHICS
|
||||||
|
|
||||||
|
@ -40,11 +40,15 @@ vrrmprint db "Apply VRR? (picture frequency greater than 60Hz"
|
|||||||
|
|
||||||
ask_bd db "Add disks visible by BIOS emulated in V86-mode? [1-yes, 2-no]: ",0
|
ask_bd db "Add disks visible by BIOS emulated in V86-mode? [1-yes, 2-no]: ",0
|
||||||
|
|
||||||
|
if defined extended_primary_loader
|
||||||
bdev db "Load ramdisk from [1-floppy; 2-C:\kolibri.img (FAT32);"
|
bdev db "Load ramdisk from [1-floppy; 2-C:\kolibri.img (FAT32);"
|
||||||
db 13,10,186," "
|
db 13,10,186," "
|
||||||
db "3-use preloaded ram-image from kernel restart;"
|
db "3-use preloaded ram-image from kernel restart;"
|
||||||
db 13,10,186," "
|
db 13,10,186," "
|
||||||
db "4-create blank image]: ",0
|
db "4-create blank image]: ",0
|
||||||
|
else
|
||||||
|
bdev db "Load ramdisk from [1-floppy; 2-kolibri.img]: ",0
|
||||||
|
end if
|
||||||
probetext db 13,10,13,10,186," Use standart graphics mode? [1-yes, "
|
probetext db 13,10,13,10,186," Use standart graphics mode? [1-yes, "
|
||||||
db "2-probe bios (Vesa 3.0)]: ",0
|
db "2-probe bios (Vesa 3.0)]: ",0
|
||||||
;memokz256 db 13,10,186," RAM 256 Mb",0
|
;memokz256 db 13,10,186," RAM 256 Mb",0
|
||||||
@ -88,14 +92,22 @@ off_msg db " off",13,10,0
|
|||||||
;readonly_msg db " only for reading",13,10,0
|
;readonly_msg db " only for reading",13,10,0
|
||||||
vrrm_msg db " [c] Use VRR:",0
|
vrrm_msg db " [c] Use VRR:",0
|
||||||
preboot_device_msg db " [d] Floppy image: ",0
|
preboot_device_msg db " [d] Floppy image: ",0
|
||||||
|
if defined extended_primary_loader
|
||||||
|
preboot_device_msgs dw 0,pdm1,pdm2,0
|
||||||
|
pdm1 db "real floppy",13,10,0
|
||||||
|
pdm2 db "C:\kolibri.img (FAT32)",13,10,0
|
||||||
|
else
|
||||||
preboot_device_msgs dw 0,pdm1,pdm2,pdm3
|
preboot_device_msgs dw 0,pdm1,pdm2,pdm3
|
||||||
pdm1 db "real floppy",13,10,0
|
pdm1 db "real floppy",13,10,0
|
||||||
pdm2 db "C:\kolibri.img (FAT32)",13,10,0
|
pdm2 db "C:\kolibri.img (FAT32)",13,10,0
|
||||||
pdm3 db "use already loaded image",13,10,0
|
pdm3 db "use already loaded image",13,10,0
|
||||||
pdm4 db "create blank image",13,10,0
|
pdm4 db "create blank image",13,10,0
|
||||||
|
end if
|
||||||
loading_msg db "Loading KolibriOS...",0
|
loading_msg db "Loading KolibriOS...",0
|
||||||
|
if ~ defined extended_primary_loader
|
||||||
save_quest db "Remember current settings? [y/n]: ",0
|
save_quest db "Remember current settings? [y/n]: ",0
|
||||||
loader_block_error db "Bootloader data invalid, I cannot continue. Stopped.",0
|
loader_block_error db "Bootloader data invalid, I cannot continue. Stopped.",0
|
||||||
|
end if
|
||||||
|
|
||||||
_st db 186,' ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄ¿',13,10,0
|
_st db 186,' ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄ¿',13,10,0
|
||||||
_r1 db 186,' ³ 320x200 EGA/CGA 256 colors ³ ³',13,10,0
|
_r1 db 186,' ³ 320x200 EGA/CGA 256 colors ³ ³',13,10,0
|
||||||
|
@ -50,11 +50,15 @@ ask_bd db "Add disks visible by BIOS emulated in V86-mode? [1-yes, 2-no
|
|||||||
;mem_model db 13,10,186," Motherboard memory [1-16 Mb / 2-32 Mb / "
|
;mem_model db 13,10,186," Motherboard memory [1-16 Mb / 2-32 Mb / "
|
||||||
; db "3-64Mb / 4-128 Mb / 5-256 Mb] ? ",0
|
; db "3-64Mb / 4-128 Mb / 5-256 Mb] ? ",0
|
||||||
;bootlog db 13,10,186," After bootlog display [1-continue/2-pause] ? ",0
|
;bootlog db 13,10,186," After bootlog display [1-continue/2-pause] ? ",0
|
||||||
|
if defined extended_primary_loader
|
||||||
|
bdev db "Paigalda mäluketas [1-diskett; 2-kolibri.img]: ",0
|
||||||
|
else
|
||||||
bdev db "Paigalda mäluketas [1-diskett; 2-C:\kolibri.img (FAT32);"
|
bdev db "Paigalda mäluketas [1-diskett; 2-C:\kolibri.img (FAT32);"
|
||||||
db 13,10,186," "
|
db 13,10,186," "
|
||||||
db "3-kasuta eellaaditud mäluketast kerneli restardist;"
|
db "3-kasuta eellaaditud mäluketast kerneli restardist;"
|
||||||
db 13,10,186," "
|
db 13,10,186," "
|
||||||
db "4-loo tühi pilt]: ",0
|
db "4-loo tühi pilt]: ",0
|
||||||
|
end if
|
||||||
probetext db 13,10,13,10,186," Kasuta standartset graafika reziimi? [1-jah, "
|
probetext db 13,10,13,10,186," Kasuta standartset graafika reziimi? [1-jah, "
|
||||||
db "2-leia biosist (Vesa 3.0)]: ",0
|
db "2-leia biosist (Vesa 3.0)]: ",0
|
||||||
;memokz256 db 13,10,186," RAM 256 Mb",0
|
;memokz256 db 13,10,186," RAM 256 Mb",0
|
||||||
@ -99,14 +103,22 @@ off_msg db " v
|
|||||||
;readonly_msg db " ainult lugemiseks",13,10,0
|
;readonly_msg db " ainult lugemiseks",13,10,0
|
||||||
vrrm_msg db " [c] Kasuta VRR:",0
|
vrrm_msg db " [c] Kasuta VRR:",0
|
||||||
preboot_device_msg db " [d] Disketi kujutis: ",0
|
preboot_device_msg db " [d] Disketi kujutis: ",0
|
||||||
|
if defined extended_primary_loader
|
||||||
|
preboot_device_msgs dw 0,pdm1,pdm2,0
|
||||||
|
pdm1 db "reaalne diskett",13,10,0
|
||||||
|
pdm2 db "kolibri.img",13,10,0
|
||||||
|
else
|
||||||
preboot_device_msgs dw 0,pdm1,pdm2,pdm3
|
preboot_device_msgs dw 0,pdm1,pdm2,pdm3
|
||||||
pdm1 db "reaalne diskett",13,10,0
|
pdm1 db "reaalne diskett",13,10,0
|
||||||
pdm2 db "C:\kolibri.img (FAT32)",13,10,0
|
pdm2 db "C:\kolibri.img (FAT32)",13,10,0
|
||||||
pdm3 db "kasuta juba laaditud kujutist",13,10,0
|
pdm3 db "kasuta juba laaditud kujutist",13,10,0
|
||||||
pdm4 db "loo tühi pilt",13,10,0
|
pdm4 db "loo tühi pilt",13,10,0
|
||||||
|
end if
|
||||||
loading_msg db "Laadin KolibriOS...",0
|
loading_msg db "Laadin KolibriOS...",0
|
||||||
|
if ~ defined extended_primary_loader
|
||||||
save_quest db "Jäta meelde praegused seaded? [y/n]: ",0
|
save_quest db "Jäta meelde praegused seaded? [y/n]: ",0
|
||||||
loader_block_error db "Alglaaduri andmed vigased, ei saa jätkata. Peatatud.",0
|
loader_block_error db "Alglaaduri andmed vigased, ei saa jätkata. Peatatud.",0
|
||||||
|
end if
|
||||||
|
|
||||||
remark1 db "Default values were selected to match most of configurations, but not all.",0
|
remark1 db "Default values were selected to match most of configurations, but not all.",0
|
||||||
remark2 db "If you have CRT-monitor, enable VRR in the item [c].",0
|
remark2 db "If you have CRT-monitor, enable VRR in the item [c].",0
|
||||||
|
@ -55,11 +55,15 @@ ask_bd db "Add disks visible by BIOS emulated in V86-mode? [1-yes, 2-no
|
|||||||
;mem_model db 13,10,186," Hauptspeicher [1-16 Mb / 2-32 Mb / "
|
;mem_model db 13,10,186," Hauptspeicher [1-16 Mb / 2-32 Mb / "
|
||||||
; db "3-64Mb / 4-128 Mb / 5-256 Mb] ? ",0
|
; db "3-64Mb / 4-128 Mb / 5-256 Mb] ? ",0
|
||||||
;bootlog db 13,10,186," After bootlog display [1-continue/2-pause] ? ",0
|
;bootlog db 13,10,186," After bootlog display [1-continue/2-pause] ? ",0
|
||||||
|
if defined extended_primary_loader
|
||||||
|
bdev db "Lade die Ramdisk von [1-Diskette; 2-kolibri.img]: ",0
|
||||||
|
else
|
||||||
bdev db "Lade die Ramdisk von [1-Diskette; 2-C:\kolibri.img (FAT32);"
|
bdev db "Lade die Ramdisk von [1-Diskette; 2-C:\kolibri.img (FAT32);"
|
||||||
db 13,10,186," "
|
db 13,10,186," "
|
||||||
db "3-benutze ein bereits geladenes Kernel image;"
|
db "3-benutze ein bereits geladenes Kernel image;"
|
||||||
db 13,10,186," "
|
db 13,10,186," "
|
||||||
db "4-create blank image]: ",0
|
db "4-create blank image]: ",0
|
||||||
|
end if
|
||||||
probetext db 13,10,13,10,186," Nutze Standardgrafikmodi? [1-ja, "
|
probetext db 13,10,13,10,186," Nutze Standardgrafikmodi? [1-ja, "
|
||||||
db "2-BIOS Test (Vesa 3.0)]: ",0
|
db "2-BIOS Test (Vesa 3.0)]: ",0
|
||||||
;memokz256 db 13,10,186," RAM 256 Mb",0
|
;memokz256 db 13,10,186," RAM 256 Mb",0
|
||||||
@ -104,14 +108,22 @@ off_msg db " aus",13,10,0
|
|||||||
;readonly_msg db " fur Lesen",13,10,0
|
;readonly_msg db " fur Lesen",13,10,0
|
||||||
vrrm_msg db " [c] Nutze VRR:",0
|
vrrm_msg db " [c] Nutze VRR:",0
|
||||||
preboot_device_msg db " [d] Diskettenimage: ",0
|
preboot_device_msg db " [d] Diskettenimage: ",0
|
||||||
|
if defined extended_primary_loader
|
||||||
|
preboot_device_msgs dw 0,pdm1,pdm2,0
|
||||||
|
pdm1 db "Echte Diskette",13,10,0
|
||||||
|
pdm2 db "kolibri.img",13,10,0
|
||||||
|
else
|
||||||
preboot_device_msgs dw 0,pdm1,pdm2,pdm3
|
preboot_device_msgs dw 0,pdm1,pdm2,pdm3
|
||||||
pdm1 db "Echte Diskette",13,10,0
|
pdm1 db "Echte Diskette",13,10,0
|
||||||
pdm2 db "C:\kolibri.img (FAT32)",13,10,0
|
pdm2 db "C:\kolibri.img (FAT32)",13,10,0
|
||||||
pdm3 db "Nutze bereits geladenes Image",13,10,0
|
pdm3 db "Nutze bereits geladenes Image",13,10,0
|
||||||
pdm4 db "create blank image",13,10,0
|
pdm4 db "create blank image",13,10,0
|
||||||
|
end if
|
||||||
loading_msg db "Lade KolibriOS...",0
|
loading_msg db "Lade KolibriOS...",0
|
||||||
|
if ~ defined extended_primary_loader
|
||||||
save_quest db "Aktuelle Einstellungen speichern? [y/n]: ",0
|
save_quest db "Aktuelle Einstellungen speichern? [y/n]: ",0
|
||||||
loader_block_error db "Bootloader Daten ungueltig, Kann nicht fortfahren. Angehalten.",0
|
loader_block_error db "Bootloader Daten ungueltig, Kann nicht fortfahren. Angehalten.",0
|
||||||
|
end if
|
||||||
|
|
||||||
remark1 db "Default values were selected to match most of configurations, but not all.",0
|
remark1 db "Default values were selected to match most of configurations, but not all.",0
|
||||||
remark2 db "If you have CRT-monitor, enable VRR in the item [c].",0
|
remark2 db "If you have CRT-monitor, enable VRR in the item [c].",0
|
||||||
|
@ -33,11 +33,15 @@ vrrmprint db "
|
|||||||
db 186," 1024*768>800*600 ¨ 800*600>640*480) [1-¤ , 2-¥â]: ",0
|
db 186," 1024*768>800*600 ¨ 800*600>640*480) [1-¤ , 2-¥â]: ",0
|
||||||
;ask_dma db "ˆá¯®«ì§®¢ âì DMA ¤«ï ¤®áâ㯠ª HDD? [1-¤ , 2-⮫쪮 ç⥨¥, 3-¥â]: ",0
|
;ask_dma db "ˆá¯®«ì§®¢ âì DMA ¤«ï ¤®áâ㯠ª HDD? [1-¤ , 2-⮫쪮 ç⥨¥, 3-¥â]: ",0
|
||||||
ask_bd db "„®¡ ¢¨âì ¤¨áª¨, ¢¨¤¨¬ë¥ ç¥à¥§ BIOS ¢ ०¨¬¥ V86? [1-¤ , 2-¥â]: ",0
|
ask_bd db "„®¡ ¢¨âì ¤¨áª¨, ¢¨¤¨¬ë¥ ç¥à¥§ BIOS ¢ ०¨¬¥ V86? [1-¤ , 2-¥â]: ",0
|
||||||
|
if defined extended_primary_loader
|
||||||
|
bdev db "‡ £à㧨âì ®¡à § ¨§ [1-¤¨áª¥â ; 2-kolibri.img ¨§ ¯ ¯ª¨ § £à㧪¨]: ",0
|
||||||
|
else
|
||||||
bdev db "‡ £à㧨âì ®¡à § ¨§ [1-¤¨áª¥â ; 2-C:\kolibri.img (FAT32);"
|
bdev db "‡ £à㧨âì ®¡à § ¨§ [1-¤¨áª¥â ; 2-C:\kolibri.img (FAT32);"
|
||||||
db 13,10,186," "
|
db 13,10,186," "
|
||||||
db "3-¨á¯®«ì§®¢ âì 㦥 § £àã¦¥ë© ®¡à §;"
|
db "3-¨á¯®«ì§®¢ âì 㦥 § £àã¦¥ë© ®¡à §;"
|
||||||
db 13,10,186," "
|
db 13,10,186," "
|
||||||
db "4-ᮧ¤ âì ç¨áâë© ®¡à §]: ",0
|
db "4-ᮧ¤ âì ç¨áâë© ®¡à §]: ",0
|
||||||
|
end if
|
||||||
prnotfnd db "Žè¨¡ª - ‚¨¤¥®à¥¦¨¬ ¥ ©¤¥.",0
|
prnotfnd db "Žè¨¡ª - ‚¨¤¥®à¥¦¨¬ ¥ ©¤¥.",0
|
||||||
not386 db "Žè¨¡ª - ’ॡã¥âáï ¯à®æ¥áá®à 386+.",0
|
not386 db "Žè¨¡ª - ’ॡã¥âáï ¯à®æ¥áá®à 386+.",0
|
||||||
fatalsel db "Žè¨¡ª - ‚ë¡à ë© ¢¨¤¥®à¥¦¨¬ ¥ ¯®¤¤¥à¦¨¢ ¥âáï.",0
|
fatalsel db "Žè¨¡ª - ‚ë¡à ë© ¢¨¤¥®à¥¦¨¬ ¥ ¯®¤¤¥à¦¨¢ ¥âáï.",0
|
||||||
@ -67,14 +71,22 @@ off_msg db "
|
|||||||
readonly_msg db " ⮫쪮 ç⥨¥",13,10,0
|
readonly_msg db " ⮫쪮 ç⥨¥",13,10,0
|
||||||
vrrm_msg db " [c] ˆá¯®«ì§®¢ ¨¥ VRR:",0
|
vrrm_msg db " [c] ˆá¯®«ì§®¢ ¨¥ VRR:",0
|
||||||
preboot_device_msg db " [d] Ž¡à § ¤¨áª¥âë: ",0
|
preboot_device_msg db " [d] Ž¡à § ¤¨áª¥âë: ",0
|
||||||
|
if defined extended_primary_loader
|
||||||
|
preboot_device_msgs dw 0,pdm1,pdm2,0
|
||||||
|
pdm1 db " áâ®ïé ï ¤¨áª¥â ",13,10,0
|
||||||
|
pdm2 db "kolibri.img ¨§ ¯ ¯ª¨ § £à㧪¨",13,10,0
|
||||||
|
else
|
||||||
preboot_device_msgs dw 0,pdm1,pdm2,pdm3,pdm4
|
preboot_device_msgs dw 0,pdm1,pdm2,pdm3,pdm4
|
||||||
pdm1 db " áâ®ïé ï ¤¨áª¥â ",13,10,0
|
pdm1 db " áâ®ïé ï ¤¨áª¥â ",13,10,0
|
||||||
pdm2 db "C:\kolibri.img (FAT32)",13,10,0
|
pdm2 db "C:\kolibri.img (FAT32)",13,10,0
|
||||||
pdm3 db "¨á¯®«ì§®¢ âì 㦥 § £àã¦¥ë© ®¡à §",13,10,0
|
pdm3 db "¨á¯®«ì§®¢ âì 㦥 § £àã¦¥ë© ®¡à §",13,10,0
|
||||||
pdm4 db "ᮧ¤ âì ç¨áâë© ®¡à §",13,10,0
|
pdm4 db "ᮧ¤ âì ç¨áâë© ®¡à §",13,10,0
|
||||||
|
end if
|
||||||
loading_msg db "ˆ¤ñâ § £à㧪 KolibriOS...",0
|
loading_msg db "ˆ¤ñâ § £à㧪 KolibriOS...",0
|
||||||
|
if ~ defined extended_primary_loader ; saving not supported in this case
|
||||||
save_quest db "‡ ¯®¬¨âì ⥪ã騥 áâனª¨? [y/n]: ",0
|
save_quest db "‡ ¯®¬¨âì ⥪ã騥 áâனª¨? [y/n]: ",0
|
||||||
loader_block_error db "Žè¨¡ª ¢ ¤ ëå ç «ì®£® § £àã§ç¨ª , ¯à®¤®«¦¥¨¥ ¥¢®§¬®¦®.",0
|
loader_block_error db "Žè¨¡ª ¢ ¤ ëå ç «ì®£® § £àã§ç¨ª , ¯à®¤®«¦¥¨¥ ¥¢®§¬®¦®.",0
|
||||||
|
end if
|
||||||
|
|
||||||
|
|
||||||
_st db 186,' ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄ¿ ',13,10,0
|
_st db 186,' ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄ¿ ',13,10,0
|
||||||
|
@ -314,7 +314,11 @@ draw_current_vmode:
|
|||||||
cmp word [es:si+6],0x13
|
cmp word [es:si+6],0x13
|
||||||
je .no_vesa_0x13
|
je .no_vesa_0x13
|
||||||
|
|
||||||
|
if defined extended_primary_loader
|
||||||
|
mov di,config_file_variables
|
||||||
|
else
|
||||||
mov di,loader_block_error
|
mov di,loader_block_error
|
||||||
|
end if
|
||||||
movzx eax,word[es:si+0]
|
movzx eax,word[es:si+0]
|
||||||
mov ecx,10
|
mov ecx,10
|
||||||
call int2strnz
|
call int2strnz
|
||||||
@ -327,7 +331,11 @@ draw_current_vmode:
|
|||||||
movzx eax,word[es:si+8]
|
movzx eax,word[es:si+8]
|
||||||
call int2strnz
|
call int2strnz
|
||||||
mov dword[es:di],0x00000d0a
|
mov dword[es:di],0x00000d0a
|
||||||
|
if defined extended_primary_loader
|
||||||
|
mov si,config_file_variables
|
||||||
|
else
|
||||||
mov si,loader_block_error
|
mov si,loader_block_error
|
||||||
|
end if
|
||||||
push ds
|
push ds
|
||||||
push es
|
push es
|
||||||
pop ds
|
pop ds
|
||||||
@ -344,9 +352,34 @@ draw_current_vmode:
|
|||||||
ret
|
ret
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
check_first_parm:
|
check_first_parm:
|
||||||
|
if defined extended_primary_loader
|
||||||
|
mov cx, [number_vm]
|
||||||
|
jcxz .novbemode
|
||||||
|
mov si, modes_table
|
||||||
|
.findvbemode:
|
||||||
|
cmp [es:si+6], cx
|
||||||
|
jnz @f
|
||||||
|
cmp word [es:si+8],32
|
||||||
|
je .ok_found_mode
|
||||||
|
cmp word [es:si+8],24
|
||||||
|
je .ok_found_mode
|
||||||
|
@@: add si,size_of_step
|
||||||
|
cmp word [es:si],-1
|
||||||
|
jnz .findvbemode
|
||||||
|
.novbemode:
|
||||||
|
mov ax, [x_save]
|
||||||
|
test ax, ax
|
||||||
|
jz .zerro
|
||||||
|
mov bx, [y_save]
|
||||||
|
mov si, modes_table
|
||||||
|
call .loops
|
||||||
|
test ax, ax
|
||||||
|
jz .ok_found_mode
|
||||||
|
else
|
||||||
mov si,word [preboot_graph]
|
mov si,word [preboot_graph]
|
||||||
test si,si
|
test si,si
|
||||||
jnz .no_zero ;if no zero
|
jnz .no_zero ;if no zero
|
||||||
|
end if
|
||||||
.zerro:
|
.zerro:
|
||||||
; mov ax,modes_table
|
; mov ax,modes_table
|
||||||
; mov word [cursor_pos],ax
|
; mov word [cursor_pos],ax
|
||||||
@ -374,6 +407,7 @@ check_first_parm:
|
|||||||
jz .ok_found_mode
|
jz .ok_found_mode
|
||||||
|
|
||||||
mov si,modes_table
|
mov si,modes_table
|
||||||
|
if ~ defined extended_primary_loader
|
||||||
jmp .ok_found_mode
|
jmp .ok_found_mode
|
||||||
|
|
||||||
|
|
||||||
@ -394,6 +428,7 @@ check_first_parm:
|
|||||||
; jb .zerro ;check on correct if bellow
|
; jb .zerro ;check on correct if bellow
|
||||||
; cmp ax,word [end_cursor]
|
; cmp ax,word [end_cursor]
|
||||||
; ja .zerro ;check on correct if anymore
|
; ja .zerro ;check on correct if anymore
|
||||||
|
end if
|
||||||
|
|
||||||
.ok_found_mode:
|
.ok_found_mode:
|
||||||
mov word [home_cursor],si
|
mov word [home_cursor],si
|
||||||
|
170
kernel/branches/Kolibri-acpi/boot/parsers.inc
Normal file
170
kernel/branches/Kolibri-acpi/boot/parsers.inc
Normal file
@ -0,0 +1,170 @@
|
|||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; ;;
|
||||||
|
;; Copyright (C) KolibriOS team 2011. All rights reserved. ;;
|
||||||
|
;; Distributed under terms of the GNU General Public License ;;
|
||||||
|
;; ;;
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
$Revision: 1962 $
|
||||||
|
|
||||||
|
; All parsers are called with ds:si -> value of the variable,
|
||||||
|
; possibly with spaces before, and dx = limit of config file.
|
||||||
|
|
||||||
|
; Three subroutines parse_char, parse_number and parse_bool set CF
|
||||||
|
; if something has failed, otherwise return the value in al/ax.
|
||||||
|
|
||||||
|
parse_timeout:
|
||||||
|
; timeout is a number not greater than 9
|
||||||
|
call parse_number
|
||||||
|
jc .nothing
|
||||||
|
cmp ax, 9
|
||||||
|
jbe @f
|
||||||
|
mov ax, 9
|
||||||
|
@@:
|
||||||
|
imul ax, 18
|
||||||
|
mov [es:preboot_timeout], ax
|
||||||
|
.nothing:
|
||||||
|
ret
|
||||||
|
|
||||||
|
parse_resolution:
|
||||||
|
; resolution is <width>*<height>, 'x' can be used instead of '*'
|
||||||
|
; parse width
|
||||||
|
call parse_number
|
||||||
|
jc .nothing
|
||||||
|
; save width
|
||||||
|
xchg ax, bx
|
||||||
|
; test for 'x' or '*'
|
||||||
|
call parse_char
|
||||||
|
cmp al, 'x'
|
||||||
|
jz @f
|
||||||
|
cmp al, '*'
|
||||||
|
jnz .nothing
|
||||||
|
@@:
|
||||||
|
; parse height
|
||||||
|
call parse_number
|
||||||
|
jc .nothing
|
||||||
|
; write width and height
|
||||||
|
mov [es:x_save], bx
|
||||||
|
mov [es:y_save], ax
|
||||||
|
.nothing:
|
||||||
|
ret
|
||||||
|
|
||||||
|
parse_vbemode:
|
||||||
|
; vbemode is a number
|
||||||
|
call parse_number
|
||||||
|
jc .nothing
|
||||||
|
mov [es:number_vm], ax
|
||||||
|
.nothing:
|
||||||
|
ret
|
||||||
|
|
||||||
|
parse_vrr:
|
||||||
|
; vrr is a boolean setting
|
||||||
|
call parse_bool
|
||||||
|
jc .nothing
|
||||||
|
; convert 0 to 2, 1 to 1
|
||||||
|
inc ax
|
||||||
|
xor al, 3
|
||||||
|
mov [es:preboot_vrrm], al
|
||||||
|
.nothing:
|
||||||
|
ret
|
||||||
|
|
||||||
|
parse_biosdisks:
|
||||||
|
; using biosdisks is a boolean setting
|
||||||
|
call parse_bool
|
||||||
|
jc .nothing
|
||||||
|
; convert 0 to 2, 1 to 1
|
||||||
|
inc ax
|
||||||
|
xor al, 3
|
||||||
|
mov [es:preboot_biosdisk], al
|
||||||
|
.nothing:
|
||||||
|
ret
|
||||||
|
|
||||||
|
parse_imgfrom:
|
||||||
|
; boot device (1-floppy 2-kolibri.img using primary loader)
|
||||||
|
call parse_number
|
||||||
|
jc .nothing
|
||||||
|
cmp al, 1
|
||||||
|
jb .nothing
|
||||||
|
cmp al, 2
|
||||||
|
ja .nothing
|
||||||
|
mov [es:preboot_device], al
|
||||||
|
.nothing:
|
||||||
|
ret
|
||||||
|
|
||||||
|
parse_char:
|
||||||
|
; skip spaces and return the next character or CF if EOF.
|
||||||
|
cmp si, dx
|
||||||
|
jae .eof
|
||||||
|
lodsb
|
||||||
|
cmp al, ' '
|
||||||
|
jbe parse_char
|
||||||
|
ret
|
||||||
|
.eof:
|
||||||
|
stc
|
||||||
|
ret
|
||||||
|
|
||||||
|
parse_number:
|
||||||
|
; initialize high part of ax to zero
|
||||||
|
xor ax, ax
|
||||||
|
; skip spaces
|
||||||
|
call parse_char
|
||||||
|
jc .bad
|
||||||
|
; al should be a digit
|
||||||
|
sub al, '0'
|
||||||
|
cmp al, 9
|
||||||
|
ja .bad
|
||||||
|
; accumulate the value in cx
|
||||||
|
xchg cx, ax
|
||||||
|
@@:
|
||||||
|
cmp si, dx
|
||||||
|
jae .eof
|
||||||
|
lodsb
|
||||||
|
sub al, '0'
|
||||||
|
cmp al, 9
|
||||||
|
ja .end
|
||||||
|
imul cx, 10
|
||||||
|
add cx, ax
|
||||||
|
jmp @b
|
||||||
|
; if the end is caused by non-digit, unwind the last character
|
||||||
|
.end:
|
||||||
|
dec si
|
||||||
|
.eof:
|
||||||
|
xchg cx, ax
|
||||||
|
clc
|
||||||
|
ret
|
||||||
|
.bad:
|
||||||
|
stc
|
||||||
|
ret
|
||||||
|
|
||||||
|
parse_bool:
|
||||||
|
; skip spaces
|
||||||
|
call parse_char
|
||||||
|
jc .bad
|
||||||
|
; Boolean false can be represented as 0=no=off,
|
||||||
|
; boolean true can be represented as 1=yes=on.
|
||||||
|
cmp al, '0'
|
||||||
|
jz .false
|
||||||
|
cmp al, '1'
|
||||||
|
jz .true
|
||||||
|
mov ah, al
|
||||||
|
cmp si, dx
|
||||||
|
jae .bad
|
||||||
|
lodsb
|
||||||
|
cmp ax, 'n'*256 + 'o'
|
||||||
|
jz .false
|
||||||
|
cmp ax, 'o'*256 + 'f'
|
||||||
|
jz .false
|
||||||
|
cmp ax, 'y'*256 + 'e'
|
||||||
|
jz .true
|
||||||
|
cmp ax, 'o'*256 + 'n'
|
||||||
|
jz .true
|
||||||
|
.bad:
|
||||||
|
stc
|
||||||
|
ret
|
||||||
|
.true:
|
||||||
|
xor ax, ax
|
||||||
|
inc ax
|
||||||
|
ret
|
||||||
|
.false:
|
||||||
|
xor ax, ax
|
||||||
|
ret
|
@ -30,6 +30,9 @@ preboot_device db 0 ; boot device
|
|||||||
;!!!! 0 - autodetect !!!!
|
;!!!! 0 - autodetect !!!!
|
||||||
preboot_blogesc = 0 ; start immediately after bootlog
|
preboot_blogesc = 0 ; start immediately after bootlog
|
||||||
preboot_biosdisk db 0 ; use V86 to access disks through BIOS (1-yes, 2-no)
|
preboot_biosdisk db 0 ; use V86 to access disks through BIOS (1-yes, 2-no)
|
||||||
|
if defined extended_primary_loader
|
||||||
|
preboot_timeout dw 5*18 ; timeout in 1/18th of second for config settings screen
|
||||||
|
end if
|
||||||
|
|
||||||
if $>0x200
|
if $>0x200
|
||||||
ERROR: prebooting parameters must fit in first sector!!!
|
ERROR: prebooting parameters must fit in first sector!!!
|
||||||
|
@ -98,8 +98,10 @@ nbw32:
|
|||||||
jmp $
|
jmp $
|
||||||
no_apm_off:
|
no_apm_off:
|
||||||
|
|
||||||
|
if ~ defined extended_primary_loader ; kernel restarting is not supported
|
||||||
dec ax ; 3 = reboot
|
dec ax ; 3 = reboot
|
||||||
jnz restart_kernel ; 4 = restart kernel
|
jnz restart_kernel ; 4 = restart kernel
|
||||||
|
end if
|
||||||
push 0x40
|
push 0x40
|
||||||
pop ds
|
pop ds
|
||||||
mov word[0x0072],0x1234
|
mov word[0x0072],0x1234
|
||||||
@ -150,6 +152,7 @@ APM_PowerOff:
|
|||||||
;!!!!!!!!!!!!!!!!!!!!!!!!
|
;!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
if ~ defined extended_primary_loader
|
||||||
restart_kernel:
|
restart_kernel:
|
||||||
|
|
||||||
mov ax,0x0003 ; set text mode for screen
|
mov ax,0x0003 ; set text mode for screen
|
||||||
@ -205,5 +208,5 @@ restart_kernel_4000:
|
|||||||
mov si, kernel_restart_bootblock
|
mov si, kernel_restart_bootblock
|
||||||
mov ax, 'KL'
|
mov ax, 'KL'
|
||||||
jmp 0x1000:0000
|
jmp 0x1000:0000
|
||||||
|
end if
|
||||||
|
|
||||||
|
@ -194,17 +194,17 @@ obtain_cluster:
|
|||||||
mov ax,0e2eh ; ah=0eh (teletype), al='.'
|
mov ax,0e2eh ; ah=0eh (teletype), al='.'
|
||||||
xor bh,bh
|
xor bh,bh
|
||||||
int 10h
|
int 10h
|
||||||
|
|
||||||
; convert cluster number to sector number
|
|
||||||
mov ax,bp ; data cluster to read
|
|
||||||
sub ax,2
|
|
||||||
xor bx,bx
|
|
||||||
mov bl,byte [BPB_SecPerClus+boot_program]
|
|
||||||
mul bx
|
|
||||||
add ax,word [data_start+boot_program]
|
|
||||||
pop bx
|
pop bx
|
||||||
|
|
||||||
writesec:
|
writesec:
|
||||||
|
; convert cluster number to sector number
|
||||||
|
mov ax,bp ; data cluster to read
|
||||||
|
sub ax,2
|
||||||
|
xor dx,dx
|
||||||
|
mov dl,byte [BPB_SecPerClus+boot_program]
|
||||||
|
mul dx
|
||||||
|
add ax,word [data_start+boot_program]
|
||||||
|
|
||||||
call conv_abs_to_THS ; convert abs sector (AX) to BIOS T:H:S (track:head:sector)
|
call conv_abs_to_THS ; convert abs sector (AX) to BIOS T:H:S (track:head:sector)
|
||||||
patchhere:
|
patchhere:
|
||||||
mov ah,2 ; ah=2 (read)
|
mov ah,2 ; ah=2 (read)
|
||||||
@ -267,7 +267,7 @@ write1st:
|
|||||||
push cs
|
push cs
|
||||||
pop ds
|
pop ds
|
||||||
mov byte [patchhere+1+boot_program], 3 ; change ah=2 to ah=3
|
mov byte [patchhere+1+boot_program], 3 ; change ah=2 to ah=3
|
||||||
mov ax,[cluster1st+boot_program]
|
mov bp,[cluster1st+boot_program]
|
||||||
push 1000h
|
push 1000h
|
||||||
pop es
|
pop es
|
||||||
xor bx,bx
|
xor bx,bx
|
||||||
|
@ -569,9 +569,9 @@ sys_pcibios:
|
|||||||
cmp ebp, 1 ; PCI_FUNCTION_ID
|
cmp ebp, 1 ; PCI_FUNCTION_ID
|
||||||
jnz .not_PCI_BIOS_PRESENT
|
jnz .not_PCI_BIOS_PRESENT
|
||||||
mov edx, 'PCI '
|
mov edx, 'PCI '
|
||||||
mov al, [OS_BASE+0x2F0000 + 0x9020]
|
mov al, [BOOT_VAR + 0x9020]
|
||||||
mov bx, [OS_BASE+0x2F0000 + 0x9022]
|
mov bx, [BOOT_VAR + 0x9022]
|
||||||
mov cl, [OS_BASE+0x2F0000 + 0x9021]
|
mov cl, [BOOT_VAR + 0x9021]
|
||||||
xor ah, ah
|
xor ah, ah
|
||||||
jmp .return_abcd
|
jmp .return_abcd
|
||||||
|
|
||||||
|
@ -203,6 +203,9 @@ WIN_STACK equ (OS_BASE+0x000C000)
|
|||||||
WIN_POS equ (OS_BASE+0x000C400)
|
WIN_POS equ (OS_BASE+0x000C400)
|
||||||
FDD_BUFF equ (OS_BASE+0x000D000)
|
FDD_BUFF equ (OS_BASE+0x000D000)
|
||||||
|
|
||||||
|
;unused ? only one reference
|
||||||
|
ENABLE_TASKSWITCH equ (OS_BASE+0x000E000)
|
||||||
|
|
||||||
PUTPIXEL equ (OS_BASE+0x000E020)
|
PUTPIXEL equ (OS_BASE+0x000E020)
|
||||||
GETPIXEL equ (OS_BASE+0x000E024)
|
GETPIXEL equ (OS_BASE+0x000E024)
|
||||||
|
|
||||||
@ -283,6 +286,7 @@ RAMDISK equ (OS_BASE+0x0100000)
|
|||||||
RAMDISK_FAT equ (OS_BASE+0x0280000)
|
RAMDISK_FAT equ (OS_BASE+0x0280000)
|
||||||
FLOPPY_FAT equ (OS_BASE+0x0282000)
|
FLOPPY_FAT equ (OS_BASE+0x0282000)
|
||||||
|
|
||||||
|
CLEAN_ZONE equ 0x284000
|
||||||
IDE_DMA equ 0x284000
|
IDE_DMA equ 0x284000
|
||||||
|
|
||||||
BgrAuxTable equ (OS_BASE+0x0298000)
|
BgrAuxTable equ (OS_BASE+0x0298000)
|
||||||
@ -308,7 +312,9 @@ BgrDrawMode equ (OS_BASE+0x033BFF4)
|
|||||||
BgrDataWidth equ (OS_BASE+0x033BFF8)
|
BgrDataWidth equ (OS_BASE+0x033BFF8)
|
||||||
BgrDataHeight equ (OS_BASE+0x033BFFC)
|
BgrDataHeight equ (OS_BASE+0x033BFFC)
|
||||||
|
|
||||||
sys_pgmap equ (OS_BASE+0x033C000)
|
BOOT_VAR equ (OS_BASE+0x0340000)
|
||||||
|
|
||||||
|
sys_pgmap equ (OS_BASE+0x0350000)
|
||||||
|
|
||||||
UPPER_KERNEL_PAGES equ (OS_BASE+0x0400000)
|
UPPER_KERNEL_PAGES equ (OS_BASE+0x0400000)
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
IRQ_RESERVE = 24 ; 16 or 24
|
IRQ_RESERVE = 24 ; 16 or 24
|
||||||
|
|
||||||
iglobal
|
iglobal
|
||||||
IRQ_COUNT dd 16
|
IRQ_COUNT dd 24
|
||||||
endg
|
endg
|
||||||
|
|
||||||
uglobal
|
uglobal
|
||||||
@ -45,8 +45,8 @@ IOAPIC_REDTBL equ 0x10
|
|||||||
APIC_init:
|
APIC_init:
|
||||||
mov dword[APIC], 0
|
mov dword[APIC], 0
|
||||||
; jmp .no_apic ; NO APIC
|
; jmp .no_apic ; NO APIC
|
||||||
bt [cpu_caps], CAPS_APIC
|
; bt [cpu_caps], CAPS_APIC
|
||||||
jnc .no_apic
|
; jnc .no_apic
|
||||||
; Check for MP table
|
; Check for MP table
|
||||||
;.....
|
;.....
|
||||||
|
|
||||||
@ -96,6 +96,12 @@ APIC_init:
|
|||||||
call LAPIC_init
|
call LAPIC_init
|
||||||
|
|
||||||
mov dword[APIC], 0xffffffff
|
mov dword[APIC], 0xffffffff
|
||||||
|
|
||||||
|
mov al, 0x70
|
||||||
|
out 0x22, al
|
||||||
|
mov al, 1
|
||||||
|
out 0x23, al
|
||||||
|
|
||||||
; mov dword[irq_type_to_set], IRQ_TYPE_APIC
|
; mov dword[irq_type_to_set], IRQ_TYPE_APIC
|
||||||
.no_apic:
|
.no_apic:
|
||||||
ret
|
ret
|
||||||
|
@ -17,6 +17,9 @@ PID_KERNEL equ 1 ;os_idle thread
|
|||||||
align 4
|
align 4
|
||||||
proc attach_int_handler stdcall, irq:dword, handler:dword, access_rights:dword
|
proc attach_int_handler stdcall, irq:dword, handler:dword, access_rights:dword
|
||||||
|
|
||||||
|
pushfd
|
||||||
|
cli
|
||||||
|
|
||||||
push ebx
|
push ebx
|
||||||
|
|
||||||
mov ebx, [irq] ;irq num
|
mov ebx, [irq] ;irq num
|
||||||
@ -46,10 +49,12 @@ proc attach_int_handler stdcall, irq:dword, handler:dword, access_rights:dword
|
|||||||
stdcall enable_irq, [irq]
|
stdcall enable_irq, [irq]
|
||||||
pop ebx
|
pop ebx
|
||||||
mov eax, 1
|
mov eax, 1
|
||||||
|
popfd
|
||||||
ret
|
ret
|
||||||
.err:
|
.err:
|
||||||
pop ebx
|
pop ebx
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
|
popfd
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
@ -100,7 +105,7 @@ align 4
|
|||||||
jmp .main
|
jmp .main
|
||||||
}
|
}
|
||||||
|
|
||||||
irq_serv_h 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12
|
irq_serv_h 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15
|
||||||
|
|
||||||
; I don`t known how to use IRQ_RESERVE
|
; I don`t known how to use IRQ_RESERVE
|
||||||
if IRQ_RESERVE > 16
|
if IRQ_RESERVE > 16
|
||||||
@ -118,6 +123,26 @@ align 16
|
|||||||
cmp [v86_irqhooks+eax*8], 0
|
cmp [v86_irqhooks+eax*8], 0
|
||||||
jnz v86_irq
|
jnz v86_irq
|
||||||
|
|
||||||
|
cmp al, 6
|
||||||
|
jnz @f
|
||||||
|
push eax
|
||||||
|
call [fdc_irq_func]
|
||||||
|
pop eax
|
||||||
|
@@:
|
||||||
|
|
||||||
|
cmp al, 14
|
||||||
|
jnz @f
|
||||||
|
push eax
|
||||||
|
call [irq14_func]
|
||||||
|
pop eax
|
||||||
|
@@:
|
||||||
|
cmp al, 15
|
||||||
|
jnz @f
|
||||||
|
push eax
|
||||||
|
call [irq15_func]
|
||||||
|
pop eax
|
||||||
|
@@:
|
||||||
|
|
||||||
mov ebx, [irq_tab+eax*4]
|
mov ebx, [irq_tab+eax*4]
|
||||||
test ebx, ebx
|
test ebx, ebx
|
||||||
jz .exit
|
jz .exit
|
||||||
|
@ -75,6 +75,9 @@ iglobal
|
|||||||
szSleep db 'Sleep',0
|
szSleep db 'Sleep',0
|
||||||
szGetTimerTicks db 'GetTimerTicks',0
|
szGetTimerTicks db 'GetTimerTicks',0
|
||||||
|
|
||||||
|
szGetDisplay db 'GetDisplay',0
|
||||||
|
szSetScreen db 'SetScreen',0
|
||||||
|
|
||||||
szStrncat db 'strncat',0
|
szStrncat db 'strncat',0
|
||||||
szStrncpy db 'strncpy',0
|
szStrncpy db 'strncpy',0
|
||||||
szstrncmp db 'strncmp',0
|
szstrncmp db 'strncmp',0
|
||||||
@ -147,6 +150,9 @@ kernel_export:
|
|||||||
dd szSleep , delay_ms
|
dd szSleep , delay_ms
|
||||||
dd szGetTimerTicks , get_timer_ticks
|
dd szGetTimerTicks , get_timer_ticks
|
||||||
|
|
||||||
|
dd szGetDisplay , get_display
|
||||||
|
dd szSetScreen , set_screen
|
||||||
|
|
||||||
dd szStrncat , strncat
|
dd szStrncat , strncat
|
||||||
dd szStrncpy , strncpy
|
dd szStrncpy , strncpy
|
||||||
dd szstrncmp , strncmp
|
dd szstrncmp , strncmp
|
||||||
|
@ -1426,7 +1426,7 @@ proc set_mtrr stdcall, base:dword,size:dword,mem_type:dword
|
|||||||
mov ebx, [size]
|
mov ebx, [size]
|
||||||
dec ebx
|
dec ebx
|
||||||
mov eax, 0xFFFFFFFF
|
mov eax, 0xFFFFFFFF
|
||||||
mov edx, 0x0000000F
|
mov edx, 0x00000000
|
||||||
sub eax, ebx
|
sub eax, ebx
|
||||||
sbb edx, 0
|
sbb edx, 0
|
||||||
or eax, 0x800
|
or eax, 0x800
|
||||||
|
@ -322,8 +322,10 @@ __exports:
|
|||||||
unmap_pages, 'UnmapPages', \ ; eax, ecx
|
unmap_pages, 'UnmapPages', \ ; eax, ecx
|
||||||
sys_msg_board_str, 'SysMsgBoardStr', \
|
sys_msg_board_str, 'SysMsgBoardStr', \
|
||||||
get_timer_ticks, 'GetTimerTicks', \
|
get_timer_ticks, 'GetTimerTicks', \
|
||||||
|
get_stack_base, 'GetStackBase', \
|
||||||
delay_hs, 'Delay', \ ; ebx
|
delay_hs, 'Delay', \ ; ebx
|
||||||
set_mouse_data, 'SetMouseData'
|
set_mouse_data, 'SetMouseData', \ ;
|
||||||
|
set_keyboard_data, 'SetKeyboardData' ; gcc fastcall
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -46,11 +46,9 @@ iglobal
|
|||||||
else
|
else
|
||||||
dd p_irq3, p_irq4 ;??? íåñòûêîâêà
|
dd p_irq3, p_irq4 ;??? íåñòûêîâêà
|
||||||
end if
|
end if
|
||||||
dd irq_serv.irq_5, p_irq6, irq_serv.irq_7
|
dd irq_serv.irq_5, irq_serv.irq_6, irq_serv.irq_7
|
||||||
dd irq_serv.irq_8, irq_serv.irq_9, irq_serv.irq_10
|
dd irq_serv.irq_8, irq_serv.irq_9, irq_serv.irq_10
|
||||||
dd irq_serv.irq_11, irq_serv.irq_12
|
dd irq_serv.irq_11, irq_serv.irq_12, irqD, irq_serv.irq_14, irq_serv.irq_15
|
||||||
dd irq13
|
|
||||||
dd p_irq14,p_irq15
|
|
||||||
; I don`t known how to use IRQ_RESERVE
|
; I don`t known how to use IRQ_RESERVE
|
||||||
if IRQ_RESERVE > 16
|
if IRQ_RESERVE > 16
|
||||||
dd irq_serv.irq_16
|
dd irq_serv.irq_16
|
||||||
@ -208,6 +206,14 @@ unknown_interrupt:
|
|||||||
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||||
; bl - error vector
|
; bl - error vector
|
||||||
show_error_parameters:
|
show_error_parameters:
|
||||||
|
cmp bl, 0x06
|
||||||
|
jnz .no_ud
|
||||||
|
push ebx
|
||||||
|
mov ebx, ud_user_message
|
||||||
|
mov ebp, notifyapp
|
||||||
|
call fs_execute_from_sysdir_param
|
||||||
|
pop ebx
|
||||||
|
.no_ud:
|
||||||
mov edx,[TASK_BASE] ;not scratched below
|
mov edx,[TASK_BASE] ;not scratched below
|
||||||
DEBUGF 1, "K : Process - forced terminate PID: %x\n", [edx+TASKDATA.pid]
|
DEBUGF 1, "K : Process - forced terminate PID: %x\n", [edx+TASKDATA.pid]
|
||||||
cmp bl, 0x08
|
cmp bl, 0x08
|
||||||
|
@ -193,6 +193,7 @@ iglobal
|
|||||||
dd file_system_lfn ; 70-Common file system interface, version 2
|
dd file_system_lfn ; 70-Common file system interface, version 2
|
||||||
dd syscall_window_settings ; 71-Window settings
|
dd syscall_window_settings ; 71-Window settings
|
||||||
dd sys_sendwindowmsg ; 72-Send window message
|
dd sys_sendwindowmsg ; 72-Send window message
|
||||||
|
dd blit_32 ; blitter;
|
||||||
times 255 - ( ($-servetable2) /4 ) dd undefined_syscall
|
times 255 - ( ($-servetable2) /4 ) dd undefined_syscall
|
||||||
dd sys_end ; -1-end application
|
dd sys_end ; -1-end application
|
||||||
|
|
||||||
|
@ -48,6 +48,7 @@ macro _clear_ op
|
|||||||
|
|
||||||
fs_execute_from_sysdir:
|
fs_execute_from_sysdir:
|
||||||
xor ebx, ebx
|
xor ebx, ebx
|
||||||
|
fs_execute_from_sysdir_param:
|
||||||
xor edx, edx
|
xor edx, edx
|
||||||
mov esi, sysdir_path
|
mov esi, sysdir_path
|
||||||
|
|
||||||
@ -1166,4 +1167,13 @@ proc set_app_params stdcall,slot:dword, params:dword,\
|
|||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
|
|
||||||
|
align 4
|
||||||
|
|
||||||
|
get_stack_base:
|
||||||
|
mov eax,[current_slot]
|
||||||
|
mov eax,[eax+APPDATA.pl0_stack]
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
include "debug.inc"
|
include "debug.inc"
|
||||||
|
@ -22,10 +22,12 @@ old_ints_h:
|
|||||||
dd 0
|
dd 0
|
||||||
dw 0
|
dw 0
|
||||||
|
|
||||||
|
if ~ defined extended_primary_loader ; restart from memory is not supported in extended primary loader cfg
|
||||||
kernel_restart_bootblock:
|
kernel_restart_bootblock:
|
||||||
db 1 ; version
|
db 1 ; version
|
||||||
dw 1 ; floppy image is in memory
|
dw 1 ; floppy image is in memory
|
||||||
dd 0 ; cannot save parameters
|
dd 0 ; cannot save parameters
|
||||||
|
end if
|
||||||
|
|
||||||
; table for move to extended memory (int 15h, ah=87h)
|
; table for move to extended memory (int 15h, ah=87h)
|
||||||
align 8
|
align 8
|
||||||
@ -53,3 +55,36 @@ fwmovedesc:
|
|||||||
db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0
|
db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0
|
||||||
db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0
|
db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0
|
||||||
|
|
||||||
|
if defined extended_primary_loader
|
||||||
|
; look in PrimaryLoader.txt for the description
|
||||||
|
bootdevice dw 0 ; ax from primary loader
|
||||||
|
bootfs dw 0 ; bx from primary loader
|
||||||
|
bootcallback dd 0 ; ds:si from primary loader
|
||||||
|
; data for configuration file loading, look in PrimaryLoader.txt
|
||||||
|
config_file_struct:
|
||||||
|
dw 0, 4000h ; load to 4000:0000
|
||||||
|
dw 16 ; read no more than 16*4K = 64K
|
||||||
|
db 'config.ini',0
|
||||||
|
; data for configuration file parsing
|
||||||
|
macro config_variable string,parser
|
||||||
|
{
|
||||||
|
local len
|
||||||
|
len dw 0
|
||||||
|
db string
|
||||||
|
store word $ - len - 2 at len
|
||||||
|
dw parser
|
||||||
|
}
|
||||||
|
config_file_variables:
|
||||||
|
config_variable 'timeout', parse_timeout
|
||||||
|
config_variable 'resolution', parse_resolution
|
||||||
|
config_variable 'vbemode', parse_vbemode
|
||||||
|
config_variable 'vrr', parse_vrr
|
||||||
|
config_variable 'biosdisks', parse_biosdisks
|
||||||
|
config_variable 'imgfrom', parse_imgfrom
|
||||||
|
dw 0
|
||||||
|
; data for image file loading, look in PrimaryLoader.txt
|
||||||
|
image_file_struct:
|
||||||
|
dw 0, 4000h ; load to 4000:0000
|
||||||
|
dw 16 ; read no more than 16*4K = 64K
|
||||||
|
db 'kolibri.img',0
|
||||||
|
end if
|
||||||
|
@ -98,6 +98,12 @@ szIMPORTS db 'IMPORTS',0
|
|||||||
|
|
||||||
read_firstapp db '/sys/'
|
read_firstapp db '/sys/'
|
||||||
firstapp db 'LAUNCHER',0
|
firstapp db 'LAUNCHER',0
|
||||||
|
notifyapp db '@notify',0
|
||||||
|
if lang eq ru
|
||||||
|
ud_user_message db '舘芋<E88898>: 郊祚中丞成<E4B89E>布𩤃 身摵飹芣剁 能格丟嵼<E4B89F>',0
|
||||||
|
else
|
||||||
|
ud_user_message db 'Error: unsupported processor instruction',0
|
||||||
|
end if
|
||||||
|
|
||||||
char db '/sys/FONTS/CHAR.MT',0
|
char db '/sys/FONTS/CHAR.MT',0
|
||||||
char2 db '/sys/FONTS/CHAR2.MT',0
|
char2 db '/sys/FONTS/CHAR2.MT',0
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
‘ˆ‘’…Œ<EFBFBD>›… ”“<E2809D>Š–ˆˆ Ž<>…<EFBFBD>€–ˆŽ<CB86><C5BD>Ž‰ ‘ˆ‘’…Œ› Kolibri 0.7.5.0+
|
‘ˆ‘’…Œ<EFBFBD>›… ”“<E2809D>Š–ˆˆ Ž<>…<EFBFBD>€–ˆŽ<CB86><C5BD>Ž‰ ‘ˆ‘’…Œ› Kolibri 0.7.7.0
|
||||||
|
|
||||||
<EFBFBD>®¬¥à äãªæ¨¨ ¯®¬¥é ¥âáï ¢ ॣ¨áâà eax.
|
<EFBFBD>®¬¥à äãªæ¨¨ ¯®¬¥é ¥âáï ¢ ॣ¨áâà eax.
|
||||||
‚맮¢ á¨á⥬®© äãªæ¨¨ ®áãé¥á⢫ï¥âáï ª®¬ ¤®© "int 0x40".
|
‚맮¢ á¨á⥬®© äãªæ¨¨ ®áãé¥á⢫ï¥âáï ª®¬ ¤®© "int 0x40".
|
||||||
@ -354,6 +354,7 @@
|
|||||||
* ¡¨â 0 (¬ ᪠1): ®ª® ¬ ªá¨¬¨§¨à®¢ ®
|
* ¡¨â 0 (¬ ᪠1): ®ª® ¬ ªá¨¬¨§¨à®¢ ®
|
||||||
* ¡¨â 1 (¬ ᪠2): ®ª® ¬¨¨¬¨§¨à®¢ ® ¢ ¯ ¥«ì § ¤ ç
|
* ¡¨â 1 (¬ ᪠2): ®ª® ¬¨¨¬¨§¨à®¢ ® ¢ ¯ ¥«ì § ¤ ç
|
||||||
* ¡¨â 2 (¬ ᪠4): ®ª® á¢ñàãâ® ¢ § £®«®¢®ª
|
* ¡¨â 2 (¬ ᪠4): ®ª® á¢ñàãâ® ¢ § £®«®¢®ª
|
||||||
|
* +71 = +0x47: dword: ¬ ᪠ᮡë⨩
|
||||||
‡ ¬¥ç ¨ï:
|
‡ ¬¥ç ¨ï:
|
||||||
* ‘«®âë 㬥àãîâáï á 1.
|
* ‘«®âë 㬥àãîâáï á 1.
|
||||||
* ‚®§¢à é ¥¬®¥ § 票¥ ¥ ¥áâì ®¡é¥¥ ç¨á«® ¯®â®ª®¢, ¯®áª®«ìªã
|
* ‚®§¢à é ¥¬®¥ § 票¥ ¥ ¥áâì ®¡é¥¥ ç¨á«® ¯®â®ª®¢, ¯®áª®«ìªã
|
||||||
@ -383,7 +384,7 @@
|
|||||||
ᮡá⢥® à ¡®âã, ¨ ¢à¥¬¥¨ ¯à®áâ®ï ¢ ®¦¨¤ ¨¨ ¯à¥àë¢ ¨ï
|
ᮡá⢥® à ¡®âã, ¨ ¢à¥¬¥¨ ¯à®áâ®ï ¢ ®¦¨¤ ¨¨ ¯à¥àë¢ ¨ï
|
||||||
(ª®â®à®¥ ¬®¦® ¯®«ãç¨âì ¢ë§®¢®¬ ¯®¤äãªæ¨¨ 4 äãªæ¨¨ 18).
|
(ª®â®à®¥ ¬®¦® ¯®«ãç¨âì ¢ë§®¢®¬ ¯®¤äãªæ¨¨ 4 äãªæ¨¨ 18).
|
||||||
* <20> ç¨ ï á® á«®â 2, à §¬¥é îâáï ®¡ëçë¥ ¯à¨«®¦¥¨ï.
|
* <20> ç¨ ï á® á«®â 2, à §¬¥é îâáï ®¡ëçë¥ ¯à¨«®¦¥¨ï.
|
||||||
* Ž¡ëçë¥ ¯à¨«®¦¥¨ï à §¬¥é îâáï ¢ ¯ ¬ï⨠¯® ¤à¥áã 0x0
|
* Ž¡ëçë¥ ¯à¨«®¦¥¨ï à §¬¥é îâáï ¢ ¯ ¬ï⨠¯® ¤à¥áã 0
|
||||||
(ª®áâ â ï¤à std_application_base_address).
|
(ª®áâ â ï¤à std_application_base_address).
|
||||||
<20> «®¦¥¨ï ¥ ¯à®¨á室¨â, ¯®áª®«ìªã ã ª ¦¤®£® ¯à®æ¥áá ᢮ï
|
<20> «®¦¥¨ï ¥ ¯à®¨á室¨â, ¯®áª®«ìªã ã ª ¦¤®£® ¯à®æ¥áá ᢮ï
|
||||||
â ¡«¨æ áâà ¨æ.
|
â ¡«¨æ áâà ¨æ.
|
||||||
@ -847,12 +848,12 @@
|
|||||||
* äãªæ¨ï ¥ ¢®§¢à é ¥â § 票ï
|
* äãªæ¨ï ¥ ¢®§¢à é ¥â § 票ï
|
||||||
‘âàãªâãà ¡ãä¥à :
|
‘âàãªâãà ¡ãä¥à :
|
||||||
db a,b,c,d ¤«ï ¢¥àᨨ a.b.c.d
|
db a,b,c,d ¤«ï ¢¥àᨨ a.b.c.d
|
||||||
db UID_xxx: ®¤® ¨§ UID_NONE=0, UID_MENUET=1, UID_KOLIBRI=2
|
db 0: § १¥à¢¨à®¢ ®
|
||||||
dd REV - ®¬¥à svn-ॢ¨§¨¨ ï¤à
|
dd REV - ®¬¥à svn-ॢ¨§¨¨ ï¤à
|
||||||
„«ï ï¤à Kolibri 0.7.1.0:
|
„«ï ï¤à Kolibri 0.7.7.0+:
|
||||||
db 0,7,1,0
|
db 0,7,7,0
|
||||||
db 2
|
db 0
|
||||||
dd 638
|
dd 1675
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
====================== ”ãªæ¨ï 18, ¯®¤äãªæ¨ï 14 =====================
|
====================== ”ãªæ¨ï 18, ¯®¤äãªæ¨ï 14 =====================
|
||||||
@ -1677,62 +1678,14 @@ dd 638
|
|||||||
* ecx = 㪠§ â¥«ì ¡ãä¥à
|
* ecx = 㪠§ â¥«ì ¡ãä¥à
|
||||||
* edx = à §¬¥à ¡ãä¥à
|
* edx = à §¬¥à ¡ãä¥à
|
||||||
‚®§¢à é ¥¬®¥ § 票¥:
|
‚®§¢à é ¥¬®¥ § 票¥:
|
||||||
* eax = - 1 ®é¨¡ª , ¯ ¯ª ⥪ã饣® ¯®â®ª ¨¬¥¥â ¤«¨ã ¡®«¥¥ 祬 4096 ᨬ¢®«®¢.
|
|
||||||
* eax = ¤«¨ ¨¬¥¨ ⥪ã饩 ¯ ¯ª¨ (¢ª«îç ï § ¢¥àè î騩 0)
|
* eax = ¤«¨ ¨¬¥¨ ⥪ã饩 ¯ ¯ª¨ (¢ª«îç ï § ¢¥àè î騩 0)
|
||||||
‡ ¬¥ç ¨ï:
|
‡ ¬¥ç ¨ï:
|
||||||
* …᫨ à §¬¥à ¡ãä¥à ¥¤®áâ â®ç® ¤«ï ª®¯¨à®¢ ¨ï ¢á¥£® ¨¬¥¨,
|
* …᫨ à §¬¥à ¡ãä¥à ¥¤®áâ â®ç® ¤«ï ª®¯¨à®¢ ¨ï ¢á¥£® ¨¬¥¨,
|
||||||
ª®¯¨àãîâáï ⮫쪮 ¯¥à¢ë¥ (edx-1) ¡ ©â
|
ª®¯¨àãîâáï ⮫쪮 ¯¥à¢ë¥ (edx-1) ¡ ©â ¨ ¢ ª®æ¥ áâ ¢¨âáï
|
||||||
¨ ¢ ª®æ¥ áâ ¢¨âáï § ¢¥àè î騩 0.
|
§ ¢¥àè î騩 0.
|
||||||
|
* <20>® 㬮«ç ¨î, ⥪ãé ï ¯ ¯ª ¤«ï ¯®â®ª - "/rd/1".
|
||||||
======================================================================
|
* <20>ਠᮧ¤ ¨¨ ¯à®æ¥áá /¯®â®ª ⥪ãé ï ¯ ¯ª á«¥¤ã¥âáï ®â
|
||||||
================ ”ãªæ¨ï 32 - 㤠«¨âì ä ©« á à ¬¤¨áª . ===============
|
த¨â¥«ï.
|
||||||
======================================================================
|
|
||||||
<EFBFBD> à ¬¥âàë:
|
|
||||||
* eax = 32 - ®¬¥à äãªæ¨¨
|
|
||||||
* ebx = 㪠§ â¥«ì ¨¬ï ä ©«
|
|
||||||
‚®§¢à é ¥¬®¥ § 票¥:
|
|
||||||
* eax = 0 - ãᯥè®; ¨ ç¥ ª®¤ ®è¨¡ª¨ ä ©«®¢®© á¨á⥬ë
|
|
||||||
‡ ¬¥ç ¨ï:
|
|
||||||
* <20>â äãªæ¨ï ãáâ ५ ; äãªæ¨ï 58 ¯®§¢®«ï¥â ¢ë¯®«ïâì
|
|
||||||
⥠¦¥ ¤¥©á⢨ï á à áè¨à¥ë¬¨ ¢®§¬®¦®áâﬨ.
|
|
||||||
* ’¥ªãé ï ॠ«¨§ æ¨ï ¢®§¢à é ¥â ⮫쪮 § 票ï 0(ãᯥå) ¨
|
|
||||||
5(ä ©« ¥ ©¤¥).
|
|
||||||
* ˆ¬ï ä ©« ¤®«¦® ¡ëâì «¨¡® ¢ ä®à¬ ⥠8+3 ᨬ¢®«®¢ (¯¥à¢ë¥
|
|
||||||
8 ᨬ¢®«®¢ - ᮡá⢥® ¨¬ï, ¯®á«¥¤¨¥ 3 - à áè¨à¥¨¥,
|
|
||||||
ª®à®âª¨¥ ¨¬¥ ¨ à áè¨à¥¨ï ¤®¯®«ïîâáï ¯à®¡¥« ¬¨),
|
|
||||||
«¨¡® ¢ ä®à¬ ⥠8.3 ᨬ¢®«®¢ "FILE.EXT"/"FILE.EX "
|
|
||||||
(¨¬ï ¥ ¡®«¥¥ 8 ᨬ¢®«®¢, â®çª , à áè¨à¥¨¥ 3 ᨬ¢®« ,
|
|
||||||
¤®¯®«¥®¥ ¯à¨ ¥®¡å®¤¨¬®á⨠¯à®¡¥« ¬¨).
|
|
||||||
ˆ¬ï ä ©« ¤®«¦® ¡ëâì § ¯¨á ® § £« ¢ë¬¨ ¡ãª¢ ¬¨.
|
|
||||||
‡ ¢¥àè î騩 ᨬ¢®« á ª®¤®¬ 0 ¥ 㦥 (¥ ASCIIZ-áâப ).
|
|
||||||
* <20>â äãªæ¨ï ¥ ¯®¤¤¥à¦¨¢ ¥â ¯ ¯®ª à ¬¤¨áª¥.
|
|
||||||
|
|
||||||
======================================================================
|
|
||||||
=============== ”ãªæ¨ï 33 - § ¯¨á âì ä ©« à ¬¤¨áª. ===============
|
|
||||||
======================================================================
|
|
||||||
<EFBFBD> à ¬¥âàë:
|
|
||||||
* eax = 33 - ®¬¥à äãªæ¨¨
|
|
||||||
* ebx = 㪠§ â¥«ì ¨¬ï ä ©«
|
|
||||||
* ecx = 㪠§ â¥«ì ¤ ë¥ ¤«ï § ¯¨á¨
|
|
||||||
* edx = ç¨á«® ¡ ©â ¤«ï § ¯¨á¨
|
|
||||||
* á«¥¤ã¥â ãáâ ¢«¨¢ âì esi=0
|
|
||||||
‚®§¢à é ¥¬®¥ § 票¥:
|
|
||||||
* eax = 0 - ãᯥè®, ¨ ç¥ ª®¤ ®è¨¡ª¨ ä ©«®¢®© á¨á⥬ë
|
|
||||||
‡ ¬¥ç ¨ï:
|
|
||||||
* <20>â äãªæ¨ï ãáâ ५ ; äãªæ¨ï 70 ¯®§¢®«ï¥â ¢ë¯®«ïâì
|
|
||||||
⥠¦¥ ¤¥©á⢨ï á à áè¨à¥ë¬¨ ¢®§¬®¦®áâﬨ.
|
|
||||||
* …᫨ 㪠§ âì ¥ã«¥¢®¥ § 票¥ ¢ esi ¨ à ¬¤¨áª¥ 㦥 ¥áâì
|
|
||||||
㪠§ ë© ä ©«, â® ¡ã¤¥â ᮧ¤ ¥éñ ®¤¨ ä ©« á ⥬ ¦¥ ¨¬¥¥¬.
|
|
||||||
* ‚ ¯à®â¨¢®¬ á«ãç ¥ ä ©« ¯¥à¥§ ¯¨áë¢ ¥âáï.
|
|
||||||
* ˆ¬ï ä ©« ¤®«¦® ¡ëâì «¨¡® ¢ ä®à¬ ⥠8+3 ᨬ¢®«®¢
|
|
||||||
(¯¥à¢ë¥ 8 ᨬ¢®«®¢ - ᮡá⢥® ¨¬ï, ¯®á«¥¤¨¥ 3 - à áè¨à¥¨¥,
|
|
||||||
ª®à®âª¨¥ ¨¬¥ ¨ à áè¨à¥¨ï ¤®¯®«ïîâáï ¯à®¡¥« ¬¨),
|
|
||||||
«¨¡® ¢ ä®à¬ ⥠8.3 ᨬ¢®«®¢ "FILE.EXT"/"FILE.EX "
|
|
||||||
(¨¬ï ¥ ¡®«¥¥ 8 ᨬ¢®«®¢, â®çª , à áè¨à¥¨¥ 3 ᨬ¢®« ,
|
|
||||||
¤®¯®«¥®¥ ¯à¨ ¥®¡å®¤¨¬®á⨠¯à®¡¥« ¬¨).
|
|
||||||
ˆ¬ï ä ©« ¤®«¦® ¡ëâì § ¯¨á ® § £« ¢ë¬¨ ¡ãª¢ ¬¨.
|
|
||||||
‡ ¢¥àè î騩 ᨬ¢®« á ª®¤®¬ 0 ¥ 㦥 (¥ ASCIIZ-áâப ).
|
|
||||||
* <20>â äãªæ¨ï ¥ ¯®¤¤¥à¦¨¢ ¥â ¯ ¯®ª à ¬¤¨áª¥.
|
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
============ ”ãªæ¨ï 35 - ¯à®ç¨â âì 梥â â®çª¨ íªà ¥. ============
|
============ ”ãªæ¨ï 35 - ¯à®ç¨â âì 梥â â®çª¨ íªà ¥. ============
|
||||||
@ -1858,7 +1811,7 @@ dd 638
|
|||||||
------------------ <20>®¤äãªæ¨ï 7 - ¤ ë¥ ¯à®ªàã⪨ -------------------
|
------------------ <20>®¤äãªæ¨ï 7 - ¤ ë¥ ¯à®ªàã⪨ -------------------
|
||||||
<EFBFBD> à ¬¥âàë:
|
<EFBFBD> à ¬¥âàë:
|
||||||
* eax = 37 - ®¬¥à äãªæ¨¨
|
* eax = 37 - ®¬¥à äãªæ¨¨
|
||||||
* ebx = 6 - ®¬¥à ¯®¤äãªæ¨¨
|
* ebx = 7 - ®¬¥à ¯®¤äãªæ¨¨
|
||||||
‚®§¢à é ¥¬®¥ § 票¥:
|
‚®§¢à é ¥¬®¥ § 票¥:
|
||||||
* eax = [horizontal offset]*65536 + [vertical offset]
|
* eax = [horizontal offset]*65536 + [vertical offset]
|
||||||
‡ ¬¥ç ¨ï:
|
‡ ¬¥ç ¨ï:
|
||||||
@ -3289,63 +3242,6 @@ IPC
|
|||||||
¢å®¤¨â, ¯à¨¬¥à, ¢ ¨§¢¥áâë© Interrupt List by Ralf Brown;
|
¢å®¤¨â, ¯à¨¬¥à, ¢ ¨§¢¥áâë© Interrupt List by Ralf Brown;
|
||||||
ᯨ᮪ ¢â®àëå ¤®«¦¥ ¡ëâì 㪠§ ¢ ¤®ªã¬¥â 樨 ¯® ãáâனáâ¢ã.
|
ᯨ᮪ ¢â®àëå ¤®«¦¥ ¡ëâì 㪠§ ¢ ¤®ªã¬¥â 樨 ¯® ãáâனáâ¢ã.
|
||||||
|
|
||||||
======================================================================
|
|
||||||
====================== ”ãªæ¨ï 62, ¯®¤äãªæ¨ï 11 =====================
|
|
||||||
== ˆ¨æ¨ «¨§¨à®¢ âì ¯®«ì§®¢ ⥫ì᪨© ‚/‚ á ®â®¡à ¦¥¨¥¬ ¯ ¬ïâì ==
|
|
||||||
======================================================================
|
|
||||||
<EFBFBD> à ¬¥âàë:
|
|
||||||
* eax = 62 - ®¬¥à äãªæ¨¨
|
|
||||||
* bl = 11 - ®¬¥à ¯®¤äãªæ¨¨
|
|
||||||
* cx = ¤à¥á PCI-ãáâனáâ¢
|
|
||||||
‚®§¢à é ¥¬®¥ § 票¥:
|
|
||||||
* eax = -1 - ¤®áâ㯠ª PCI § ¯à¥éñ;
|
|
||||||
* eax = -2 - ¤®áâ㯠ª MMIO-¡«®ª ¬ ãáâனá⢠¥ à §à¥èñ;
|
|
||||||
* eax = -3 - ®è¨¡ª ««®ª 樨 ¯®«ì§®¢ ⥫ì᪮© ¤¨. ¯ ¬ïâ¨; ¨ ç¥
|
|
||||||
* eax = à §¬¥à ¤®áâ㯮© ¤¨ ¬¨ç¥áª®© ¯ ¬ïâ¨.
|
|
||||||
‡ ¬¥ç ¨ï:
|
|
||||||
* <20>।¢ à¨â¥«ì® ¤®«¦¥ ¡ëâì à §à¥èñ ¨§ª®ã஢¥¢ë© ¤®áâ㯠ª PCI
|
|
||||||
¤«ï ¯à¨«®¦¥¨© ¯®¤äãªæ¨¥© 12 äãªæ¨¨ 21.
|
|
||||||
* ¤à¥á PCI-ãáâனá⢠¤®«¦¥ ᮢ¯ ¤ âì á á¨á⥬®© ¯¥à¥¬¥®©
|
|
||||||
mmio_pci_addr
|
|
||||||
|
|
||||||
======================================================================
|
|
||||||
====================== ”ãªæ¨ï 62, ¯®¤äãªæ¨ï 12 =====================
|
|
||||||
== ‚뤥«¨âì ¤¨ ¯ §® «¨¥©ëå ¤à¥á®¢ ¤«ï ¯®«ì§®¢ ⥫ì᪮£® MMIO ==
|
|
||||||
======================================================================
|
|
||||||
<EFBFBD> à ¬¥âàë:
|
|
||||||
* eax = 62 - ®¬¥à äãªæ¨¨
|
|
||||||
* bl = 12 - ®¬¥à ¯®¤äãªæ¨¨
|
|
||||||
* bh = ®¬¥à BAR-ॣ¨áâà ¢ ª®ä¨£ãà 樮®© §®¥ PCI
|
|
||||||
* ecx = à §¬¥à MMIO-¡«®ª (¢ ¡ ©â å)
|
|
||||||
* edx = ᬥ饨¥ ®â®á¨â¥«ì® ç « MMIO-¡«®ª (¢ 4K-áâà ¨æ å!)
|
|
||||||
‚®§¢à é ¥¬®¥ § 票¥:
|
|
||||||
* eax = -1 - ¤®áâ㯠ª PCI § ¯à¥éñ;
|
|
||||||
* eax = -2 - ¥¢¥àë© ®¬¥à BAR-ॣ¨áâà ;
|
|
||||||
* eax = -3 - BAR ¥ ᮤ¥à¦¨â ¤à¥á IO;
|
|
||||||
* eax = -4 - BAR ¤à¥áã¥â ¯®àâë IO;
|
|
||||||
* eax = -5 - ®è¨¡ª ««®ª 樨; ¨ ç¥
|
|
||||||
* eax = ç «ìë© ¤à¥á MMIO ¢ ¤à¥á®¬ ¯à®áâà á⢥ ¯à¨«®¦¥¨ï.
|
|
||||||
‡ ¬¥ç ¨ï:
|
|
||||||
* <20>।¢ à¨â¥«ì® ¤®«¦¥ ¡ëâì à §à¥èñ ¨§ª®ã஢¥¢ë© ¤®áâ㯠ª PCI
|
|
||||||
¤«ï ¯à¨«®¦¥¨© ¯®¤äãªæ¨¥© 12 äãªæ¨¨ 21.
|
|
||||||
* €¤à¥á PCI-ãáâனá⢠§ ¤ ¥âáï á¨á⥬®© ¯¥à¥¬¥®© mmio_pci_addr.
|
|
||||||
* <20>।®áâ ¢«¥ë© ¤¨ ¯ §® «¨¥©ëå ¤à¥á®¢ ¤®«¦¥ ®á¢®¡®¦¤ âìáï
|
|
||||||
¯®á।á⢮¬ ¢ë§®¢ äãªæ¨¨ 62:13
|
|
||||||
|
|
||||||
======================================================================
|
|
||||||
====================== ”ãªæ¨ï 62, ¯®¤äãªæ¨ï 13 =====================
|
|
||||||
== Žá¢®¡®¤¨âì ¤¨ ¯ §® «¨¥©ëå ¤à¥á®¢ ¯®«ì§®¢ ⥫ì᪮£® MMIO ==
|
|
||||||
======================================================================
|
|
||||||
<EFBFBD> à ¬¥âàë:
|
|
||||||
* eax = 62 - ®¬¥à äãªæ¨¨
|
|
||||||
* bl = 12 - ®¬¥à ¯®¤äãªæ¨¨
|
|
||||||
* ecx = ç «ìë© ¤à¥á ®á¢®¡®¦¤ ¥¬®£® MMIO-¡«®ª ¢ ¤à¥á®¬
|
|
||||||
¯à®áâà á⢥ ¯à¨«®¦¥¨ï
|
|
||||||
‚®§¢à é ¥¬®¥ § 票¥:
|
|
||||||
* eax = 1 - ¡«®ª ãá¯¥è® ®á¢®¡®¦¤¥;
|
|
||||||
‡ ¬¥ç ¨ï:
|
|
||||||
* <20>।¢ à¨â¥«ì® ¯à¨«®¦¥¨î ¤®«¦¥ ¡ëâì ¢ë¤¥«¥ uMMIO-¡«®ª (fn62:12)
|
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
================ ”ãªæ¨ï 63 - à ¡®â á ¤®áª®© ®â« ¤ª¨. ===============
|
================ ”ãªæ¨ï 63 - à ¡®â á ¤®áª®© ®â« ¤ª¨. ===============
|
||||||
======================================================================
|
======================================================================
|
||||||
@ -3459,7 +3355,6 @@ IPC
|
|||||||
======================================================================
|
======================================================================
|
||||||
<EFBFBD>¥¦¨¬ ¢¢®¤ ¢«¨ï¥â १ã«ìâ âë çâ¥¨ï ª« ¢¨è äãªæ¨¥© 2.
|
<EFBFBD>¥¦¨¬ ¢¢®¤ ¢«¨ï¥â १ã«ìâ âë çâ¥¨ï ª« ¢¨è äãªæ¨¥© 2.
|
||||||
<EFBFBD>ਠ§ £à㧪¥ ¯à®£à ¬¬ë ¤«ï ¥ñ ãáâ ¢«¨¢ ¥âáï ASCII-०¨¬ ¢¢®¤ .
|
<EFBFBD>ਠ§ £à㧪¥ ¯à®£à ¬¬ë ¤«ï ¥ñ ãáâ ¢«¨¢ ¥âáï ASCII-०¨¬ ¢¢®¤ .
|
||||||
…᫨ ¢ë§ë¢ ¥âáï ¥áãé¥áâ¢ãîé ï ¯®¤äãªæ¨ï ¢®§¢à é ¥âáï ¢ eax=-1.
|
|
||||||
|
|
||||||
-------- <20>®¤äãªæ¨ï 1 - ãáâ ®¢¨âì ०¨¬ ¢¢®¤ á ª« ¢¨ âãàë. ---------
|
-------- <20>®¤äãªæ¨ï 1 - ãáâ ®¢¨âì ०¨¬ ¢¢®¤ á ª« ¢¨ âãàë. ---------
|
||||||
<EFBFBD> à ¬¥âàë:
|
<EFBFBD> à ¬¥âàë:
|
||||||
@ -3702,25 +3597,20 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
|||||||
¨«¨ ¯®¤äãªæ¨¥© 20.
|
¨«¨ ¯®¤äãªæ¨¥© 20.
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
==================== ”ãªæ¨ï 68, ¯®¤äãªæ¨ï 14 =======================
|
====================== ”ãªæ¨ï 68, ¯®¤äãªæ¨ï 14 =====================
|
||||||
===== Ž¦¨¤ âì ¯®«ã票ï ᨣ « , ®â ¤àã£¨å ¯à¨«®¦¥¨©/¤à ©¢¥à®¢. =====
|
====== Ž¦¨¤ âì ¯®«ã票ï ᨣ « ®â ¤àã£¨å ¯à¨«®¦¥¨©/¤à ©¢¥à®¢. =====
|
||||||
======================================================================
|
======================================================================
|
||||||
<EFBFBD> à ¬¥âàë:
|
<EFBFBD> à ¬¥âàë:
|
||||||
* eax = 68 - ®¬¥à äãªæ¨¨
|
* eax = 68 - ®¬¥à äãªæ¨¨
|
||||||
* ebx = 14 - ®¬¥à ¯®¤äãªæ¨¨
|
* ebx = 14 - ®¬¥à ¯®¤äãªæ¨¨
|
||||||
* ecx = 㪠§ â¥«ì ¡ãä¥à ¤«ï ¨ä®à¬ 樨 (24 ¡ ©â )
|
* ecx = 㪠§ â¥«ì ¡ãä¥à ¤«ï ¨ä®à¬ 樨 (24 ¡ ©â )
|
||||||
‚®§¢à é ¥¬®¥ § 票¥:
|
‚®§¢à é ¥¬®¥ § 票¥:
|
||||||
|
* eax à §àãè ¥âáï
|
||||||
* ¡ãä¥à, ª®â®àë© ãª §ë¢ ¥â ecx, ᮤ¥à¦¨â á«¥¤ãîéãî ¨ä®à¬ æ¨î:
|
* ¡ãä¥à, ª®â®àë© ãª §ë¢ ¥â ecx, ᮤ¥à¦¨â á«¥¤ãîéãî ¨ä®à¬ æ¨î:
|
||||||
* +0: dword: ¨¤¥â¨ä¨ª â®à ¯®á«¥¤ãîé¨å ¤ ëå ᨣ «
|
* +0: dword: ¨¤¥â¨ä¨ª â®à ¯®á«¥¤ãîé¨å ¤ ëå ᨣ «
|
||||||
* +4: ¤ ë¥ ¯à¨ï⮣® ᨣ « (20 ¡ ©â), ä®à¬ â ª®â®àëå
|
* +4: ¤ ë¥ ¯à¨ï⮣® ᨣ « (20 ¡ ©â), ä®à¬ â ª®â®àëå
|
||||||
®¯à¥¤¥«ï¥âáï ¯¥à¢ë¬ dword-®¬
|
®¯à¥¤¥«ï¥âáï ¯¥à¢ë¬ dword-®¬
|
||||||
|
|
||||||
======================================================================
|
|
||||||
== ”ãªæ¨ï 68, ¯®¤äãªæ¨ï 15 - ãáâ ®¢¨âì ®¡à ¡®â稪 ¨áª«î票© FPU. =
|
|
||||||
======================================================================
|
|
||||||
“¤ «¥ (¢ ⥪ã饩 ॠ«¨§ 樨 ¯à®áâ® ¢®§¢à é ¥â 0)
|
|
||||||
ˆá¯®«ì§®¢ âì ¯®¤äãªæ¨¨ 24, 25
|
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
=========== ”ãªæ¨ï 68, ¯®¤äãªæ¨ï 16 - § £à㧨âì ¤à ©¢¥à. ===========
|
=========== ”ãªæ¨ï 68, ¯®¤äãªæ¨ï 16 - § £à㧨âì ¤à ©¢¥à. ===========
|
||||||
======================================================================
|
======================================================================
|
||||||
@ -3759,12 +3649,6 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
|||||||
®¯à¥¤¥«ïîâáï ¤à ©¢¥à®¬.
|
®¯à¥¤¥«ïîâáï ¤à ©¢¥à®¬.
|
||||||
* <20>।¢ à¨â¥«ì® ¤®«¦¥ ¡ëâì ¯®«ãç¥ åí¤« ¤à ©¢¥à ¯®¤äãªæ¨¥© 16.
|
* <20>।¢ à¨â¥«ì® ¤®«¦¥ ¡ëâì ¯®«ãç¥ åí¤« ¤à ©¢¥à ¯®¤äãªæ¨¥© 16.
|
||||||
|
|
||||||
======================================================================
|
|
||||||
== ”ãªæ¨ï 68, ¯®¤äãªæ¨ï 18 - ãáâ ®¢¨âì ®¡à ¡®â稪 ¨áª«î票© SSE. =
|
|
||||||
======================================================================
|
|
||||||
“¤ «¥ (¢ ⥪ã饩 ॠ«¨§ 樨 ¯à®áâ® ¢®§¢à é ¥â 0)
|
|
||||||
ˆá¯®«ì§®¢ âì ¯®¤äãªæ¨¨ 24, 25
|
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
============= ”ãªæ¨ï 68, ¯®¤äãªæ¨ï 19 - § £à㧨âì DLL. =============
|
============= ”ãªæ¨ï 68, ¯®¤äãªæ¨ï 19 - § £à㧨âì DLL. =============
|
||||||
======================================================================
|
======================================================================
|
||||||
@ -3860,7 +3744,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
|||||||
®¡« á⨠¯ ¬ïâ¨.
|
®¡« á⨠¯ ¬ïâ¨.
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
==== ”ãªæ¨ï 68, ¯®¤äãªæ¨ï 24 - ãáâ ®¢¨âì ®¡à ¡®â稪 ¨áª«î票© ===
|
==== ”ãªæ¨ï 68, ¯®¤äãªæ¨ï 24 - ãáâ ®¢¨âì ®¡à ¡®â稪 ¨áª«î票©. ===
|
||||||
======================================================================
|
======================================================================
|
||||||
<EFBFBD> à ¬¥âàë:
|
<EFBFBD> à ¬¥âàë:
|
||||||
* eax = 68 - ®¬¥à äãªæ¨¨
|
* eax = 68 - ®¬¥à äãªæ¨¨
|
||||||
@ -3871,26 +3755,26 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
|||||||
* eax = ¤à¥á áâ ண® ®¡à ¡®â稪 ¨áª«î票© (0, ¥á«¨ ¥ ãáâ ®¢«¥)
|
* eax = ¤à¥á áâ ண® ®¡à ¡®â稪 ¨áª«î票© (0, ¥á«¨ ¥ ãáâ ®¢«¥)
|
||||||
* ebx = ¬ ᪠áâ ண® ®¡à ¡®â稪 ¨áª«î票©
|
* ebx = ¬ ᪠áâ ண® ®¡à ¡®â稪 ¨áª«î票©
|
||||||
‡ ¬¥ç ¨ï:
|
‡ ¬¥ç ¨ï:
|
||||||
* <20>®¬¥à ¡¨â ¢ ¬ ᪥ ¨áª«î票© ᮮ⢥âáâ¢ãîâ ®¬¥à㠨᪫îç¥¨ï ¯®
|
* <20>®¬¥à ¡¨â ¢ ¬ ᪥ ¨áª«î票© ᮮ⢥âáâ¢ã¥â ®¬¥à㠨᪫îç¥¨ï ¯®
|
||||||
ᯥæ¨ä¨ª 樨 ¯à®æ¥áá®à (Intel-PC). ’ ª ¯à¨¬¥à, ¨áª«î票ï FPU
|
ᯥæ¨ä¨ª 樨 ¯à®æ¥áá®à (Intel-PC). ’ ª, ¯à¨¬¥à, ¨áª«î票ï
|
||||||
¨¬¥îâ ®¬¥à 16 (#MF), SSE - 19 (#XF).
|
FPU ¨¬¥îâ ®¬¥à 16 (#MF), SSE - 19 (#XF).
|
||||||
* ‚ ¤ ®© ॠ«¨§ 樨 ¨£®à¨àã¥âáï § ¯à®á ¯¥à¥å¢ ⠨᪫î票ï 7
|
* ‚ ¤ ®© ॠ«¨§ 樨 ¨£®à¨àã¥âáï § ¯à®á ¯¥à¥å¢ ⠨᪫î票ï 7
|
||||||
- á¨á⥬ ®¡à ¡ âë¢ ¥â #NM á ¬®áâ®ï⥫ì®.
|
- á¨á⥬ ®¡à ¡ âë¢ ¥â #NM á ¬®áâ®ï⥫ì®.
|
||||||
* <20>®«ì§®¢ ⥫ì᪨© ®¡à ¡®â稪 ¯®«ãç ¥â ®¬¥à ¨áª«îç¥¨ï ¯ à ¬¥â஬
|
* <20>®«ì§®¢ ⥫ì᪨© ®¡à ¡®â稪 ¯®«ãç ¥â ®¬¥à ¨áª«îç¥¨ï ¯ à ¬¥â஬
|
||||||
¢ á⥪¥. <20>®íâ®¬ã ¯à ¢¨«ìë© ¢ë室 ¨§ ®¡à ¡®â稪 : RET 4. ‚®§¢à â
|
¢ á⥪¥. <20>®íâ®¬ã ¯à ¢¨«ìë© ¢ë室 ¨§ ®¡à ¡®â稪 : RET 4. ‚®§¢à â
|
||||||
¯à¨ í⮬ ¯à®¨§¢®¤¨âáï ª®¬ ¤ã, ¢ë§¢ ¢èãî ¨áª«î票¥.
|
¯à¨ í⮬ ¯à®¨§¢®¤¨âáï ª®¬ ¤ã, ¢ë§¢ ¢èãî ¨áª«î票¥.
|
||||||
* <20>ਠ¯¥à¥¤ ç¥ ã¯à ¢«¥¨ï ®¡à ¡®â稪㠨᪫î票©, á¡à áë¢ ¥âáï
|
* <20>ਠ¯¥à¥¤ ç¥ ã¯à ¢«¥¨ï ®¡à ¡®â稪㠨᪫î票© á¡à áë¢ ¥âáï
|
||||||
ᮮ⢥âáâ¢ãî騩 ¡¨â ¢ ¬ ᪥ ¨áª«î票©. ‚®§¨ª®¢¥¨¥ í⮣® ¦¥
|
ᮮ⢥âáâ¢ãî騩 ¡¨â ¢ ¬ ᪥ ¨áª«î票©. ‚®§¨ª®¢¥¨¥ í⮣® ¦¥
|
||||||
¨áª«îç¥¨ï ¢ ¯®á«¥¤á⢨¨ - ¯à¨¢¥¤¥â ª default-®¡à ¡®âª¥ â ª®¢®£®.
|
¨áª«îç¥¨ï ¢¯®á«¥¤á⢨¨ ¯à¨¢¥¤ñâ ª 㬮«ç «ì®© ®¡à ¡®âª¥ â ª®¢®£®.
|
||||||
€ ¨¬¥®: ª § ¢¥à襨î à ¡®âë ¯à¨«®¦¥¨ï, ¨«¨ ¯à¨®áâ ®¢ª¥ á
|
€ ¨¬¥®: ª § ¢¥à襨î à ¡®âë ¯à¨«®¦¥¨ï ¢ ®âáãâá⢨¨ ®â« ¤ç¨ª ,
|
||||||
®â¨ä¨ª 樥© ®â« ¦¨¢ î饬㠯ਫ®¦¥¨î.
|
¯à¨®áâ ®¢ª á 㢥¤®¬«¥¨¥¬ ®â« ¦¨¢ î饣® ¯à¨«®¦¥¨ï ¨ ç¥.
|
||||||
* <20>®á«¥ § ¢¥àè¥¨ï ªà¨â¨ç¥áª¨å ¤¥©á⢨© ¢ ®¡à ¡®â稪¥ ¯®«ì§®¢ ⥫ï,
|
* <20>®á«¥ § ¢¥àè¥¨ï ªà¨â¨ç¥áª¨å ¤¥©á⢨© ¢ ®¡à ¡®â稪¥ ¯®«ì§®¢ ⥫ï
|
||||||
¢®ááâ ®¢«¥¨¥ ¡¨â ¬ ᪨ ¤ ®£® ¨áª«îç¥¨ï ¬®¦® ᤥ« âì
|
¢®ááâ ®¢«¥¨¥ ¡¨â ¬ ᪨ ¤ ®£® ¨áª«îç¥¨ï ¬®¦® ᤥ« âì
|
||||||
¯®¤äãªæ¨¥© 25. ‘¡à®á ä« £®¢ ¨áª«î票© ¢ ¬®¤ã«ïå FPU ¨ XMM -
|
¯®¤äãªæ¨¥© 25. ‘¡à®á ä« £®¢ ¨áª«î票© ¢ ¬®¤ã«ïå FPU ¨ XMM â ª¦¥
|
||||||
â ª¦¥ ¢®§« £ ¥âáï ®¡à ¡®â稪 ¯®«ì§®¢ ⥫ï.
|
¢®§« £ ¥âáï ®¡à ¡®â稪 ¯®«ì§®¢ ⥫ï.
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
= ”ãªæ¨ï 68, ¯®¤äãªæ¨ï 25 - ¨§¬¥¥¨¥ á®áâ®ï¨ï ªâ¨¢®á⨠ᨣ « =
|
= ”ãªæ¨ï 68, ¯®¤äãªæ¨ï 25 - ¨§¬¥¨âì á®áâ®ï¨¥ ªâ¨¢®á⨠ᨣ « . =
|
||||||
======================================================================
|
======================================================================
|
||||||
<EFBFBD> à ¬¥âàë:
|
<EFBFBD> à ¬¥âàë:
|
||||||
* eax = 68 - ®¬¥à äãªæ¨¨
|
* eax = 68 - ®¬¥à äãªæ¨¨
|
||||||
@ -3898,10 +3782,11 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
|||||||
* ecx = ®¬¥à ᨣ «
|
* ecx = ®¬¥à ᨣ «
|
||||||
* edx = § 票¥ ãáâ ¢«¨¢ ¥¬®© ªâ¨¢®á⨠(0/1)
|
* edx = § 票¥ ãáâ ¢«¨¢ ¥¬®© ªâ¨¢®á⨠(0/1)
|
||||||
‚®§¢à é ¥¬®¥ § 票¥:
|
‚®§¢à é ¥¬®¥ § 票¥:
|
||||||
* eax = áâ ஥ § 票¥ ªâ¨¢®á⨠ᨣ « (0/1)
|
* eax = -1 - § ¤ ¥¢¥àë© ®¬¥à ᨣ «
|
||||||
|
* ¨ ç¥ eax = áâ ஥ § 票¥ ªâ¨¢®á⨠ᨣ « (0/1)
|
||||||
‡ ¬¥ç ¨ï:
|
‡ ¬¥ç ¨ï:
|
||||||
* ‚ ⥪ã饩 ॠ«¨§ 樨 ¨§¬¥ï¥âáï ⮫쪮 ¬ ᪠¯®«ì§®¢ ⥫ì᪮£®
|
* ‚ ⥪ã饩 ॠ«¨§ 樨 ¨§¬¥ï¥âáï ⮫쪮 ¬ ᪠¯®«ì§®¢ ⥫ì᪮£®
|
||||||
®¡à ¡®â稪 ¨áª«î票©, ãáâ ®¢«¥®£® ¯®¤äãªæ¨¥© 24. <20>ਠí⮬,
|
®¡à ¡®â稪 ¨áª«î票©, ãáâ ®¢«¥®£® ¯®¤äãªæ¨¥© 24. <20>ਠí⮬
|
||||||
®¬¥à ᨣ « ᮮ⢥âáâ¢ã¥â ®¬¥à㠨᪫î票ï.
|
®¬¥à ᨣ « ᮮ⢥âáâ¢ã¥â ®¬¥à㠨᪫î票ï.
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
@ -4204,6 +4089,10 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
|||||||
* '/hd0/2/menuet/pics/tanzania.bmp',0
|
* '/hd0/2/menuet/pics/tanzania.bmp',0
|
||||||
* '/hd0/1/Program files/NameOfProgram/SomeFile.SomeExtension',0
|
* '/hd0/1/Program files/NameOfProgram/SomeFile.SomeExtension',0
|
||||||
* '/sys/MySuperApp.ini',0
|
* '/sys/MySuperApp.ini',0
|
||||||
|
’ ª¦¥ äãªæ¨ï ¯®¤¤¥à¦¨¢ ¥â ®â®á¨â¥«ìë¥ ¨¬¥ . …᫨ ¯ãâì ç¨ ¥âáï
|
||||||
|
¥ á '/', â® ® áç¨â ¥âáï ®â®á¨â¥«ì® ⥪ã饩 ¯ ¯ª¨. <20>®«ãç¨âì ¨«¨
|
||||||
|
ãáâ ®¢¨âì ⥪ãéãî ¯ ¯ªã ¬®¦® á ¯®¬®éìî á¨áäãªæ¨¨ 30.
|
||||||
|
|
||||||
„®áâã¯ë¥ ¯®¤äãªæ¨¨:
|
„®áâã¯ë¥ ¯®¤äãªæ¨¨:
|
||||||
* ¯®¤äãªæ¨ï 0 - ç⥨¥ ä ©«
|
* ¯®¤äãªæ¨ï 0 - ç⥨¥ ä ©«
|
||||||
* ¯®¤äãªæ¨ï 1 - ç⥨¥ ¯ ¯ª¨
|
* ¯®¤äãªæ¨ï 1 - ç⥨¥ ¯ ¯ª¨
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
SYSTEM FUNCTIONS of OS Kolibri 0.7.5.0
|
SYSTEM FUNCTIONS of OS Kolibri 0.7.7.0
|
||||||
|
|
||||||
Number of the function is located in the register eax.
|
Number of the function is located in the register eax.
|
||||||
The call of the system function is executed by "int 0x40" command.
|
The call of the system function is executed by "int 0x40" command.
|
||||||
@ -347,6 +347,7 @@ Returned value:
|
|||||||
* bit 0 (mask 1): window is maximized
|
* bit 0 (mask 1): window is maximized
|
||||||
* bit 1 (mask 2): window is minimized to panel
|
* bit 1 (mask 2): window is minimized to panel
|
||||||
* bit 2 (mask 4): window is rolled up
|
* bit 2 (mask 4): window is rolled up
|
||||||
|
* +71 = +0x47: dword: event mask
|
||||||
Remarks:
|
Remarks:
|
||||||
* Slots are numbered starting from 1.
|
* Slots are numbered starting from 1.
|
||||||
* Returned value is not a total number of threads, because there
|
* Returned value is not a total number of threads, because there
|
||||||
@ -376,8 +377,8 @@ Remarks:
|
|||||||
and idle time in waiting for interrupt (which can be got by call
|
and idle time in waiting for interrupt (which can be got by call
|
||||||
to subfunction 4 of function 18).
|
to subfunction 4 of function 18).
|
||||||
* Beginning from slot 2, the normal applications are placed.
|
* Beginning from slot 2, the normal applications are placed.
|
||||||
* Applications are placed in memory at the address 0x0
|
* The normal applications are placed in memory at the address
|
||||||
(kernel constant 'std_application_base_address').
|
0 (kernel constant 'std_application_base_address').
|
||||||
There is no intersection, as each process has its own page table.
|
There is no intersection, as each process has its own page table.
|
||||||
* At creation of the thread it is assigned the slot
|
* At creation of the thread it is assigned the slot
|
||||||
in the system table and identifier (Process/Thread IDentifier =
|
in the system table and identifier (Process/Thread IDentifier =
|
||||||
@ -844,12 +845,12 @@ Returned value:
|
|||||||
* function does not return value
|
* function does not return value
|
||||||
Structure of the buffer:
|
Structure of the buffer:
|
||||||
db a,b,c,d for version a.b.c.d
|
db a,b,c,d for version a.b.c.d
|
||||||
db UID_xxx: one of UID_NONE=0, UID_MENUET=1, UID_KOLIBRI=2
|
db 0: reserved
|
||||||
dd REV - kernel SVN revision number
|
dd REV - kernel SVN revision number
|
||||||
For Kolibri 0.7.1.0 kernel:
|
For Kolibri 0.7.7.0+ kernel:
|
||||||
db 0,7,0,0
|
db 0,7,7,0
|
||||||
db 2
|
db 0
|
||||||
dd 638
|
dd 1675
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
======= Function 18, subfunction 14 - wait for screen retrace. =======
|
======= Function 18, subfunction 14 - wait for screen retrace. =======
|
||||||
@ -1658,56 +1659,9 @@ Returned value:
|
|||||||
Remarks:
|
Remarks:
|
||||||
* If the buffer is too small to hold all data, only first (edx-1)
|
* If the buffer is too small to hold all data, only first (edx-1)
|
||||||
bytes are copied and than terminating 0 is inserted.
|
bytes are copied and than terminating 0 is inserted.
|
||||||
|
* By default, current folder for the thread is "/rd/1".
|
||||||
======================================================================
|
* At process/thread creation the current folder will be inherited
|
||||||
=============== Function 32 - delete file from ramdisk. ==============
|
from the parent.
|
||||||
======================================================================
|
|
||||||
Parameters:
|
|
||||||
* eax = 32 - function number
|
|
||||||
* ebx = pointer to the filename
|
|
||||||
Returned value:
|
|
||||||
* eax = 0 - success; otherwise file system error code
|
|
||||||
Remarks:
|
|
||||||
* This function is obsolete; function 58 allows to fulfill
|
|
||||||
the same operations with the extended possibilities.
|
|
||||||
* The current implementation returns only values 0(success) and
|
|
||||||
5(file not found).
|
|
||||||
* The filename must be either in the format 8+3 characters
|
|
||||||
(first 8 characters - name itself, last 3 - extension,
|
|
||||||
the short names and extensions are supplemented with spaces),
|
|
||||||
or in the format 8.3 characters "FILE.EXT"/"FILE.EX "
|
|
||||||
(name no more than 8 characters, dot, extension 3 characters
|
|
||||||
supplemented if necessary by spaces).
|
|
||||||
The filename must be written with capital letters. The terminating
|
|
||||||
character with code 0 is not necessary (not ASCIIZ-string).
|
|
||||||
* This function does not support folders on the ramdisk.
|
|
||||||
|
|
||||||
======================================================================
|
|
||||||
================ Function 33 - write file to ramdisk. ================
|
|
||||||
======================================================================
|
|
||||||
Parameters:
|
|
||||||
* eax = 33 - function number
|
|
||||||
* ebx = pointer to the filename
|
|
||||||
* ecx = pointer to data for writing
|
|
||||||
* edx = number of bytes for writing
|
|
||||||
* should be set esi=0
|
|
||||||
Returned value:
|
|
||||||
* eax = 0 - success, otherwise file system error code
|
|
||||||
Remarks:
|
|
||||||
* This function is obsolete; function 70 allows to fulfil
|
|
||||||
the same operations with extended possibilities.
|
|
||||||
* If esi contains non-zero value and selected file already exists,
|
|
||||||
one more file with the same name will be created.
|
|
||||||
* Otherwise file will be overwritten.
|
|
||||||
* The filename must be either in the format 8+3 characters
|
|
||||||
(first 8 characters - name itself, last 3 - extension,
|
|
||||||
the short names and extensions are supplemented with spaces),
|
|
||||||
or in the format 8.3 characters "FILE.EXT"/"FILE.EX "
|
|
||||||
(name no more than 8 characters, dot, extension 3 characters
|
|
||||||
supplemented if necessary by spaces).
|
|
||||||
The filename must be written with capital letters. The terminating
|
|
||||||
character with code 0 is not necessary (not ASCIIZ-string).
|
|
||||||
* This function does not support folders on the ramdisk.
|
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
======= Function 35 - read the color of a pixel on the screen. =======
|
======= Function 35 - read the color of a pixel on the screen. =======
|
||||||
@ -3260,59 +3214,6 @@ Remarks:
|
|||||||
Ralf Brown; registers of the second type must be listed
|
Ralf Brown; registers of the second type must be listed
|
||||||
in the device documentation.
|
in the device documentation.
|
||||||
|
|
||||||
======================================================================
|
|
||||||
===================== Function 62, subfunction 11 ====================
|
|
||||||
== Initialize user-accessible MMIO channel ==
|
|
||||||
======================================================================
|
|
||||||
Parameters:
|
|
||||||
* eax = 62 - function
|
|
||||||
* bl = 11 - subfunction
|
|
||||||
* cx = PCI-address (bbbbbbbb dddddfff)
|
|
||||||
Returns:
|
|
||||||
* eax = -1 - PCI access not granted;
|
|
||||||
* eax = -2 - no user MMIO access to this PCI address;
|
|
||||||
* eax = -3 - memory allocation error; otherwise
|
|
||||||
* eax = available user heap size.
|
|
||||||
Remarks:
|
|
||||||
* Low-level PCI access must be allowed (fn21:12)
|
|
||||||
* PCI-address should correspond the system var [mmio_pci_addr]
|
|
||||||
|
|
||||||
======================================================================
|
|
||||||
===================== Function 62, subfunction 12 ====================
|
|
||||||
== Request user-accessible MMIO address space ==
|
|
||||||
======================================================================
|
|
||||||
Parameters:
|
|
||||||
* eax = 62 - function
|
|
||||||
* bl = 12 - subfunction
|
|
||||||
* bh = BAR number in PCI configuration space
|
|
||||||
* ecx = MMIO-block size needed (bytes)
|
|
||||||
* edx = MMIO-offset (number of whole 4Kb-pages!)
|
|
||||||
Returns:
|
|
||||||
* eax = -1 - user PCI access denied;
|
|
||||||
* eax = -2 - invalid BAR number;
|
|
||||||
* eax = -3 - BAR contains no valid IO addres;
|
|
||||||
* eax = -4 - BAR addresses IO ports;
|
|
||||||
* eax = -5 - dynamic allocation error; otherwise
|
|
||||||
* eax = MMIO start address (in application's linear space).
|
|
||||||
Remarks:
|
|
||||||
* Low-level PCI access must be allowed (fn21:12)
|
|
||||||
* The system var [mmio_pci_addr] sets the actual PCI-address
|
|
||||||
* The granted MMIO addresses should be released after use (fn62:13)
|
|
||||||
|
|
||||||
======================================================================
|
|
||||||
===================== Function 62, subfunction 13 ====================
|
|
||||||
== Release a block of user MMIO addresses ==
|
|
||||||
======================================================================
|
|
||||||
<EFBFBD> à ¬¥âàë:
|
|
||||||
* eax = 62 - function
|
|
||||||
* bl = 12 - subfunction
|
|
||||||
* ecx = MMIO start address (in application's linear space).
|
|
||||||
Returns:
|
|
||||||
* eax = 1 if the block is successfully released;
|
|
||||||
* eax = 0 in case of reallocation error;
|
|
||||||
Remarks:
|
|
||||||
* A valid uMMIO block should exist at this address (fn62:12)
|
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
============== Function 63 - work with the debug board. ==============
|
============== Function 63 - work with the debug board. ==============
|
||||||
======================================================================
|
======================================================================
|
||||||
@ -3421,7 +3322,6 @@ Remarks:
|
|||||||
======================================================================
|
======================================================================
|
||||||
The input mode influences results of reading keys by function 2.
|
The input mode influences results of reading keys by function 2.
|
||||||
When a program loads, ASCII input mode is set for it.
|
When a program loads, ASCII input mode is set for it.
|
||||||
If subfunction is not support then eax=-1.
|
|
||||||
|
|
||||||
-------------- Subfunction 1 - set keyboard input mode. --------------
|
-------------- Subfunction 1 - set keyboard input mode. --------------
|
||||||
Parameters:
|
Parameters:
|
||||||
@ -3670,7 +3570,7 @@ Remarks:
|
|||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
===================== Function 68, subfunction 14 ====================
|
===================== Function 68, subfunction 14 ====================
|
||||||
====== Waiting delivering of signal from another program/driver ======
|
============ Wait for signal from another program/driver. ============
|
||||||
======================================================================
|
======================================================================
|
||||||
Parameters:
|
Parameters:
|
||||||
* eax = 68 - function number
|
* eax = 68 - function number
|
||||||
@ -3678,15 +3578,9 @@ Parameters:
|
|||||||
* ecx = pointer to the buffer for information (24 bytes)
|
* ecx = pointer to the buffer for information (24 bytes)
|
||||||
Returned value:
|
Returned value:
|
||||||
* buffer pointed to by ecx contains the following information:
|
* buffer pointed to by ecx contains the following information:
|
||||||
* +0: dword: identifier for underlying data of signal
|
* +0: dword: identifier for following data of signal
|
||||||
* +4: data of signal (20 bytes), format of which is defining by
|
* +4: dword: data of signal (20 bytes), format of which is defined
|
||||||
first dword
|
by the first dword
|
||||||
|
|
||||||
======================================================================
|
|
||||||
====== Function 68, subfunction 15 - set FPU exception handler. ======
|
|
||||||
======================================================================
|
|
||||||
Deleted (in current implementation only 0 is returned).
|
|
||||||
Using subfunctions 24, 25 is true.
|
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
============= Function 68, subfunction 16 - load driver. =============
|
============= Function 68, subfunction 16 - load driver. =============
|
||||||
@ -3720,22 +3614,12 @@ Parameters:
|
|||||||
* +16 = +0x10: dword: pointer to output data
|
* +16 = +0x10: dword: pointer to output data
|
||||||
* +20 = +0x14: dword: size of output data
|
* +20 = +0x14: dword: size of output data
|
||||||
Returned value:
|
Returned value:
|
||||||
* eax = error code
|
* eax = determined by driver
|
||||||
0 - successful call
|
|
||||||
-1 - any error.
|
|
||||||
-2, -3, -4, etc. reserved for kernel error codes
|
|
||||||
1, 2, 3, etc driver specific error codes
|
|
||||||
Remarks:
|
Remarks:
|
||||||
* Function codes and the structure of input/output data
|
* Function codes and the structure of input/output data
|
||||||
are defined by driver.
|
are defined by driver.
|
||||||
* Previously one must obtain driver handle by subfunction 16.
|
* Previously one must obtain driver handle by subfunction 16.
|
||||||
|
|
||||||
======================================================================
|
|
||||||
====== Function 68, subfunction 18 - set SSE exception handler. ======
|
|
||||||
======================================================================
|
|
||||||
Deleted (in current implementation only 0 is returned).
|
|
||||||
Using subfunctions 24, 25 is true.
|
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
=============== Function 68, subfunction 19 - load DLL. ==============
|
=============== Function 68, subfunction 19 - load DLL. ==============
|
||||||
======================================================================
|
======================================================================
|
||||||
@ -3775,36 +3659,92 @@ Remarks:
|
|||||||
the new and old sizes.
|
the new and old sizes.
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
====== Function 68, subfunction 24 - set new exceptions handler ======
|
======== Function 68, subfunction 22 - open named memory area. =======
|
||||||
|
======================================================================
|
||||||
|
Parameters:
|
||||||
|
* eax = 68 - function number
|
||||||
|
* ebx = 22 - subfunction number
|
||||||
|
* ecx = area name. Maximum of 31 characters with terminating zero
|
||||||
|
* edx = area size in bytes for SHM_CREATE and SHM_OPEN_ALWAYS
|
||||||
|
* esi = flags for open and access:
|
||||||
|
* SHM_OPEN = 0x00 - open existing memory area. If an area
|
||||||
|
with such name does not exist, the function
|
||||||
|
will return error code 5.
|
||||||
|
* SHM_OPEN_ALWAYS = 0x04 - open existing or create new
|
||||||
|
memory area.
|
||||||
|
* SHM_CREATE = 0x08 - create new memory area. If an area
|
||||||
|
with such name already exists, the function
|
||||||
|
will return error code 10.
|
||||||
|
* SHM_READ = 0x00 - only read access
|
||||||
|
* SHM_WRITE = 0x01 - read and write access
|
||||||
|
Returned value:
|
||||||
|
* eax = pointer to memory area, 0 if error has occured
|
||||||
|
* if new area is created (SHM_CREATE or SHM_OPEN_ALWAYS):
|
||||||
|
edx = 0 - success, otherwise - error code
|
||||||
|
* if existing area is opened (SHM_OPEN or SHM_OPEN_ALWAYS):
|
||||||
|
edx = error code (if eax=0) or area size in bytes
|
||||||
|
Error codes:
|
||||||
|
* E_NOTFOUND = 5
|
||||||
|
* E_ACCESS = 10
|
||||||
|
* E_NOMEM = 30
|
||||||
|
* E_PARAM = 33
|
||||||
|
Remarks:
|
||||||
|
* Before this call one must initialize process heap by call to
|
||||||
|
subfunction 11.
|
||||||
|
* If a new area is created, access flags set maximal rights
|
||||||
|
for other processes. An attempt from other process to open
|
||||||
|
with denied rights will fail with error code E_ACCESS.
|
||||||
|
* The process which has created an area always has write access.
|
||||||
|
|
||||||
|
======================================================================
|
||||||
|
======= Function 68, subfunction 23 - close named memory area. =======
|
||||||
|
======================================================================
|
||||||
|
Parameters:
|
||||||
|
* eax = 68 - function number
|
||||||
|
* ebx = 23 - subfunction number
|
||||||
|
* ecx = area name. Maximum of 31 characters with terminating zero
|
||||||
|
Returned value:
|
||||||
|
* eax destroyed
|
||||||
|
Remarks:
|
||||||
|
* A memory area is physically freed (with deleting all data and
|
||||||
|
freeing physical memory), when all threads which have opened
|
||||||
|
this area will close it.
|
||||||
|
* When thread is terminating, all opened by it areas are closed.
|
||||||
|
|
||||||
|
======================================================================
|
||||||
|
======== Function 68, subfunction 24 - set exception handler. ========
|
||||||
======================================================================
|
======================================================================
|
||||||
Parameters:
|
Parameters:
|
||||||
* eax = 68 - function number
|
* eax = 68 - function number
|
||||||
* ebx = 24 - subfunction number
|
* ebx = 24 - subfunction number
|
||||||
* ecx = address of the new exception handler
|
* ecx = address of the new exception handler
|
||||||
* edx = the mask of processing exceptions
|
* edx = the mask of handled exceptions
|
||||||
Returned value:
|
Returned value:
|
||||||
* eax = address of the old exception handler (0, if it was not set)
|
* eax = address of the old exception handler (0, if it was not set)
|
||||||
* ebx = the old mask of exception handler
|
* ebx = the old mask of handled exceptions
|
||||||
Remarks:
|
Remarks:
|
||||||
* Bit number in mask of exceptions is correspond to exception number
|
* Bit number in mask of exceptions corresponds to exception number
|
||||||
by CPU-specification (Intel-PC). For example, FPU-exception have
|
in CPU-specification (Intel-PC). For example, FPU exceptions have
|
||||||
number 16 (#MF), and SSE-exception - 19 (#XF)
|
number 16 (#MF), and SSE exceptions - 19 (#XF).
|
||||||
* The current implementation ignore the inquiry for hook of 7
|
* The current implementation ignores the inquiry for hook of 7
|
||||||
exception - system process #NM by one's own.
|
exception - the system handles #NM by its own.
|
||||||
* User handler get exception number in stack parameter. So, correct
|
* The exception handler is called with exception number as first
|
||||||
exit from handler is: RET 4. Return from handler is to the same
|
(and only) stack parameter. So, correct exit from the handler is
|
||||||
instruction, that was cause the exception
|
RET 4. It returns to the instruction, that caused the exception,
|
||||||
* When control is transfering to user handler, corresponding bit in
|
for faults, and to the next instruction for traps (see
|
||||||
exception mask is clearing. Rising this exception in consequence
|
classification of exceptions in CPU specification).
|
||||||
- reduce to default-handling. Exactly: terminating the application,
|
* When user handler receives control, the corresponding bit in
|
||||||
or suspending with debug-notify to owner.
|
the exception mask is cleared. Raising this exception
|
||||||
* After completion of critical operations in user handler, it may be
|
in consequence leads to default handling, that is,
|
||||||
rising corresponding bit in exception mask by using subfunction 25
|
terminating the application in absence of debugger or
|
||||||
Clearing exceptions flags in FPU and/or XMM modules - is
|
suspend with notification of debugger otherwise.
|
||||||
responsibility of user handler too.
|
* After user handler completes critical operations, it can set
|
||||||
|
the corresponding bit in the exception mask with subfunction 25.
|
||||||
|
Also user handler is responsible for clearing exceptions flags in
|
||||||
|
FPU and/or SSE.
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
==== Function 68, subfunction 25 - change state of signal activity ===
|
====== Function 68, subfunction 25 - set FPU exception handler. ======
|
||||||
======================================================================
|
======================================================================
|
||||||
Parameters:
|
Parameters:
|
||||||
* eax = 68 - function number
|
* eax = 68 - function number
|
||||||
@ -3812,14 +3752,15 @@ Parameters:
|
|||||||
* ecx = signal number
|
* ecx = signal number
|
||||||
* edx = value of activity (0/1)
|
* edx = value of activity (0/1)
|
||||||
Returned value:
|
Returned value:
|
||||||
* eax = value of old activity for this signal (0/1)
|
* eax = -1 - invalid signal number
|
||||||
|
* otherwise eax = old value of activity for this signal (0/1)
|
||||||
Remarks:
|
Remarks:
|
||||||
* In current implementation, it is changed only exception mask for
|
* In current implementation only mask for user excepton handler,
|
||||||
user exception handler, wich was previously set by subfunction 24.
|
which has been previously set by subfunction 24,
|
||||||
At that, number of signal correspond to exception number.
|
is changed. Signal number corresponds to exception number.
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
====================== Fucntion 69 - debugging. ======================
|
====================== Function 69 - debugging. ======================
|
||||||
======================================================================
|
======================================================================
|
||||||
A process can load other process as debugged by set of corresponding
|
A process can load other process as debugged by set of corresponding
|
||||||
bit by call to subfunction 7 of function 70.
|
bit by call to subfunction 7 of function 70.
|
||||||
@ -4111,6 +4052,10 @@ Examples:
|
|||||||
* '/hd0/2/menuet/pics/tanzania.bmp',0
|
* '/hd0/2/menuet/pics/tanzania.bmp',0
|
||||||
* '/hd0/1/Program files/NameOfProgram/SomeFile.SomeExtension',0
|
* '/hd0/1/Program files/NameOfProgram/SomeFile.SomeExtension',0
|
||||||
* '/sys/MySuperApp.ini',0
|
* '/sys/MySuperApp.ini',0
|
||||||
|
Also function supports relative names. If the path begins not
|
||||||
|
with '/', it is considered relative to a current folder. To get or
|
||||||
|
set a current folder, use the function 30.
|
||||||
|
|
||||||
Available subfunctions:
|
Available subfunctions:
|
||||||
* subfunction 0 - read file
|
* subfunction 0 - read file
|
||||||
* subfunction 1 - read folder
|
* subfunction 1 - read folder
|
||||||
|
@ -90,4 +90,6 @@ kernel_export \
|
|||||||
strchr,\
|
strchr,\
|
||||||
strrchr,\
|
strrchr,\
|
||||||
\
|
\
|
||||||
LFBAddress
|
LFBAddress,\
|
||||||
|
GetDisplay,\
|
||||||
|
SetScreen
|
||||||
|
@ -55,6 +55,7 @@ MANUAL_DESTROY equ 0x80000000
|
|||||||
DEV_PLAY equ 1
|
DEV_PLAY equ 1
|
||||||
DEV_STOP equ 2
|
DEV_STOP equ 2
|
||||||
DEV_CALLBACK equ 3
|
DEV_CALLBACK equ 3
|
||||||
|
DEV_GET_POS equ 9
|
||||||
|
|
||||||
struc IOCTL
|
struc IOCTL
|
||||||
{ .handle dd ?
|
{ .handle dd ?
|
||||||
@ -159,14 +160,65 @@ inp_size equ IOCTL.inp_size
|
|||||||
output equ IOCTL.output
|
output equ IOCTL.output
|
||||||
out_size equ IOCTL.out_size
|
out_size equ IOCTL.out_size
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
|
|
||||||
|
srv_calls dd service_proc.srv_getversion ; 0
|
||||||
|
dd service_proc.snd_create_buff ; 1
|
||||||
|
dd service_proc.snd_destroy_buff ; 2
|
||||||
|
dd service_proc.snd_setformat ; 3
|
||||||
|
dd service_proc.snd_getformat ; 4
|
||||||
|
dd service_proc.snd_reset ; 5
|
||||||
|
dd service_proc.snd_setpos ; 6
|
||||||
|
dd service_proc.snd_getpos ; 7
|
||||||
|
dd service_proc.snd_setbuff ; 8
|
||||||
|
dd service_proc.snd_out ; 9
|
||||||
|
dd service_proc.snd_play ; 10
|
||||||
|
dd service_proc.snd_stop ; 11
|
||||||
|
dd service_proc.snd_setvolume ; 12
|
||||||
|
dd service_proc.snd_getvolume ; 13
|
||||||
|
dd service_proc.snd_setpan ; 14
|
||||||
|
dd service_proc.snd_getpan ; 15
|
||||||
|
dd service_proc.snd_getbuffsize ; 16
|
||||||
|
dd service_proc.snd_getfreespace ; 17
|
||||||
|
dd service_proc.snd_settimebase ; 18
|
||||||
|
dd service_proc.snd_gettimestamp ; 19
|
||||||
|
srv_calls_end:
|
||||||
|
|
||||||
proc service_proc stdcall, ioctl:dword
|
proc service_proc stdcall, ioctl:dword
|
||||||
|
|
||||||
mov edi, [ioctl]
|
mov edi, [ioctl]
|
||||||
mov eax, [edi+io_code]
|
mov eax, [edi+io_code]
|
||||||
|
|
||||||
cmp eax, SRV_GETVERSION
|
cmp eax, (srv_calls_end-srv_calls)/4
|
||||||
jne @F
|
ja .fail
|
||||||
|
|
||||||
|
cmp eax, SND_DESTROY_BUFF
|
||||||
|
jb @F
|
||||||
|
|
||||||
|
; cmp [edi+inp_size], 4
|
||||||
|
; jb .fali
|
||||||
|
|
||||||
|
mov ebx, [edi+input]
|
||||||
|
mov edx, [ebx]
|
||||||
|
|
||||||
|
cmp [edx+STREAM.magic], 'WAVE'
|
||||||
|
jne .fail
|
||||||
|
|
||||||
|
cmp [edx+STREAM.size], STREAM.sizeof
|
||||||
|
jne .fail
|
||||||
|
|
||||||
|
@@:
|
||||||
|
jmp [srv_calls+eax*4]
|
||||||
|
|
||||||
|
|
||||||
|
.fail:
|
||||||
|
mov eax, -1
|
||||||
|
ret
|
||||||
|
|
||||||
|
align 4
|
||||||
|
.srv_getversion:
|
||||||
mov eax, [edi+output]
|
mov eax, [edi+output]
|
||||||
cmp [edi+out_size], 4
|
cmp [edi+out_size], 4
|
||||||
jne .fail
|
jne .fail
|
||||||
@ -174,9 +226,9 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
mov [eax], dword API_VERSION
|
mov [eax], dword API_VERSION
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
ret
|
ret
|
||||||
@@:
|
|
||||||
cmp eax, SND_CREATE_BUFF
|
align 4
|
||||||
jne @F
|
.snd_create_buff:
|
||||||
mov ebx, [edi+input]
|
mov ebx, [edi+input]
|
||||||
stdcall CreateBuffer,[ebx],[ebx+4]
|
stdcall CreateBuffer,[ebx],[ebx+4]
|
||||||
mov edi, [ioctl]
|
mov edi, [ioctl]
|
||||||
@ -184,121 +236,105 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
mov ecx, [ecx]
|
mov ecx, [ecx]
|
||||||
mov [ecx], ebx
|
mov [ecx], ebx
|
||||||
ret
|
ret
|
||||||
@@:
|
|
||||||
mov ebx, [edi+input]
|
|
||||||
mov edx, [ebx]
|
|
||||||
|
|
||||||
cmp [edx+STREAM.magic], 'WAVE'
|
align 4
|
||||||
jne .fail
|
.snd_destroy_buff:
|
||||||
|
|
||||||
cmp [edx+STREAM.size], STREAM_SIZE
|
|
||||||
jne .fail
|
|
||||||
|
|
||||||
cmp eax, SND_DESTROY_BUFF
|
|
||||||
jne @F
|
|
||||||
mov eax, edx
|
mov eax, edx
|
||||||
call DestroyBuffer ;edx= stream
|
call DestroyBuffer
|
||||||
ret
|
ret
|
||||||
@@:
|
|
||||||
cmp eax, SND_SETFORMAT
|
|
||||||
jne @F
|
|
||||||
stdcall SetFormat,edx,[ebx+4]
|
|
||||||
ret
|
|
||||||
@@:
|
|
||||||
cmp eax, SND_GETFORMAT
|
|
||||||
jne @F
|
|
||||||
|
|
||||||
|
align 4
|
||||||
|
.snd_setformat:
|
||||||
|
stdcall SetFormat, edx,[ebx+4]
|
||||||
|
ret
|
||||||
|
|
||||||
|
align 4
|
||||||
|
.snd_getformat:
|
||||||
movzx eax, word [edx+STREAM.format]
|
movzx eax, word [edx+STREAM.format]
|
||||||
mov ecx, [edi+output]
|
mov ecx, [edi+output]
|
||||||
mov ecx, [ecx]
|
mov ecx, [ecx]
|
||||||
mov [ecx], eax
|
mov [ecx], eax
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
ret
|
ret
|
||||||
@@:
|
|
||||||
cmp eax, SND_RESET
|
align 4
|
||||||
jne @F
|
.snd_reset:
|
||||||
stdcall ResetBuffer,edx,[ebx+4]
|
stdcall ResetBuffer,edx,[ebx+4]
|
||||||
ret
|
ret
|
||||||
@@:
|
|
||||||
cmp eax, SND_SETPOS
|
align 4
|
||||||
jne @F
|
.snd_setpos:
|
||||||
stdcall SetBufferPos,edx,[ebx+4]
|
stdcall SetBufferPos,edx,[ebx+4]
|
||||||
ret
|
ret
|
||||||
@@:
|
|
||||||
cmp eax, SND_GETPOS
|
align 4
|
||||||
jne @F
|
.snd_getpos:
|
||||||
stdcall GetBufferPos, edx
|
stdcall GetBufferPos, edx
|
||||||
mov edi, [ioctl]
|
mov edi, [ioctl]
|
||||||
mov ecx, [edi+output]
|
mov ecx, [edi+output]
|
||||||
mov ecx, [ecx]
|
mov ecx, [ecx]
|
||||||
mov [ecx], ebx
|
mov [ecx], ebx
|
||||||
ret
|
ret
|
||||||
@@:
|
|
||||||
cmp eax, SND_SETBUFF
|
align 4
|
||||||
jne @F
|
.snd_setbuff:
|
||||||
mov eax, [ebx+4]
|
mov eax, [ebx+4]
|
||||||
stdcall set_buffer, edx,eax,[ebx+8],[ebx+12]
|
stdcall set_buffer, edx,eax,[ebx+8],[ebx+12]
|
||||||
ret
|
ret
|
||||||
@@:
|
|
||||||
cmp eax, SND_SETVOLUME
|
align 4
|
||||||
jne @F
|
.snd_out:
|
||||||
|
mov eax, [ebx+4]
|
||||||
|
stdcall wave_out, edx,eax,[ebx+8]
|
||||||
|
ret
|
||||||
|
|
||||||
|
align 4
|
||||||
|
.snd_play:
|
||||||
|
stdcall play_buffer, edx,[ebx+4]
|
||||||
|
ret
|
||||||
|
|
||||||
|
align 4
|
||||||
|
.snd_stop:
|
||||||
|
stdcall stop_buffer, edx
|
||||||
|
ret
|
||||||
|
|
||||||
|
align 4
|
||||||
|
.snd_setvolume:
|
||||||
stdcall SetBufferVol,edx,[ebx+4],[ebx+8]
|
stdcall SetBufferVol,edx,[ebx+4],[ebx+8]
|
||||||
ret
|
ret
|
||||||
@@:
|
|
||||||
cmp eax, SND_GETVOLUME
|
|
||||||
jne @F
|
|
||||||
|
|
||||||
|
align 4
|
||||||
|
.snd_getvolume:
|
||||||
mov eax, [edi+output]
|
mov eax, [edi+output]
|
||||||
mov ecx, [eax]
|
mov ecx, [eax]
|
||||||
mov eax, [eax+4]
|
mov eax, [eax+4]
|
||||||
stdcall GetBufferVol,edx,ecx,eax
|
stdcall GetBufferVol,edx,ecx,eax
|
||||||
ret
|
ret
|
||||||
@@:
|
align 4
|
||||||
cmp eax, SND_SETPAN
|
.snd_setpan:
|
||||||
jne @F
|
|
||||||
stdcall SetBufferPan,edx,[ebx+4]
|
stdcall SetBufferPan,edx,[ebx+4]
|
||||||
ret
|
ret
|
||||||
@@:
|
|
||||||
cmp eax, SND_GETPAN
|
align 4
|
||||||
jne @F
|
.snd_getpan:
|
||||||
mov eax, [edx+STREAM.pan]
|
mov eax, [edx+STREAM.pan]
|
||||||
mov ebx, [edi+output]
|
mov ebx, [edi+output]
|
||||||
mov ebx, [ebx]
|
mov ebx, [ebx]
|
||||||
mov [ebx], eax
|
mov [ebx], eax
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
ret
|
ret
|
||||||
@@:
|
|
||||||
cmp eax, SND_OUT
|
|
||||||
jne @F
|
|
||||||
|
|
||||||
mov eax, [ebx+4]
|
align 4
|
||||||
stdcall wave_out, edx,eax,[ebx+8]
|
.snd_getbuffsize:
|
||||||
ret
|
|
||||||
@@:
|
|
||||||
cmp eax, SND_PLAY
|
|
||||||
jne @F
|
|
||||||
|
|
||||||
stdcall play_buffer, edx,[ebx+4]
|
|
||||||
ret
|
|
||||||
@@:
|
|
||||||
cmp eax, SND_STOP
|
|
||||||
jne @F
|
|
||||||
|
|
||||||
stdcall stop_buffer, edx
|
|
||||||
ret
|
|
||||||
@@:
|
|
||||||
cmp eax, SND_GETBUFFSIZE
|
|
||||||
jne @F
|
|
||||||
mov eax, [edx+STREAM.in_size]
|
mov eax, [edx+STREAM.in_size]
|
||||||
mov ecx, [edi+output]
|
mov ecx, [edi+output]
|
||||||
mov ecx, [ecx]
|
mov ecx, [ecx]
|
||||||
mov [ecx], eax
|
mov [ecx], eax
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
ret
|
ret
|
||||||
@@:
|
|
||||||
cmp eax, SND_GETFREESPACE
|
|
||||||
jne @F
|
|
||||||
|
|
||||||
|
align 4
|
||||||
|
.snd_getfreespace:
|
||||||
test [edx+STREAM.format], PCM_OUT
|
test [edx+STREAM.format], PCM_OUT
|
||||||
jz .fail
|
jz .fail
|
||||||
|
|
||||||
@ -307,12 +343,73 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
mov [ecx], ebx
|
mov [ecx], ebx
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
ret
|
ret
|
||||||
|
align 4
|
||||||
|
.snd_settimebase:
|
||||||
|
cmp [edi+inp_size], 12
|
||||||
|
jne .fail
|
||||||
|
|
||||||
|
mov eax, [ebx]
|
||||||
|
mov ebx, [ebx+4]
|
||||||
|
mov dword [edx+STREAM.time_base], eax
|
||||||
|
mov dword [edx+STREAM.time_base+4], ebx
|
||||||
|
xor eax, eax
|
||||||
|
ret
|
||||||
|
|
||||||
|
.snd_gettimestamp:
|
||||||
|
cmp [edi+out_size], 8
|
||||||
|
jne .fail
|
||||||
|
|
||||||
|
pushfd
|
||||||
|
cli
|
||||||
|
|
||||||
|
xor ebx, ebx
|
||||||
|
push 48
|
||||||
|
push ebx ; local storage
|
||||||
|
|
||||||
|
cmp [edx+STREAM.flags], SND_STOP
|
||||||
|
je @F
|
||||||
|
|
||||||
|
mov eax, esp
|
||||||
|
|
||||||
|
push edx
|
||||||
|
push edi
|
||||||
|
|
||||||
|
push 4 ;.out_size
|
||||||
|
push eax ;.output
|
||||||
|
push ebx ;.inp_size
|
||||||
|
push ebx ;.input
|
||||||
|
push DEV_GET_POS ;.code
|
||||||
|
push dword [hSound] ;.handle
|
||||||
|
mov eax, esp
|
||||||
|
|
||||||
|
stdcall ServiceHandler, eax
|
||||||
|
add esp, 6*4
|
||||||
|
|
||||||
|
pop edi
|
||||||
|
pop edx
|
||||||
|
|
||||||
|
test eax, eax
|
||||||
|
jz @F
|
||||||
|
|
||||||
|
mov dword [esp], 0 ; clear offset
|
||||||
@@:
|
@@:
|
||||||
.fail:
|
mov edi, [edi+output]
|
||||||
or eax, -1
|
|
||||||
|
emms
|
||||||
|
fild qword [edx+STREAM.time_stamp]
|
||||||
|
fiadd dword [esp] ; primary buffer offset
|
||||||
|
fidiv dword [esp+4] ; total_samples / frequency
|
||||||
|
fadd qword [edx+STREAM.time_base]
|
||||||
|
fstp qword [edi]
|
||||||
|
add esp, 8
|
||||||
|
|
||||||
|
popfd
|
||||||
|
|
||||||
|
xor eax, eax
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
|
|
||||||
restore handle
|
restore handle
|
||||||
restore io_code
|
restore io_code
|
||||||
restore input
|
restore input
|
||||||
@ -352,7 +449,7 @@ proc CreateBuffer stdcall, format:dword, size:dword
|
|||||||
|
|
||||||
call GetPid
|
call GetPid
|
||||||
mov ebx, eax
|
mov ebx, eax
|
||||||
mov eax, STREAM_SIZE
|
mov eax, STREAM.sizeof
|
||||||
|
|
||||||
call CreateObject
|
call CreateObject
|
||||||
test eax, eax
|
test eax, eax
|
||||||
@ -412,7 +509,6 @@ proc CreateBuffer stdcall, format:dword, size:dword
|
|||||||
mov [edi+STREAM.in_base], eax
|
mov [edi+STREAM.in_base], eax
|
||||||
mov [edi+STREAM.in_size], ecx
|
mov [edi+STREAM.in_size], ecx
|
||||||
add eax, 128
|
add eax, 128
|
||||||
; sub ecx, 128
|
|
||||||
mov [edi+STREAM.in_wp], eax
|
mov [edi+STREAM.in_wp], eax
|
||||||
mov [edi+STREAM.in_rp], eax
|
mov [edi+STREAM.in_rp], eax
|
||||||
mov [edi+STREAM.in_count], 0
|
mov [edi+STREAM.in_count], 0
|
||||||
@ -443,13 +539,22 @@ proc CreateBuffer stdcall, format:dword, size:dword
|
|||||||
stdcall AllocKernelSpace, dword 128*1024
|
stdcall AllocKernelSpace, dword 128*1024
|
||||||
|
|
||||||
mov edi, [str]
|
mov edi, [str]
|
||||||
|
xor ebx, ebx
|
||||||
|
|
||||||
mov [edi+STREAM.out_base], eax
|
mov [edi+STREAM.out_base], eax
|
||||||
mov [edi+STREAM.out_wp], eax
|
mov [edi+STREAM.out_wp], eax
|
||||||
mov [edi+STREAM.out_rp], eax
|
mov [edi+STREAM.out_rp], eax
|
||||||
mov [edi+STREAM.out_count], 0
|
mov [edi+STREAM.out_count], ebx
|
||||||
add eax, 64*1024
|
add eax, 64*1024
|
||||||
mov [edi+STREAM.out_top], eax
|
mov [edi+STREAM.out_top], eax
|
||||||
|
|
||||||
|
mov dword [edi+STREAM.time_base], ebx
|
||||||
|
mov dword [edi+STREAM.time_base+4], ebx
|
||||||
|
|
||||||
|
mov dword [edi+STREAM.time_stamp], ebx
|
||||||
|
mov dword [edi+STREAM.time_stamp+4], ebx
|
||||||
|
mov dword [edi+STREAM.last_ts], ebx
|
||||||
|
|
||||||
stdcall AllocPages, dword 64/4
|
stdcall AllocPages, dword 64/4
|
||||||
mov edi, [str]
|
mov edi, [str]
|
||||||
mov ebx, [edi+STREAM.out_base]
|
mov ebx, [edi+STREAM.out_base]
|
||||||
@ -488,7 +593,7 @@ proc CreateBuffer stdcall, format:dword, size:dword
|
|||||||
|
|
||||||
mov [ebx+STREAM.magic], 'WAVE'
|
mov [ebx+STREAM.magic], 'WAVE'
|
||||||
mov [ebx+STREAM.destroy], DestroyBuffer.destroy
|
mov [ebx+STREAM.destroy], DestroyBuffer.destroy
|
||||||
mov [ebx+STREAM.size], STREAM_SIZE
|
mov [ebx+STREAM.size], STREAM.sizeof
|
||||||
mov [ebx+STREAM.flags], SND_STOP
|
mov [ebx+STREAM.flags], SND_STOP
|
||||||
|
|
||||||
pushf
|
pushf
|
||||||
@ -857,6 +962,26 @@ proc SetBufferVol stdcall, str:dword,l_vol:dword,r_vol:dword
|
|||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
|
|
||||||
|
proc minw stdcall, arg1:dword, arg2:dword
|
||||||
|
mov ax, word [arg1]
|
||||||
|
cmp ax, word [arg2]
|
||||||
|
jle @f
|
||||||
|
mov eax, [arg2]
|
||||||
|
@@:
|
||||||
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
|
proc maxw stdcall, arg1:dword, arg2:dword
|
||||||
|
mov ax, word [arg1]
|
||||||
|
cmp ax, word [arg2]
|
||||||
|
jge @f
|
||||||
|
mov eax, [arg2]
|
||||||
|
@@:
|
||||||
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
|
|
||||||
proc set_vol_param stdcall, l_vol:dword,r_vol:dword,pan:dword
|
proc set_vol_param stdcall, l_vol:dword,r_vol:dword,pan:dword
|
||||||
locals
|
locals
|
||||||
_600 dd ?
|
_600 dd ?
|
||||||
@ -870,31 +995,34 @@ proc set_vol_param stdcall, l_vol:dword,r_vol:dword,pan:dword
|
|||||||
lea ebx, [state]
|
lea ebx, [state]
|
||||||
fnsave [ebx]
|
fnsave [ebx]
|
||||||
|
|
||||||
movq mm0, qword [l_vol]
|
stdcall minw, [l_vol], [vol_max]
|
||||||
pminsw mm0, qword [vol_max]
|
stdcall maxw, eax, [vol_min]
|
||||||
pmaxsw mm0, qword [vol_min]
|
mov [l_vol], eax
|
||||||
movq qword [l_vol], mm0
|
mov [edx+STREAM.l_vol], eax
|
||||||
movq qword [edx+STREAM.l_vol], mm0
|
stdcall minw, [r_vol], [vol_max+4]
|
||||||
|
stdcall maxw, eax, [vol_min+4]
|
||||||
|
mov [r_vol], eax
|
||||||
|
mov [edx+STREAM.r_vol], eax
|
||||||
|
|
||||||
movd mm1,[pan]
|
stdcall minw, [pan], [pan_max]
|
||||||
pminsw mm1, qword [pan_max]
|
stdcall maxw, eax, [vol_min]
|
||||||
pmaxsw mm1, qword [vol_min]
|
mov [edx+STREAM.pan], eax
|
||||||
movd [edx+STREAM.pan], mm1
|
|
||||||
|
|
||||||
cmp word [edx+STREAM.pan], 0
|
cmp word [edx+STREAM.pan], 0
|
||||||
jl @F
|
jl @f
|
||||||
|
|
||||||
psubsw mm0,mm1
|
mov ebx, [l_vol]
|
||||||
pminsw mm0, qword [vol_max]
|
sub ebx, eax
|
||||||
pmaxsw mm0, qword [vol_min]
|
stdcall minw, ebx, [vol_max]
|
||||||
movd [l_vol],mm0
|
stdcall maxw, eax, [vol_min]
|
||||||
|
mov [l_vol], eax
|
||||||
jmp .calc_amp
|
jmp .calc_amp
|
||||||
@@:
|
@@:
|
||||||
punpckhdq mm0,mm0
|
mov ebx, [r_vol]
|
||||||
paddsw mm0,mm1
|
add ebx, [pan]
|
||||||
pminsw mm0, qword [vol_max]
|
stdcall minw, ebx, [vol_max+4]
|
||||||
pmaxsw mm0, qword [vol_min]
|
stdcall maxw, eax, [vol_min+4]
|
||||||
movd [r_vol], mm0
|
mov [r_vol], eax
|
||||||
.calc_amp:
|
.calc_amp:
|
||||||
emms
|
emms
|
||||||
fild word [l_vol]
|
fild word [l_vol]
|
||||||
@ -935,6 +1063,7 @@ proc set_vol_param stdcall, l_vol:dword,r_vol:dword,pan:dword
|
|||||||
ret 0
|
ret 0
|
||||||
endp
|
endp
|
||||||
|
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
proc GetBufferVol stdcall, str:dword,p_lvol:dword,p_rvol:dword
|
proc GetBufferVol stdcall, str:dword,p_lvol:dword,p_rvol:dword
|
||||||
|
|
||||||
@ -1039,7 +1168,7 @@ do_mix_list:
|
|||||||
cmp [ebx+STREAM.magic], 'WAVE'
|
cmp [ebx+STREAM.magic], 'WAVE'
|
||||||
jne .next
|
jne .next
|
||||||
|
|
||||||
cmp [ebx+STREAM.size], STREAM_SIZE
|
cmp [ebx+STREAM.size], STREAM.sizeof
|
||||||
jne .next
|
jne .next
|
||||||
|
|
||||||
cmp [ebx+STREAM.flags], SND_PLAY;
|
cmp [ebx+STREAM.flags], SND_PLAY;
|
||||||
@ -1108,7 +1237,7 @@ prepare_playlist:
|
|||||||
cmp [edi+STREAM.magic], 'WAVE'
|
cmp [edi+STREAM.magic], 'WAVE'
|
||||||
jne .next
|
jne .next
|
||||||
|
|
||||||
cmp [edi+STREAM.size], STREAM_SIZE
|
cmp [edi+STREAM.size], STREAM.sizeof
|
||||||
jne .next
|
jne .next
|
||||||
|
|
||||||
cmp [edi+STREAM.flags], SND_PLAY;
|
cmp [edi+STREAM.flags], SND_PLAY;
|
||||||
|
@ -91,6 +91,8 @@ SND_SETPAN equ 14
|
|||||||
SND_GETPAN equ 15
|
SND_GETPAN equ 15
|
||||||
SND_GETBUFFSIZE equ 16
|
SND_GETBUFFSIZE equ 16
|
||||||
SND_GETFREESPACE equ 17
|
SND_GETFREESPACE equ 17
|
||||||
|
SND_SETTIMEBASE equ 18
|
||||||
|
SND_GETTIMESTAMP equ 19
|
||||||
|
|
||||||
struc STREAM
|
struc STREAM
|
||||||
{
|
{
|
||||||
@ -113,6 +115,23 @@ struc STREAM
|
|||||||
.out_count dd ?
|
.out_count dd ?
|
||||||
.out_top dd ? ;16*4
|
.out_top dd ? ;16*4
|
||||||
|
|
||||||
|
.in_base dd ?
|
||||||
|
.in_size dd ?
|
||||||
|
.in_wp dd ?
|
||||||
|
.in_rp dd ?
|
||||||
|
.in_count dd ?
|
||||||
|
.in_free dd ?
|
||||||
|
.in_top dd ?
|
||||||
|
|
||||||
|
align 8
|
||||||
|
|
||||||
|
.time_base dq ?
|
||||||
|
.time_stamp dq ?
|
||||||
|
.last_ts dd ?
|
||||||
|
|
||||||
|
.notify_event dd ?
|
||||||
|
.notify_id dd ?
|
||||||
|
|
||||||
.r_size dd ?
|
.r_size dd ?
|
||||||
.r_dt dd ?
|
.r_dt dd ?
|
||||||
.r_silence dd ?
|
.r_silence dd ?
|
||||||
@ -125,19 +144,9 @@ struc STREAM
|
|||||||
.l_amp_f dd ? ;float point left
|
.l_amp_f dd ? ;float point left
|
||||||
.r_amp_f dd ? ;float point right
|
.r_amp_f dd ? ;float point right
|
||||||
|
|
||||||
.in_base dd ?
|
.sizeof:
|
||||||
.in_size dd ?
|
|
||||||
.in_wp dd ?
|
|
||||||
.in_rp dd ?
|
|
||||||
.in_count dd ?
|
|
||||||
.in_free dd ?
|
|
||||||
.in_top dd ?
|
|
||||||
|
|
||||||
.notify_event dd ?
|
|
||||||
.notify_id dd ?
|
|
||||||
}
|
}
|
||||||
|
|
||||||
STREAM_SIZE equ 36*4
|
|
||||||
FD_OFFSET equ 24
|
FD_OFFSET equ 24
|
||||||
|
|
||||||
virtual at 0
|
virtual at 0
|
||||||
|
@ -29,7 +29,7 @@ proc new_mix stdcall, output:dword
|
|||||||
and eax, -16 ;must be 16b aligned
|
and eax, -16 ;must be 16b aligned
|
||||||
call FpuSave
|
call FpuSave
|
||||||
|
|
||||||
call update_stream
|
call update_streams
|
||||||
.mix:
|
.mix:
|
||||||
lea eax, [mix_list]
|
lea eax, [mix_list]
|
||||||
call do_mix_list
|
call do_mix_list
|
||||||
@ -87,7 +87,7 @@ end if
|
|||||||
endp
|
endp
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
proc update_stream
|
proc update_streams
|
||||||
locals
|
locals
|
||||||
stream_index dd ?
|
stream_index dd ?
|
||||||
event rd 6
|
event rd 6
|
||||||
@ -98,6 +98,10 @@ proc update_stream
|
|||||||
mov edx, [stream_index]
|
mov edx, [stream_index]
|
||||||
mov esi, [play_list+edx*4]
|
mov esi, [play_list+edx*4]
|
||||||
|
|
||||||
|
add dword [esi+STREAM.time_stamp], 4096
|
||||||
|
adc dword [esi+STREAM.time_stamp+4], 0
|
||||||
|
mov dword [esi+STREAM.last_ts], 0
|
||||||
|
|
||||||
mov eax, [esi+STREAM.out_rp]
|
mov eax, [esi+STREAM.out_rp]
|
||||||
cmp eax, [esi+STREAM.out_top]
|
cmp eax, [esi+STREAM.out_top]
|
||||||
jb @f
|
jb @f
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
format MS COFF
|
format MS COFF
|
||||||
|
|
||||||
include 'config.inc'
|
include 'CONFIG.INC'
|
||||||
|
|
||||||
;structs----------------------------------------------------------
|
;structs----------------------------------------------------------
|
||||||
struc IOCTL
|
struc IOCTL
|
||||||
@ -33,7 +33,7 @@ include '..\imports.inc'
|
|||||||
|
|
||||||
section '.flat' code readable align 16
|
section '.flat' code readable align 16
|
||||||
|
|
||||||
include 'sb16.inc'
|
include 'SB16.INC'
|
||||||
|
|
||||||
;-------------------------------------------------------------------------------
|
;-------------------------------------------------------------------------------
|
||||||
proc START stdcall, state:dword
|
proc START stdcall, state:dword
|
||||||
|
@ -16,10 +16,6 @@ API_VERSION equ 0 ;debug
|
|||||||
include 'proc32.inc'
|
include 'proc32.inc'
|
||||||
include 'imports.inc'
|
include 'imports.inc'
|
||||||
|
|
||||||
OS_BASE equ 0;
|
|
||||||
new_app_base equ 0x60400000
|
|
||||||
PROC_BASE equ OS_BASE+0x0080000
|
|
||||||
|
|
||||||
struc IOCTL
|
struc IOCTL
|
||||||
{ .handle dd ?
|
{ .handle dd ?
|
||||||
.io_code dd ?
|
.io_code dd ?
|
||||||
|
@ -138,6 +138,7 @@ DEV_NOTIFY equ 5
|
|||||||
DEV_SET_MASTERVOL equ 6
|
DEV_SET_MASTERVOL equ 6
|
||||||
DEV_GET_MASTERVOL equ 7
|
DEV_GET_MASTERVOL equ 7
|
||||||
DEV_GET_INFO equ 8
|
DEV_GET_INFO equ 8
|
||||||
|
DEV_GET_POS equ 9
|
||||||
|
|
||||||
struc AC_CNTRL ;AC controller base class
|
struc AC_CNTRL ;AC controller base class
|
||||||
{ .bus dd ?
|
{ .bus dd ?
|
||||||
@ -333,46 +334,7 @@ proc START stdcall, state:dword
|
|||||||
mov esi, msgDone
|
mov esi, msgDone
|
||||||
call SysMsgBoardStr
|
call SysMsgBoardStr
|
||||||
|
|
||||||
if IRQ_REMAP
|
stdcall AttachIntHandler, 17, ac97_irq, dword 0
|
||||||
pushf
|
|
||||||
cli
|
|
||||||
|
|
||||||
mov ebx, [ctrl.int_line]
|
|
||||||
in al, 0xA1
|
|
||||||
mov ah, al
|
|
||||||
in al, 0x21
|
|
||||||
test ebx, ebx
|
|
||||||
jz .skip
|
|
||||||
bts ax, bx ;mask old line
|
|
||||||
.skip
|
|
||||||
bts ax, IRQ_LINE ;mask new ine
|
|
||||||
out 0x21, al
|
|
||||||
mov al, ah
|
|
||||||
out 0xA1, al
|
|
||||||
;remap IRQ
|
|
||||||
stdcall PciWrite8, 0, 0xF8, 0x61, IRQ_LINE
|
|
||||||
|
|
||||||
mov dx, 0x4d0 ;8259 ELCR1
|
|
||||||
in al, dx
|
|
||||||
bts ax, IRQ_LINE
|
|
||||||
out dx, al ;set level-triggered mode
|
|
||||||
mov [ctrl.int_line], IRQ_LINE
|
|
||||||
popf
|
|
||||||
mov esi, msgRemap
|
|
||||||
call SysMsgBoardStr
|
|
||||||
end if
|
|
||||||
|
|
||||||
mov eax, VALID_IRQ
|
|
||||||
mov ebx, [ctrl.int_line]
|
|
||||||
mov esi, msgInvIRQ
|
|
||||||
bt eax, ebx
|
|
||||||
jnc .fail_msg
|
|
||||||
mov eax, ATTCH_IRQ
|
|
||||||
mov esi, msgAttchIRQ
|
|
||||||
bt eax, ebx
|
|
||||||
jnc .fail_msg
|
|
||||||
|
|
||||||
stdcall AttachIntHandler, ebx, ac97_irq, dword 0
|
|
||||||
.reg:
|
.reg:
|
||||||
stdcall RegService, sz_sound_srv, service_proc
|
stdcall RegService, sz_sound_srv, service_proc
|
||||||
ret
|
ret
|
||||||
@ -453,6 +415,21 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
mov ebx, [edi+output]
|
mov ebx, [edi+output]
|
||||||
stdcall get_master_vol, ebx
|
stdcall get_master_vol, ebx
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
@@:
|
||||||
|
cmp eax, DEV_GET_POS
|
||||||
|
jne @F
|
||||||
|
|
||||||
|
mov ebx, 8192
|
||||||
|
mov edx, 0x18
|
||||||
|
xor eax, eax
|
||||||
|
call [ctrl.ctrl_read16]
|
||||||
|
sub ebx, eax
|
||||||
|
shr ebx, 1
|
||||||
|
mov edx, [edi+output]
|
||||||
|
mov [edx], ebx
|
||||||
|
xor eax, eax
|
||||||
|
ret
|
||||||
;@@:
|
;@@:
|
||||||
; cmp eax, DEV_GET_INFO
|
; cmp eax, DEV_GET_INFO
|
||||||
; jne @F
|
; jne @F
|
||||||
@ -480,6 +457,22 @@ proc ac97_irq
|
|||||||
call SysMsgBoardStr
|
call SysMsgBoardStr
|
||||||
end if
|
end if
|
||||||
|
|
||||||
|
mov edx, CTRL_STAT
|
||||||
|
call [ctrl.ctrl_read32]
|
||||||
|
|
||||||
|
push eax
|
||||||
|
|
||||||
|
test eax, 0x40
|
||||||
|
jnz .do_intr
|
||||||
|
|
||||||
|
test eax, eax
|
||||||
|
jz .done
|
||||||
|
|
||||||
|
mov edx, CTRL_STAT
|
||||||
|
call [ctrl.ctrl_write32]
|
||||||
|
jmp .done
|
||||||
|
|
||||||
|
.do_intr:
|
||||||
mov edx, PCM_OUT_CR_REG
|
mov edx, PCM_OUT_CR_REG
|
||||||
mov al, 0x10; 0x10
|
mov al, 0x10; 0x10
|
||||||
call [ctrl.ctrl_write8]
|
call [ctrl.ctrl_write8]
|
||||||
@ -513,17 +506,21 @@ proc ac97_irq
|
|||||||
mov ebx, dword [buff_list+eax*4]
|
mov ebx, dword [buff_list+eax*4]
|
||||||
|
|
||||||
cmp [ctrl.user_callback], 0
|
cmp [ctrl.user_callback], 0
|
||||||
je @f
|
je .done
|
||||||
|
|
||||||
stdcall [ctrl.user_callback], ebx
|
stdcall [ctrl.user_callback], ebx
|
||||||
@@:
|
.done:
|
||||||
|
pop eax
|
||||||
|
and eax, 0x40
|
||||||
|
mov edx, CTRL_STAT
|
||||||
|
call [ctrl.ctrl_write32]
|
||||||
ret
|
ret
|
||||||
|
|
||||||
.skip:
|
.skip:
|
||||||
mov edx, PCM_OUT_CR_REG
|
mov edx, PCM_OUT_CR_REG
|
||||||
mov ax, 0x11 ;0x1D
|
mov ax, 0x11 ;0x1D
|
||||||
call [ctrl.ctrl_write8]
|
call [ctrl.ctrl_write8]
|
||||||
ret
|
jmp .done
|
||||||
|
|
||||||
endp
|
endp
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
@ -776,6 +773,8 @@ end if
|
|||||||
and eax, 0xFF
|
and eax, 0xFF
|
||||||
mov [ctrl.cfg_reg], eax
|
mov [ctrl.cfg_reg], eax
|
||||||
|
|
||||||
|
mov [ctrl.user_callback], 0
|
||||||
|
|
||||||
call [ctrl.ctrl_setup]
|
call [ctrl.ctrl_setup]
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
inc eax
|
inc eax
|
||||||
|
@ -67,9 +67,11 @@ free_cd_channel:
|
|||||||
jne .IDE_Channel_2
|
jne .IDE_Channel_2
|
||||||
.IDE_Channel_1:
|
.IDE_Channel_1:
|
||||||
mov [IDE_Channel_1],0
|
mov [IDE_Channel_1],0
|
||||||
|
sti
|
||||||
ret
|
ret
|
||||||
.IDE_Channel_2:
|
.IDE_Channel_2:
|
||||||
mov [IDE_Channel_2],0
|
mov [IDE_Channel_2],0
|
||||||
|
sti
|
||||||
ret
|
ret
|
||||||
|
|
||||||
uglobal
|
uglobal
|
||||||
|
@ -94,12 +94,34 @@ hotkey_do_test:
|
|||||||
pop eax
|
pop eax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
align 4
|
||||||
|
|
||||||
|
set_keyboard_data:
|
||||||
|
|
||||||
|
movzx eax,word[TASK_COUNT] ; top window process
|
||||||
|
movzx eax,word[WIN_POS+eax*2]
|
||||||
|
shl eax,8
|
||||||
|
mov al,[SLOT_BASE+eax+APPDATA.keyboard_mode]
|
||||||
|
mov [keyboard_mode],al
|
||||||
|
|
||||||
|
mov eax, ecx
|
||||||
|
|
||||||
|
push ebx
|
||||||
|
push esi
|
||||||
|
push edi
|
||||||
|
push ebp
|
||||||
|
|
||||||
|
call send_scancode
|
||||||
|
|
||||||
|
pop ebp
|
||||||
|
pop edi
|
||||||
|
pop esi
|
||||||
|
pop ebx
|
||||||
|
ret
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
irq1:
|
irq1:
|
||||||
; save_ring3_context
|
|
||||||
; mov ax, os_data
|
|
||||||
; mov ds, ax
|
|
||||||
; mov es, ax
|
|
||||||
|
|
||||||
movzx eax,word[TASK_COUNT] ; top window process
|
movzx eax,word[TASK_COUNT] ; top window process
|
||||||
movzx eax,word[WIN_POS+eax*2]
|
movzx eax,word[WIN_POS+eax*2]
|
||||||
@ -108,6 +130,9 @@ irq1:
|
|||||||
mov [keyboard_mode],al
|
mov [keyboard_mode],al
|
||||||
|
|
||||||
in al,0x60
|
in al,0x60
|
||||||
|
|
||||||
|
send_scancode:
|
||||||
|
|
||||||
mov [keyboard_data],al
|
mov [keyboard_data],al
|
||||||
|
|
||||||
; ch = scancode
|
; ch = scancode
|
||||||
@ -310,11 +335,6 @@ irq1:
|
|||||||
.exit.irq1:
|
.exit.irq1:
|
||||||
mov [check_idle_semaphore],5
|
mov [check_idle_semaphore],5
|
||||||
|
|
||||||
; mov al,0x20 ; ready for next irq
|
|
||||||
; out 0x20,al
|
|
||||||
|
|
||||||
; restore_ring3_context
|
|
||||||
; iret
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
set_lights:
|
set_lights:
|
||||||
|
@ -292,21 +292,20 @@ __sys_disable_mouse:
|
|||||||
add ecx,eax
|
add ecx,eax
|
||||||
add ecx, [_WinMapAddress]
|
add ecx, [_WinMapAddress]
|
||||||
mov eax, [CURRENT_TASK]
|
mov eax, [CURRENT_TASK]
|
||||||
movzx ebx, byte [ecx]
|
cmp al, [ecx]
|
||||||
cmp eax,ebx
|
|
||||||
je yes_mouse_disable
|
je yes_mouse_disable
|
||||||
movzx ebx, byte [ecx+16]
|
cmp al, [ecx+16]
|
||||||
cmp eax,ebx
|
|
||||||
je yes_mouse_disable
|
je yes_mouse_disable
|
||||||
|
add ebx, 10
|
||||||
|
cmp ebx, [Screen_Max_Y]
|
||||||
|
jae no_mouse_disable
|
||||||
mov ebx,[Screen_Max_X]
|
mov ebx,[Screen_Max_X]
|
||||||
inc ebx
|
inc ebx
|
||||||
imul ebx,10
|
imul ebx,10
|
||||||
add ecx,ebx
|
add ecx,ebx
|
||||||
movzx ebx, byte [ecx]
|
cmp al, [ecx]
|
||||||
cmp eax,ebx
|
|
||||||
je yes_mouse_disable
|
je yes_mouse_disable
|
||||||
movzx ebx, byte [ecx+16]
|
cmp al, [ecx+16]
|
||||||
cmp eax,ebx
|
|
||||||
je yes_mouse_disable
|
je yes_mouse_disable
|
||||||
jmp no_mouse_disable
|
jmp no_mouse_disable
|
||||||
yes_mouse_disable:
|
yes_mouse_disable:
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;;
|
;;
|
||||||
;; Copyright (C) KolibriOS team 2004-2010. All rights reserved.
|
;; Copyright (C) KolibriOS team 2004-2011. All rights reserved.
|
||||||
;; PROGRAMMING:
|
;; PROGRAMMING:
|
||||||
;; Ivan Poddubny
|
;; Ivan Poddubny
|
||||||
;; Marat Zakiyanov (Mario79)
|
;; Marat Zakiyanov (Mario79)
|
||||||
@ -19,6 +19,17 @@
|
|||||||
;; SPraid (simba)
|
;; SPraid (simba)
|
||||||
;; Hidnplayr
|
;; Hidnplayr
|
||||||
;; Alexey Teplov (<Lrz>)
|
;; Alexey Teplov (<Lrz>)
|
||||||
|
;; Rus
|
||||||
|
;; Nable
|
||||||
|
;; shurf
|
||||||
|
;; Alver
|
||||||
|
;; Maxis
|
||||||
|
;; Galkov
|
||||||
|
;; CleverMouse
|
||||||
|
;; tsdima
|
||||||
|
;; turbanoff
|
||||||
|
;; Asper
|
||||||
|
;; art_zh
|
||||||
;;
|
;;
|
||||||
;; Data in this file was originally part of MenuetOS project which is
|
;; Data in this file was originally part of MenuetOS project which is
|
||||||
;; distributed under the terms of GNU GPL. It is modified and redistributed as
|
;; distributed under the terms of GNU GPL. It is modified and redistributed as
|
||||||
@ -220,8 +231,8 @@ B32:
|
|||||||
; CLEAR 0x280000 - HEAP_BASE
|
; CLEAR 0x280000 - HEAP_BASE
|
||||||
|
|
||||||
xor eax,eax
|
xor eax,eax
|
||||||
mov edi,0x280000
|
mov edi,CLEAN_ZONE
|
||||||
mov ecx,(HEAP_BASE-OS_BASE-0x280000) / 4
|
mov ecx,(HEAP_BASE-OS_BASE-CLEAN_ZONE) / 4
|
||||||
cld
|
cld
|
||||||
rep stosd
|
rep stosd
|
||||||
|
|
||||||
@ -237,7 +248,7 @@ B32:
|
|||||||
; SAVE & CLEAR 0-0xffff
|
; SAVE & CLEAR 0-0xffff
|
||||||
|
|
||||||
xor esi, esi
|
xor esi, esi
|
||||||
mov edi,0x2F0000
|
mov edi,(BOOT_VAR-OS_BASE)
|
||||||
mov ecx,0x10000 / 4
|
mov ecx,0x10000 / 4
|
||||||
rep movsd
|
rep movsd
|
||||||
mov edi,0x1000
|
mov edi,0x1000
|
||||||
@ -605,6 +616,8 @@ high_code:
|
|||||||
; Enable timer IRQ (IRQ0) and hard drives IRQs (IRQ14, IRQ15)
|
; Enable timer IRQ (IRQ0) and hard drives IRQs (IRQ14, IRQ15)
|
||||||
; they are used: when partitions are scanned, hd_read relies on timer
|
; they are used: when partitions are scanned, hd_read relies on timer
|
||||||
call unmask_timer
|
call unmask_timer
|
||||||
|
stdcall enable_irq, 12
|
||||||
|
stdcall enable_irq, 1
|
||||||
stdcall enable_irq, 14
|
stdcall enable_irq, 14
|
||||||
stdcall enable_irq, 15
|
stdcall enable_irq, 15
|
||||||
|
|
||||||
@ -621,11 +634,14 @@ include 'detect/disks.inc'
|
|||||||
|
|
||||||
call Parser_params
|
call Parser_params
|
||||||
|
|
||||||
|
if ~ defined extended_primary_loader
|
||||||
|
; ramdisk image should be loaded by extended primary loader if it exists
|
||||||
; READ RAMDISK IMAGE FROM HD
|
; READ RAMDISK IMAGE FROM HD
|
||||||
|
|
||||||
;!!!!!!!!!!!!!!!!!!!!!!!
|
;!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
include 'boot/rdload.inc'
|
include 'boot/rdload.inc'
|
||||||
;!!!!!!!!!!!!!!!!!!!!!!!
|
;!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
end if
|
||||||
; mov [dma_hdd],1
|
; mov [dma_hdd],1
|
||||||
; CALCULATE FAT CHAIN FOR RAMDISK
|
; CALCULATE FAT CHAIN FOR RAMDISK
|
||||||
|
|
||||||
@ -780,6 +796,9 @@ end if
|
|||||||
mov [CPU_FREQ],eax ; save tsc / sec
|
mov [CPU_FREQ],eax ; save tsc / sec
|
||||||
; mov ebx, 1000000
|
; mov ebx, 1000000
|
||||||
; div ebx
|
; div ebx
|
||||||
|
; ¢®®¡é¥-â® ¯à®¨§¢®¤¨â¥«ì®áâì ¢ ¤ ®¬ ª®ªà¥â®¬ ¬¥áâ¥
|
||||||
|
; ᮢ¥à襮 ¥ªà¨â¨ç , ® çâ®¡ë § âªãâì «î¡¨â¥«¥©
|
||||||
|
; ®¯â¨¬¨§¨àãîé¨å ª®¬¯¨«ïâ®à®¢ Ÿ‚“...
|
||||||
mov edx, 2251799814
|
mov edx, 2251799814
|
||||||
mul edx
|
mul edx
|
||||||
shr edx, 19
|
shr edx, 19
|
||||||
@ -960,7 +979,7 @@ if defined debug_com_base
|
|||||||
|
|
||||||
end if
|
end if
|
||||||
|
|
||||||
;-=-=-=-=-=-=- START MULTITASKING -=-=-=-=-=-=-=-=-
|
; START MULTITASKING
|
||||||
|
|
||||||
; A 'All set - press ESC to start' messages if need
|
; A 'All set - press ESC to start' messages if need
|
||||||
if preboot_blogesc
|
if preboot_blogesc
|
||||||
@ -2775,6 +2794,10 @@ sys_cpuusage:
|
|||||||
mov al, [ecx+window_data+WDATA.fl_wstate]
|
mov al, [ecx+window_data+WDATA.fl_wstate]
|
||||||
stosb
|
stosb
|
||||||
|
|
||||||
|
; Event mask (+71)
|
||||||
|
mov EAX, dword [ECX+CURRENT_TASK+TASKDATA.event_mask]
|
||||||
|
stosd
|
||||||
|
|
||||||
pop esi
|
pop esi
|
||||||
pop edi
|
pop edi
|
||||||
|
|
||||||
@ -5051,6 +5074,7 @@ system_shutdown: ; shut down the system
|
|||||||
yes_shutdown_param:
|
yes_shutdown_param:
|
||||||
cli
|
cli
|
||||||
|
|
||||||
|
if ~ defined extended_primary_loader
|
||||||
mov eax, kernel_file ; load kernel.mnt to 0x7000:0
|
mov eax, kernel_file ; load kernel.mnt to 0x7000:0
|
||||||
push 12
|
push 12
|
||||||
pop esi
|
pop esi
|
||||||
@ -5063,8 +5087,9 @@ yes_shutdown_param:
|
|||||||
mov edi,OS_BASE+0x40000
|
mov edi,OS_BASE+0x40000
|
||||||
mov ecx,1000
|
mov ecx,1000
|
||||||
rep movsb
|
rep movsb
|
||||||
|
end if
|
||||||
|
|
||||||
mov esi,OS_BASE+0x2F0000 ; restore 0x0 - 0xffff
|
mov esi, BOOT_VAR ; restore 0x0 - 0xffff
|
||||||
mov edi, OS_BASE
|
mov edi, OS_BASE
|
||||||
mov ecx,0x10000/4
|
mov ecx,0x10000/4
|
||||||
cld
|
cld
|
||||||
|
@ -144,7 +144,7 @@ struc APPDATA
|
|||||||
.ev_count_ dd ? ;unused ;+20
|
.ev_count_ dd ? ;unused ;+20
|
||||||
.exc_handler dd ? ;+24
|
.exc_handler dd ? ;+24
|
||||||
.except_mask dd ? ;+28
|
.except_mask dd ? ;+28
|
||||||
.pl0_stack dd ? ;unused ;+32
|
.pl0_stack dd ? ;+32
|
||||||
.heap_base dd ? ;+36
|
.heap_base dd ? ;+36
|
||||||
.heap_top dd ? ;+40
|
.heap_top dd ? ;+40
|
||||||
.cursor dd ? ;+44
|
.cursor dd ? ;+44
|
||||||
@ -250,6 +250,7 @@ include "sound/playnote.inc" ; player Note for Speaker PC
|
|||||||
|
|
||||||
include "video/vesa12.inc" ; Vesa 1.2 functions
|
include "video/vesa12.inc" ; Vesa 1.2 functions
|
||||||
include "video/vesa20.inc" ; Vesa 2.0 functions
|
include "video/vesa20.inc" ; Vesa 2.0 functions
|
||||||
|
include "video/blitter.inc" ;
|
||||||
include "video/vga.inc" ; VGA 16 color functions
|
include "video/vga.inc" ; VGA 16 color functions
|
||||||
include "video/cursors.inc" ; cursors functions
|
include "video/cursors.inc" ; cursors functions
|
||||||
|
|
||||||
|
813
kernel/branches/Kolibri-acpi/network/eth_drv/drivers/r6040.inc
Normal file
813
kernel/branches/Kolibri-acpi/network/eth_drv/drivers/r6040.inc
Normal file
@ -0,0 +1,813 @@
|
|||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; ;;
|
||||||
|
;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
|
||||||
|
;; Distributed under terms of the GNU General Public License ;;
|
||||||
|
;; ;;
|
||||||
|
;; R6040 driver for KolibriOS ;;
|
||||||
|
;; ;;
|
||||||
|
;; based on R6040.c from linux ;;
|
||||||
|
;; ;;
|
||||||
|
;; Written by Asper (asper.85@mail.ru) ;;
|
||||||
|
;; and hidnplayr (hidnplayr@gmail.com) ;;
|
||||||
|
;; ;;
|
||||||
|
;; GNU GENERAL PUBLIC LICENSE ;;
|
||||||
|
;; Version 2, June 1991 ;;
|
||||||
|
;; ;;
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;********************************************************************
|
||||||
|
; Interface
|
||||||
|
; r6040_reset
|
||||||
|
; r6040_probe
|
||||||
|
; r6040_poll
|
||||||
|
; r6040_transmit
|
||||||
|
;
|
||||||
|
; These functions are referenced in ethernet.inc
|
||||||
|
;
|
||||||
|
;********************************************************************
|
||||||
|
|
||||||
|
;; A few user-configurable values.
|
||||||
|
|
||||||
|
TX_RING_SIZE equ 4
|
||||||
|
RX_RING_SIZE equ 4
|
||||||
|
|
||||||
|
; ethernet address length
|
||||||
|
ETH_ALEN equ 6
|
||||||
|
ETH_HLEN equ (2 * ETH_ALEN + 2)
|
||||||
|
ETH_ZLEN equ 60 ; 60 + 4bytes auto payload for
|
||||||
|
; mininmum 64bytes frame length
|
||||||
|
; system timer frequency
|
||||||
|
HZ equ 1000
|
||||||
|
|
||||||
|
; max time out delay time
|
||||||
|
W_MAX_TIMEOUT equ 0x0FFF
|
||||||
|
|
||||||
|
;; Size of the in-memory receive ring.
|
||||||
|
RX_BUF_LEN_IDX equ 3 ;; 0==8K, 1==16K, 2==32K, 3==64K
|
||||||
|
RX_BUF_LEN equ (8192 << RX_BUF_LEN_IDX)
|
||||||
|
|
||||||
|
;-; Size of the Tx bounce buffers -- must be at least (dev->mtu+14+4).
|
||||||
|
;-TX_BUF_SIZE equ 1536
|
||||||
|
;-RX_BUF_SIZE equ 1536
|
||||||
|
|
||||||
|
;; PCI Tuning Parameters
|
||||||
|
; Threshold is bytes transferred to chip before transmission starts.
|
||||||
|
TX_FIFO_THRESH equ 256 ;; In bytes, rounded down to 32 byte units.
|
||||||
|
|
||||||
|
;; The following settings are log_2(bytes)-4: 0 == 16 bytes .. 6==1024.
|
||||||
|
RX_FIFO_THRESH equ 4 ;; Rx buffer level before first PCI xfer.
|
||||||
|
RX_DMA_BURST equ 4 ;; Maximum PCI burst, '4' is 256 bytes
|
||||||
|
TX_DMA_BURST equ 4
|
||||||
|
|
||||||
|
;; Operational parameters that usually are not changed.
|
||||||
|
PHY1_ADDR equ 1 ;For MAC1
|
||||||
|
PHY2_ADDR equ 3 ;For MAC2
|
||||||
|
PHY_MODE equ 0x3100 ;PHY CHIP Register 0
|
||||||
|
PHY_CAP equ 0x01E1 ;PHY CHIP Register 4
|
||||||
|
|
||||||
|
;; Time in jiffies before concluding the transmitter is hung.
|
||||||
|
TX_TIMEOUT equ ((6000*HZ)/1000)
|
||||||
|
|
||||||
|
R6040_IO_SIZE equ 256 ; RDC MAC I/O Size
|
||||||
|
MAX_MAC equ 2 ; MAX RDC MAC
|
||||||
|
|
||||||
|
;**************************************************************************
|
||||||
|
; RDC R6040 Register Definitions
|
||||||
|
;**************************************************************************
|
||||||
|
MCR0 equ 0x00 ;Control register 0
|
||||||
|
MCR1 equ 0x01 ;Control register 1
|
||||||
|
MAC_RST equ 0x0001 ;Reset the MAC
|
||||||
|
MBCR equ 0x08 ;Bus control
|
||||||
|
MT_ICR equ 0x0C ;TX interrupt control
|
||||||
|
MR_ICR equ 0x10 ;RX interrupt control
|
||||||
|
MTPR equ 0x14 ;TX poll command register
|
||||||
|
MR_BSR equ 0x18 ;RX buffer size
|
||||||
|
MR_DCR equ 0x1A ;RX descriptor control
|
||||||
|
MLSR equ 0x1C ;Last status
|
||||||
|
MMDIO equ 0x20 ;MDIO control register
|
||||||
|
MDIO_WRITE equ 0x4000 ;MDIO write
|
||||||
|
MDIO_READ equ 0x2000 ;MDIO read
|
||||||
|
MMRD equ 0x24 ;MDIO read data register
|
||||||
|
MMWD equ 0x28 ;MDIO write data register
|
||||||
|
MTD_SA0 equ 0x2C ;TX descriptor start address 0
|
||||||
|
MTD_SA1 equ 0x30 ;TX descriptor start address 1
|
||||||
|
MRD_SA0 equ 0x34 ;RX descriptor start address 0
|
||||||
|
MRD_SA1 equ 0x38 ;RX descriptor start address 1
|
||||||
|
MISR equ 0x3C ;Status register
|
||||||
|
MIER equ 0x40 ;INT enable register
|
||||||
|
MSK_INT equ 0x0000 ;Mask off interrupts
|
||||||
|
RX_FINISH equ 0x0001 ;RX finished
|
||||||
|
RX_NO_DESC equ 0x0002 ;No RX descriptor available
|
||||||
|
RX_FIFO_FULL equ 0x0004 ;RX FIFO full
|
||||||
|
RX_EARLY equ 0x0008 ;RX early
|
||||||
|
TX_FINISH equ 0x0010 ;TX finished
|
||||||
|
TX_EARLY equ 0x0080 ;TX early
|
||||||
|
EVENT_OVRFL equ 0x0100 ;Event counter overflow
|
||||||
|
LINK_CHANGED equ 0x0200 ;PHY link changed
|
||||||
|
ME_CISR equ 0x44 ;Event counter INT status
|
||||||
|
ME_CIER equ 0x48 ;Event counter INT enable
|
||||||
|
MR_CNT equ 0x50 ;Successfully received packet counter
|
||||||
|
ME_CNT0 equ 0x52 ;Event counter 0
|
||||||
|
ME_CNT1 equ 0x54 ;Event counter 1
|
||||||
|
ME_CNT2 equ 0x56 ;Event counter 2
|
||||||
|
ME_CNT3 equ 0x58 ;Event counter 3
|
||||||
|
MT_CNT equ 0x5A ;Successfully transmit packet counter
|
||||||
|
ME_CNT4 equ 0x5C ;Event counter 4
|
||||||
|
MP_CNT equ 0x5E ;Pause frame counter register
|
||||||
|
MAR0 equ 0x60 ;Hash table 0
|
||||||
|
MAR1 equ 0x62 ;Hash table 1
|
||||||
|
MAR2 equ 0x64 ;Hash table 2
|
||||||
|
MAR3 equ 0x66 ;Hash table 3
|
||||||
|
MID_0L equ 0x68 ;Multicast address MID0 Low
|
||||||
|
MID_0M equ 0x6A ;Multicast address MID0 Medium
|
||||||
|
MID_0H equ 0x6C ;Multicast address MID0 High
|
||||||
|
MID_1L equ 0x70 ;MID1 Low
|
||||||
|
MID_1M equ 0x72 ;MID1 Medium
|
||||||
|
MID_1H equ 0x74 ;MID1 High
|
||||||
|
MID_2L equ 0x78 ;MID2 Low
|
||||||
|
MID_2M equ 0x7A ;MID2 Medium
|
||||||
|
MID_2H equ 0x7C ;MID2 High
|
||||||
|
MID_3L equ 0x80 ;MID3 Low
|
||||||
|
MID_3M equ 0x82 ;MID3 Medium
|
||||||
|
MID_3H equ 0x84 ;MID3 High
|
||||||
|
PHY_CC equ 0x88 ;PHY status change configuration register
|
||||||
|
PHY_ST equ 0x8A ;PHY status register
|
||||||
|
MAC_SM equ 0xAC ;MAC status machine
|
||||||
|
MAC_ID equ 0xBE ;Identifier register
|
||||||
|
|
||||||
|
MAX_BUF_SIZE equ 0x600 ;1536
|
||||||
|
|
||||||
|
MBCR_DEFAULT equ 0x012A ;MAC Bus Control Register
|
||||||
|
MCAST_MAX equ 3 ;Max number multicast addresses to filter
|
||||||
|
|
||||||
|
;Descriptor status
|
||||||
|
DSC_OWNER_MAC equ 0x8000 ;MAC is the owner of this descriptor
|
||||||
|
DSC_RX_OK equ 0x4000 ;RX was successfull
|
||||||
|
DSC_RX_ERR equ 0x0800 ;RX PHY error
|
||||||
|
DSC_RX_ERR_DRI equ 0x0400 ;RX dribble packet
|
||||||
|
DSC_RX_ERR_BUF equ 0x0200 ;RX length exceeds buffer size
|
||||||
|
DSC_RX_ERR_LONG equ 0x0100 ;RX length > maximum packet length
|
||||||
|
DSC_RX_ERR_RUNT equ 0x0080 ;RX packet length < 64 byte
|
||||||
|
DSC_RX_ERR_CRC equ 0x0040 ;RX CRC error
|
||||||
|
DSC_RX_BCAST equ 0x0020 ;RX broadcast (no error)
|
||||||
|
DSC_RX_MCAST equ 0x0010 ;RX multicast (no error)
|
||||||
|
DSC_RX_MCH_HIT equ 0x0008 ;RX multicast hit in hash table (no error)
|
||||||
|
DSC_RX_MIDH_HIT equ 0x0004 ;RX MID table hit (no error)
|
||||||
|
DSC_RX_IDX_MID_MASK equ 3 ;RX mask for the index of matched MIDx
|
||||||
|
|
||||||
|
;PHY settings
|
||||||
|
ICPLUS_PHY_ID equ 0x0243
|
||||||
|
|
||||||
|
RX_INTS equ RX_FIFO_FULL or RX_NO_DESC or RX_FINISH
|
||||||
|
TX_INTS equ TX_FINISH
|
||||||
|
INT_MASK equ RX_INTS or TX_INTS
|
||||||
|
|
||||||
|
|
||||||
|
r6040_txb equ (eth_data_start)
|
||||||
|
r6040_rxb equ ((r6040_txb+(MAX_BUF_SIZE*TX_RING_SIZE)+32) and 0xfffffff0)
|
||||||
|
r6040_tx_ring equ ((r6040_rxb+(MAX_BUF_SIZE*RX_RING_SIZE)+32) and 0xfffffff0)
|
||||||
|
r6040_rx_ring equ ((r6040_tx_ring+(r6040_x_head.sizeof*TX_RING_SIZE)+32) and 0xfffffff0)
|
||||||
|
|
||||||
|
virtual at ((r6040_rx_ring+(r6040_x_head.sizeof*RX_RING_SIZE)+32) and 0xfffffff0)
|
||||||
|
r6040_private:
|
||||||
|
.rx_ring dd ?
|
||||||
|
.tx_ring dd ?
|
||||||
|
.cur_rx dw ?
|
||||||
|
.cur_tx dw ?
|
||||||
|
.phy_addr dw ?
|
||||||
|
.phy_mode dw ?
|
||||||
|
.mcr0 dw ?
|
||||||
|
.mcr1 dw ?
|
||||||
|
.switch_sig dw ?
|
||||||
|
end virtual
|
||||||
|
|
||||||
|
virtual at 0
|
||||||
|
r6040_x_head:
|
||||||
|
.status dw ? ;0-1
|
||||||
|
.len dw ? ;2-3
|
||||||
|
.buf dd ? ;4-7
|
||||||
|
.ndesc dd ? ;8-B
|
||||||
|
.rev1 dd ? ;C-F
|
||||||
|
.vbufp dd ? ;10-13
|
||||||
|
.vndescp dd ? ;14-17
|
||||||
|
.skb_ptr dd ? ;18-1B
|
||||||
|
.rev2 dd ? ;1C-1F
|
||||||
|
.sizeof:
|
||||||
|
end virtual
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; Read a word data from PHY Chip
|
||||||
|
proc r6040_phy_read stdcall, phy_addr:dword, reg:dword
|
||||||
|
push ecx edx
|
||||||
|
mov eax, [phy_addr]
|
||||||
|
shl eax, 8
|
||||||
|
add eax, [reg]
|
||||||
|
add eax, MDIO_READ
|
||||||
|
mov edx, [io_addr]
|
||||||
|
add edx, MMDIO
|
||||||
|
out dx, ax
|
||||||
|
;Wait for the read bit to be cleared.
|
||||||
|
mov ecx, 2048 ;limit
|
||||||
|
xor eax, eax
|
||||||
|
.read:
|
||||||
|
in ax, dx
|
||||||
|
test ax, MDIO_READ
|
||||||
|
jz @f
|
||||||
|
dec ecx
|
||||||
|
test ecx, ecx
|
||||||
|
jnz .read
|
||||||
|
@@:
|
||||||
|
mov edx, [io_addr]
|
||||||
|
add edx, MMRD
|
||||||
|
in ax, dx
|
||||||
|
and eax, 0xFFFF
|
||||||
|
pop edx ecx
|
||||||
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
|
; Write a word data to PHY Chip
|
||||||
|
proc r6040_phy_write stdcall, phy_addr:dword, reg:dword, val:dword
|
||||||
|
push eax ecx edx
|
||||||
|
mov eax, [val]
|
||||||
|
mov edx, [io_addr]
|
||||||
|
add edx, MMWD
|
||||||
|
out dx, ax
|
||||||
|
;Write the command to the MDIO bus
|
||||||
|
mov eax, [phy_addr]
|
||||||
|
shl eax, 8
|
||||||
|
add eax, [reg]
|
||||||
|
add eax, MDIO_WRITE
|
||||||
|
mov edx, [io_addr]
|
||||||
|
add edx, MMDIO
|
||||||
|
out dx, ax
|
||||||
|
;Wait for the write bit to be cleared.
|
||||||
|
mov ecx, 2048 ;limit
|
||||||
|
xor eax, eax
|
||||||
|
.write:
|
||||||
|
in ax, dx
|
||||||
|
test ax, MDIO_WRITE
|
||||||
|
jz @f
|
||||||
|
dec ecx
|
||||||
|
test ecx, ecx
|
||||||
|
jnz .write
|
||||||
|
@@:
|
||||||
|
pop edx ecx eax
|
||||||
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
|
macro r6040_mdio_write reg, val {
|
||||||
|
stdcall r6040_phy_read, [io_addr], [r6040_private.phy_addr], reg
|
||||||
|
}
|
||||||
|
|
||||||
|
macro r6040_mdio_write reg, val {
|
||||||
|
stdcall r6040_phy_write, [io_addr], [r6040_private.phy_addr], reg, val
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
proc r6040_init_ring_desc stdcall, desc_ring:dword, size:dword
|
||||||
|
push eax ecx esi
|
||||||
|
mov ecx, [size]
|
||||||
|
test ecx, ecx
|
||||||
|
jz .out
|
||||||
|
|
||||||
|
mov esi, [desc_ring]
|
||||||
|
mov eax, esi
|
||||||
|
.next_desc:
|
||||||
|
add eax, r6040_x_head.sizeof - OS_BASE
|
||||||
|
mov [esi+r6040_x_head.ndesc], eax
|
||||||
|
add eax, OS_BASE
|
||||||
|
mov [esi+r6040_x_head.vndescp], eax
|
||||||
|
mov esi, eax
|
||||||
|
dec ecx
|
||||||
|
jnz .next_desc
|
||||||
|
|
||||||
|
sub esi, r6040_x_head.sizeof
|
||||||
|
mov eax, [desc_ring]
|
||||||
|
mov [esi+r6040_x_head.vndescp], eax
|
||||||
|
sub eax, OS_BASE
|
||||||
|
mov [esi+r6040_x_head.ndesc], eax
|
||||||
|
.out:
|
||||||
|
pop esi ecx eax
|
||||||
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
r6040_init_rxbufs:
|
||||||
|
|
||||||
|
stdcall r6040_init_ring_desc, r6040_rx_ring, RX_RING_SIZE
|
||||||
|
|
||||||
|
; Allocate skbs for the rx descriptors
|
||||||
|
mov esi, r6040_rx_ring
|
||||||
|
mov ebx, r6040_rxb
|
||||||
|
mov ecx, RX_RING_SIZE
|
||||||
|
mov eax, r6040_rx_ring
|
||||||
|
.next_desc:
|
||||||
|
mov [esi+r6040_x_head.skb_ptr], ebx
|
||||||
|
mov [esi+r6040_x_head.buf], ebx
|
||||||
|
sub [esi+r6040_x_head.buf], OS_BASE
|
||||||
|
mov [esi+r6040_x_head.status], DSC_OWNER_MAC
|
||||||
|
|
||||||
|
mov eax, [esi+r6040_x_head.vndescp]
|
||||||
|
mov esi, eax
|
||||||
|
|
||||||
|
add ebx, MAX_BUF_SIZE
|
||||||
|
dec ecx
|
||||||
|
jnz .next_desc
|
||||||
|
|
||||||
|
xor eax, eax
|
||||||
|
.out:
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
r6040_probe:
|
||||||
|
|
||||||
|
DEBUGF 1, "Probing r6040\n"
|
||||||
|
|
||||||
|
call adjust_pci_device
|
||||||
|
|
||||||
|
|
||||||
|
; If PHY status change register is still set to zero
|
||||||
|
; it means the bootloader didn't initialize it
|
||||||
|
mov edx, [io_addr]
|
||||||
|
add edx, PHY_CC
|
||||||
|
in ax, dx
|
||||||
|
test ax, ax
|
||||||
|
jnz @f
|
||||||
|
mov eax, 0x9F07
|
||||||
|
out dx, ax
|
||||||
|
@@:
|
||||||
|
; Set MAC address
|
||||||
|
mov ecx, 3
|
||||||
|
mov edi, node_addr
|
||||||
|
mov edx, [io_addr]
|
||||||
|
add edx, MID_0L
|
||||||
|
.mac:
|
||||||
|
in ax, dx
|
||||||
|
stosw
|
||||||
|
add edx, 2
|
||||||
|
dec ecx
|
||||||
|
jnz .mac
|
||||||
|
; Some bootloaders/BIOSes do not initialize
|
||||||
|
; MAC address, warn about that
|
||||||
|
and eax, 0xFF
|
||||||
|
or eax, [node_addr]
|
||||||
|
test eax, eax
|
||||||
|
jnz @f
|
||||||
|
DEBUGF 1, "K : MAC address not initialized\n" ;, generating random"
|
||||||
|
;Asper: Add here generate function call!
|
||||||
|
; Temporary workaround: init by constant adress
|
||||||
|
mov dword [node_addr], 0x00006000
|
||||||
|
mov word [node_addr+4], 0x0001
|
||||||
|
@@:
|
||||||
|
; Init RDC private data
|
||||||
|
mov [r6040_private.mcr0], 0x1002
|
||||||
|
;mov [r6040_private.phy_addr], 1 ; Asper: Only one network card is supported now.
|
||||||
|
mov [r6040_private.switch_sig], 0
|
||||||
|
|
||||||
|
; Check the vendor ID on the PHY, if 0xFFFF assume none attached
|
||||||
|
stdcall r6040_phy_read, 1, 2
|
||||||
|
cmp ax, 0xFFFF
|
||||||
|
jne @f
|
||||||
|
DEBUGF 1, "K : Failed to detect an attached PHY\n" ;, generating random"
|
||||||
|
mov eax, -1
|
||||||
|
ret
|
||||||
|
@@:
|
||||||
|
|
||||||
|
; Set MAC address
|
||||||
|
call r6040_mac_address
|
||||||
|
|
||||||
|
|
||||||
|
; Initialize and alloc RX/TX buffers
|
||||||
|
stdcall r6040_init_ring_desc, r6040_tx_ring, TX_RING_SIZE
|
||||||
|
call r6040_init_rxbufs ;r6040_alloc_rxbufs
|
||||||
|
test eax, eax
|
||||||
|
jnz .out
|
||||||
|
|
||||||
|
; Read the PHY ID
|
||||||
|
mov [r6040_private.phy_mode], 0x8000
|
||||||
|
stdcall r6040_phy_read, 0, 2
|
||||||
|
mov [r6040_private.switch_sig], ax
|
||||||
|
cmp ax, ICPLUS_PHY_ID
|
||||||
|
jne @f
|
||||||
|
stdcall r6040_phy_write, 29, 31, 0x175C ; Enable registers
|
||||||
|
jmp .phy_readen
|
||||||
|
@@:
|
||||||
|
|
||||||
|
; PHY Mode Check
|
||||||
|
movzx eax, [r6040_private.phy_addr]
|
||||||
|
stdcall r6040_phy_write, eax, 4, PHY_CAP
|
||||||
|
stdcall r6040_phy_write, eax, 0, PHY_MODE
|
||||||
|
; if PHY_MODE = 0x3100
|
||||||
|
call r6040_phy_mode_chk
|
||||||
|
mov [r6040_private.phy_mode], ax
|
||||||
|
jmp .phy_readen
|
||||||
|
; end if
|
||||||
|
; if not (PHY_MODE and 0x0100)
|
||||||
|
mov [r6040_private.phy_mode], 0
|
||||||
|
; end if
|
||||||
|
.phy_readen:
|
||||||
|
|
||||||
|
; Set duplex mode
|
||||||
|
mov ax, [r6040_private.phy_mode]
|
||||||
|
or [r6040_private.mcr0], ax
|
||||||
|
|
||||||
|
; improve performance (by RDC guys)
|
||||||
|
stdcall r6040_phy_read, 30, 17
|
||||||
|
or ax, 0x4000
|
||||||
|
stdcall r6040_phy_write, 30, 17, eax
|
||||||
|
|
||||||
|
stdcall r6040_phy_read, 30, 17
|
||||||
|
xor ax, -1
|
||||||
|
or ax, 0x2000
|
||||||
|
xor ax, -1
|
||||||
|
stdcall r6040_phy_write, 30, 17, eax
|
||||||
|
|
||||||
|
stdcall r6040_phy_write, 0, 19, 0x0000
|
||||||
|
stdcall r6040_phy_write, 0, 30, 0x01F0
|
||||||
|
|
||||||
|
; Initialize all Mac registers
|
||||||
|
call r6040_reset
|
||||||
|
|
||||||
|
xor eax, eax
|
||||||
|
.out:
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
align 4
|
||||||
|
r6040_reset:
|
||||||
|
|
||||||
|
DEBUGF 1, "Resetting r6040\n"
|
||||||
|
|
||||||
|
push eax ecx edx
|
||||||
|
; Mask off Interrupt
|
||||||
|
mov eax, MSK_INT
|
||||||
|
mov edx, [io_addr]
|
||||||
|
add edx, MIER
|
||||||
|
out dx, ax
|
||||||
|
|
||||||
|
;Reset RDC MAC
|
||||||
|
mov eax, MAC_RST
|
||||||
|
mov edx, [io_addr]
|
||||||
|
add edx, MCR1
|
||||||
|
out dx, ax
|
||||||
|
|
||||||
|
mov ecx, 2048 ;limit
|
||||||
|
.read:
|
||||||
|
in ax, dx
|
||||||
|
test ax, 0x1
|
||||||
|
jnz @f
|
||||||
|
dec ecx
|
||||||
|
test ecx, ecx
|
||||||
|
jnz .read
|
||||||
|
@@:
|
||||||
|
;Reset internal state machine
|
||||||
|
mov ax, 2
|
||||||
|
mov edx, [io_addr]
|
||||||
|
add edx, MAC_SM
|
||||||
|
out dx, ax
|
||||||
|
xor ax, ax
|
||||||
|
out dx, ax
|
||||||
|
mov esi, 5
|
||||||
|
call delay_ms
|
||||||
|
|
||||||
|
;MAC Bus Control Register
|
||||||
|
mov ax, MBCR_DEFAULT
|
||||||
|
mov edx, [io_addr]
|
||||||
|
add edx, MBCR
|
||||||
|
out dx, ax
|
||||||
|
|
||||||
|
;Buffer Size Register
|
||||||
|
mov ax, MAX_BUF_SIZE
|
||||||
|
mov edx, [io_addr]
|
||||||
|
add edx, MR_BSR
|
||||||
|
out dx, ax
|
||||||
|
|
||||||
|
;Write TX ring start address
|
||||||
|
mov eax, r6040_tx_ring - OS_BASE ;Asper: Maybe we can just write dword? Hidnplayr: better use word, as described in datasheet.
|
||||||
|
mov edx, [io_addr]
|
||||||
|
add edx, MTD_SA0
|
||||||
|
out dx, ax
|
||||||
|
shr eax, 16
|
||||||
|
add edx, MTD_SA1 - MTD_SA0
|
||||||
|
out dx, ax
|
||||||
|
|
||||||
|
;Write RX ring start address
|
||||||
|
mov eax, r6040_rx_ring - OS_BASE ;Asper: Maybe we can just write dword?
|
||||||
|
mov edx, [io_addr]
|
||||||
|
add edx, MRD_SA0
|
||||||
|
out dx, ax
|
||||||
|
shr eax, 16
|
||||||
|
add edx, MRD_SA1 - MRD_SA0
|
||||||
|
out dx, ax
|
||||||
|
|
||||||
|
;Set interrupt waiting time and packet numbers
|
||||||
|
xor ax, ax
|
||||||
|
mov edx, [io_addr]
|
||||||
|
add edx, MT_ICR
|
||||||
|
out dx, ax
|
||||||
|
|
||||||
|
;Asper: ~ Disable ints ;Enable interrupts
|
||||||
|
;mov ax, MSK_INT ;INT_MASK ;Asper ~
|
||||||
|
;mov edx, [io_addr]
|
||||||
|
;add edx, MIER
|
||||||
|
;out dx, ax
|
||||||
|
|
||||||
|
;Enable TX and RX
|
||||||
|
mov ax, [r6040_private.mcr0]
|
||||||
|
or ax, 0x0002
|
||||||
|
mov edx, [io_addr]
|
||||||
|
out dx, ax
|
||||||
|
|
||||||
|
;Let TX poll the descriptors
|
||||||
|
;we may got called by r6040_tx_timeout which has left
|
||||||
|
;some unset tx buffers
|
||||||
|
xor ax, ax
|
||||||
|
inc ax
|
||||||
|
mov edx, [io_addr]
|
||||||
|
add edx, MTPR
|
||||||
|
out dx, ax
|
||||||
|
|
||||||
|
pop edx ecx eax
|
||||||
|
|
||||||
|
DEBUGF 1, "reset ok!\n"
|
||||||
|
|
||||||
|
; Indicate that we have successfully reset the card
|
||||||
|
mov eax, [pci_data]
|
||||||
|
mov [eth_status], eax
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
proc r6040_tx_timeout
|
||||||
|
push eax edx
|
||||||
|
;...
|
||||||
|
inc [stats.tx_errors]
|
||||||
|
;Reset MAC and re-init all registers
|
||||||
|
call r6040_init_mac_regs
|
||||||
|
pop edx eax
|
||||||
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
|
proc r6040_get_stats
|
||||||
|
push eax edx
|
||||||
|
mov edx, [io_addr]
|
||||||
|
add edx, ME_CNT1
|
||||||
|
in al, dx
|
||||||
|
add [stats.rx_crc_errors], al
|
||||||
|
mov edx, [io_addr]
|
||||||
|
add edx, ME_CNT0
|
||||||
|
in al, dx
|
||||||
|
add [stats.multicast], al
|
||||||
|
pop edx eax
|
||||||
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
|
;...
|
||||||
|
|
||||||
|
proc r6040_phy_mode_chk
|
||||||
|
push ebx
|
||||||
|
;PHY Link Status Check
|
||||||
|
movzx eax, [r6040_private.phy_addr]
|
||||||
|
stdcall r6040_phy_read, eax, 1
|
||||||
|
test eax, 0x4
|
||||||
|
jnz @f
|
||||||
|
mov eax, 0x8000 ;Link Failed, full duplex
|
||||||
|
@@:
|
||||||
|
;PHY Chip Auto-Negotiation Status
|
||||||
|
movzx eax, [r6040_private.phy_addr]
|
||||||
|
stdcall r6040_phy_read, eax, 1
|
||||||
|
test eax, 0x0020
|
||||||
|
jz .force_mode
|
||||||
|
;Auto Negotuiation Mode
|
||||||
|
movzx eax, [r6040_private.phy_addr]
|
||||||
|
stdcall r6040_phy_read, eax, 5
|
||||||
|
mov ebx, eax
|
||||||
|
movzx eax, [r6040_private.phy_addr]
|
||||||
|
stdcall r6040_phy_read, eax, 4
|
||||||
|
and eax, ebx
|
||||||
|
test eax, 0x140
|
||||||
|
jz .ret_0
|
||||||
|
jmp .ret_0x8000
|
||||||
|
.force_mode:
|
||||||
|
;Force Mode
|
||||||
|
movzx eax, [r6040_private.phy_addr]
|
||||||
|
stdcall r6040_phy_read, eax, 0
|
||||||
|
test eax, 0x100
|
||||||
|
jz .ret_0
|
||||||
|
.ret_0x8000:
|
||||||
|
mov eax, 0x8000
|
||||||
|
pop ebx
|
||||||
|
ret
|
||||||
|
.ret_0:
|
||||||
|
xor eax, eax
|
||||||
|
pop ebx
|
||||||
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;***************************************************************************
|
||||||
|
; Function
|
||||||
|
; r6040_rx
|
||||||
|
; Description
|
||||||
|
; polls card to see if there is a packet waiting
|
||||||
|
;
|
||||||
|
; Currently only supports one descriptor per packet, if packet is fragmented
|
||||||
|
; between multiple descriptors you will lose part of the packet
|
||||||
|
;***************************************************************************
|
||||||
|
r6040_poll:
|
||||||
|
push ebx ecx esi edi
|
||||||
|
|
||||||
|
xor eax, eax
|
||||||
|
mov [eth_rx_data_len], ax
|
||||||
|
|
||||||
|
movzx eax, [r6040_private.cur_rx]
|
||||||
|
mov ebx, eax
|
||||||
|
shl ebx, 5
|
||||||
|
|
||||||
|
mov cx, [ebx+r6040_rx_ring+r6040_x_head.status] ; Read the descriptor status
|
||||||
|
test cx, DSC_OWNER_MAC
|
||||||
|
jnz .out
|
||||||
|
|
||||||
|
test cx, DSC_RX_ERR ; Global error status set
|
||||||
|
jz .no_dsc_rx_err
|
||||||
|
;...
|
||||||
|
jmp .out
|
||||||
|
|
||||||
|
.no_dsc_rx_err:
|
||||||
|
; Packet successfully received
|
||||||
|
movzx ecx, [ebx+r6040_rx_ring+r6040_x_head.len]
|
||||||
|
and ecx, 0xFFF
|
||||||
|
sub ecx, 4 ; Do not count the CRC
|
||||||
|
mov [eth_rx_data_len], cx
|
||||||
|
mov esi, [ebx+r6040_rx_ring+r6040_x_head.skb_ptr]
|
||||||
|
|
||||||
|
push ecx
|
||||||
|
shr ecx, 2
|
||||||
|
mov edi, Ether_buffer
|
||||||
|
cld
|
||||||
|
rep movsd
|
||||||
|
pop ecx
|
||||||
|
and ecx, 3
|
||||||
|
rep movsb
|
||||||
|
|
||||||
|
or [ebx+r6040_rx_ring+r6040_x_head.status], DSC_OWNER_MAC
|
||||||
|
|
||||||
|
inc [r6040_private.cur_rx]
|
||||||
|
and [r6040_private.cur_rx], RX_RING_SIZE-1
|
||||||
|
|
||||||
|
xor eax, eax
|
||||||
|
.out:
|
||||||
|
pop edi esi ecx ebx
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;***************************************************************************
|
||||||
|
; Function
|
||||||
|
; r6040_transmit
|
||||||
|
; Description
|
||||||
|
; Transmits a packet of data via the ethernet card
|
||||||
|
; Pointer to 48 bit destination address in edi
|
||||||
|
; Type of packet in bx
|
||||||
|
; size of packet in ecx
|
||||||
|
; pointer to packet data in esi
|
||||||
|
;
|
||||||
|
;***************************************************************************
|
||||||
|
r6040_transmit:
|
||||||
|
cmp ecx, MAX_BUF_SIZE
|
||||||
|
jg .out ; packet is too long
|
||||||
|
|
||||||
|
push edi esi ebx ecx
|
||||||
|
|
||||||
|
movzx eax, [r6040_private.cur_tx]
|
||||||
|
shl eax, 5
|
||||||
|
|
||||||
|
; DEBUGF 1,"R6040: TX buffer status: 0x%x, eax=%u\n", [eax + r6040_tx_ring + r6040_x_head.status]:4, eax
|
||||||
|
|
||||||
|
test [r6040_tx_ring + eax + r6040_x_head.status], 0x8000 ; check if buffer is available
|
||||||
|
jz .l3
|
||||||
|
|
||||||
|
push ecx esi
|
||||||
|
mov ecx, [timer_ticks]
|
||||||
|
add ecx, 100
|
||||||
|
.l2:
|
||||||
|
test [r6040_tx_ring + eax + r6040_x_head.status], 0x8000
|
||||||
|
jz .l5
|
||||||
|
cmp ecx, [timer_ticks]
|
||||||
|
jb .l4
|
||||||
|
mov esi, 10
|
||||||
|
call delay_ms
|
||||||
|
jmp .l2
|
||||||
|
|
||||||
|
.l4:
|
||||||
|
pop esi ecx
|
||||||
|
DEBUGF 1,"R6040: Send timeout\n"
|
||||||
|
jmp .out
|
||||||
|
|
||||||
|
.l5:
|
||||||
|
pop esi ecx
|
||||||
|
.l3:
|
||||||
|
push eax
|
||||||
|
|
||||||
|
mov esi, edi
|
||||||
|
|
||||||
|
; point to the current tx buffer
|
||||||
|
movzx edi, [r6040_private.cur_tx]
|
||||||
|
imul edi, MAX_BUF_SIZE
|
||||||
|
add edi, r6040_txb
|
||||||
|
lea eax, [edi - OS_BASE] ; real buffer address in eax
|
||||||
|
|
||||||
|
; copy destination address
|
||||||
|
movsd
|
||||||
|
movsw
|
||||||
|
; copy source address
|
||||||
|
mov esi, node_addr
|
||||||
|
movsd
|
||||||
|
movsw
|
||||||
|
; copy packet type
|
||||||
|
mov [edi], bx
|
||||||
|
add edi, 2
|
||||||
|
|
||||||
|
mov esi, [esp+8+4]
|
||||||
|
mov ecx, [esp+4]
|
||||||
|
; copy the packet data
|
||||||
|
push ecx
|
||||||
|
shr ecx,2
|
||||||
|
rep movsd
|
||||||
|
pop ecx
|
||||||
|
and ecx,3
|
||||||
|
rep movsb
|
||||||
|
|
||||||
|
pop edi
|
||||||
|
|
||||||
|
mov ecx, [esp]
|
||||||
|
add ecx, ETH_HLEN
|
||||||
|
cmp cx, ETH_ZLEN
|
||||||
|
jae @f
|
||||||
|
mov cx, ETH_ZLEN
|
||||||
|
@@:
|
||||||
|
|
||||||
|
mov [r6040_tx_ring + edi + r6040_x_head.len], cx
|
||||||
|
mov [r6040_tx_ring + edi + r6040_x_head.buf], eax
|
||||||
|
mov [r6040_tx_ring + edi + r6040_x_head.status], 0x8000
|
||||||
|
|
||||||
|
; Trigger the MAC to check the TX descriptor
|
||||||
|
mov ax, 0x01
|
||||||
|
mov edx, [io_addr]
|
||||||
|
add edx, MTPR
|
||||||
|
out dx, ax
|
||||||
|
|
||||||
|
inc [r6040_private.cur_tx]
|
||||||
|
and [r6040_private.cur_tx], TX_RING_SIZE-1
|
||||||
|
xor eax, eax
|
||||||
|
|
||||||
|
pop ecx ebx esi edi
|
||||||
|
.out:
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
r6040_mac_address:
|
||||||
|
push eax ecx edx esi edi
|
||||||
|
; MAC operation register
|
||||||
|
mov ax, 1
|
||||||
|
mov edx, [io_addr]
|
||||||
|
add edx, MCR1
|
||||||
|
out dx, ax
|
||||||
|
; Reset MAC
|
||||||
|
mov ax, 2
|
||||||
|
mov edx, [io_addr]
|
||||||
|
add edx, MAC_SM
|
||||||
|
out dx, ax
|
||||||
|
; Reset internal state machine
|
||||||
|
xor ax, ax
|
||||||
|
out dx, ax
|
||||||
|
mov esi, 5
|
||||||
|
call delay_ms
|
||||||
|
|
||||||
|
; Restore MAC Address
|
||||||
|
mov ecx, 3
|
||||||
|
mov edi, node_addr
|
||||||
|
mov edx, [io_addr]
|
||||||
|
add edx, MID_0L
|
||||||
|
.mac:
|
||||||
|
in ax, dx
|
||||||
|
stosw
|
||||||
|
add edx, 2
|
||||||
|
dec ecx
|
||||||
|
jnz .mac
|
||||||
|
|
||||||
|
pop edi esi edx ecx eax
|
||||||
|
ret
|
||||||
|
|
@ -323,14 +323,14 @@ rtl8139_reset:
|
|||||||
out dx, al
|
out dx, al
|
||||||
; 32k Rxbuffer, unlimited dma burst, no wrapping, no rx threshold
|
; 32k Rxbuffer, unlimited dma burst, no wrapping, no rx threshold
|
||||||
; accept broadcast packets, accept physical match packets
|
; accept broadcast packets, accept physical match packets
|
||||||
mov ax, RTL8139_RX_CONFIG
|
mov eax, RTL8139_RX_CONFIG
|
||||||
add edx, RTL8139_REG_RXCONFIG - RTL8139_REG_COMMAND
|
add edx, RTL8139_REG_RXCONFIG - RTL8139_REG_COMMAND
|
||||||
out dx, ax
|
out dx, eax
|
||||||
; 1024 bytes DMA burst, total retries = 16 + 8 * 16 = 144
|
; 1024 bytes DMA burst, total retries = 16 + 8 * 16 = 144
|
||||||
mov ax, (RTL8139_TX_MXDMA shl RTL8139_BIT_TX_MXDMA) \
|
mov eax, (RTL8139_TX_MXDMA shl RTL8139_BIT_TX_MXDMA) \
|
||||||
or (RTL8139_TXRR shl RTL8139_BIT_TXRR)
|
or (RTL8139_TXRR shl RTL8139_BIT_TXRR)
|
||||||
add edx, RTL8139_REG_TXCONFIG - RTL8139_REG_RXCONFIG
|
add edx, RTL8139_REG_TXCONFIG - RTL8139_REG_RXCONFIG
|
||||||
out dx, ax
|
out dx, eax
|
||||||
; enable auto negotiation
|
; enable auto negotiation
|
||||||
add edx, RTL8139_REG_BMCR - RTL8139_REG_TXCONFIG
|
add edx, RTL8139_REG_BMCR - RTL8139_REG_TXCONFIG
|
||||||
in ax, dx
|
in ax, dx
|
||||||
|
@ -49,7 +49,7 @@ struc ETH_FRAME
|
|||||||
.SrcMAC dp ? ;source MAC-address [6 bytes]
|
.SrcMAC dp ? ;source MAC-address [6 bytes]
|
||||||
.Type dw ? ;type of the upper-layer protocol [2 bytes]
|
.Type dw ? ;type of the upper-layer protocol [2 bytes]
|
||||||
.Data db ? ;data [46-1500 bytes]
|
.Data db ? ;data [46-1500 bytes]
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual at Ether_buffer
|
virtual at Ether_buffer
|
||||||
ETH_FRAME ETH_FRAME
|
ETH_FRAME ETH_FRAME
|
||||||
@ -103,6 +103,7 @@ include "drivers/sis900.inc"
|
|||||||
include "drivers/pcnet32.inc"
|
include "drivers/pcnet32.inc"
|
||||||
include "drivers/rtl8169.inc"
|
include "drivers/rtl8169.inc"
|
||||||
include "drivers/forcedeth.inc"
|
include "drivers/forcedeth.inc"
|
||||||
|
include "drivers/r6040.inc"
|
||||||
|
|
||||||
; PCICards
|
; PCICards
|
||||||
; ========
|
; ========
|
||||||
@ -128,25 +129,25 @@ dd 0x24498086, I8255x_probe, I8255x_reset, I8255x_poll, I8255x_transmit, 0
|
|||||||
|
|
||||||
dd 0x802910ec, rtl8029_probe, rtl8029_reset, rtl8029_poll, rtl8029_transmit, 0
|
dd 0x802910ec, rtl8029_probe, rtl8029_reset, rtl8029_poll, rtl8029_transmit, 0
|
||||||
|
|
||||||
dd 0x813910ec, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable ; tested by hidnplayr: works ok
|
;dd 0x813910ec, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
|
||||||
dd 0x813810ec, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
|
;dd 0x813810ec, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
|
||||||
dd 0x12111113, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable ; tested by hidnplayr: works ok
|
;dd 0x12111113, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
|
||||||
dd 0x13601500, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
|
;dd 0x13601500, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
|
||||||
dd 0x13604033, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
|
;dd 0x13604033, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
|
||||||
dd 0x13001186, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
|
;dd 0x13001186, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
|
||||||
dd 0x13401186, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
|
;dd 0x13401186, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
|
||||||
dd 0xab0613d1, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
|
;dd 0xab0613d1, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
|
||||||
dd 0xa1171259, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
|
;dd 0xa1171259, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
|
||||||
dd 0xa11e1259, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
|
;dd 0xa11e1259, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
|
||||||
dd 0xab0614ea, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
|
;dd 0xab0614ea, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
|
||||||
dd 0xab0714ea, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
|
;dd 0xab0714ea, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
|
||||||
dd 0x123411db, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
|
;dd 0x123411db, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
|
||||||
dd 0x91301432, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
|
;dd 0x91301432, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
|
||||||
dd 0x101202ac, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
|
;dd 0x101202ac, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
|
||||||
dd 0x0106018a, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
|
;dd 0x0106018a, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
|
||||||
dd 0x1211126c, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
|
;dd 0x1211126c, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
|
||||||
dd 0x81391743, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
|
;dd 0x81391743, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
|
||||||
dd 0x8139021b, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
|
;dd 0x8139021b, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
|
||||||
|
|
||||||
dd 0x816810ec, rtl8169_probe, rtl8169_reset, rtl8169_poll, rtl8169_transmit, 0
|
dd 0x816810ec, rtl8169_probe, rtl8169_reset, rtl8169_poll, rtl8169_transmit, 0
|
||||||
dd 0x816910ec, rtl8169_probe, rtl8169_reset, rtl8169_poll, rtl8169_transmit, 0
|
dd 0x816910ec, rtl8169_probe, rtl8169_reset, rtl8169_poll, rtl8169_transmit, 0
|
||||||
@ -188,18 +189,12 @@ dd 0x656410b7, e3c59x_probe, e3c59x_reset, e3c59x_poll, e3c59x_transmit, 0
|
|||||||
dd 0x450010b7, e3c59x_probe, e3c59x_reset, e3c59x_poll, e3c59x_transmit, 0
|
dd 0x450010b7, e3c59x_probe, e3c59x_reset, e3c59x_poll, e3c59x_transmit, 0
|
||||||
|
|
||||||
dd 0x09001039, SIS900_probe, SIS900_reset, SIS900_poll, SIS900_transmit, 0
|
dd 0x09001039, SIS900_probe, SIS900_reset, SIS900_poll, SIS900_transmit, 0
|
||||||
|
dd 0x70161039, SIS900_probe, SIS900_reset, SIS900_poll, SIS900_transmit, 0
|
||||||
|
|
||||||
dd 0x20001022, pcnet32_probe, pcnet32_reset, pcnet32_poll, pcnet32_xmit, 0
|
dd 0x20001022, pcnet32_probe, pcnet32_reset, pcnet32_poll, pcnet32_xmit, 0
|
||||||
dd 0x26251022, pcnet32_probe, pcnet32_reset, pcnet32_poll, pcnet32_xmit, 0
|
dd 0x26251022, pcnet32_probe, pcnet32_reset, pcnet32_poll, pcnet32_xmit, 0
|
||||||
dd 0x20011022, pcnet32_probe, pcnet32_reset, pcnet32_poll, pcnet32_xmit, 0
|
dd 0x20011022, pcnet32_probe, pcnet32_reset, pcnet32_poll, pcnet32_xmit, 0
|
||||||
|
|
||||||
;dd 0x08031516, mtd80x_probe, mtd80x_reset, mtd80x_poll, mtd80x_transmit, mtd80x_cable
|
|
||||||
|
|
||||||
; following cards are untested
|
|
||||||
dd 0x70161039, SIS900_probe, SIS900_reset, SIS900_poll, SIS900_transmit, 0
|
|
||||||
;dd 0x08001516, mtd80x_probe, mtd80x_reset, mtd80x_poll, mtd80x_transmit, mtd80x_cable
|
|
||||||
;dd 0x08911516, mtd80x_probe, mtd80x_reset, mtd80x_poll, mtd80x_transmit, mtd80x_cable
|
|
||||||
|
|
||||||
dd 0x006610de, forcedeth_probe, forcedeth_reset, forcedeth_poll, forcedeth_transmit, forcedeth_cable ; nVidia Corporation nForce2 Ethernet Controller
|
dd 0x006610de, forcedeth_probe, forcedeth_reset, forcedeth_poll, forcedeth_transmit, forcedeth_cable ; nVidia Corporation nForce2 Ethernet Controller
|
||||||
dd 0x01c310de, forcedeth_probe, forcedeth_reset, forcedeth_poll, forcedeth_transmit, forcedeth_cable ; not tested
|
dd 0x01c310de, forcedeth_probe, forcedeth_reset, forcedeth_poll, forcedeth_transmit, forcedeth_cable ; not tested
|
||||||
dd 0x00D610de, forcedeth_probe, forcedeth_reset, forcedeth_poll, forcedeth_transmit, forcedeth_cable ; not tested
|
dd 0x00D610de, forcedeth_probe, forcedeth_reset, forcedeth_poll, forcedeth_transmit, forcedeth_cable ; not tested
|
||||||
@ -241,6 +236,8 @@ dd 0x0ab210de, forcedeth_probe, forcedeth_reset, forcedeth_poll, forcedeth_trans
|
|||||||
dd 0x0ab310de, forcedeth_probe, forcedeth_reset, forcedeth_poll, forcedeth_transmit, forcedeth_cable ; not tested
|
dd 0x0ab310de, forcedeth_probe, forcedeth_reset, forcedeth_poll, forcedeth_transmit, forcedeth_cable ; not tested
|
||||||
dd 0x0d7d10de, forcedeth_probe, forcedeth_reset, forcedeth_poll, forcedeth_transmit, forcedeth_cable ; not tested
|
dd 0x0d7d10de, forcedeth_probe, forcedeth_reset, forcedeth_poll, forcedeth_transmit, forcedeth_cable ; not tested
|
||||||
|
|
||||||
|
dd 0x604017F3, r6040_probe, r6040_reset, r6040_poll, r6040_transmit, 0
|
||||||
|
|
||||||
rb PCICARDS_ENTRY_SIZE ; end of list marker, do not remove
|
rb PCICARDS_ENTRY_SIZE ; end of list marker, do not remove
|
||||||
endg
|
endg
|
||||||
|
|
||||||
|
444
kernel/branches/Kolibri-acpi/video/blitter.inc
Normal file
444
kernel/branches/Kolibri-acpi/video/blitter.inc
Normal file
@ -0,0 +1,444 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
struc BLITTER
|
||||||
|
{
|
||||||
|
.dc.xmin rd 1 ; 0
|
||||||
|
.dc.ymin rd 1 ; 4
|
||||||
|
.dc.xmax rd 1 ; 8
|
||||||
|
.dc.ymax rd 1 ; 12
|
||||||
|
|
||||||
|
.sc:
|
||||||
|
.sc.xmin rd 1 ; 16
|
||||||
|
.sc.ymin rd 1 ; 20
|
||||||
|
.sc.xmax rd 1 ; 24
|
||||||
|
.sc.ymax rd 1 ; 28
|
||||||
|
|
||||||
|
.dst_x rd 1 ; 32
|
||||||
|
.dst_y rd 1 ; 36
|
||||||
|
.src_x rd 1 ; 40
|
||||||
|
.src_y rd 1 ; 44
|
||||||
|
.w rd 1 ; 48
|
||||||
|
.h rd 1 ; 52
|
||||||
|
|
||||||
|
.bitmap rd 1 ; 56
|
||||||
|
.stride rd 1 ; 60
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual at 0
|
||||||
|
BLITTER BLITTER
|
||||||
|
end virtual
|
||||||
|
|
||||||
|
|
||||||
|
align 4
|
||||||
|
|
||||||
|
__L1OutCode:
|
||||||
|
push ebx
|
||||||
|
mov ebx, 8
|
||||||
|
cmp edx, [eax]
|
||||||
|
jl .L2
|
||||||
|
xor ebx, ebx
|
||||||
|
cmp edx, [eax+8]
|
||||||
|
setg bl
|
||||||
|
sal ebx, 2
|
||||||
|
.L2:
|
||||||
|
cmp ecx, [eax+4]
|
||||||
|
jge .L3
|
||||||
|
or ebx, 1
|
||||||
|
jmp .L4
|
||||||
|
|
||||||
|
.L3:
|
||||||
|
cmp ecx, [eax+12]
|
||||||
|
jle .L4
|
||||||
|
or ebx, 2
|
||||||
|
.L4:
|
||||||
|
mov eax, ebx
|
||||||
|
pop ebx
|
||||||
|
ret
|
||||||
|
|
||||||
|
align 4
|
||||||
|
block_clip:
|
||||||
|
push ebp
|
||||||
|
push edi
|
||||||
|
push esi
|
||||||
|
push ebx
|
||||||
|
sub esp, 4
|
||||||
|
|
||||||
|
mov ebx, eax
|
||||||
|
mov [esp], edx
|
||||||
|
mov ebp, ecx
|
||||||
|
mov ecx, [ecx]
|
||||||
|
mov edx, [edx]
|
||||||
|
call __L1OutCode
|
||||||
|
|
||||||
|
mov esi, eax
|
||||||
|
mov edx, [esp+28]
|
||||||
|
mov ecx, [edx]
|
||||||
|
.L21:
|
||||||
|
mov eax, [esp+24]
|
||||||
|
mov edx, [eax]
|
||||||
|
mov eax, ebx
|
||||||
|
call __L1OutCode
|
||||||
|
|
||||||
|
mov edi, eax
|
||||||
|
.L20:
|
||||||
|
mov eax, edi
|
||||||
|
and eax, esi
|
||||||
|
jne .L9
|
||||||
|
cmp esi, edi
|
||||||
|
je .L9
|
||||||
|
test esi, esi
|
||||||
|
jne .L10
|
||||||
|
test edi, 1
|
||||||
|
je .L11
|
||||||
|
mov eax, [ebx+4]
|
||||||
|
jmp .L25
|
||||||
|
.L11:
|
||||||
|
test edi, 2
|
||||||
|
je .L13
|
||||||
|
mov eax, [ebx+12]
|
||||||
|
.L25:
|
||||||
|
mov edx, [esp+28]
|
||||||
|
jmp .L22
|
||||||
|
.L13:
|
||||||
|
test edi, 4
|
||||||
|
je .L14
|
||||||
|
mov eax, [ebx+8]
|
||||||
|
jmp .L26
|
||||||
|
.L14:
|
||||||
|
and edi, 8
|
||||||
|
je .L12
|
||||||
|
mov eax, [ebx]
|
||||||
|
.L26:
|
||||||
|
mov edx, [esp+24]
|
||||||
|
.L22:
|
||||||
|
mov [edx], eax
|
||||||
|
.L12:
|
||||||
|
mov eax, [esp+28]
|
||||||
|
mov ecx, [eax]
|
||||||
|
jmp .L21
|
||||||
|
.L10:
|
||||||
|
test esi, 1
|
||||||
|
je .L16
|
||||||
|
mov eax, [ebx+4]
|
||||||
|
jmp .L23
|
||||||
|
.L16:
|
||||||
|
test esi, 2
|
||||||
|
je .L18
|
||||||
|
mov eax, [ebx+12]
|
||||||
|
.L23:
|
||||||
|
mov [ebp+0], eax
|
||||||
|
jmp .L17
|
||||||
|
.L18:
|
||||||
|
test esi, 4
|
||||||
|
je .L19
|
||||||
|
mov eax, [ebx+8]
|
||||||
|
jmp .L24
|
||||||
|
.L19:
|
||||||
|
and esi, 8
|
||||||
|
je .L17
|
||||||
|
mov eax, [ebx]
|
||||||
|
.L24:
|
||||||
|
mov edx, [esp]
|
||||||
|
mov [edx], eax
|
||||||
|
.L17:
|
||||||
|
mov ecx, [ebp+0]
|
||||||
|
mov eax, [esp]
|
||||||
|
mov edx, [eax]
|
||||||
|
mov eax, ebx
|
||||||
|
call __L1OutCode
|
||||||
|
mov esi, eax
|
||||||
|
jmp .L20
|
||||||
|
.L9:
|
||||||
|
add esp, 4
|
||||||
|
pop ebx
|
||||||
|
pop esi
|
||||||
|
pop edi
|
||||||
|
pop ebp
|
||||||
|
ret
|
||||||
|
|
||||||
|
align 4
|
||||||
|
blit_clip:
|
||||||
|
|
||||||
|
.sx0 equ 36
|
||||||
|
.sy0 equ 32
|
||||||
|
.sx1 equ 28
|
||||||
|
.sy1 equ 24
|
||||||
|
|
||||||
|
.dx0 equ 20
|
||||||
|
.dy0 equ 16
|
||||||
|
.dx1 equ 12
|
||||||
|
.dy1 equ 8
|
||||||
|
|
||||||
|
|
||||||
|
push edi
|
||||||
|
push esi
|
||||||
|
push ebx
|
||||||
|
sub esp, 40
|
||||||
|
|
||||||
|
mov ebx, ecx
|
||||||
|
mov edx, [ecx+BLITTER.src_x]
|
||||||
|
mov [esp+.sx0], edx
|
||||||
|
mov eax, [ecx+BLITTER.src_y]
|
||||||
|
mov [esp+.sy0], eax
|
||||||
|
add edx, [ecx+BLITTER.w]
|
||||||
|
dec edx
|
||||||
|
mov [esp+.sx1], edx
|
||||||
|
add eax, [ecx+BLITTER.h]
|
||||||
|
dec eax
|
||||||
|
mov [esp+.sy1], eax
|
||||||
|
|
||||||
|
lea ecx, [esp+.sy0]
|
||||||
|
lea edx, [esp+.sx0]
|
||||||
|
lea eax, [ebx+BLITTER.sc]
|
||||||
|
lea esi, [esp+.sy1]
|
||||||
|
|
||||||
|
mov [esp+4], esi
|
||||||
|
lea esi, [esp+.sx1]
|
||||||
|
mov [esp], esi
|
||||||
|
call block_clip
|
||||||
|
|
||||||
|
mov esi, 1
|
||||||
|
test eax, eax
|
||||||
|
jne .L28
|
||||||
|
|
||||||
|
mov edi, [esp+.sx0]
|
||||||
|
mov edx, [ebx+BLITTER.dst_x]
|
||||||
|
add edx, edi
|
||||||
|
sub edx, [ebx+BLITTER.src_x]
|
||||||
|
mov [esp+.dx0], edx
|
||||||
|
|
||||||
|
mov ecx, [esp+.sy0]
|
||||||
|
mov eax, [ebx+BLITTER.dst_y]
|
||||||
|
add eax, ecx
|
||||||
|
sub eax, [ebx+BLITTER.src_y]
|
||||||
|
mov [esp+.dy0], eax
|
||||||
|
sub edx, edi
|
||||||
|
add edx, [esp+.sx1]
|
||||||
|
mov [esp+.dx1], edx
|
||||||
|
|
||||||
|
sub eax, ecx
|
||||||
|
add eax, [esp+.sy1]
|
||||||
|
mov [esp+.dy1], eax
|
||||||
|
|
||||||
|
lea ecx, [esp+.dy0]
|
||||||
|
lea edx, [esp+.dx0]
|
||||||
|
lea eax, [esp+.dy1]
|
||||||
|
mov [esp+4], eax
|
||||||
|
lea eax, [esp+.dx1]
|
||||||
|
mov [esp], eax
|
||||||
|
mov eax, ebx
|
||||||
|
call block_clip
|
||||||
|
test eax, eax
|
||||||
|
jne .L28
|
||||||
|
|
||||||
|
mov edx, [esp+.dx0]
|
||||||
|
mov eax, [esp+.dx1]
|
||||||
|
inc eax
|
||||||
|
sub eax, edx
|
||||||
|
mov [ebx+BLITTER.w], eax
|
||||||
|
|
||||||
|
mov eax, [esp+.dy0]
|
||||||
|
mov ecx, [esp+.dy1]
|
||||||
|
inc ecx
|
||||||
|
sub ecx, eax
|
||||||
|
mov [ebx+BLITTER.h], ecx
|
||||||
|
|
||||||
|
mov ecx, [ebx+BLITTER.src_x]
|
||||||
|
add ecx, edx
|
||||||
|
sub ecx, [ebx+BLITTER.dst_x]
|
||||||
|
mov [ebx+BLITTER.src_x], ecx
|
||||||
|
|
||||||
|
mov ecx, [ebx+BLITTER.src_y]
|
||||||
|
add ecx, eax
|
||||||
|
sub ecx, [ebx+BLITTER.dst_y]
|
||||||
|
mov [ebx+BLITTER.src_y], ecx
|
||||||
|
mov [ebx+BLITTER.dst_x], edx
|
||||||
|
mov [ebx+BLITTER.dst_y], eax
|
||||||
|
xor esi, esi
|
||||||
|
.L28:
|
||||||
|
mov eax, esi
|
||||||
|
add esp, 40
|
||||||
|
pop ebx
|
||||||
|
pop esi
|
||||||
|
pop edi
|
||||||
|
|
||||||
|
|
||||||
|
purge .sx0
|
||||||
|
purge .sy0
|
||||||
|
purge .sx1
|
||||||
|
purge .sy1
|
||||||
|
|
||||||
|
purge .dx0
|
||||||
|
purge .dy0
|
||||||
|
purge .dx1
|
||||||
|
purge .dy1
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
align 4
|
||||||
|
|
||||||
|
blit_32:
|
||||||
|
push ebp
|
||||||
|
push edi
|
||||||
|
push esi
|
||||||
|
push ebx
|
||||||
|
sub esp, 72
|
||||||
|
|
||||||
|
mov eax, [TASK_BASE]
|
||||||
|
mov ebx, [eax-twdw + WDATA.box.width]
|
||||||
|
mov edx, [eax-twdw + WDATA.box.height]
|
||||||
|
|
||||||
|
xor eax, eax
|
||||||
|
|
||||||
|
mov [esp+BLITTER.dc.xmin], eax
|
||||||
|
mov [esp+BLITTER.dc.ymin], eax
|
||||||
|
mov [esp+BLITTER.dc.xmax], ebx
|
||||||
|
mov [esp+BLITTER.dc.ymax], edx
|
||||||
|
|
||||||
|
mov [esp+BLITTER.sc.xmin], eax
|
||||||
|
mov [esp+BLITTER.sc.ymin], eax
|
||||||
|
mov eax, [ecx+24]
|
||||||
|
dec eax
|
||||||
|
mov [esp+BLITTER.sc.xmax], eax
|
||||||
|
mov eax, [ecx+28]
|
||||||
|
dec eax
|
||||||
|
mov [esp+BLITTER.sc.ymax], eax
|
||||||
|
|
||||||
|
mov eax, [ecx]
|
||||||
|
mov [esp+BLITTER.dst_x], eax
|
||||||
|
mov eax, [ecx+4]
|
||||||
|
mov [esp+BLITTER.dst_y], eax
|
||||||
|
|
||||||
|
mov eax, [ecx+16]
|
||||||
|
mov [esp+BLITTER.src_x], eax
|
||||||
|
mov eax, [ecx+20]
|
||||||
|
mov [esp+BLITTER.src_y], eax
|
||||||
|
mov eax, [ecx+8]
|
||||||
|
mov [esp+BLITTER.w], eax
|
||||||
|
mov eax, [ecx+12]
|
||||||
|
mov [esp+BLITTER.h], eax
|
||||||
|
|
||||||
|
|
||||||
|
mov eax, [ecx+32]
|
||||||
|
mov [esp+56], eax
|
||||||
|
mov eax, [ecx+36]
|
||||||
|
mov [esp+60], eax
|
||||||
|
|
||||||
|
mov ecx, esp
|
||||||
|
call blit_clip
|
||||||
|
test eax, eax
|
||||||
|
jne .L57
|
||||||
|
|
||||||
|
inc [mouse_pause]
|
||||||
|
call [_display.disable_mouse]
|
||||||
|
|
||||||
|
mov eax, [TASK_BASE]
|
||||||
|
|
||||||
|
mov ebx, [esp+BLITTER.dst_x]
|
||||||
|
mov ebp, [esp+BLITTER.dst_y]
|
||||||
|
add ebx, [eax-twdw + WDATA.box.left]
|
||||||
|
add ebp, [eax-twdw + WDATA.box.top]
|
||||||
|
mov edi, ebp
|
||||||
|
|
||||||
|
imul edi, [_display.pitch]
|
||||||
|
imul ebp, [_display.width]
|
||||||
|
add ebp, ebx
|
||||||
|
add ebp, [_WinMapAddress]
|
||||||
|
|
||||||
|
mov eax, [esp+BLITTER.src_y]
|
||||||
|
imul eax, [esp+BLITTER.stride]
|
||||||
|
mov esi, [esp+BLITTER.src_x]
|
||||||
|
lea esi, [eax+esi*4]
|
||||||
|
add esi, [esp+BLITTER.bitmap]
|
||||||
|
|
||||||
|
mov ecx, [esp+BLITTER.h]
|
||||||
|
mov edx, [esp+BLITTER.w]
|
||||||
|
|
||||||
|
test ecx, ecx ;FIXME check clipping
|
||||||
|
jz .L57
|
||||||
|
|
||||||
|
test edx, edx
|
||||||
|
jz .L57
|
||||||
|
|
||||||
|
cmp [_display.bpp], 32
|
||||||
|
jne .core_24
|
||||||
|
|
||||||
|
lea edi, [edi+ebx*4]
|
||||||
|
|
||||||
|
mov ebx, [CURRENT_TASK]
|
||||||
|
|
||||||
|
align 4
|
||||||
|
.outer32:
|
||||||
|
xor ecx, ecx
|
||||||
|
|
||||||
|
align 4
|
||||||
|
.inner32:
|
||||||
|
cmp [ebp+ecx], bl
|
||||||
|
jne @F
|
||||||
|
|
||||||
|
mov eax, [esi+ecx*4]
|
||||||
|
mov [LFB_BASE+edi+ecx*4], eax
|
||||||
|
@@:
|
||||||
|
inc ecx
|
||||||
|
dec edx
|
||||||
|
jnz .inner32
|
||||||
|
|
||||||
|
add esi, [esp+BLITTER.stride]
|
||||||
|
add edi, [_display.pitch]
|
||||||
|
add ebp, [_display.width]
|
||||||
|
|
||||||
|
mov edx, [esp+BLITTER.w]
|
||||||
|
dec [esp+BLITTER.h]
|
||||||
|
jnz .outer32
|
||||||
|
|
||||||
|
.done:
|
||||||
|
dec [mouse_pause]
|
||||||
|
call [draw_pointer]
|
||||||
|
.L57:
|
||||||
|
add esp, 72
|
||||||
|
pop ebx
|
||||||
|
pop esi
|
||||||
|
pop edi
|
||||||
|
pop ebp
|
||||||
|
ret
|
||||||
|
|
||||||
|
.core_24:
|
||||||
|
lea ebx, [ebx+ebx*2]
|
||||||
|
lea edi, [LFB_BASE+edi+ebx]
|
||||||
|
mov ebx, [CURRENT_TASK]
|
||||||
|
|
||||||
|
align 4
|
||||||
|
.outer24:
|
||||||
|
mov [esp+64], edi
|
||||||
|
xor ecx, ecx
|
||||||
|
|
||||||
|
align 4
|
||||||
|
.inner24:
|
||||||
|
cmp [ebp+ecx], bl
|
||||||
|
jne @F
|
||||||
|
|
||||||
|
mov eax, [esi+ecx*4]
|
||||||
|
|
||||||
|
lea edi, [edi+ecx*2]
|
||||||
|
mov [edi+ecx], ax
|
||||||
|
shr eax, 16
|
||||||
|
mov [edi+ecx+2], al
|
||||||
|
@@:
|
||||||
|
mov edi, [esp+64]
|
||||||
|
inc ecx
|
||||||
|
dec edx
|
||||||
|
jnz .inner24
|
||||||
|
|
||||||
|
add esi, [esp+BLITTER.stride]
|
||||||
|
add edi, [_display.pitch]
|
||||||
|
add ebp, [_display.width]
|
||||||
|
|
||||||
|
mov edx, [esp+BLITTER.w]
|
||||||
|
dec [esp+BLITTER.h]
|
||||||
|
jnz .outer24
|
||||||
|
|
||||||
|
jmp .done
|
Loading…
Reference in New Issue
Block a user