From be1fff9c56ed4d7aeccdc084cc731068075bb462 Mon Sep 17 00:00:00 2001 From: "Marat Zakiyanov (Mario79)" Date: Fri, 28 Mar 2014 20:04:31 +0000 Subject: [PATCH] Fix f.24 for r.4700 git-svn-id: svn://kolibrios.org@4711 a494cfbc-eb01-0410-851d-a64ba20cac60 --- kernel/trunk/detect/getcache.inc | 6 ++--- kernel/trunk/detect/init_ata.inc | 4 +-- kernel/trunk/detect/sear_par.inc | 25 +++++++++--------- kernel/trunk/docs/sysfuncr.txt | 8 ++++-- kernel/trunk/docs/sysfuncs.txt | 8 ++++-- kernel/trunk/kernel.asm | 45 ++++++++++++++++++-------------- 6 files changed, 55 insertions(+), 41 deletions(-) diff --git a/kernel/trunk/detect/getcache.inc b/kernel/trunk/detect/getcache.inc index 11eaa06088..9424c7f2da 100644 --- a/kernel/trunk/detect/getcache.inc +++ b/kernel/trunk/detect/getcache.inc @@ -138,7 +138,7 @@ get_cache_ide: and [esi+IDE_CACHE.appl_search_start], 0 push ecx - DEBUGF 1, "K : IDE_CACHE.size %x\n", [esi+IDE_CACHE.size] +; DEBUGF 1, "K : IDE_CACHE.size %x\n", [esi+IDE_CACHE.size] stdcall kernel_alloc, [esi+IDE_CACHE.size] mov [esi+IDE_CACHE.pointer], eax pop ecx @@ -146,11 +146,11 @@ get_cache_ide: mov edx, eax mov eax, [esi+IDE_CACHE.size] shr eax, 3 - DEBUGF 1, "K : IDE_CACHE.system_data_size %x\n", eax +; DEBUGF 1, "K : IDE_CACHE.system_data_size %x\n", eax mov [esi+IDE_CACHE.system_data_size], eax mov ebx, eax imul eax, 7 - DEBUGF 1, "K : IDE_CACHE.appl_data_size %x\n", eax +; DEBUGF 1, "K : IDE_CACHE.appl_data_size %x\n", eax mov [esi+IDE_CACHE.appl_data_size], eax add ebx, edx mov [esi+IDE_CACHE.data_pointer], ebx diff --git a/kernel/trunk/detect/init_ata.inc b/kernel/trunk/detect/init_ata.inc index 0619efa100..ddaaf2759d 100644 --- a/kernel/trunk/detect/init_ata.inc +++ b/kernel/trunk/detect/init_ata.inc @@ -209,11 +209,11 @@ include 'dev_hdcd.inc' xor eax, eax add dx, 2 in al, dx - DEBUGF 1, "K : Primary Bus Master IDE Status Register %x\n", eax +; DEBUGF 1, "K : Primary Bus Master IDE Status Register %x\n", eax add dx, 8 in al, dx - DEBUGF 1, "K : Secondary Bus Master IDE Status Register %x\n", eax +; DEBUGF 1, "K : Secondary Bus Master IDE Status Register %x\n", eax pop edx eax cmp [ecx+IDE_DATA.RegsBaseAddres], 0 diff --git a/kernel/trunk/detect/sear_par.inc b/kernel/trunk/detect/sear_par.inc index 3c3c1744bc..a58a608323 100644 --- a/kernel/trunk/detect/sear_par.inc +++ b/kernel/trunk/detect/sear_par.inc @@ -43,7 +43,7 @@ search_partitions: ; number of partitions: [DRIVE_DATA+2] test [DRIVE_DATA+1], byte 0x40 jz @f - DEBUGF 1, "K : HD0\n" + push 'hd0' mov eax, esp ; name mov edx, hd0_data @@ -57,7 +57,7 @@ search_partitions: ; number of partitions: [DRIVE_DATA+3] test [DRIVE_DATA+1], byte 0x10 jz @f - DEBUGF 1, "K : HD1\n" + push 'hd1' mov eax, esp mov edx, hd1_data @@ -71,7 +71,7 @@ search_partitions: ; number of partitions: [DRIVE_DATA+4] test [DRIVE_DATA+1], byte 4 jz @f - DEBUGF 1, "K : HD2\n" + push 'hd2' mov eax, esp mov edx, hd2_data @@ -85,7 +85,7 @@ search_partitions: ; number of partitions: [DRIVE_DATA+5] test [DRIVE_DATA+1], byte 1 jz @f - DEBUGF 1, "K : HD3\n" + push 'hd3' mov eax, esp mov edx, hd3_data @@ -99,7 +99,7 @@ search_partitions: ; number of partitions: [DRIVE_DATA+7] test [DRIVE_DATA+6], byte 0x40 jz @f - DEBUGF 1, "K : HD4\n" + push 'hd4' mov eax, esp ; name mov edx, hd4_data @@ -113,7 +113,7 @@ search_partitions: ; number of partitions: [DRIVE_DATA+8] test [DRIVE_DATA+6], byte 0x10 jz @f - DEBUGF 1, "K : HD5\n" + push 'hd5' mov eax, esp mov edx, hd5_data @@ -127,7 +127,7 @@ search_partitions: ; number of partitions: [DRIVE_DATA+9] test [DRIVE_DATA+6], byte 4 jz @f - DEBUGF 1, "K : HD6\n" + push 'hd6' mov eax, esp mov edx, hd6_data @@ -141,7 +141,7 @@ search_partitions: ; number of partitions: [DRIVE_DATA+10] test [DRIVE_DATA+6], byte 1 jz @f - DEBUGF 1, "K : HD7\n" + push 'hd7' mov eax, esp mov edx, hd7_data @@ -155,7 +155,7 @@ search_partitions: ; number of partitions: [DRIVE_DATA+12] test [DRIVE_DATA+11], byte 0x40 jz @f - DEBUGF 1, "K : HD8\n" + push 'hd8' mov eax, esp ; name mov edx, hd8_data @@ -169,7 +169,7 @@ search_partitions: ; number of partitions: [DRIVE_DATA+13] test [DRIVE_DATA+11], byte 0x10 jz @f - DEBUGF 1, "K : HD9\n" + push 'hd9' mov eax, esp mov edx, hd9_data @@ -183,7 +183,7 @@ search_partitions: ; number of partitions: [DRIVE_DATA+14] test [DRIVE_DATA+14], byte 4 jz @f - DEBUGF 1, "K : HD10\n" + push 'hd10' mov eax, esp mov edx, hd10_data @@ -197,7 +197,7 @@ search_partitions: ; number of partitions: [DRIVE_DATA+15] test [DRIVE_DATA+11], byte 1 jz @f - DEBUGF 1, "K : HD11\n" + push 'hd11' mov eax, esp mov edx, hd11_data @@ -254,7 +254,6 @@ endg jnz .bdloop pop ecx ecx ; restore stack after name .nobd: - DEBUGF 1, "K : jmp end_search_partitions\n" jmp end_search_partitions ;----------------------------------------------------------------------------- ; Helper procedure for search_partitions, adds one IDE disk. diff --git a/kernel/trunk/docs/sysfuncr.txt b/kernel/trunk/docs/sysfuncr.txt index 2f0cda9f79..4012007a6a 100644 --- a/kernel/trunk/docs/sysfuncr.txt +++ b/kernel/trunk/docs/sysfuncr.txt @@ -1332,7 +1332,9 @@ dd 1675 * eax = 24 - номер функции * ebx = 4 - номер подфункции * ecx = номер CD/DVD-диска - (от 0=Primary Master до 3=Secondary Slave) + от 0=Primary Master до 3=Secondary Slave для первого IDE контр. + от 4=Primary Master до 7=Secondary Slave для второго IDE контр. + от 8=Primary Master до 11=Secondary Slave для третьего IDE контр. Возвращаемое значение: * функция не возвращает значения Замечания: @@ -1350,7 +1352,9 @@ dd 1675 * eax = 24 - номер функции * ebx = 5 - номер подфункции * ecx = номер CD/DVD-диска - (от 0=Primary Master до 3=Secondary Slave) + от 0=Primary Master до 3=Secondary Slave для первого IDE контр. + от 4=Primary Master до 7=Secondary Slave для второго IDE контр. + от 8=Primary Master до 11=Secondary Slave для третьего IDE контр. Возвращаемое значение: * функция не возвращает значения Замечания: diff --git a/kernel/trunk/docs/sysfuncs.txt b/kernel/trunk/docs/sysfuncs.txt index eb3aa33f08..6019f08e3e 100644 --- a/kernel/trunk/docs/sysfuncs.txt +++ b/kernel/trunk/docs/sysfuncs.txt @@ -1330,7 +1330,9 @@ Parameters: * eax = 24 - function number * ebx = 4 - subfunction number * ecx = position of CD/DVD-drive - (from 0=Primary Master to 3=Secondary Slave) + from 0=Primary Master to 3=Secondary Slave for first IDE contr. + from 4=Primary Master to 7=Secondary Slave for second IDE contr. + from 8=Primary Master to 11=Secondary Slave for third IDE contr. Returned value: * function does not return value Remarks: @@ -1348,7 +1350,9 @@ Parameters: * eax = 24 - function number * ebx = 5 - subfunction number * ecx = position of CD/DVD-drive - (from 0=Primary Master to 3=Secondary Slave) + from 0=Primary Master to 3=Secondary Slave for first IDE contr. + from 4=Primary Master to 7=Secondary Slave for second IDE contr. + from 8=Primary Master to 11=Secondary Slave for third IDE contr. Returned value: * function does not return value Remarks: diff --git a/kernel/trunk/kernel.asm b/kernel/trunk/kernel.asm index a530a31767..efdb52b4c6 100644 --- a/kernel/trunk/kernel.asm +++ b/kernel/trunk/kernel.asm @@ -5056,12 +5056,37 @@ syscall_getscreensize: ; GetScreenSize ;----------------------------------------------------------------------------- align 4 syscall_cdaudio: ; CD +; ECX - position of CD/DVD-drive +; from 0=Primary Master to 3=Secondary Slave for first IDE contr. +; from 4=Primary Master to 7=Secondary Slave for second IDE contr. +; from 8=Primary Master to 11=Secondary Slave for third IDE contr. + cmp ecx, 11 + ja .exit + + mov eax, ecx + shr eax, 2 + lea eax, [eax*5] + mov al, [eax+DRIVE_DATA+1] + + push ecx ebx + mov ebx, ecx + and ebx, 11b + shl ebx, 1 + mov cl, 6 + sub cl, bl + shr al, cl + test al, 2 ; it's not an ATAPI device + pop ebx ecx + + jz .exit + cmp ebx, 4 je .eject cmp ebx, 5 je .load - +;-------------------------------------- +.exit: ret ;-------------------------------------- .load: @@ -5082,22 +5107,6 @@ syscall_cdaudio: ; CD mov ebx, ecx inc ebx mov [cdpos], ebx - mov eax, ebx - - mov ebx, ecx - and ebx, 11b - shl ebx, 1 - mov cl, 8 - sub cl, bl - - dec eax - shr eax, 2 - lea eax, [eax*5] - mov al, [eax+DRIVE_DATA+1] - - shr al, cl - test al, 2 ; it's not an ATAPI device - jz .ret mov eax, ecx shr eax, 1 @@ -5108,8 +5117,6 @@ syscall_cdaudio: ; CD and eax, 1 mov [DiskNumber], al call reserve_cd_channel -;-------------------------------------- -.ret: ret ;-------------------------------------- .free: