diff --git a/kernel/trunk/core/conf_lib.inc b/kernel/trunk/core/conf_lib.inc index 3d86ebb403..d2342a1c9a 100644 --- a/kernel/trunk/core/conf_lib.inc +++ b/kernel/trunk/core/conf_lib.inc @@ -19,58 +19,39 @@ conf_fname db '/sys/sys.conf',0 ; set soke kernel configuration proc set_kernel_conf -locals - par db 30 dup(?) -endl - pushad - ;[gui] - ;mouse_speed - lea eax,[par] - push eax - invoke ini.get_str,conf_fname, ugui, ugui_mouse_speed, eax,30, ugui_mouse_speed_def - pop eax - stdcall strtoint,eax + locals + par db 30 dup(?) + endl + + pushad +;[gui] +;mouse_speed + + lea eax,[par] + push eax + invoke ini.get_str,conf_fname, ugui, ugui_mouse_speed,\ + eax,30, ugui_mouse_speed_def + pop eax + stdcall strtoint,eax mov [mouse_speed_factor], ax - - ;mouse_delay - lea eax,[par] - push eax - invoke ini.get_str,conf_fname, ugui, ugui_mouse_delay, eax,30, ugui_mouse_delay_def - pop eax - stdcall strtoint,eax + +;mouse_delay + lea eax,[par] + push eax + invoke ini.get_str,conf_fname, ugui, ugui_mouse_delay,\ + eax,30, ugui_mouse_delay_def + pop eax + stdcall strtoint,eax mov [mouse_delay], eax - ;[dev] - ;sb16 - lea eax,[par] - push eax - invoke ini.get_str,conf_fname, udev, udev_sb16, eax,30, udev_sb16_def - pop eax - stdcall strtoint,eax - cmp eax, 0x100 - jb @f - cmp eax, 0x10000 - jae @f - mov [sb16], eax -@@: - - ;sound_dma - lea eax,[par] - push eax - invoke ini.get_str,conf_fname, udev, udev_sound_dma, eax,30, udev_sound_dma_def - pop eax - stdcall strtoint,eax - cmp eax, 3 - ja @f - mov [sound_dma], eax -@@: - - ;midibase - lea eax,[par] - push eax - invoke ini.get_str,conf_fname, udev, udev_midibase, eax,30, udev_midibase_def - pop eax - stdcall strtoint,eax + +;midibase + lea eax,[par] + push eax + invoke ini.get_str,conf_fname, udev, udev_midibase, eax,30, udev_midibase_def + pop eax + stdcall strtoint,eax + cmp eax, 0x100 jb @f cmp eax, 0x10000 @@ -80,9 +61,8 @@ endl inc eax mov [midisp], eax @@: - - popad - ret + popad + ret endp ugui db 'gui',0 @@ -92,10 +72,6 @@ ugui_mouse_delay db 'mouse_delay',0 ugui_mouse_delay_def db '0x00A',0 udev db 'dev',0 -udev_sb16 db 'sb16',0 -udev_sb16_def db '0x220',0 -udev_sound_dma db 'sound_dma',0 -udev_sound_dma_def db '1',0 udev_midibase db 'midibase',0 udev_midibase_def db '0x320',0 @@ -105,7 +81,7 @@ locals par db 30 dup(?) endl pushad - + ;[net] ;active lea eax,[par] @@ -117,7 +93,7 @@ endl add eax, 3 mov [stack_config], eax call ash_eth_enable - + ;addr lea eax,[par] push eax @@ -125,7 +101,7 @@ endl pop eax stdcall do_inet_adr,eax mov [stack_ip], eax - + ;mask lea eax,[par] push eax @@ -133,7 +109,7 @@ endl pop eax stdcall do_inet_adr,eax mov [subnet_mask], eax - + ;gate lea eax,[par] push eax @@ -141,7 +117,7 @@ endl pop eax stdcall do_inet_adr,eax mov [gateway_ip], eax -.do_not_set_net: +.do_not_set_net: popad ret @@ -158,7 +134,7 @@ unet_def db 0 ; convert string to DWord proc strtoint stdcall,strs pushad - + mov eax,[strs] inc eax mov bl,[eax] @@ -177,7 +153,7 @@ proc strtoint stdcall,strs .exit: mov [esp+28],eax popad - ret + ret endp ; convert string to DWord for decimal value @@ -206,16 +182,16 @@ proc strtoint_dec stdcall,strs xchg ebx,ecx - - xor ecx,ecx - -@@: + xor ecx,ecx + + +@@: xor eax,eax lodsb cmp al,0 je .eend - + sub al,30h imul ebx add ecx,eax @@ -226,7 +202,7 @@ proc strtoint_dec stdcall,strs xchg eax,ebx pop ecx jmp @b - + .eend: mov [esp+28],ecx popad @@ -252,12 +228,12 @@ proc strtoint_hex stdcall,strs xor ecx,ecx mov esi,[strs] -@@: +@@: xor eax,eax lodsb cmp al,0 je .eend - + cmp al,'a' jae .bm cmp al,'A' @@ -266,15 +242,15 @@ proc strtoint_hex stdcall,strs .bm: ; 57h sub al,57h jmp .do - + .bb: ; 37h sub al,37h jmp .do .cc: ; 30h sub al,30h - -.do: + +.do: imul ebx add ecx,eax shr ebx,4 @@ -285,13 +261,13 @@ proc strtoint_hex stdcall,strs mov [esp+28],ecx popad ret -endp +endp ; convert string to DWord for IP addres proc do_inet_adr stdcall,strs pushad - + mov esi,[strs] mov ebx,0 .next: diff --git a/kernel/trunk/core/dll.inc b/kernel/trunk/core/dll.inc index 253c0b8ff0..8f0b1c797b 100644 --- a/kernel/trunk/core/dll.inc +++ b/kernel/trunk/core/dll.inc @@ -17,10 +17,10 @@ PID_KERNEL equ 1 ;os_idle thread align 4 proc attach_int_handler stdcall, irq:dword, handler:dword, access_rights:dword - mov ebx, [irq] ;irq num + mov ebx, [irq] ;irq num test ebx, ebx jz .err - cmp ebx, 15 ; hidnplayr says: we only have 16 IRQ's + cmp ebx, 15 ; hidnplayr says: we only have 16 IRQ's ja .err mov eax, [handler] test eax, eax @@ -28,24 +28,20 @@ proc attach_int_handler stdcall, irq:dword, handler:dword, access_rights:dword cmp [irq_owner + 4 * ebx], 0 je @f - mov ecx, [irq_rights + 4 * ebx] ; Rights : 0 - full access, 1 - read only, 2 - forbidden + mov ecx, [irq_rights + 4 * ebx] ; Rights : 0 - full access, 1 - read only, 2 - forbidden test ecx, ecx jnz .err - @@: +@@: mov [irq_tab+ebx*4], eax mov eax, [access_rights] mov [irq_rights + 4 * ebx], eax - ;push eax - ;mov eax, [TASK_BASE] - ;mov eax, [eax + TASKDATA.pid] ; faster or smaller? :) - ;call get_pid - mov [irq_owner + 4 * ebx], PID_KERNEL ;eax - ;pop eax + mov [irq_owner + 4 * ebx], PID_KERNEL ; all handlers belong to a kernel stdcall enable_irq, [irq] + mov eax, 1 ret .err: xor eax, eax diff --git a/kernel/trunk/core/sched.inc b/kernel/trunk/core/sched.inc index 5020343505..eafda6b848 100644 --- a/kernel/trunk/core/sched.inc +++ b/kernel/trunk/core/sched.inc @@ -15,7 +15,6 @@ $Revision$ align 32 irq0: - ; pushfd pushad mov ax, app_data ; mov ds, ax @@ -42,7 +41,6 @@ irq0: mov [DONT_SWITCH], byte 0 popad - ; popfd iretd .change_task: @@ -227,9 +225,6 @@ do_change_task: @@: mov eax, [ebx+APPDATA.saved_esp0] mov [tss._esp0], eax -; mov eax, [ebx+APPDATA.pl0_stack] -; add eax, RING0_STACK_SIZE -; mov [tss._esp0], eax mov ax, graph_data mov gs, ax diff --git a/kernel/trunk/core/syscall.inc b/kernel/trunk/core/syscall.inc index 21b7802a6b..2213e80a86 100644 --- a/kernel/trunk/core/syscall.inc +++ b/kernel/trunk/core/syscall.inc @@ -128,10 +128,10 @@ iglobal dd sys_settime ; 22-setting date,time,clock and alarm-clock dd 0 dd syscall_cdaudio ; 24-PlayCdTrack,StopCd and GetCdPlaylist - dd sys_sb16 ; 25-SetSb16 + dd 0 ; dd sys_getsetup ; 26-GetMidiBase,GetKeymap,GetShiftKeymap,. dd 0 - dd sys_sb16II ; 28-SetSb16 + dd 0 ; dd 0 dd sys_current_directory ; 30-Get/SetCurrentDirectory dd 0 @@ -208,10 +208,10 @@ iglobal dd cross_order ; 22-setting date,time,clock and alarm-clock dd sys_wait_event_timeout ; 23-TimeOutWaitForEvent dd cross_order ; 24-PlayCdTrack,StopCd and GetCdPlaylist - dd cross_order ; 25-SetSb16 + dd undefined_syscall ; 25-reserved dd cross_order ; 26-GetMidiBase,GetKeymap,GetShiftKeymap,. dd undefined_syscall ; 27-reserved - dd cross_order ; 28-SetSb16 + dd undefined_syscall ; 28-reserved dd sys_date ; 29-GetDate dd cross_order ; 30-Get/SetCurrentDirectory dd undefined_syscall ; 31-reserved @@ -258,5 +258,5 @@ iglobal dd cross_order ; 72-Send window message times 255 - ( ($-servetable2) /4 ) dd undefined_syscall dd sys_end ; -1-end application - + endg diff --git a/kernel/trunk/data32.inc b/kernel/trunk/data32.inc index 857ead7d16..541b19007c 100644 --- a/kernel/trunk/data32.inc +++ b/kernel/trunk/data32.inc @@ -90,6 +90,7 @@ szHwMouse db 'ATI2D',0 szPS2MDriver db 'PS2MOUSE',0 szCOM_MDriver db 'COM_MOUSE',0 szUSB db 'USB',0 +szAtiHW db '/rd/1/drivers/ati2d.drv',0 szSTART db 'START',0 szEXPORTS db 'EXPORTS',0 @@ -146,7 +147,6 @@ putpixel dd __sys_putpixel align 4 keyboard dd 1 -sound_dma dd 1 syslang dd 1 boot_y dd 10 @@ -283,7 +283,9 @@ irq_tab rd 16 mem_block_map rb 512 event_map rb 64 mem_block_list rd 64 +large_block_list rd 31 mem_block_mask rd 2 +large_block_mask rd 1 mem_used.fd rd 1 mem_used.bk rd 1 @@ -364,8 +366,6 @@ hdpos rd 1 ; for boot 0x1 fat32part rd 1 ; for boot 0x1 cdpos rd 1 -sb16 rd 1 - ;CPUID information cpu_vendor rd 3 cpu_sign rd 1 diff --git a/kernel/trunk/docs/sysfuncr.txt b/kernel/trunk/docs/sysfuncr.txt index bcc478cacb..f5b20dae7a 100644 --- a/kernel/trunk/docs/sysfuncr.txt +++ b/kernel/trunk/docs/sysfuncr.txt @@ -41,7 +41,7 @@ * esi = 0xXYRRGGBB - цвет заголовка * RR, GG, BB определяют сам цвет * Y=0 - обычное окно, Y=1 - неперемещаемое окно - * X определяет градиент заголовка: X=0 - нет градиента, + * X определяет градиент заголовка: X=0 - нет градиента, X=8 - обычный градиент, для окон типа II X=4 - негативный градиент * прочие значения X и Y зарезервированы @@ -67,7 +67,7 @@ координата (или, возможно, обе) считается нулем, а если и это не помогает, то соответствующий размер (или, возможно, оба) устанавливается в размер экрана. - + Далее обозначим xpos,ypos,xsize,ysize - значения, передаваемые в ebx,ecx. Координаты приводятся относительно левого верхнего угла окна, который, таким образом, задается как (0,0), координаты @@ -661,7 +661,7 @@ * Узнать, какое окно является активным, можно вызовом подфункции 7. ====================================================================== - Функция 18, подфункция 4 - получить счётчик пустых тактов в секунду. + Функция 18, подфункция 4 - получить счётчик пустых тактов в секунду. ====================================================================== Под пустыми тактами понимается время, в которое процессор простаивает в ожидании прерывания (в инструкции hlt). @@ -682,7 +682,7 @@ * eax = тактовая частота (по модулю 2^32 тактов = 4ГГц) ====================================================================== - Функция 18, подфункция 6 - сохранить рамдиск в файл на жёстком диске. + Функция 18, подфункция 6 - сохранить рамдиск в файл на жёстком диске. ====================================================================== Параметры: * eax = 18 - номер функции @@ -763,7 +763,7 @@ Замечания: * Минимизированное окно с точки зрения функции 9 сохраняет положение и размеры. - * Восстановление окна приложения происходит при активизировании + * Восстановление окна приложения происходит при активизировании подфункцией 3. * Обычно нет необходимости явно сворачивать/разворачивать своё окно: сворачивание окна осуществляется системой при нажатии на кнопку @@ -1026,7 +1026,7 @@ dd 638 * иначе eax = номер слота ====================================================================== - Функция 18, подфункция 22 - операции с окном другого процесса/потока. + Функция 18, подфункция 22 - операции с окном другого процесса/потока. ====================================================================== Параметры: * eax = 18 - номер функции @@ -1063,7 +1063,7 @@ dd 638 * eax = 0 - успешно * eax = 1 - не определён базовый порт Замечания: - * Предварительно должен быть определён базовый порт вызовом + * Предварительно должен быть определён базовый порт вызовом подфункции 1 функции 21. ====================================================================== @@ -1079,7 +1079,7 @@ dd 638 Замечания: * Номер порта должен удовлетворять условиям 0x100<=ecx<=0xFFFF. * Установка базы нужна для работы функции 20. - * Получить установленный базовый порт можно вызовом + * Получить установленный базовый порт можно вызовом подфункции 1 функции 26. ====================================================================== @@ -1109,7 +1109,7 @@ dd 638 нормальная раскладка, после чего из кода вычитается 0x60; если не нажата ни одна из управляющих клавиш, то используется нормальная раскладка. - * Получить раскладки и идентификатор страны можно с помощью + * Получить раскладки и идентификатор страны можно с помощью подфункции 2 функции 26. * Идентификатор страны - глобальная системная переменная, которая самим ядром не используется; однако приложение @panel отображает @@ -1127,24 +1127,13 @@ dd 638 * eax = 0 Замечания: * База CD используется функцией 24. - * Получить установленную базу CD можно вызовом + * Получить установленную базу CD можно вызовом подфункции 3 функции 26. ====================================================================== == Функция 21, подфункция 4 - установить базовый порт Sound Blaster. = ====================================================================== -Параметры: - * eax = 21 - номер функции - * ebx = 4 - номер подфункции - * ecx = номер базового порта -Возвращаемое значение: - * eax = 0 - успешно - * eax = -1 - ошибочный номер порта -Замечания: - * Номер порта должен удовлетворять условиям 0x100<=ecx<=0xFFFF. - * Установка базы нужна для работы функций 25, 28, 55. - * Получить установленный базовый порт можно вызовом - подфункции 4 функции 26. +Удалена ====================================================================== ========= Функция 21, подфункция 5 - установить язык системы. ======== @@ -1181,7 +1170,7 @@ dd 638 * Не следует изменять базу, когда какое-нибудь приложение работает с жёстким диском. Если не хотите глюков системы. * Получить установленную базу можно вызовом подфункции 7 функции 26. - * Следует также определить используемый раздел жёсткого диска + * Следует также определить используемый раздел жёсткого диска подфункцией 8. ====================================================================== @@ -1204,26 +1193,15 @@ dd 638 * Получить установленный раздел можно вызовом подфункции 8 функции 26. * Проверок на корректность не делается. - * Узнать число разделов на жёстком диске можно вызовом + * Узнать число разделов на жёстком диске можно вызовом подфункции 11 функции 18. - * Следует также определить используемую базу жёсткого диска + * Следует также определить используемую базу жёсткого диска подфункцией 7. ====================================================================== ===== Функция 21, подфункция 10 - установить канал DMA для звука. ==== ====================================================================== -Параметры: - * eax = 21 - номер функции - * ebx = 10 - номер подфункции - * ecx = номер канала (от 0 до 3 включительно) -Возвращаемое значение: - * eax = 0 - успешно - * eax = -1 - неверный номер канала -Замечания: - * Номер канала DMA используется в - подфункции 1 функции 55. - * Получить канал DMA для звука можно вызовом - подфункции 10 функции 26. +Удалена: ====================================================================== ====================== Функция 21, подфункция 11 ===================== @@ -1308,13 +1286,13 @@ dd 638 * ebx = частота вертикальной развёртки (в Гц) * ecx = номер текущего видеорежима Замечания: - * Драйвер предварительно должен быть инициализирован вызовом + * Драйвер предварительно должен быть инициализирован вызовом функции драйвера 1. * Если нужны только размеры экрана, целесообразней использовать функцию 14 с учётом того, что она возвращает размеры на 1 меньше. ====================================================================== -= Функция 21, подфункция 13, подподфункция 3 - установить видеорежим. += Функция 21, подфункция 13, подподфункция 3 - установить видеорежим. ====================================================================== Параметры: * eax = 21 - номер функции @@ -1327,7 +1305,7 @@ dd 638 * eax = 0 - успешно * ebx, ecx разрушаются Замечания: - * Драйвер предварительно должен быть инициализирован вызовом + * Драйвер предварительно должен быть инициализирован вызовом функции драйвера 1. * Номер видеорежима и частота должны быть в таблице, возвращаемой функцией драйвера 1. @@ -1346,7 +1324,7 @@ dd 638 * eax = 0 - успешно * ebx, ecx разрушаются Замечания: - * Драйвер предварительно должен быть инициализирован вызовом + * Драйвер предварительно должен быть инициализирован вызовом функции драйвера 1. ====================================================================== @@ -1366,7 +1344,7 @@ dd 638 * eax = 0 - успешно * ebx, ecx разрушаются Замечания: - * Драйвер предварительно должен быть инициализирован вызовом + * Драйвер предварительно должен быть инициализирован вызовом функции драйвера 1. * Функция влияет только на физический размер изображения на мониторе; логический размер (число пикселей) не меняется. @@ -1447,7 +1425,7 @@ dd 638 * eax = 0 - успешно * eax = 1 - не определена база CD Замечания: - * Предварительно нужно определить базовый порт CD вызовом + * Предварительно нужно определить базовый порт CD вызовом подфункции 3 функции 21. * В секунде 75 фреймов, в минуте 60 секунд. * Функция асинхронна (возвращает управление, когда началось @@ -1468,7 +1446,7 @@ dd 638 * Формат таблицы с информацией о дорожках такой же, как и для ATAPI-CD команды 43h (READ TOC), обычной таблицы (подкоманда 00h). Адреса возвращаются в формате MSF. - * Предварительно нужно определить базовый порт CD вызовом + * Предварительно нужно определить базовый порт CD вызовом подфункции 3 функции 21. * Функция возвращает информацию только о не более чем 100 первых дорожках. В большинстве случаев этого достаточно. @@ -1483,7 +1461,7 @@ dd 638 * eax = 0 - успешно * eax = 1 - не определена база CD Замечания: - * Предварительно нужно определить базовый порт CD вызовом + * Предварительно нужно определить базовый порт CD вызовом подфункции 3 функции 21. ====================================================================== @@ -1521,22 +1499,7 @@ dd 638 ====================================================================== ============== Функция 25 - установить громкость SBPro. ============== ====================================================================== -Параметры: - * eax = 25 - номер функции - * ebx = что устанавливать: - * 1 - установить общую громкость - * 2 - установить громкость CD-audio - * cl = уровень громкости: старшие 4 бита для левой колонки, - младшие 4 - для правой -Возвращаемое значение: - * eax = 0 - успешно - * eax = 1 - не определена база SB - * eax = 2 - неверная подфункция -Замечания: - * Предварительно нужно определить базовый порт SB вызовом - подфункции 4 функции 21. - * Смотри также функцию 28 - установки звука для более позднего стандарта SB16. +Удалена ====================================================================== ===== Функция 26, подфункция 1 - получить базовый порт MPU MIDI. ===== @@ -1547,7 +1510,7 @@ dd 638 Возвращаемое значение: * eax = номер порта Замечания: - * Установить базовый порт можно вызовом + * Установить базовый порт можно вызовом подфункции 1 функции 21. ====================================================================== @@ -1580,7 +1543,7 @@ dd 638 нормальная раскладка, после чего из кода вычитается 0x60; если не нажата ни одна из управляющих клавиш, то используется нормальная раскладка. - * Установить раскладки и идентификатор страны можно с помощью + * Установить раскладки и идентификатор страны можно с помощью подфункции 2 функции 21. * Идентификатор страны - глобальная системная переменная, которая самим ядром не используется; однако приложение @panel отображает @@ -1603,14 +1566,7 @@ dd 638 ====================================================================== === Функция 26, подфункция 4 - получить базовый порт Sound Blaster. == ====================================================================== -Параметры: - * eax = 26 - номер функции - * ebx = 4 - номер подфункции -Возвращаемое значение: - * eax = номер базового порта -Замечания: - * Установка базы нужна для работы функций 25, 55. - * Установить базовый порт можно вызовом подфункции 4 функции 21. +Удалена ====================================================================== ========== Функция 26, подфункция 5 - получить язык системы. ========= @@ -1679,15 +1635,7 @@ dd 638 ====================================================================== ====== Функция 26, подфункция 10 - получить канал DMA для звука. ===== ====================================================================== -Параметры: - * eax = 26 - номер функции - * ebx = 10 - номер подфункции -Возвращаемое значение: - * eax = номер канала (от 0 до 3 включительно) -Замечания: - * Номер канала DMA используется в подфункции 1 функции 55. - * Установить канал DMA для звука можно вызовом - подфункции 10 функции 21. +Удалена ====================================================================== ====================== Функция 26, подфункция 11 ===================== @@ -1700,7 +1648,7 @@ dd 638 * eax = 0/1 - запрещён/разрешён Замечания: * Используется при LBA-чтении (подфункция 8 функции 58). - * Установить текущее состояние можно вызовом + * Установить текущее состояние можно вызовом подфункции 11 функции 21. ====================================================================== @@ -1715,27 +1663,13 @@ dd 638 Замечания: * Используется при работе с шиной PCI (функция 62). * Текущая реализация использует только младший бит ecx. - * Установить текущее состояние можно вызовом + * Установить текущее состояние можно вызовом подфункции 12 функции 21. ====================================================================== =============== Функция 28 - установить громкость SB16. ============== ====================================================================== -Параметры: - * eax = 28 - номер функции - * ebx = что устанавливать: - * 1 - установить общую громкость - * 2 - установить громкость CD-audio - * cl = уровень громкости (0=off, 0xFF=max) -Возвращаемое значение: - * eax = 0 - успешно - * eax = 1 - не определена база SB - * eax = 2 - неверная подфункция -Замечания: - * Предварительно нужно определить базовый порт SB вызовом - подфункции 4 функции 21. - * Эта функция предоставляет больше вариантов для громкости, - чем функция 25. +Удалена ====================================================================== ================ Функция 29 - получить системную дату. =============== @@ -1919,7 +1853,7 @@ dd 638 Возвращаемое значение: * eax = [ширина]*65536 + [высота] Замечания: - * Есть парная команда установки размеров фонового изображения - + * Есть парная команда установки размеров фонового изображения - подфункция 1 функции 15. После которой, разумеется, следует заново определить само изображение. @@ -1938,7 +1872,7 @@ dd 638 * Не следует полагаться на возвращаемое значение в случае неверного смещения, оно может измениться в следующих версиях ядра. * Смещение точки с координатами (x,y) вычисляется как (x+y*xsize)*3. - * Есть парная функция установки точки на фоновом изображении - + * Есть парная функция установки точки на фоновом изображении - подфункция 2 функции 15. ====================================================================== @@ -1951,7 +1885,7 @@ dd 638 * eax = 1 - замостить * eax = 2 - растянуть Замечания: - * Есть парная функция установки режима отрисовки фона - + * Есть парная функция установки режима отрисовки фона - подфункция 4 функции 15. ====================================================================== @@ -1992,7 +1926,7 @@ dd 638 ------------------------ Чтение данных ------------------------------- При возникновении IRQ система может считывать данные из указанных ранее функцией 44 портов и записывать эти данные в буфер. -Описываемая функция считывает данные из этого буфера в буфер +Описываемая функция считывает данные из этого буфера в буфер указанный в качестве параметра. Параметры: * eax = 42 - номер функции @@ -2102,7 +2036,7 @@ dd 638 все зарезервированные им IRQ. ====================================================================== -= Функция 46 - зарезервировать/освободить группу портов ввода/вывода. += Функция 46 - зарезервировать/освободить группу портов ввода/вывода. ====================================================================== К зарезервированным портам можно обращаться напрямую из приложения командами in/out (рекомендуемый способ) и вызовом функции 43 @@ -2197,7 +2131,7 @@ dd 638 Возвращаемое значение: * функция не возвращает значения Замечания: - * После вызова описываемой функции следует перерисовать экран + * После вызова описываемой функции следует перерисовать экран подфункцией 0. * Тип кнопок влияет только на их прорисовку функцией 8. @@ -2214,7 +2148,7 @@ dd 638 Возвращаемое значение: * функция не возвращает значения Замечания: - * После вызова описываемой функции следует перерисовать экран + * После вызова описываемой функции следует перерисовать экран подфункцией 0. * Таблица стандартных цветов влияет только на приложения, которые эту таблицу явным образом получают (подфункцией 3) и @@ -2328,7 +2262,7 @@ dword- Аналогично по оси y. * Смотри также функцию 14, позволяющую определить размеры всего экрана. - * Есть парная функция получения рабочей области - + * Есть парная функция получения рабочей области - подфункция 5. * Эта функция автоматически перерисовывает экран, по ходу дела обновляет координаты и размеры максимизированных окон. @@ -2452,7 +2386,7 @@ dword- * иначе eax = TID - идентификатор потока ====================================================================== -= Функция 52, подфункция 0 - получить конфигурацию сетевого драйвера. += Функция 52, подфункция 0 - получить конфигурацию сетевого драйвера. ====================================================================== Параметры: * eax = 52 - номер функции @@ -2477,7 +2411,7 @@ dword- * Локальный IP-адрес устанавливается подфункцией 3. ====================================================================== - Функция 52, подфункция 2 - установить конфигурацию сетевого драйвера. + Функция 52, подфункция 2 - установить конфигурацию сетевого драйвера. ====================================================================== Параметры: * eax = 52 - номер функции @@ -2825,7 +2759,7 @@ dword- * Проверки на правильность хэндла не делается. ====================================================================== - Функция 53, подфункция 255 - отладочная информация сетевого драйвера. + Функция 53, подфункция 255 - отладочная информация сетевого драйвера. ====================================================================== Параметры: * eax = 53 - номер функции @@ -3120,8 +3054,8 @@ dword- * Размер блока - 512 байт; читается один блок. * Не следует полагаться на возвращаемое значение, оно может измениться в следующих версиях. - * Требуется, чтобы был разрешён LBA-доступ к устройствам - подфункцией 11 функции 21. Узнать это можно вызовом + * Требуется, чтобы был разрешён LBA-доступ к устройствам + подфункцией 11 функции 21. Узнать это можно вызовом подфункцией 11 функции 26. * LBA-чтение дискеты не поддерживается. * Функция считывает данные физического жёсткого диска; @@ -3135,7 +3069,7 @@ dword- это будет считаться успехом (eax=0). ====================================================================== -= Функция 58, подфункция 15 - получить информацию о файловой системе. += Функция 58, подфункция 15 - получить информацию о файловой системе. ====================================================================== Параметры: * eax = 58 - номер функции @@ -4016,7 +3950,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); общем описании). ====================================================================== - Функция 69, подфункция 7 - записать в память отлаживаемого процесса. + Функция 69, подфункция 7 - записать в память отлаживаемого процесса. ====================================================================== Параметры: * eax = 69 - номер функции diff --git a/kernel/trunk/docs/sysfuncs.txt b/kernel/trunk/docs/sysfuncs.txt index f50c894453..e1fa906dde 100644 --- a/kernel/trunk/docs/sysfuncs.txt +++ b/kernel/trunk/docs/sysfuncs.txt @@ -1128,18 +1128,7 @@ Remarks: ====================================================================== ====== Function 21, subfunction 4 - set Sound Blaster base port. ===== ====================================================================== -Parameters: - * eax = 21 - function number - * ebx = 4 - subfunction number - * ecx = number of the base port -Returned value: - * eax = 0 - success - * eax = -1 - erratic port number -Remarks: - * Number of the port must satisfy to conditions 0x100<=ecx<=0xFFFF. - * The installation of the base is necessary for - functions 25, 28, 55. - * To get base port use subfunction 4 of function 26. +Removed ====================================================================== ========== Function 21, subfunction 5 - set system language. ========= @@ -1204,16 +1193,7 @@ Remarks: ====================================================================== ======== Function 21, subfunction 10 - set sound DMA channel. ======== ====================================================================== -Parameters: - * eax = 21 - function number - * ebx = 10 - subfunction number - * ecx = number of channel (from 0 up to 3 inclusively) -Returned value: - * eax = 0 - success - * eax = -1 - incorrect channel number -Remarks: - * Number of DMA channel is used in subfunction 1 of function 55. - * To get sound DMA channel use subfunction 10 of function 26. +Removed ====================================================================== Function 21, subfunction 11 - enable/disable low-level access to HD. @@ -1505,22 +1485,7 @@ Remarks: ====================================================================== =================== Function 25 - set SBPro volume. ================== ====================================================================== -Parameters: - * eax = 25 - function number - * ebx = what to set: - * 1 - set common volume - * 2 - set CD-audio volume - * cl = volume level: high 4 bits for the left column, - low 4 bits for the right one -Returned value: - * eax = 0 - success - * eax = 1 - SB base is not defined - * eax = 2 - incorrect subfunction -Remarks: - * Previously SB base port must be defined by - subfunction 4 of function 21. - * See also function 28 which sets - volume for the later standard SB16. +Removed ====================================================================== ======== Function 26, subfunction 1 - get MPU MIDI base port. ======== @@ -1584,14 +1549,7 @@ Remarks: ====================================================================== ====== Function 26, subfunction 4 - get Sound Blaster base port. ===== ====================================================================== -Parameters: - * eax = 26 - function number - * ebx = 4 - subfunction number -Returned value: - * eax = base port number -Remarks: - * Bae port is used by functions 25, 55. - * To set base port use subfunction 4 of function 21. +Removed ====================================================================== ========== Function 26, subfunction 5 - get system language. ========= @@ -1658,14 +1616,7 @@ Remarks: ====================================================================== ======== Function 26, subfunction 10 - get sound DMA channel. ======== ====================================================================== -Parameters: - * eax = 26 - function number - * ebx = 10 - subfunction number -Returned value: - * eax = number of the channel (from 0 to 3 inclusive) -Remarks: - * Number of the DMA channel is used by subfunction 1 of function 55. - * To set the sound DMA channel use subfunction 10 of function 21. +Removed ====================================================================== ===================== Function 26, subfunction 11 ==================== @@ -1697,20 +1648,7 @@ Remarks: ====================================================================== =================== Function 28 - set SB16 volume. =================== ====================================================================== -Parameters: - * eax = 28 - function number - * ebx = what to install: - * 1 - install common volume - * 2 - install CD-audio volume - * cl = volume level (0=off, 0xFF=max) -Returned value: - * eax = 0 - success - * eax = 1 - SB base is not defined - * eax = 2 - incorrect subfunction -Remarks: - * Previously SB base port must be defined by - subfunction 4 of function 21. - * This function gives more variants for volume, that function 25. +Removed ====================================================================== =================== Function 29 - get system date. =================== diff --git a/kernel/trunk/drivers/ati2d.asm b/kernel/trunk/drivers/ati2d.asm index d71ad97aeb..3b295df05a 100644 --- a/kernel/trunk/drivers/ati2d.asm +++ b/kernel/trunk/drivers/ati2d.asm @@ -7,6 +7,8 @@ format MS COFF +DEBUG equ 1 + include 'proc32.inc' include 'imports.inc' @@ -14,8 +16,6 @@ R500_HW2D equ 0 API_VERSION equ 0x01000100 -DEBUG equ 1 - STRIDE equ 8 VID_ATI equ 0x1002 diff --git a/kernel/trunk/drivers/com_mouse.asm b/kernel/trunk/drivers/com_mouse.asm index 0e1bf84262..4d764fd243 100644 --- a/kernel/trunk/drivers/com_mouse.asm +++ b/kernel/trunk/drivers/com_mouse.asm @@ -11,14 +11,12 @@ format MS COFF -API_VERSION equ 5 ;debug +DEBUG equ 0 include 'proc32.inc' include 'imports.inc' -OS_BASE equ 0x80000000; -new_app_base equ 0x0 -PROC_BASE equ OS_BASE+0x0080000 +API_VERSION equ 5 ;debug struc IOCTL { .handle dd ? @@ -36,7 +34,6 @@ end virtual public START public version -DEBUG equ 0 DRV_ENTRY equ 1 DRV_EXIT equ -1 diff --git a/kernel/trunk/drivers/ensoniq.asm b/kernel/trunk/drivers/ensoniq.asm index f86a9dd05e..d5fe56fc3e 100644 --- a/kernel/trunk/drivers/ensoniq.asm +++ b/kernel/trunk/drivers/ensoniq.asm @@ -9,12 +9,12 @@ format MS COFF +DEBUG equ 1 + include 'proc32.inc' include 'imports.inc' -DEBUG equ 1 - REMAP_IRQ equ 0 ;irq 0,1,2,8,12,13 эхфюёЄєяэ√ diff --git a/kernel/trunk/drivers/imports.inc b/kernel/trunk/drivers/imports.inc index c7bff18aee..df1ee70f0c 100644 --- a/kernel/trunk/drivers/imports.inc +++ b/kernel/trunk/drivers/imports.inc @@ -6,8 +6,10 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; macro kernel_export [name]{ forward -;display `name,#13,#10 if used name + if DEBUG + display 'uses: ',`name,#13,#10 + end if extrn name end if } @@ -19,6 +21,7 @@ kernel_export \ GetService,\ ServiceHandler,\ AttachIntHandler,\ + GetIntHandler,\ FpuSave,\ FpuRestore,\ ReservePortArea,\ diff --git a/kernel/trunk/drivers/infinity.asm b/kernel/trunk/drivers/infinity.asm index 2eb64e7357..2e006c935d 100644 --- a/kernel/trunk/drivers/infinity.asm +++ b/kernel/trunk/drivers/infinity.asm @@ -10,6 +10,13 @@ format MS COFF +DEBUG equ 1 + + +include 'proc32.inc' +include 'main.inc' +include 'imports.inc' + CURRENT_API equ 0x0101 ;1.01 COMPATIBLE_API equ 0x0100 ;1.00 @@ -18,13 +25,6 @@ API_VERSION equ (COMPATIBLE_API shl 16) or CURRENT_API SOUND_VERSION equ CURRENT_API -include 'proc32.inc' - -;include 'system.inc' -include 'main.inc' - -include 'imports.inc' - FORCE_MMX equ 0 ;set to 1 to force use mmx or FORCE_MMX_128 equ 0 ;integer sse2 extensions ;and reduce driver size @@ -33,9 +33,6 @@ FORCE_MMX_128 equ 0 ;integer sse2 extensions USE_SSE2_MIXER equ 0 ;floating point mixer. Disabled by default -DEBUG equ 1 - - OS_BASE equ 0x80000000 CAPS_SSE2 equ 26 @@ -1209,7 +1206,7 @@ resampler_params: ;r_size r_dt resampler_func dd 0,0,0 ; 0 PCM_ALL dd 16384, 0, copy_stream ; 1 PCM_2_16_48 - dd 16384, 0, m16_stereo ; 2 PCM_1_16_48 + dd 8192, 0, m16_stereo ; 2 PCM_1_16_48 dd 16384, 30109, resample_2 ; 3 PCM_2_16_44 dd 8192, 30109, resample_1 ; 4 PCM_1_16_44 diff --git a/kernel/trunk/drivers/proc32.inc b/kernel/trunk/drivers/proc32.inc index 98a1bd3342..23c56b03c1 100644 --- a/kernel/trunk/drivers/proc32.inc +++ b/kernel/trunk/drivers/proc32.inc @@ -71,7 +71,7 @@ macro epiloguedef procname,flag,parmbytes,localbytes,reglist if parmbytes | localbytes leave end if - if (flag and 10000b) | (parmbytes=0) + if flag and 10000b retn else retn parmbytes diff --git a/kernel/trunk/drivers/ps2mouse.asm b/kernel/trunk/drivers/ps2mouse.asm index 920d45b83a..db75673736 100644 --- a/kernel/trunk/drivers/ps2mouse.asm +++ b/kernel/trunk/drivers/ps2mouse.asm @@ -1,5 +1,7 @@ format MS COFF +DEBUG equ 0 + include 'proc32.inc' include 'imports.inc' @@ -47,12 +49,12 @@ proc START stdcall, state:dword test eax,eax jnz .stop_try mov [MouseType],MT_3BScroll - + call try_mode_ID4 test eax,eax jnz .stop_try mov [MouseType],MT_5BScroll - + .stop_try: mov bl, 0x20 ; read command byte @@ -81,7 +83,7 @@ proc START stdcall, state:dword mov bl, 0xAE ; enable keyboard interface call kbd_cmd - + stdcall AttachIntHandler, 12, irq_handler, dword 0 stdcall RegService, my_service, service_proc ret diff --git a/kernel/trunk/drivers/sb16/CONFIG.INC b/kernel/trunk/drivers/sb16/CONFIG.INC new file mode 100644 index 0000000000..d39356ed69 --- /dev/null +++ b/kernel/trunk/drivers/sb16/CONFIG.INC @@ -0,0 +1,41 @@ +;flags------------------------------------------------------------ +DEBUG equ 1 ;show messages at debug board +use_cli_sti equ 1 ;driver come more stable (theoretically) + +;constants-------------------------------------------------------- +API_VERSION equ 0 ;debug + +OS_BASE equ 0x80000000 +new_app_base equ 0x0 +PROC_BASE equ (OS_BASE+0x080000) +SB16Buffer equ (OS_BASE+0x2A0000) +SB16_Status equ (OS_BASE+0x2B0000) +DMAPage equ ((SB16Buffer-OS_BASE) shr 16) + +SB16Buffer0 equ SB16Buffer +SB16Buffer1 equ (SB16Buffer+16384) +SB16Buffer2 equ (SB16Buffer+(2*16384)) +SB16Buffer3 equ (SB16Buffer+(3*16384)) + +sb_irq_num equ 5 +sb_dma_num equ 5 +sb_buffer_size equ 32768 ;really it needs code modifications to change + ;buffer size +sb_out_rate equ 44100 +;time constant for cards older than SB16 + +sb_tc equ (256-(1000000/(sb_out_rate*2))) + +SRV_GETVERSION equ 0 +DEV_PLAY equ 1 +DEV_STOP equ 2 +DEV_CALLBACK equ 3 +DEV_SET_BUFF equ 4 +DEV_NOTIFY equ 5 +DEV_SET_MASTERVOL equ 6 +DEV_GET_MASTERVOL equ 7 +DEV_GET_INFO equ 8 + +DRV_ENTRY equ 1 +DRV_EXIT equ -1 + diff --git a/kernel/trunk/drivers/sb16/SB16.INC b/kernel/trunk/drivers/sb16/SB16.INC new file mode 100644 index 0000000000..f48db82cac --- /dev/null +++ b/kernel/trunk/drivers/sb16/SB16.INC @@ -0,0 +1,239 @@ +;-------------------------------- +; program dma +;-------------------------------- +sb_set_dma: + mov ebx,[sound_dma] + lea eax,[ebx+4] ;mask required channel + cmp bl,4 + ja .use_second_dma_controller + jb @f +.dma_setup_error: +if DEBUG + mov esi,msgErrDMAsetup + call SysMsgBoardStr +end if + mov dword[esp],START.stop + ret +@@: +if use_cli_sti + cli ;here to minimize time with disabled ints +end if + out 0xA,al ;mask required channel + + xor eax,eax + out 0xC,al ;clear byte pointer flip-flop register + + lea eax,[ebx+0x58] ;auto-init mode for channel (ebx) + out 0xB,al ;DMA channel 0-3 mode register + + movzx edx,byte[ebx+dma_table] ;page register + mov al,DMAPage + out dx,al + + lea edx,[ebx*2] ;DMA channel 0-3 base address + + mov al,0 ;LSB is 0 + out dx,al + +; mov al,0 ;MSB is 0 too + out dx,al + + inc edx ;DMA channel 0-3 byte count + + mov al,((sb_buffer_size-1) and 0xff) + out dx,al + + mov al,((sb_buffer_size-1) shr 8) ;it is the same + out dx,al + + mov eax,ebx ;unmask DMA channel + out 0xA,al + +if use_cli_sti + sti +end if + ret + +.use_second_dma_controller: + cmp bl,7 + ja .dma_setup_error + + sub bl,4 + sub al,4 +if use_cli_sti + cli ;here to minimize time with disabled ints +end if + out 0xD4,al ;mask required channel + + xor eax,eax + out 0xD8,al ;clear byte pointer flip-flop register + + lea eax,[ebx+0x58] ;auto-init mode for channel (ebx+4) + out 0xD6,al ;DMA channel 4-7 mode register + + movzx edx,byte[ebx+dma_table+4] ;page register + mov al,DMAPage + out dx,al + + lea edx,[ebx*4+0xC0] ;DMA channel 4-7 base address + + mov al,0 ;LSB is 0 ;for 16bit DMA this contains + out dx,al ;A1-A8 lines of address bus, A0 is zero + +; mov al,0 ;MSB is 0 too ;for 16bit DMA this contains + out dx,al ;A9-A16 lines of address bus + + inc edx + inc edx ;DMA channel 4-7 16bit word count + + mov al,(((sb_buffer_size/2)-1) and 0xff) + out dx,al + + mov al,(((sb_buffer_size/2)-1) shr 8) + out dx,al + + mov eax,ebx ;unmask DMA channel + out 0xD4,al + +if use_cli_sti + sti +end if + ret +;------------------------------------------------------------------------------- +; out byte to SB DSP's write port +;------------------------------------------------------------------------------- +macro sb_out data_to_out { +@@: + in al,dx + test al,al ;is DSP busy? + js @b ;it's busy + mov al,data_to_out ;it's free + out dx,al +} +;------------------------------------------------------------------------------- +; stop playing +;------------------------------------------------------------------------------- +proc sb_stop + mov edx,[sb_base_port] + add dl,0xC + sb_out 0xD3 ;turn the speaker off + sb_out 0xDA ;exit 8bit DMA + sb_out 0xD9 ;exit 16bit DMA + ret +endp +;------------------------------------------------------------------------------- +; start playing +;------------------------------------------------------------------------------- +proc sb_play + and [int_flip_flop],0 + mov edx,[sb_base_port] + add dl,0xC + sb_out 0xD1 ;turn speaker on +; sb_out 0x48 ;set DSP transfer size ;for older cards + +; mov ax,32767 ;(64k)/2-1 +;@@: ;out the low byte... +; in al,dx +; test al,al ;is DSP busy? +; js @b ;it's busy +; out dx,al + +; mov al,ah ;...then the high byte +;@@: +; in al,dx +; test al,al ;is DSP busy? +; js @b ;it's busy +; out dx,al + +; sb_out 0x1C ;auto-init 8bit playback + +; 0xBXh - 16 bit DMA mode +; |||| + sb_out 10110110b ;bCommand +; |||| +; |||+-reserved +; ||+--turn FIFO on (0 for off) +; |+---auto-init mode on (0 for off) +; +----A/D: 0-output, 1-input +; +------stereo on +; |+-----unsigned (1 for signed) +; || + sb_out 00110000b ;bMode +; || |||| +; ---------reserved +;wSize is a number of 16bit samples less 1. For auto-init mode each half +;buffer is (64k)/2 bytes long and, obviously, contains ((64k)/2)/2 bytes + sb_out (((sb_buffer_size/2/2)-1) and 0xFF) ;wSize.LowByte + sb_out (((sb_buffer_size/2/2)-1) shr 8) ;wSize.HighByte + ret +endp +;------------------------------------------------------------------------------- +; reset DSP +;------------------------------------------------------------------------------- +proc sb_reset + and [int_flip_flop],0 + mov edx,[sb_base_port] + add dl,6 + mov al,1 ;start DSP reset + +if use_cli_sti + cli ;here to minimize time with disabled ints +end if + out dx,al + mov ecx,40 ;wait at least 3 microsec. +@@: + in al,dx + loop @b + + xor eax,eax ;stop DSP reset +if use_cli_sti + sti +end if + out dx,al + ret +endp +;------------------------------------------------------------------------------- +; set the rate for playing, enable stereo +;------------------------------------------------------------------------------- +proc sb_setup + mov edx,[sb_base_port] + add dl,0xC + sb_out 40h ;set time constant, this is for old cards + sb_out sb_tc + + sb_out 41h ;set sound rate, this can only SB16 + sb_out (sb_out_rate shr 8) ;first high byte (MSB) + sb_out (sb_out_rate and 0xff) ;then low byte (LSB) +; mov al,0xE +; sub dl,(0xC-4) ;talk to SB's mixer +; out dx,al ;select this register of the mixer +; mov ecx,6 ;wait for the chip +;@@: +; in al,dx +; loop @b + +; inc edx ;now read the data port +; in al,dx +; or al,22h ;turn on stereo +; mov ah,al + +; mov al,0xE +; dec edx ;talk to SB's mixer +; out dx,al ;select this register of the mixer + +; mov ecx,6 ;wait for the chip +;@@: +; in al,dx +; loop @b + +; inc edx ;now send data to the data port +; mov al,ah +; out dx,al + +; dec edx +; mov ecx,35 ;wait for the chip +;@@: +; in al,dx +; loop @b + ret +endp \ No newline at end of file diff --git a/kernel/trunk/drivers/sb16/sb16.asm b/kernel/trunk/drivers/sb16/sb16.asm new file mode 100644 index 0000000000..85fc081c6c --- /dev/null +++ b/kernel/trunk/drivers/sb16/sb16.asm @@ -0,0 +1,375 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ;; +;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; +;; Distributed under terms of the GNU General Public License ;; +;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +format MS COFF + +include 'config.inc' + +;structs---------------------------------------------------------- +struc IOCTL +{ .handle dd ? + .io_code dd ? + .input dd ? + .inp_size dd ? + .output dd ? + .out_size dd ? +} + +virtual at 0 + IOCTL IOCTL +end virtual + +;something-------------------------------------------------------- +public START +public service_proc +public version + +include '..\proc32.inc' +include '..\imports.inc' + +section '.flat' code readable align 16 + +include 'sb16.inc' + +;------------------------------------------------------------------------------- +proc START stdcall, state:dword + + cmp [state], 1 + jne .stop +.entry: + +if DEBUG + mov esi, msgInit + call SysMsgBoardStr +end if + + call detect ;returns DSP version or zero if + test eax,eax ;SB card not found + jz .exit + +if DEBUG + movzx eax,al ;major version + dec eax + jz .sb_say_about_found_dsp + mov dword[sb_DSP_description],'2.x ' + dec eax + jz .sb_say_about_found_dsp + mov dword[sb_DSP_description],'Pro ' + dec eax + jz .sb_say_about_found_dsp + mov dword[sb_DSP_description],'16 ' +.sb_say_about_found_dsp: + mov esi,msgDSPFound + call SysMsgBoardStr +end if + xor eax,eax + mov ebx,[sb_base_port] + lea ecx,[ebx+0xF] + call ReservePortArea ;these ports must be mine! +if DEBUG + dec eax + jnz @f + mov esi,msgErrRsrvPorts + call SysMsgBoardStr +@@: +end if + + call sb_setup ;clock it, etc + + stdcall AttachIntHandler, sb_irq_num, sb_irq, 0 + +if DEBUG + test eax,eax + jnz @f + + mov esi,msgErrAtchIRQ + call SysMsgBoardStr + + stdcall GetIntHandler, sb_irq_num + call SysMsgBoardNum + + jmp .stop +@@: + mov esi,msgSucAtchIRQ + call SysMsgBoardStr +end if + stdcall RegService, my_service, service_proc + ret +.stop: + call sb_reset +.exit: + +if DEBUG + mov esi,msgExit + call SysMsgBoardStr +end if + + xor eax, eax + ret +endp +;------------------------------------------------------------------------------- + +handle equ IOCTL.handle +io_code equ IOCTL.io_code +input equ IOCTL.input +inp_size equ IOCTL.inp_size +output equ IOCTL.output +out_size equ IOCTL.out_size + +align 4 +proc service_proc stdcall, ioctl:dword + mov edi,[ioctl] + mov eax,[edi+io_code] + cmp eax,SRV_GETVERSION + jne @F + + mov eax,[edi+output] + cmp [edi+out_size],4 + jne .fail + mov [eax],dword API_VERSION + xor eax,eax + ret +@@: + cmp eax,DEV_PLAY + jne @f +if DEBUG + mov esi,msgPlay + call SysMsgBoardStr +end if + call sb_stop ;to play smth new we must stop smth old + + call pre_fill_data ;fill first and second half of the buffer + call pre_fill_data ; + + call sb_set_dma ;is it really needed here? Paranoia. + call sb_play + xor eax,eax + ret +;@@: ;all this commented stuff in service proc +; cmp eax,DEV_STOP ;is never used. Mixer do this virtually, +; jne @f ;e.g. instead of stopping driver it +;if DEBUG ;outputs silence +; mov esi,msgStop +; call SysMsgBoardStr +;end if +; call sb_stop +; xor eax,eax +; ret +@@: + cmp eax,DEV_CALLBACK + jne @f +if DEBUG + mov esi,msgCallback + call SysMsgBoardStr +end if + mov edi,[edi+input] + mov eax,[edi] + mov [callback],eax +if DEBUG + call SysMsgBoardNum +end if + ret +@@: +; cmp eax,DEV_SET_MASTERVOL +; jne @F +;if DEBUG +; mov esi,msgSetVol +; call SysMsgBoardStr +;end if +; mov eax,[edi+input] +; mov eax,[eax] +; mov [sb_master_vol],eax +; ret +;@@: +; cmp eax,DEV_GET_MASTERVOL +; jne @F +;if DEBUG +; mov esi,msgGetVol +; call SysMsgBoardStr +;end if +; mov eax,[edi+output] +; mov edx,[sb_master_vol] +; mov [eax],edx +; ret + +.fail: + or eax, -1 + ret +endp + +restore handle +restore io_code +restore input +restore inp_size +restore output +restore out_size + +;------------------------------------------------------------------------------- +align 4 +proc sb_irq + mov edx,[sb_base_port] ;tell the DSP that we have processed IRQ + add dl,0xF ;0xF for 16 bit sound, 0xE for 8 bit sound + in al,dx ;for non-stop sound + +pre_fill_data: + mov eax,int_flip_flop + not dword[eax] + mov eax,[eax] + test eax,eax + jns .fill_second_half + + stdcall [callback],SB16Buffer0 ;for 32k buffer +; stdcall [callback],SB16Buffer0 ;for 64k buffer +; stdcall [callback],SB16Buffer1 ;for 64k buffer + + xor eax,eax + ret + +.fill_second_half: + stdcall [callback],SB16Buffer1 ;for 32k buffer +; stdcall [callback],SB16Buffer2 ;for 64k buffer +; stdcall [callback],SB16Buffer3 ;for 64k buffer + + xor eax,eax + ret +endp +;------------------------------------------------------------------------------- +align 4 +proc detect +.sb_detect_next_port: +if DEBUG + inc dword[port_second_digit_num] +end if + mov edx,sb_base_port + add byte[edx],10h + cmp byte[edx],80h + jbe .sb_try_to_detect_at_specified_port +;error - no SB card detected +.sb_not_found_err: + xor eax, eax + ret + +.sb_try_to_detect_at_specified_port: + call sb_reset + add dl,8 + mov ecx,100 +.sb_check_port: + in al,dx + test al,al ;is DSP port ready to be read? + jns .sb_port_not_ready + + sub dl,4 + in al,dx ;check for AAh response + add dl,4 + cmp al,0xAA + jne .sb_port_not_ready +.sb_card_found: + and dl,0xF0 + add dl,0xC + sb_out 0xE1 ;get DSP version + add dl,2 +@@: + in al,dx + test al,al ;is DSP port ready to be read? + jns @b + sub dl,4 + in al,dx ;get major version + ror eax,16 + add dl,4 +@@: + in al,dx + test al,al ;is DSP port ready to be read? + jns @b + sub dl,4 + in al,dx ;get minor version + xor edx,edx + mov dl,10 + div dl + ror eax,16 + xor ah,ah +if DEBUG + add [sb_DSP_version],eax +end if + ret + +.sb_port_not_ready: + loop .sb_check_port ;100 retries (~100 microsec.) + jmp .sb_detect_next_port +endp +;------------------------------------------------------------------------------- +if DEBUG +proc SysMsgBoardNum + mov ebx,eax + mov ecx,8 + mov esi,(number_to_out+1) +.1: + mov eax,ebx + and eax,0xF + add al,'0' + cmp al,(10+'0') + jb @f + add al,('A'-'0'-10) +@@: + mov [esi+ecx],al + shr ebx,4 + loop .1 + dec esi + call SysMsgBoardStr + ret +endp +end if +;all initialized data place here + +align 4 +version dd (5 shl 16) or (API_VERSION and 0xFFFF) + +sb_base_port: dd 200h + +;pTempBuf dd 0 + +callback dd 0 + +int_flip_flop dd 0 + +sound_dma dd sb_dma_num + +;note that 4th DMA channel doesn't exist, it is used for cascade +;plugging the first DMA controler to the second +dma_table db 0x87,0x83,0x81,0x82,0xFF,0x8B,0x89,0x8A + +;sb_master_vol dd 0 + +my_service db 'SOUND',0 ;max 16 chars include zero + +if DEBUG +number_to_out db '0x00000000',13,10,0 + +msgInit db 'detecting hardware...',13,10,0 +msgExit db 'exiting... May be some problems found?',13,10,0 +msgPlay db 'start play',13,10,0 +;msgStop db 'stop play',13,10,0 +msgCallback db 'set_callback received from the mixer!',13,10 + db 'callback handler is: ',0 +msgErrAtchIRQ db 'failed to attach IRQ',(sb_irq_num+'0'),13,10 + db 'owner',39,'s handler: ',0 +msgSucAtchIRQ db 'succesfully attached IRQ',(sb_irq_num+'0') + db ' as hardcoded',13,10,0 +msgErrRsrvPorts db 'failed to reserve needed ports.',13,10 + db 'Driver may work unstable',13,10,0 +;msgSetVol db 'DEV_SET_MASTERVOL call came',13,10,0 +;msgGetVol db 'DEV_GET_MASTERVOL call came',13,10,0 +msgErrDMAsetup db 'failed to setup DMA - bad channel',13,10,0 +;------------------------------------------------------------------------------- +msgDSPFound db 'DSP found at port 2' +label port_second_digit_num dword at $ + db '00h',13,10,'DSP version ' +sb_DSP_version: db '0.00 - SB' +sb_DSP_description: db 32,32,32,32,13,10,0 +;------------------------------------------------------------------------------- +end if +;section '.data' data readable writable align 16 +;all uninitialized data place here diff --git a/kernel/trunk/drivers/sceletone.asm b/kernel/trunk/drivers/sceletone.asm index dfbb5ee499..4f9df29e5c 100644 --- a/kernel/trunk/drivers/sceletone.asm +++ b/kernel/trunk/drivers/sceletone.asm @@ -9,6 +9,8 @@ format MS COFF +DEBUG equ 1 + API_VERSION equ 0 ;debug include 'proc32.inc' @@ -35,8 +37,6 @@ public START public service_proc public version -DEBUG equ 1 - DRV_ENTRY equ 1 DRV_EXIT equ -1 STRIDE equ 4 ;size of row in devices table diff --git a/kernel/trunk/drivers/sis.asm b/kernel/trunk/drivers/sis.asm index 76d324c8c1..b0a2e8beea 100644 --- a/kernel/trunk/drivers/sis.asm +++ b/kernel/trunk/drivers/sis.asm @@ -7,12 +7,13 @@ format MS COFF + +DEBUG equ 1 + include 'proc32.inc' include 'imports.inc' API_VERSION equ 0x01000100 - -DEBUG equ 1 DEBUG_IRQ equ 0 USE_COM_IRQ equ 0 ;make irq 3 and irq 4 available for PCI devices diff --git a/kernel/trunk/drivers/sound.asm b/kernel/trunk/drivers/sound.asm index 34bb79ec17..c77c9a9647 100644 --- a/kernel/trunk/drivers/sound.asm +++ b/kernel/trunk/drivers/sound.asm @@ -7,13 +7,13 @@ format MS COFF +DEBUG equ 1 include 'proc32.inc' include 'imports.inc' API_VERSION equ 0x01000100 -DEBUG equ 1 DEBUG_IRQ equ 0 USE_COM_IRQ equ 0 ;make irq 3 and irq 4 available for PCI devices diff --git a/kernel/trunk/hid/mousedrv.inc b/kernel/trunk/hid/mousedrv.inc index 55ef5714a3..4682153996 100644 --- a/kernel/trunk/hid/mousedrv.inc +++ b/kernel/trunk/hid/mousedrv.inc @@ -114,29 +114,25 @@ save_draw_mouse: movzx edx, byte [display_data+ebx+eax] shl edx, 8 - mov ecx, [edx+SLOT_BASE+APPDATA.cursor] + mov esi, [edx+SLOT_BASE+APPDATA.cursor] - cmp ecx, [current_cursor] + cmp esi, [current_cursor] je .draw - cmp [ecx+CURSOR.magic], 'CURS' - jne .fail + ; cmp [esi+CURSOR.magic], 'CURS' + ; jne .fail - push ecx + push esi call [select_hw_cursor] - mov [current_cursor], ecx - -; cmp [ecx+CURSOR.size], CURSOR_SIZE -; jne .fail - + mov [current_cursor], esi .draw: - stdcall [set_hw_cursor], ecx + stdcall [set_hw_cursor], esi popad ret .fail: mov ecx, [def_cursor] mov [edx+SLOT_BASE+APPDATA.cursor], ecx - stdcall [set_hw_cursor], ecx + stdcall [set_hw_cursor], ecx ; stdcall: [esp]=ebx,eax popad ret diff --git a/kernel/trunk/kernel.asm b/kernel/trunk/kernel.asm index ae19165e0d..0743410cdc 100644 --- a/kernel/trunk/kernel.asm +++ b/kernel/trunk/kernel.asm @@ -345,8 +345,6 @@ high_code: mov al,[BOOT_VAR+0x9000] ; bpp mov [ScreenBPP],al - xchg bx, bx - movzx eax,word [BOOT_VAR+0x900A] ; X max dec eax mov [Screen_Max_X],eax @@ -712,7 +710,7 @@ no_lib_load: mov [TASK_DATA+TASKDATA.mem_start], 0 ; process base address call init_cursors - mov eax, [def_cursor] + mov eax, [def_cursor] mov [SLOT_BASE+APPDATA.cursor],eax mov [SLOT_BASE+APPDATA.cursor+256],eax @@ -1032,7 +1030,6 @@ reserve_irqs_ports: mov [irq_owner+4*0], 1 ; timer ;mov [irq_owner+4*1], 1 ; keyboard - mov [irq_owner+4*5], 1 ; sound blaster mov [irq_owner+4*6], 1 ; floppy diskette mov [irq_owner+4*13], 1 ; math co-pros mov [irq_owner+4*14], 1 ; ide I @@ -1104,8 +1101,7 @@ set_variables: mov [MOUSE_X],eax pop eax - mov byte [SB16_Status],0 ; Minazzi Paolo - mov [BTN_ADDR],dword BUTTON_INFO ; address of button list + mov [BTN_ADDR],dword BUTTON_INFO ; address of button list ;!! IP 04.02.2005: mov [next_usage_update], 100 @@ -1183,106 +1179,6 @@ sys_outport: mov [esp+24],eax ret - - -align 4 -sys_sb16: - - cmp word [sb16],word 0 - jnz sb16l1 - mov [esp+36],dword 1 - ret - sb16l1: - mov [esp+36],dword 0 - cmp eax,1 ; set volume - main - jnz sb16l2 - mov dx,word [sb16] - add dx,4 - mov al,0x22 - out dx,al - mov esi,1 - call delay_ms - mov eax,ebx - inc edx - out dx,al - ret - sb16l2: - - cmp eax,2 ; set volume - cd - jnz sb16l3 - mov dx,word [sb16] - add dx,4 - mov al,0x28 - out dx,al - mov esi,1 - call delay_ms - mov eax,ebx - add edx,1 - out dx,al - ret - sb16l3: - mov [esp+36],dword 2 - ret - - -align 4 - -sys_sb16II: - - cmp word [sb16],word 0 - jnz IIsb16l1 - mov [esp+36],dword 1 - ret - IIsb16l1: - - cmp eax,1 ; set volume - main - jnz IIsb16l2 - ; L - mov dx,word [sb16] - add dx,4 - mov al,0x30 - out dx,al - mov eax,ebx - inc edx - out dx,al - ; R - mov dx,word [sb16] - add dx,4 - mov al,0x31 - out dx,al - mov eax,ebx - inc edx - out dx,al - mov [esp+36],dword 0 - ret - IIsb16l2: - - cmp eax,2 ; set volume - cd - jnz IIsb16l3 - ; L - mov dx,word [sb16] - add dx,4 - mov al,0x36 - out dx,al - mov eax,ebx - inc edx - out dx,al - ; R - mov dx,word [sb16] - add dx,4 - mov al,0x37 - out dx,al - mov eax,ebx - inc edx - out dx,al - mov [esp+36],dword 0 - ret - IIsb16l3: - - mov [esp+36],dword 2 - ret - - display_number: ; eax = print type, al=0 -> ebx is number @@ -1472,7 +1368,6 @@ sys_setup: ; 1=roland mpu midi base , base io address ; 2=keyboard 1, base kaybap 2, shift keymap, 9 country 1eng 2fi 3ger 4rus ; 3=cd base 1, pri.master 2, pri slave 3 sec master, 4 sec slave -; 4=sb16 base , base io address ; 5=system language, 1eng 2fi 3ger 4rus ; 7=hd base 1, pri.master 2, pri slave 3 sec master, 4 sec slave ; 8=fat32 partition in hd @@ -1543,7 +1438,7 @@ endg ret nsyse2: cmp eax,3 ; CD - jnz nsyse3 + jnz nsyse4 test ebx,ebx jz nosesl cmp ebx, 4 @@ -1573,17 +1468,6 @@ endg cd_base db 0 - nsyse3: - - cmp eax,4 ; SB - jnz nsyse4 - cmp ebx,0x100 - jb nsyse4 - mov edx,65535 - cmp edx,ebx - jb nsyse4 - mov word [sb16],bx - ret nsyse4: cmp eax,5 ; SYSTEM LANGUAGE @@ -1638,7 +1522,7 @@ iglobal hd_base db 0 endg - nsyse7: +nsyse7: cmp eax,8 ; HD PARTITION jne nsyse8 @@ -1652,24 +1536,16 @@ endg popa mov [hd1_status],0 ; free ret - nsyse8: - - cmp eax,10 ; SOUND DMA CHANNEL - jne no_set_sound_dma - cmp ebx,3 - ja sys_setup_err - mov [sound_dma],ebx - ret - no_set_sound_dma: +nsyse8: cmp eax,11 ; ENABLE LBA READ jne no_set_lba_read and ebx,1 mov [lba_read_enabled],ebx ret - no_set_lba_read: - cmp eax,12 ; ENABLE PCI ACCESS +no_set_lba_read: + cmp eax,12 ; ENABLE PCI ACCESS jne no_set_pci_access and ebx,1 mov [pci_access_enabled],ebx @@ -1691,7 +1567,6 @@ sys_getsetup: ; 1=roland mpu midi base , base io address ; 2=keyboard 1, base kaybap 2, shift keymap, 9 country 1eng 2fi 3ger 4rus ; 3=cd base 1, pri.master 2, pri slave 3 sec master, 4 sec slave -; 4=sb16 base , base io address ; 5=system language, 1eng 2fi 3ger 4rus ; 7=hd base 1, pri.master 2, pri slave 3 sec master, 4 sec slave ; 8=fat32 partition in hd @@ -1702,7 +1577,7 @@ sys_getsetup: movzx eax,[midi_base] mov [esp+36],eax ret - ngsyse1: +ngsyse1: cmp eax,2 jne ngsyse2 @@ -1715,7 +1590,7 @@ sys_getsetup: mov ecx,128 call memmove ret - kbnobaseret: +kbnobaseret: cmp ebx,2 jnz kbnoshiftret mov edi,[TASK_BASE] @@ -1725,7 +1600,7 @@ sys_getsetup: mov ecx,128 call memmove ret - kbnoshiftret: +kbnoshiftret: cmp ebx,3 jne kbnoaltret mov edi,[TASK_BASE] @@ -1735,70 +1610,56 @@ sys_getsetup: mov ecx,128 call memmove ret - kbnoaltret: +kbnoaltret: cmp ebx,9 jnz ngsyse2 movzx eax,word [keyboard] mov [esp+36],eax ret - ngsyse2: +ngsyse2: - cmp eax,3 - jnz ngsyse3 - movzx eax,[cd_base] - mov [esp+36],eax - ret - ngsyse3: - - cmp eax,4 - jne ngsyse4 - mov eax,[sb16] - mov [esp+36],eax - ret - ngsyse4: - - cmp eax,5 - jnz ngsyse5 - mov eax,[syslang] - mov [esp+36],eax - ret - ngsyse5: + cmp eax,3 + jnz ngsyse3 + movzx eax,[cd_base] + mov [esp+36],eax + ret +ngsyse3: + cmp eax,5 + jnz ngsyse5 + mov eax,[syslang] + mov [esp+36],eax + ret +ngsyse5: cmp eax,7 jnz ngsyse7 movzx eax,[hd_base] mov [esp+36],eax ret - ngsyse7: +ngsyse7: cmp eax,8 jnz ngsyse8 mov eax,[fat32part] mov [esp+36],eax ret - ngsyse8: +ngsyse8: cmp eax,9 jne ngsyse9 mov eax,[timer_ticks] ;[0xfdf0] mov [esp+36],eax ret - ngsyse9: - cmp eax,10 - jnz ngsyse10 - mov eax,[sound_dma] - mov [esp+36],eax - ret - ngsyse10: +ngsyse9: cmp eax,11 jnz ngsyse11 mov eax,[lba_read_enabled] mov [esp+36],eax ret - ngsyse11: +ngsyse11: cmp eax,12 jnz ngsyse12 mov eax,[pci_access_enabled] mov [esp+36],eax ret - ngsyse12: +ngsyse12: mov [esp+36],dword 1 ret @@ -2528,7 +2389,9 @@ nosb6: and dword [page_tabs+eax*4], 0 mov edx, eax shl edx, 12 + push eax invlpg [edx] + pop eax inc eax loop @b pop eax diff --git a/kernel/trunk/kernel32.inc b/kernel/trunk/kernel32.inc index 0eadb4240e..66a6962191 100644 --- a/kernel/trunk/kernel32.inc +++ b/kernel/trunk/kernel32.inc @@ -207,7 +207,6 @@ include "fs/iso9660.inc" ; read for iso9660 filesystem CD ; sound -include "sound/sb16.inc" ; playback for Sound Blaster 16 include "sound/playnote.inc" ; player Note for Speaker PC ; display diff --git a/kernel/trunk/sound/playnote.inc b/kernel/trunk/sound/playnote.inc index 95434138a1..6cc0d3c269 100644 --- a/kernel/trunk/sound/playnote.inc +++ b/kernel/trunk/sound/playnote.inc @@ -18,15 +18,38 @@ $Revision$ +align 4 +sound_interface: -kontrOctave dw 0x4742, 0x4342, 0x3F7C, 0x3BEC, 0x388F, 0x3562 - dw 0x3264, 0x2F8F, 0x2CE4, 0x2A5F, 0x2802, 0x25BF -memAdrNote dd 0 -pidProcessNote dd 0 -slotProcessNote dd 0 -count_timer_Note dd 1 -mem8253r42 dw 0 -countDelayNote db 0 + cmp eax, edi ; this is subfunction #55 ? + jne retFunc55 ; if no then return. + + cmp byte [sound_flag],0 + jne retFunc55 + + movzx eax, byte [countDelayNote] + or al, al ; player is busy ? + jnz retFunc55 ; return counter delay Note + + mov [memAdrNote],edx + call get_pid + mov [pidProcessNote],eax + xor eax, eax ; Ok! EAX = 0 + retFunc55: + mov [esp+36], eax ; return value EAX for application + ret + +iglobal +align 4 + kontrOctave dw 0x4742, 0x4342, 0x3F7C, 0x3BEC, 0x388F, 0x3562 + dw 0x3264, 0x2F8F, 0x2CE4, 0x2A5F, 0x2802, 0x25BF + memAdrNote dd 0 + pidProcessNote dd 0 + slotProcessNote dd 0 + count_timer_Note dd 1 + mem8253r42 dw 0 + countDelayNote db 0 +endg playNote: ; jmp NotPlayNotes diff --git a/kernel/trunk/sound/sb16.inc b/kernel/trunk/sound/sb16.inc deleted file mode 100644 index 9b354967a7..0000000000 --- a/kernel/trunk/sound/sb16.inc +++ /dev/null @@ -1,354 +0,0 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; ;; -;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; -;; Distributed under terms of the GNU General Public License ;; -;; ;; -;; SB16.INC ;; -;; ;; -;; Sound Blaster 16 functions for MenuetOS ;; -;; ;; -;; Copyright 2002 Paolo Minazzi, paolo.minazzi@inwind.it ;; -;; ;; -;; See file COPYING for details ;; -;; ;; -;; - 11.07.2002 8 bit stereo mode - Ville Turjanmaa ;; -;; ;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -$Revision$ - - -SB16_load_music equ 0xc0000000 -SB16_play_music equ 0xc0000001 -DMAPage equ 0x2A -Rate equ 44100 -;SB16_Status equ SB16Buffer+65536 - -iglobal - sound_data_format dd 0x1 - sound_data_length dd 65536 - sound_data_freq dd 44100 -endg - -sound_interface: - - cmp eax,0 ; Load data - jne no_SB16_load_music - mov edi,[TASK_BASE] - add edi,TASKDATA.mem_start - add ebx,[edi] - call code_SB16_load_music - ret - no_SB16_load_music: - - cmp eax,1 ; Play data - jne no_SB16_play_music - call code_SB16_play_music - ret - no_SB16_play_music: - - cmp eax,2 ; Set data formats - jne no_SB16_data_format - cmp ebx,0 ; ebx=0 play format - jne no_sound_format - mov [sound_data_format],ecx ; 1=8b mono, 2=8b stereo - ret - no_sound_format: - cmp ebx,1 ; ebx=1 data length - jne no_sound_length - mov [sound_data_length],ecx ; - ret - no_sound_length: - cmp ebx,2 ; ebx=2 sound data frequency - jne no_sound_freq - mov [sound_data_freq],ecx - ret - no_sound_freq: - ret - - no_SB16_data_format: - -;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - cmp eax, edi ; this is subfunction #55 ? - jne retFunc55 ; if no then return. - cmp byte [sound_flag],0 - jne retFunc55 - movzx eax, byte [countDelayNote] - or al, al ; player is busy ? - jnz retFunc55 ; return counter delay Note -; mov eax, [TASK_BASE] -; mov eax, [eax+0x10] ; address application im memory -; add eax, edx ; add offset Delay-Note string -; mov [memAdrNote], eax - mov [memAdrNote],edx - mov eax,[TASK_BASE] - mov eax,[eax+TASKDATA.pid] - mov [pidProcessNote],eax - xor eax, eax ; Ok! EAX = 0 - retFunc55: - mov [esp+36], eax ; return value EAX for application -;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - ret - - - - -code_SB16_play_music: - - cmp [sound_data_format],1 - jne no_sound_8bm - call sb_play_8b_mono - ret - no_sound_8bm: - - cmp [sound_data_format],2 - jne no_sound_8bs - call sb_play_8b_stereo - ret - no_sound_8bs: - - ret - - - - - -Blaster_command: - - push eax - push ecx - push edx - - mov dx,word [sb16] - add dx,0xc - mov cx,1000 - bcl1: - in al,dx - and al,128 - jz bcl2 - loop bcl1 - bcl2: - mov al,[esp+8] - mov dx,[esp+0] - add dx,word [sb16] - out dx,al - - pop edx - pop ecx - pop eax - - ret - - -sb_play_8b_stereo: - - pusha - - call sb_set_dma - - call sb_set_stereo - - mov dx,0xc - mov al,0xa8 - call Blaster_command - - mov al,0x40 - call Blaster_command - - mov al,245 - call Blaster_command - - mov al,0x48 - call Blaster_command - - mov al,0xff - call Blaster_command - call Blaster_command - - mov al,0x91 - call Blaster_command - - popa - ret - - - -sb_set_stereo: - - push eax - push edx - - call sb_wait - - mov dx,word [sb16] - add dx,0x4 - mov al,0xe - out dx,al - inc dx - in al,dx - and al,253 - or al,2 ; stereo - out dx,al - - pop edx - pop eax - ret - - - -code_SB16_load_music: - - cmp byte [SB16_Status],1 - je nol - mov edi,SB16Buffer - mov esi,ebx - mov ecx,65536/4 - cld - rep movsd -nol: ret - - -iglobal - dma_table db 0x87,0x83,0x81,0x82 -endg - - - -;-------------------------------- -; program dma -;-------------------------------- - -sb_set_dma: - - pusha - - mov eax,[sound_dma] - add eax,4 - out 0xa,al - - mov al,0 - out 0xc,al - - mov eax,[sound_dma] - add eax,0x48 - out 0xb,al - - mov edx,[sound_dma] - shl edx,1 - mov al,0 - out dx,al - - mov al,0 - out dx,al - - mov edx,[sound_dma] - add edx,dma_table - movzx edx,byte [edx] - mov al,DMAPage - out dx,al - - mov edx,[sound_dma] - shl edx,1 - inc edx - mov eax,[sound_data_length] - dec eax - and eax,0xff - ; mov al,(DataLength-1) and 0xff - out dx,al - - mov eax,[sound_data_length] - dec eax - shr eax,8 - ; mov al,(DataLength-1) shr 8 - out dx,al - - mov eax,[sound_dma] ; DMA - out 0xa,al - - popa - ret - - - -sb_play_8b_mono: - - - call sb_set_dma - - cmp byte [SB16_Status],1 - jne contsb16 - jmp retserve - contsb16: - - mov dx,word [sb16] - add dx,4 - mov ecx,[sound_dma] - mov ax,0x01 - shl ax,cl - shl ax,8 - add ax,0x81 - out dx,ax - - mov ax,0f280h ;enable irq5 - out dx,ax - - -adr1_SB: mov dx,word [sb16] - add dx,0ch - in al,dx - and al,080h - jnz adr1_SB - - call sb_set_stereo - - mov al,0d1h - out dx,al - - - mov dx,word [sb16] - add dx,0ch - - call sb_wait - - mov al,40h ; Rate - out dx,al - call sb_wait - mov al,256-1000000/Rate - out dx,al - - call sb_wait - - mov al,14h ; Datalength - out dx,al - call sb_wait - - mov eax,[sound_data_length] - dec eax - and eax,0xff - ;mov al,(DataLength-1) and 0xff - out dx,al - call sb_wait - mov eax,[sound_data_length] - dec eax - shr eax,8 - ;mov al,(DataLength-1) shr 8 - out dx,al - - retserve: - - ret - - -sb_wait: in al,dx ;wait - and al,080h - jnz sb_wait - - ret - - - - -;**************************************** -; END CODE SB16 by Minazzi Paolo -;*************************************** diff --git a/kernel/trunk/video/cursors.inc b/kernel/trunk/video/cursors.inc index b7618c05f2..82c9b995f3 100644 --- a/kernel/trunk/video/cursors.inc +++ b/kernel/trunk/video/cursors.inc @@ -468,6 +468,8 @@ proc init_cursors .init: mov [cur_def_interl], ebx + ; stdcall load_pe_driver, szAtiHW + stdcall load_driver, szHwMouse mov [hw_cursor], eax test eax, eax