diff --git a/kernel/branches/flat_kernel/boot/bootcode.inc b/kernel/branches/flat_kernel/boot/bootcode.inc index 6cfb6ed43c..d7aab92ce4 100644 --- a/kernel/branches/flat_kernel/boot/bootcode.inc +++ b/kernel/branches/flat_kernel/boot/bootcode.inc @@ -216,11 +216,18 @@ sayerr: push 0 pop es and word [es:0x9031], 0 +; \begin{Mario79} +; find HDD IDE DMA PCI device +; check for PCI BIOS mov ax, 0xB101 int 0x1A jc .nopci cmp edx, 'PCI ' jnz .nopci +; find PCI class code +; class 1 = mass storage +; subclass 1 = IDE controller +; a) class 1, subclass 1, programming interface 0x80 mov ax, 0xB103 mov ecx, 1*10000h + 1*100h + 0x80 mov si, 0 ; device index = 0 diff --git a/kernel/branches/flat_kernel/core/malloc.inc b/kernel/branches/flat_kernel/core/malloc.inc index b04be9634d..bd313b2eeb 100644 --- a/kernel/branches/flat_kernel/core/malloc.inc +++ b/kernel/branches/flat_kernel/core/malloc.inc @@ -972,7 +972,9 @@ malloc_large: align 4 init_malloc: + stdcall kernel_alloc, 0x20000 + mov [mst.top], eax mov [mst.topsize], 128*1024 mov dword [eax+4], (128*1024) or 1 diff --git a/kernel/branches/flat_kernel/core/memory.inc b/kernel/branches/flat_kernel/core/memory.inc index dbead4aeb6..704eafb9f1 100644 --- a/kernel/branches/flat_kernel/core/memory.inc +++ b/kernel/branches/flat_kernel/core/memory.inc @@ -452,13 +452,13 @@ align 4 proc page_fault_handler pushad - push eax - push edx - mov edx, 0x400 ;bocsh - mov al,0xff ;bocsh - out dx, al ;bocsh - pop edx - pop eax +; push eax +; push edx +; mov edx, 0x400 ;bocsh +; mov al,0xff ;bocsh +; out dx, al ;bocsh +; pop edx +; pop eax mov ebp, esp mov eax, cr2 diff --git a/kernel/branches/flat_kernel/drivers/comport.asm b/kernel/branches/flat_kernel/drivers/comport.asm index f24577100a..3d42841cec 100644 --- a/kernel/branches/flat_kernel/drivers/comport.asm +++ b/kernel/branches/flat_kernel/drivers/comport.asm @@ -22,6 +22,13 @@ DEBUG equ 1 DRV_ENTRY equ 1 DRV_EXIT equ -1 +THR_REG equ 0; x3f8 ;transtitter/reciever +IER_REG equ 1; x3f9 ;interrupt enable +IIR_REG equ 2; x3fA ;interrupt info +LCR_REG equ 3; x3FB ;line control +MCR_REG equ 4; x3FC ;modem control +LSR_REG equ 5; x3FD ;line status +MSR_REG equ 6; x3FE ;modem status LCR_5BIT equ 0x00 LCR_6BIT equ 0x01 @@ -63,7 +70,7 @@ IER_MSI equ 0x08 ;modem status interrupt MCR_DTR equ 0x01 ;0-> DTR=1, 1-> DTR=0 MCR_RTS equ 0x02 ;0-> RTS=1, 1-> RTS=0 MCR_OUT_1 equ 0x04 ;0-> OUT1=1, 1-> OUT1=0 -MCR_OUT_2 equ 0x08 ;0-> OUT2=1, 1-> OUT2=0 +MCR_OUT_2 equ 0x08 ;0-> OUT2=1, 1-> OUT2=0 enable intr MCR_LOOP equ 0x10 ;lopback mode MSR_DCTS equ 0x01 ;delta clear to send @@ -71,13 +78,6 @@ MSR_DDSR equ 0x02 ;delta data set redy MSR_TERI equ 0x04 ;trailinh edge of ring MSR_DDCD equ 0x08 ;delta carrier detect -COM_THR equ 0x3f8 ;transtitter/reciever -COM_IER equ 0x3f9 ;interrupt enable -COM_IIR equ 0x3fA ;interrupt info -COM_LCR equ 0x3FB ;line control -COM_MCR equ 0x3FC ;modem control -COM_LSR equ 0x3FD ;line status -COM_MSR equ 0x3FE ;modem status RATE_50 equ 0 RATE_75 equ 1 @@ -99,62 +99,89 @@ RATE_38400 equ 16 RATE_57600 equ 17 RATE_115200 equ 18 -COM_1 equ 0 -COM_2 equ 1 -COM_3 equ 2 -COM_4 equ 3 +COM_1 equ 1 +COM_2 equ 2 +COM_3 equ 3 +COM_4 equ 4 +COM_MAX equ 2 ;only two port supported + +COM_1_BASE equ 0x3F8 +COM_2_BASE equ 0x2F8 COM_1_IRQ equ 4 COM_2_IRQ equ 3 -TRANSMIT equ 1 +UART_CLOSED equ 0 +UART_TRANSMIT equ 1 -struc COMPORT +struc UART { + ; .owner dd ? unused + .lock dd ? .base dd ? .lcr_reg dd ? .mcr_reg dd ? .rate dd ? .mode dd ? .state dd ? - .connection dd ? .rcvr_rp dd ? .rcvr_wp dd ? .rcvr_free dd ? - .rcvr_count dd ? .xmit_rp dd ? .xmit_wp dd ? .xmit_free dd ? - .xmit_count dd ? - .xmit_buffer rb 128 .rcvr_buffer rb 128 + .xmit_buffer rb 128 } virtual at 0 - COMPORT COMPORT + UART UART end virtual -COMPORT_SIZE equ 256+15*4 +RCVR_OFFSET equ 14*4 +XMIT_OFFSET equ (13*4*128) +UART_SIZE equ (256+13*4) -UART_VERSION equ 0x00000000 +struc CONNECTION +{ + .magic dd ? ;'CNCT' + .destroy dd ? ;internal destructor + .fd dd ? ;next object in list + .bk dd ? ;prev object in list + .pid dd ? ;owner id -init_com: - mov eax, COMPORT_SIZE + .id dd ? ;reserved + .uart dd ? ;uart pointer +} + +virtual at 0 + CONNECTION CONNECTION +end virtual + +CONNECTION_SIZE equ 7*4 + +UART_VERSION equ 0x12345678 ;debug + +init_uart_service: + mov eax, UART_SIZE call malloc test eax, eax jz .fail mov [com1], eax mov edi, eax - mov ecx, COMPORT_SIZE/4 + mov ecx, UART_SIZE/4 xor eax, eax cld rep stosd - call reset + mov eax, [com1] + mov [eax+UART.base], COM_1_BASE - stdcall attach_int_handler, COM_1_IRQ, com_isr + call uart_reset ;eax= uart + + stdcall attach_int_handler, COM_1_IRQ, com_1_isr stdcall reg_service, sz_uart_srv, uart_proc ret .fail: @@ -191,30 +218,24 @@ proc uart_proc stdcall, ioctl:dword jne @F mov eax, [ebx+output] - mov eax, [eax] mov [eax], dword UART_VERSION xor eax, eax ret @@: cmp eax, PORT_OPEN jne @F - call open_port + + mov ebx, [ebx+input] + mov eax, [ebx] + call uart_open + mov ebx, [ioctl] + mov ebx, [ebx+output] + mov [ebx], ecx ret - - - mov esi, [ebx+input] - mov ecx, [esi] - mov edx, [com1] - cmp [edx+COMPORT.connection], ecx - je @F - mov edx, [com2] - cmp [edx+COMPORT.connection], ecx - jne .fail - - mov edi, [ebx+output] - call [uart_func+eax*4] ;edx, esi, edi +@@: + mov esi, [ebx+input] ;input buffer + call [uart_func+eax*4] ret - .fail: or eax, -1 ret @@ -229,57 +250,50 @@ restore output restore out_size -open_port: - ret - -; param -; edx= port -; esi= input data -; edi= output data -; -; retval -; eax=0 success -; eax <>0 error - -align 4 -close_port: - - call reset - mov [edx+COMPORT.connection], 0 - xor eax, eax - ret - - ; set mode 2400 bod 8-bit +; disable DTR & RTS ; clear FIFO ; clear pending interrupts +; +; param +; eax= uart align 4 -reset: - mov eax, RATE_2400 - mov ebx, LCR_8BIT+LCR_STOP_1 - call set_mode +uart_reset: + mov esi, eax + mov [eax+UART.state], UART_CLOSED + mov edx, [eax+UART.base] + add edx, MCR_REG + xor eax, eax + out dx, al ;clear DTR & RTS + mov eax, esi + mov ebx, RATE_2400 + mov ecx, LCR_8BIT+LCR_STOP_1 + call uart_set_mode.internal + + mov edx, [esi+UART.base] + add edx, IIR_REG mov eax,FCR_EFIFO+FCR_CRB+FCR_CXMIT+FCR_FIFO_14 - mov edx, COM_IIR out dx, al - .clear_RB: - mov edx, COM_LSR + mov edx, [esi+UART.base] + add edx, LSR_REG in al, dx test eax, LSR_DR jz @F - mov edx, COM_THR + mov edx, [esi+UART.base] in al, dx jmp .clear_RB @@: + mov edx, [esi+UART.base] + add edx, IER_REG mov eax,IER_RDAI+IER_THRI+IER_LSI - mov edx, COM_IER out dx, al - .clear_IIR: - mov edx, COM_IIR + mov edx, [esi+UART.base] + add edx, IIR_REG in al, dx test al, IIR_INTR jnz .done @@ -288,7 +302,8 @@ reset: and eax, 3 jnz @F - mov edx, COM_MSR + mov edx, [esi+UART.base] + add edx, MSR_REG in al, dx jmp .clear_IIR @@: @@ -298,86 +313,83 @@ reset: cmp eax, 2 jne @F - mov edx, COM_THR + mov edx, [esi+UART.base] in al, dx jmp .clear_IIR @@: - mov edx, COM_LSR + mov edx, [esi+UART.base] + add edx, LSR_REG in al, dx jmp .clear_IIR - .done: - mov edi, rcvr_buff - xor eax, eax + lea edi, [esi+UART.rcvr_buffer] mov ecx, 256/4 + xor eax, eax - mov [rcvr_rp], edi - mov [rcvr_wp], edi - mov [rcvr_free], 128 -;; mov [rcvr_count], 16 - - mov [xmit_rp], xmit_buff - mov [xmit_wp], xmit_buff - mov [xmit_free], 128 - mov [xmit_count], 16 ;FIFO free + mov [esi+UART.rcvr_rp], eax + mov [esi+UART.rcvr_wp], eax + mov [esi+UART.rcvr_free], 128 + mov [esi+UART.xmit_rp], eax + mov [esi+UART.xmit_wp], eax + mov [esi+UART.xmit_free], 128 cld rep stosd ret + ; param -; eax= rate constant -; ebx= mode bits +; esi= input buffer +; +0 connection +; +4 rate +; +8 mode +; +; retval +; eax= error code align 4 -set_mode: - cmp eax, RATE_115200 +uart_set_mode: + mov eax, [esi] + cmp [eax+APPOBJ.magic], 'CNCT' + jne .fail + + cmp [eax+APPOBJ.destroy], uart_close.destroy + jne .fail + + mov eax, [eax+CONNECTION.uart] + test eax, eax + jz .fail + + mov ebx, [esi+4] + mov ecx, [esi+8] + +; param +; eax= uart +; ebx= baud rate +; ecx= mode + +align 4 +.internal: + cmp ebx, RATE_115200 ja .fail - cmp ebx, LCR_BREAK + cmp ecx, LCR_BREAK jae .fail - mov [rate], eax - mov [mode], ebx + mov [eax+UART.rate], ebx + mov [eax+UART.mode], ecx - mov cx, [divisor+eax*2] + mov esi, eax + mov bx, [divisor+ebx*2] - mov dx, COM_LCR + mov edx, [esi+UART.base] + push edx + add edx, LCR_REG in al, dx or al, 0x80 out dx, al - mov dx, COM_THR - mov al, cl - out dx, al - - inc dx - mov al, ch - out dx, al - - mov dx, COM_LCR - mov eax, ebx - out dx, al -.fail: - ret - -; param -; eax= rate constant - -align 4 -set_rate: - cmp eax, RATE_115200 - ja .fail - - mov [rate], eax - mov bx, [divisor+eax*2] - - mov dx, COM_LCR - in al, dx - or al, 0x80 - out dx, al - - mov dx, COM_THR + pop edx mov al, bl out dx, al @@ -385,104 +397,251 @@ set_rate: mov al, bh out dx, al - mov dx, COM_LCR - mov eax, [lcr_reg] + add edx, LCR_REG-1 + mov eax, ecx + out dx, al + xor eax, eax + ret +.fail: + or eax, -1 + ret + + +align 4 +uart_set_modem: + + mov [eax+UART.mcr_reg], ebx + mov edx, [eax+UART.base] + add edx, MCR_REG + mov al, bl + out dx, al + ret + +; param +; eax= port +; +; retval +; ecx= connection +; eax= error code + +align 4 +uart_open: + dec eax + cmp eax, COM_MAX + jae .fail + + mov esi, [com1+eax*4] ;uart + push esi +.do_wait: + cmp dword [esi+UART.lock],0 + je .get_lock + call change_task + jmp .do_wait +.get_lock: + mov eax, 1 + xchg eax, [esi+UART.lock] + test eax, eax + jnz .do_wait + + mov eax, esi ;uart + call uart_reset + + mov ebx, [CURRENT_TASK] + shl ebx, 5 + mov ebx, [CURRENT_TASK+ebx+4] + mov eax, CONNECTION_SIZE + call create_kernel_object + pop esi ;uart + test eax, eax + jz .fail + + mov [eax+APPOBJ.magic], 'CNCT' + mov [eax+APPOBJ.destroy], uart_close.destroy + mov [eax+CONNECTION.uart], esi + mov ecx, eax + xor eax, eax + ret +.fail: + or eax, -1 + ret +restore .uart + +; param +; esi= input buffer + +align 4 +uart_close: + mov eax, [esi] + cmp [eax+APPOBJ.magic], 'CNCT' + jne .fail + + cmp [eax+APPOBJ.destroy], uart_close.destroy + jne .fail +.destroy: + push [eax+CONNECTION.uart] + call destroy_kernel_object ;eax= object + pop eax ;eax= uart + test eax, eax + jz .fail + + mov [eax+UART.state], UART_CLOSED + mov [eax+UART.lock], 0 ;release port + xor eax, eax + ret +.fail: + or eax, -1 + ret + + +; param +; eax= uart +; ebx= baud rate + +align 4 +set_rate: + cmp ebx, RATE_115200 + ja .fail + + mov [eax+UART.rate], ebx + mov bx, [divisor+ebx*2] + + mov edx, [eax+UART.base] + add edx, LCR_REG + in al, dx + push eax + or al, 0x80 + out dx, al + + sub edx, LCR_REG + mov al, bl + out dx, al + + inc edx + mov al, bh + out dx, al + + pop eax + add edx, LCR_REG-1 out dx, al .fail: ret + +; param +; ebx= uart + align 4 transmit: push esi - mov edx, COM_THR + push edi + push ebp - mov [xmit_count], 16 + mov edx, [ebx+UART.base] pushfd cli - mov esi, [xmit_rp] - mov ecx, [xmit_free] + mov ebp, 16 + mov esi, [ebx+UART.xmit_rp] + lea edi, [ebx+UART.xmit_buffer] + mov ecx, [ebx+UART.xmit_free] cmp ecx, 128 je .exit @@: and esi, 127 - mov al, [xmit_buff+esi] + mov al, [esi+edi] inc esi out dx, al inc ecx - dec [xmit_count] + dec ebp jz .done cmp ecx, 128 jne @B .done: - add esi, xmit_buff - mov [xmit_rp], esi - mov [xmit_free], ecx - mov [com_state], TRANSMIT + mov [ebx+UART.xmit_rp], esi + mov [ebx+UART.xmit_free], ecx + mov [ebx+UART.state], UART_TRANSMIT .exit: popfd + pop ebp + pop edi pop esi ret - -; eax= src -; ebx= count +; param +; eax= uart +; ebx= src +; edx= count align 4 -comm_send: - mov edi, [xmit_wp] - mov esi, eax +uart_write: + mov esi, ebx + mov edi, [eax+UART.xmit_wp] + lea ebx, [eax+UART.xmit_buffer] .write: - test ebx, ebx + test edx, edx jz .done .wait: - cmp [xmit_free], 0 + cmp [eax+UART.xmit_free], 0 jne .fill - cmp [com_state], TRANSMIT + cmp [eax+UART.state], UART_TRANSMIT je .wait + mov ebx, eax + push edx call transmit + pop edx + mov eax, ebx + lea ebx, [ebx+UART.xmit_buffer] jmp .write .fill: - mov ecx, xmit_buff+128 + mov ecx, 128 sub ecx, edi - cmp ecx, [xmit_free] - jb @F + jz .clip + cmp ecx, [eax+UART.xmit_free] + jbe @F - mov ecx, [xmit_free] + mov ecx, [eax+UART.xmit_free] @@: - cmp ecx, ebx - jb @F - mov ecx, ebx + cmp ecx, edx + jbe @F + mov ecx, edx @@: - sub [xmit_free], ecx - sub ebx, ecx + sub [eax+UART.xmit_free], ecx + sub edx, ecx + add edi, ebx cld rep movsb - cmp edi, xmit_buff+128 - jb .write - sub edi, 128 + sub edi, ebx +.clip: + and edi, 127 jmp .write - .done: - cmp [com_state], TRANSMIT + mov [eax+UART.xmit_wp], edi + cmp [eax+UART.state], UART_TRANSMIT je @F + mov ebx, eax call transmit @@: ret align 4 -com_isr: +com_2_isr: + mov ebx, [com2] + jmp com_1_isr.get_info +align 4 +com_1_isr: + mov ebx, [com1] .get_info: - mov dx, COM_IIR + mov edx, [ebx+UART.base] + add edx, IIR_REG in al, dx test al, IIR_INTR @@ -498,28 +657,42 @@ com_isr: align 4 isr_line: - mov edx, COM_LSR + mov edx, [ebx+UART.base] + add edx, LSR_REG in al, dx ret align 4 isr_recieve: - mov edx, COM_THR + mov edx, [ebx+UART.base] in al, dx ret align 4 isr_modem: - mov edx, COM_MSR - in al, dx - ret - + mov edx, [ebx+UART.base] + add edx, MSR_REG + in al, dx + ret align 4 -uart_func dd 0 ;get version - dd 0 ;open port - dd close_port +com1 dd 0 +com2 dd 0 + +align 4 +uart_func dd 0 ;SRV_GETVERSION + dd 0 ;PORT_OPEN + dd uart_close ;PORT_CLOSE + dd 0 ;PORT_RESET + dd uart_set_mode ;PORT_SETMODE +; dd uart.get_mode ;PORT_GETMODE +; dd uart.set_mcr ;PORT_SETMCR +;PORT_GETMCR equ 7 +;PORT_READ equ 8 +;PORT_WRITE equ 9 + + isr_action dd isr_modem @@ -527,6 +700,7 @@ isr_action dd isr_modem dd isr_recieve dd isr_line +;version dd 0x00040000 divisor dw 2304, 1536, 1047, 857, 768, 384 dw 192, 96, 64, 58, 48, 32 @@ -536,33 +710,5 @@ divisor dw 2304, 1536, 1047, 857, 768, 384 sz_uart_srv db 'UART',0 -;version dd 0x00040000 -align 4 - -com1 dd ? -com2 dd ? - -rcvr_rp dd ? -rcvr_wp dd ? -rcvr_free dd ? -rcvr_count dd ? - -xmit_rp dd ? -xmit_wp dd ? -xmit_free dd ? -xmit_count dd ? - -lcr_reg dd ? -mcr_reg dd ? -rate dd ? -mode dd ? -com_state dd ? - -connection dd ? - -align 128 -rcvr_buff rb 128 -xmit_buff rb 128 - diff --git a/kernel/branches/flat_kernel/drivers/ensoniq.asm b/kernel/branches/flat_kernel/drivers/ensoniq.asm index d2509025a8..55d569a3a8 100644 --- a/kernel/branches/flat_kernel/drivers/ensoniq.asm +++ b/kernel/branches/flat_kernel/drivers/ensoniq.asm @@ -5,6 +5,7 @@ format MS COFF include 'proc32.inc' +include 'imports.inc' DEBUG equ 1 @@ -52,22 +53,6 @@ BIT29 EQU 0x20000000 BIT30 EQU 0x40000000 BIT31 EQU 0x80000000 -VID_INTEL equ 0x8086 -VID_NVIDIA equ 0x10DE - -CTRL_ICH equ 0x2415 -CTRL_ICH0 equ 0x2425 -CTRL_ICH2 equ 0x2435 -CTRL_ICH3 equ 0x2445 -CTRL_ICH4 equ 0x24C5 -CTRL_ICH5 equ 0x24D5 -CTRL_ICH6 equ 0x266E -CTRL_ICH7 equ 0x27DE - -CTRL_NFORCE equ 0x01B1 -CTRL_NFORCE2 equ 0x006A -CTRL_NFORCE3 equ 0x00DA - PCM_OUT_BDL equ 0x10 ; PCM out buffer descriptors list PCM_OUT_CR_REG equ 0x1b ; PCM out Control Register @@ -266,51 +251,43 @@ end virtual EVENT_NOTIFY equ 0x00000200 -OS_BASE equ 0; 0x80400000 -new_app_base equ 0x60400000; 0x01000000 -PROC_BASE equ OS_BASE+0x0080000 +OS_BASE equ 0; +SLOT_BASE equ OS_BASE+0x0080000 +new_app_base equ 0x80000000 public START -public STOP public service_proc - -extrn AttachIntHandler -extrn SysMsgBoardStr -extrn PciApi -extrn PciRead32 -extrn PciRead8 -extrn PciWrite8 -extrn AllocKernelSpace -extrn MapPage -extrn RegService -extrn KernelAlloc -extrn GetPgAddr -extrn GetCurrentTask +public version section '.flat' code readable align 16 -START: +proc START stdcall, state:dword + + cmp [state], 1 + jne .stop + if DEBUG - mov esi, msgInit + mov esi, msgDetect call SysMsgBoardStr end if - call detect_controller - test eax, eax + call detect_controller + test eax, eax jz .fail if DEBUG - mov esi,[ctrl.vendor_ids] + mov esi,[ctrl.vendor_ids] call SysMsgBoardStr - mov esi, [ctrl.ctrl_ids] + mov esi, [ctrl.ctrl_ids] call SysMsgBoardStr end if - call init_controller test eax, eax jz .fail + jmp .fail ;force fail + if DEBUG mov esi, msgInitCodec call SysMsgBoardStr @@ -321,10 +298,10 @@ START: jz .fail if DEBUG - mov esi, [codec.ac_vendor_ids] + mov esi, [codec.ac_vendor_ids] call SysMsgBoardStr - mov esi, [codec.chip_ids] + mov esi, [codec.chip_ids] call SysMsgBoardStr end if @@ -336,16 +313,6 @@ START: call create_primary_buff -; if REMAP_IRQ - -; call get_LPC_bus -; cmp eax, -1 -; jz .fail - -; mov [lpc_bus], 0 ;eax -; call remap_irq -; end if - mov eax, VALID_IRQ mov ebx, [ctrl.int_line] mov esi, msgInvIRQ @@ -361,12 +328,16 @@ START: ret .fail: if DEBUG - mov esi, msgFail + mov esi, msgFail call SysMsgBoardStr end if - xor eax, eax -STOP: + xor eax, eax ret +.stop: + call stop + xor eax, eax + ret +endp handle equ IOCTL.handle io_code equ IOCTL.io_code @@ -380,54 +351,53 @@ proc service_proc stdcall, ioctl:dword mov edi, [ioctl] mov eax, [edi+io_code] - cmp eax, DEV_PLAY - jne @F + cmp eax, DEV_PLAY + jne @F if DEBUG - mov esi, msgPlay + mov esi, msgPlay call SysMsgBoardStr end if - call play - ret + call play + ret @@: - cmp eax, DEV_STOP - jne @F + cmp eax, DEV_STOP + jne @F if DEBUG - mov esi, msgStop + mov esi, msgStop call SysMsgBoardStr end if - call stop - ret + call stop + ret @@: - cmp eax, DEV_CALLBACK - jne @F + cmp eax, DEV_CALLBACK + jne @F mov ebx, [edi+input] stdcall set_callback, [ebx] - ret + ret @@: - cmp eax, DEV_SET_MASTERVOL - jne @F - mov ebx, [edi+input] - stdcall set_master_vol, [ebx] - ret + cmp eax, DEV_SET_MASTERVOL + jne @F + mov eax, [edi+input] + mov eax, [eax] + call set_master_vol ;eax= vol + ret @@: - cmp eax, DEV_GET_MASTERVOL - jne @F + cmp eax, DEV_GET_MASTERVOL + jne @F mov ebx, [edi+output] - test ebx, ebx - jz .fail - + add ebx, new_app_base stdcall get_master_vol, ebx - ret -@@: - cmp eax, DEV_GET_INFO - jne @F - mov ebx, [edi+output] - stdcall get_dev_info, ebx - ret + ret +;@@: +; cmp eax, DEV_GET_INFO +; jne @F +; mov ebx, [edi+output] +; stdcall get_dev_info, ebx +; ret @@: .fail: - xor eax, eax - ret + or eax, -1 + ret endp restore handle @@ -438,24 +408,6 @@ restore output restore out_size -align 4 -proc remap_irq ;for Intel chipsets ONLY !!! - mov eax, VALID_IRQ - bt eax, IRQ_LINE - jnc .exit - - mov edx, 0x4D0 - in ax,dx - bts ax, IRQ_LINE - out dx, aX - - stdcall PciWrite8, dword 0, dword 0xF8, dword 0x61, dword IRQ_LINE - mov [ctrl.int_line], IRQ_LINE - -.exit: - ret -endp - align 4 proc ac97_irq @@ -464,408 +416,325 @@ proc ac97_irq ; call SysMsgBoardStr ; end if - mov edx, PCM_OUT_CR_REG - mov al, 0x14 - call [ctrl.ctrl_write8] - mov ax, 0x1c - mov edx, PCM_OUT_SR_REG - call [ctrl.ctrl_write16] + cmp [ctrl.user_callback], 0 + je @f - mov edx, PCM_OUT_CIV_REG - call [ctrl.ctrl_read8] - - and eax, 0x1F - cmp eax, [civ_val] - je .skip - - mov [civ_val], eax - dec eax - and eax, 0x1F - mov [ctrl.lvi_reg], eax - - mov edx, PCM_OUT_LVI_REG - call [ctrl.ctrl_write8] - - mov edx, PCM_OUT_CR_REG - mov ax, 0x1D - call [ctrl.ctrl_write8] - - mov eax, [civ_val] - add eax, 2 - and eax, 31 - mov ebx, dword [buff_list+eax*4] - - cmp [ctrl.user_callback], 0 - je @f - - stdcall [ctrl.user_callback], ebx + stdcall [ctrl.user_callback], ebx @@: - ret + ret .skip: - mov edx, PCM_OUT_CR_REG - mov ax, 0x1D - call [ctrl.ctrl_write8] - ret + mov edx, PCM_OUT_CR_REG + mov ax, 0x11 ;0x1D + call [ctrl.ctrl_write8] + ret endp align 4 proc create_primary_buff stdcall KernelAlloc, 0x10000 - mov [ctrl.buffer], eax + mov [ctrl.buffer], eax - mov edi, eax - mov ecx, 0x10000/4 - xor eax, eax + mov edi, eax + mov ecx, 0x10000/4 + xor eax, eax cld - rep stosd + rep stosd - stdcall GetPgAddr, [ctrl.buffer] + mov eax, [ctrl.buffer] + call GetPgAddr - mov ebx, 0xC0002000 - mov ecx, 4 - mov edi, pcmout_bdl + mov ebx, 0xC0002000 + mov ecx, 4 + mov edi, pcmout_bdl @@: - mov [edi], eax - mov [edi+4], ebx + mov [edi], eax + mov [edi+4], ebx - mov [edi+32], eax - mov [edi+4+32], ebx + mov [edi+32], eax + mov [edi+4+32], ebx - mov [edi+64], eax - mov [edi+4+64], ebx + mov [edi+64], eax + mov [edi+4+64], ebx - mov [edi+96], eax - mov [edi+4+96], ebx + mov [edi+96], eax + mov [edi+4+96], ebx - mov [edi+128], eax - mov [edi+4+128], ebx + mov [edi+128], eax + mov [edi+4+128], ebx - mov [edi+160], eax - mov [edi+4+160], ebx + mov [edi+160], eax + mov [edi+4+160], ebx - mov [edi+192], eax - mov [edi+4+192], ebx + mov [edi+192], eax + mov [edi+4+192], ebx - mov [edi+224], eax - mov [edi+4+224], ebx + mov [edi+224], eax + mov [edi+4+224], ebx - add eax, 0x4000 - add edi, 8 - loop @B + add eax, 0x4000 + add edi, 8 + loop @B - mov edi, buff_list - mov eax, [ctrl.buffer] - mov ecx, 4 + mov edi, buff_list + mov eax, [ctrl.buffer] + mov ecx, 4 @@: - mov [edi], eax - mov [edi+16], eax - mov [edi+32], eax - mov [edi+48], eax - mov [edi+64], eax - mov [edi+80], eax - mov [edi+96], eax - mov [edi+112], eax + mov [edi], eax + mov [edi+16], eax + mov [edi+32], eax + mov [edi+48], eax + mov [edi+64], eax + mov [edi+80], eax + mov [edi+96], eax + mov [edi+112], eax - add eax, 0x4000 - add edi, 4 - loop @B + add eax, 0x4000 + add edi, 4 + loop @B - mov ecx, pcmout_bdl - stdcall GetPgAddr, ecx - and ecx, 0xFFF - add eax, ecx + mov eax, pcmout_bdl + mov ebx, eax + call GetPgAddr ;eax + and ebx, 0xFFF + add eax, ebx - mov edx, PCM_OUT_BDL - call [ctrl.ctrl_write32] + mov edx, PCM_OUT_BDL + call [ctrl.ctrl_write32] - mov eax, 16 - mov [ctrl.lvi_reg], eax - mov edx, PCM_OUT_LVI_REG - call [ctrl.ctrl_write8] - - ret + mov eax, 16 + mov [ctrl.lvi_reg], eax + mov edx, PCM_OUT_LVI_REG + call [ctrl.ctrl_write8] + ret endp align 4 proc detect_controller - locals - last_bus dd ? - bus dd ? - devfn dd ? - endl + locals + last_bus dd ? + bus dd ? + devfn dd ? + endl - xor eax, eax - mov [bus], eax - inc eax + xor eax, eax + mov [bus], eax + inc eax call PciApi - cmp eax, -1 - je .no_pci + cmp eax, -1 + je .err - mov [last_bus], eax + mov [last_bus], eax .next_bus: - and [devfn], 0 + and [devfn], 0 .next_dev: stdcall PciRead32, [bus], [devfn], dword 0 - test eax, eax - jz .next - cmp eax, -1 - je .next + test eax, eax + jz .next + cmp eax, -1 + je .next - mov edi, devices + mov edi, devices @@: - mov ebx, [edi] - test ebx, ebx - jz .next + mov ebx, [edi] + test ebx, ebx + jz .next - cmp eax, ebx - je .found - add edi, 12 - jmp @B + cmp eax, ebx + je .found + add edi, 12 + jmp @B -.next: inc [devfn] - cmp [devfn], 256 - jb .next_dev - mov eax, [bus] - inc eax - mov [bus], eax - cmp eax, [last_bus] - jna .next_bus - xor eax, eax - ret -.found: - mov ebx, [bus] - mov [ctrl.bus], ebx - - mov ecx, [devfn] - mov [ctrl.devfn], ecx - - mov edx, eax - and edx, 0xFFFF - mov [ctrl.vendor], edx - shr eax, 16 - mov [ctrl.dev_id], eax - - mov ebx, [edi+4] - mov [ctrl.ctrl_ids], ebx - mov esi, [edi+8] - mov [ctrl.ctrl_setup], esi - - cmp ebx, VID_INTEL - jne @F - mov [ctrl.vendor_ids], msg_Intel +.next: + inc [devfn] + cmp [devfn], 256 + jb .next_dev + mov eax, [bus] + inc eax + mov [bus], eax + cmp eax, [last_bus] + jna .next_bus + xor eax, eax ret -@@: - cmp ebx, VID_NVIDIA - jne @F - mov [ctrl.vendor_ids], msg_NVidia -@@: +.found: + mov ebx, [bus] + mov [ctrl.bus], ebx + + mov ecx, [devfn] + mov [ctrl.devfn], ecx + + mov edx, eax + and edx, 0xFFFF + mov [ctrl.vendor], edx + shr eax, 16 + mov [ctrl.dev_id], eax + + mov ebx, [edi+4] + mov [ctrl.ctrl_ids], ebx + mov esi, [edi+8] + mov [ctrl.ctrl_setup], esi + cmp ebx, 0x1274 jne @F mov [ctrl.vendor_ids], msgEnsoniq ret @@: mov [ctrl.vendor_ids], 0 ;something wrong ? - ret -.no_pci: - mov esi, msgPCI - call SysMsgBoardStr + ret .err: - xor eax, eax - ret -endp - -align 4 -proc get_LPC_bus ;for Intel chipsets ONLY !!! - locals - last_bus dd ? - bus dd ? - endl - - xor eax, eax - mov [bus], eax - inc eax - call [PciApi] - cmp eax, -1 - je .err - - mov [last_bus], eax -.next_bus: - stdcall PciRead32, [bus], dword 0xF8, dword 0 - test eax, eax - jz .next - cmp eax, -1 - je .next - - cmp eax, 0x24D08086 - je .found -.next: - mov eax, [bus] - inc eax - cmp eax, [last_bus] - mov [bus], eax - jna .next_bus -.err: - xor eax, eax - dec eax - ret -.found: - mov eax, [bus] - ret + xor eax, eax + ret endp align 4 proc init_controller + mov esi, msgPCIcmd + call SysMsgBoardStr + stdcall PciRead32, [ctrl.bus], [ctrl.devfn], dword 4 - mov ebx, eax - and eax, 0xFFFF - mov [ctrl.pci_cmd], eax - shr ebx, 16 - mov [ctrl.pci_stat], ebx + mov ebx, eax + and eax, 0xFFFF + mov [ctrl.pci_cmd], eax + shr ebx, 16 + mov [ctrl.pci_stat], ebx + + call dword2str + call SysMsgBoardStr + + mov esi, msgIObase + call SysMsgBoardStr stdcall PciRead32, [ctrl.bus], [ctrl.devfn], dword 0x10 - and eax,0xFFFE - mov [ctrl.codec_io_base], eax +; and eax, -16 + mov [ctrl.ctrl_io_base], eax - stdcall PciRead32, [ctrl.bus], [ctrl.devfn], dword 0x14 - and eax, 0xFFC0 - mov [ctrl.ctrl_io_base], eax + call dword2str + call SysMsgBoardStr - stdcall PciRead32, [ctrl.bus], [ctrl.devfn], dword 0x18 - mov [ctrl.codec_mem_base], eax - - stdcall PciRead32, [ctrl.bus], [ctrl.devfn], dword 0x1C - mov [ctrl.ctrl_mem_base], eax + mov esi, msgIRQline + call SysMsgBoardStr stdcall PciRead32, [ctrl.bus], [ctrl.devfn], dword 0x3C - and eax, 0xFF - mov [ctrl.int_line], eax + and eax, 0xFF + mov [ctrl.int_line], eax - stdcall PciRead8, [ctrl.bus], [ctrl.devfn], dword 0x41 - and eax, 0xFF - mov [ctrl.cfg_reg], eax + call dword2str + call SysMsgBoardStr - call [ctrl.ctrl_setup] - xor eax, eax - inc eax - ret + call [ctrl.ctrl_setup] + xor eax, eax + inc eax + ret endp align 4 proc set_ICH - mov [ctrl.codec_read16], codec_io_r16 ;virtual - mov [ctrl.codec_write16], codec_io_w16 ;virtual + mov [ctrl.codec_read16], codec_io_r16 ;virtual + mov [ctrl.codec_write16], codec_io_w16 ;virtual - mov [ctrl.ctrl_read8 ], ctrl_io_r8 ;virtual - mov [ctrl.ctrl_read16], ctrl_io_r16 ;virtual - mov [ctrl.ctrl_read32], ctrl_io_r32 ;virtual + mov [ctrl.ctrl_read8 ], ctrl_io_r8 ;virtual + mov [ctrl.ctrl_read16], ctrl_io_r16 ;virtual + mov [ctrl.ctrl_read32], ctrl_io_r32 ;virtual - mov [ctrl.ctrl_write8 ], ctrl_io_w8 ;virtual - mov [ctrl.ctrl_write16], ctrl_io_w16 ;virtual - mov [ctrl.ctrl_write32], ctrl_io_w32 ;virtual - ret -endp - -PG_SW equ 0x003 -PG_NOCACHE equ 0x018 - -align 4 -proc set_ICH4 - stdcall AllocKernelSpace, dword 0x2000 - mov edi, eax - stdcall MapPage, edi,[ctrl.codec_mem_base],PG_SW+PG_NOCACHE - mov [ctrl.codec_mem_base], edi - add edi, 0x1000 - stdcall MapPage, edi, [ctrl.ctrl_mem_base],PG_SW+PG_NOCACHE - mov [ctrl.ctrl_mem_base], edi - - mov [ctrl.codec_read16], codec_mem_r16 ;virtual - mov [ctrl.codec_write16], codec_mem_w16 ;virtual - - mov [ctrl.ctrl_read8 ], ctrl_mem_r8 ;virtual - mov [ctrl.ctrl_read16], ctrl_mem_r16 ;virtual - mov [ctrl.ctrl_read32], ctrl_mem_r32 ;virtual - - mov [ctrl.ctrl_write8 ], ctrl_mem_w8 ;virtual - mov [ctrl.ctrl_write16], ctrl_mem_w16 ;virtual - mov [ctrl.ctrl_write32], ctrl_mem_w32 ;virtual - ret + mov [ctrl.ctrl_write8 ], ctrl_io_w8 ;virtual + mov [ctrl.ctrl_write16], ctrl_io_w16 ;virtual + mov [ctrl.ctrl_write32], ctrl_io_w32 ;virtual + ret endp align 4 proc reset_controller - xor eax, eax - mov edx, PCM_IN_CR_REG - call [ctrl.ctrl_write8] + xor eax, eax + mov edx, PCM_IN_CR_REG + call [ctrl.ctrl_write8] - mov edx, PCM_OUT_CR_REG - call [ctrl.ctrl_write8] + mov edx, PCM_OUT_CR_REG + call [ctrl.ctrl_write8] - mov edx, MC_IN_CR_REG - call [ctrl.ctrl_write8] + mov edx, MC_IN_CR_REG + call [ctrl.ctrl_write8] - mov eax, RR - mov edx, PCM_IN_CR_REG - call [ctrl.ctrl_write8] + mov eax, RR + mov edx, PCM_IN_CR_REG + call [ctrl.ctrl_write8] - mov edx, PCM_OUT_CR_REG - call [ctrl.ctrl_write8] + mov edx, PCM_OUT_CR_REG + call [ctrl.ctrl_write8] - mov edx, MC_IN_CR_REG - call [ctrl.ctrl_write8] - - ret + mov edx, MC_IN_CR_REG + call [ctrl.ctrl_write8] + ret endp align 4 proc init_codec - locals - counter dd ? - endl + locals + counter dd ? + endl - call reset_codec - and eax, eax - jz .err + mov esi, msgControl + call SysMsgBoardStr - xor edx, edx ;ac_reg_0 - call [ctrl.codec_write16] + mov edx, GLOB_CTRL + call [ctrl.ctrl_read32] + call dword2str + call SysMsgBoardStr - xor eax, eax - mov edx, CODEC_REG_POWERDOWN - call [ctrl.codec_write16] + mov esi, msgStatus + call SysMsgBoardStr - mov [counter], 200 ; total 200*5 ms = 1s + mov edx, CTRL_STAT + call [ctrl.ctrl_read32] + + call dword2str + call SysMsgBoardStr + + test eax, CTRL_ST_CREADY + jnz .ready + + call reset_codec + and eax, eax + jz .err + + xor edx, edx ;ac_reg_0 + call [ctrl.codec_write16] + + xor eax, eax + mov edx, CODEC_REG_POWERDOWN + call [ctrl.codec_write16] + + mov [counter], 200 ; total 200*5 ms = 1s .wait: - mov edx, CODEC_REG_POWERDOWN - call [ctrl.codec_read16] - and eax, 0x0F - cmp eax, 0x0F - jz .ready + mov edx, CODEC_REG_POWERDOWN + call [ctrl.codec_read16] + and eax, 0x0F + cmp eax, 0x0F + jz .ready - mov eax, 5000 ; wait 5 ms - call StallExec - sub [counter] , 1 - jnz .wait + mov eax, 5000 ; wait 5 ms + call StallExec + sub [counter] , 1 + jnz .wait .err: - xor eax, eax ; timeout error - ret + xor eax, eax ; timeout error + ret .ready: - call detect_codec + call detect_codec - xor eax, eax - inc eax - ret + xor eax, eax + inc eax + ret endp align 4 proc reset_codec - mov edx, GLOB_CTRL - call [ctrl.ctrl_read32] + mov edx, GLOB_CTRL + call [ctrl.ctrl_read32] test eax, 0x02 jz .cold @@ -873,15 +742,15 @@ proc reset_codec call warm_reset jnc .ok .cold: - call cold_reset - jnc .ok + call cold_reset + jnc .ok if DEBUG - mov esi, msgCFail + mov esi, msgCFail call SysMsgBoardStr end if - xor eax, eax ; timeout error - ret + xor eax, eax ; timeout error + ret .ok: if DEBUG mov esi, msgResetOk @@ -889,8 +758,8 @@ proc reset_codec end if xor eax, eax - inc eax - ret + inc eax + ret endp align 4 @@ -992,32 +861,29 @@ proc cold_reset endp align 4 -proc play +play: + mov eax, 16 + mov [ctrl.lvi_reg], eax + mov edx, PCM_OUT_LVI_REG + call [ctrl.ctrl_write8] - mov eax, 16 - mov [ctrl.lvi_reg], eax - mov edx, PCM_OUT_LVI_REG - call [ctrl.ctrl_write8] - - mov edx, PCM_OUT_CR_REG - mov ax, 0x1D - call [ctrl.ctrl_write8] - ret -endp + mov edx, PCM_OUT_CR_REG + mov ax, 0x1D + call [ctrl.ctrl_write8] + xor eax, eax + ret align 4 -proc stop - mov edx, PCM_OUT_CR_REG - mov ax, 0x14 - call [ctrl.ctrl_write8] - - mov eax, 16 - mov [ctrl.lvi_reg], eax - mov edx, PCM_OUT_LVI_REG - call [ctrl.ctrl_write8] +stop: + mov edx, PCM_OUT_CR_REG + mov ax, 0x0 + call [ctrl.ctrl_write8] + mov ax, 0x1c + mov edx, PCM_OUT_SR_REG + call [ctrl.ctrl_write16] + xor eax, eax ret -endp align 4 proc get_dev_info stdcall, p_info:dword @@ -1051,7 +917,6 @@ proc get_dev_info stdcall, p_info:dword mov ebx, [ctrl.pci_cmd] mov [CTRL_INFO.pci_cmd], ebx - ret endp @@ -1119,19 +984,17 @@ endp align 4 proc codec_check_ready - mov edx, CTRL_ST - call [ctrl.ctrl_read32] - and eax, CTRL_ST_CREADY - jz .not_ready + mov edx, CTRL_ST + call [ctrl.ctrl_read32] + and eax, CTRL_ST_CREADY + jz .not_ready - xor eax, wax - inc eax - ret - -align 4 + xor eax, wax + inc eax + ret .not_ready: - xor eax, eax - ret + xor eax, eax + ret endp align 4 @@ -1176,7 +1039,7 @@ proc StallExec rdtsc sub eax, ebx sbb edx, ecx - jb @B + js @B pop eax pop ebx @@ -1190,182 +1053,110 @@ endp ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; align 4 -proc codec_io_r16 - add edx, [ctrl.codec_io_base] - in ax, dx - ret -endp +codec_io_r16: + add edx, [ctrl.codec_io_base] + in ax, dx + ret align 4 -proc codec_io_w16 - add edx, [ctrl.codec_io_base] - out dx, ax - ret -endp +codec_io_w16: + add edx, [ctrl.codec_io_base] + out dx, ax + ret align 4 -proc ctrl_io_r8 - add edx, [ctrl.ctrl_io_base] - in al, dx - ret -endp +ctrl_io_r8: + add edx, [ctrl.ctrl_io_base] + in al, dx + ret align 4 -proc ctrl_io_r16 - add edx, [ctrl.ctrl_io_base] - in ax, dx - ret -endp +ctrl_io_r16: + add edx, [ctrl.ctrl_io_base] + in ax, dx + ret align 4 -proc ctrl_io_r32 - add edx, [ctrl.ctrl_io_base] - in eax, dx - ret -endp +ctrl_io_r32: + add edx, [ctrl.ctrl_io_base] + in eax, dx + ret align 4 -proc ctrl_io_w8 - add edx, [ctrl.ctrl_io_base] - out dx, al - ret -endp +ctrl_io_w8: + add edx, [ctrl.ctrl_io_base] + out dx, al + ret align 4 -proc ctrl_io_w16 - add edx, [ctrl.ctrl_io_base] - out dx, ax - ret -endp +ctrl_io_w16: + add edx, [ctrl.ctrl_io_base] + out dx, ax + ret align 4 -proc ctrl_io_w32 - add edx, [ctrl.ctrl_io_base] - out dx, eax - ret -endp +ctrl_io_w32: + add edx, [ctrl.ctrl_io_base] + out dx, eax + ret -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; MEMORY MAPPED IO (os depended) -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; align 4 -proc codec_mem_r16 - add edx, [ctrl.codec_mem_base] - mov ax, word [edx] - ret -endp +dword2str: + mov esi, hex_buff + mov ecx, -8 +@@: + rol eax, 4 + mov ebx, eax + and ebx, 0x0F + mov bl, [ebx+hexletters] + mov [8+esi+ecx], bl + inc ecx + jnz @B + ret -align 4 -proc codec_mem_w16 - add edx, [ctrl.codec_mem_base] - mov word [edx], ax - ret -endp - -align 4 -proc ctrl_mem_r8 - add edx, [ctrl.ctrl_mem_base] - mov al, [edx] - ret -endp - -align 4 -proc ctrl_mem_r16 - add edx, [ctrl.ctrl_mem_base] - mov ax, [edx] - ret -endp - -align 4 -proc ctrl_mem_r32 - add edx, [ctrl.ctrl_mem_base] - mov eax, [edx] - ret -endp - -align 4 -proc ctrl_mem_w8 - add edx, [ctrl.ctrl_mem_base] - mov [edx], al - - ret -endp - -align 4 -proc ctrl_mem_w16 - add edx, [ctrl.ctrl_mem_base] - mov [edx], ax - ret -endp - -align 4 -proc ctrl_mem_w32 - add edx, [ctrl.ctrl_mem_base] - mov [edx], eax - ret -endp +hexletters db '0123456789ABCDEF' +hex_buff db 8 dup(0),13,10,0 include "codec.inc" align 4 -devices dd (CTRL_ICH shl 16)+VID_INTEL,msg_ICH, set_ICH - dd (CTRL_ICH0 shl 16)+VID_INTEL,msg_ICH0,set_ICH - dd (CTRL_ICH2 shl 16)+VID_INTEL,msg_ICH2,set_ICH - dd (CTRL_ICH3 shl 16)+VID_INTEL,msg_ICH3,set_ICH - dd (CTRL_ICH4 shl 16)+VID_INTEL,msg_ICH4,set_ICH4 - dd (CTRL_ICH5 shl 16)+VID_INTEL,msg_ICH5,set_ICH4 - dd (CTRL_ICH6 shl 16)+VID_INTEL,msg_ICH6,set_ICH4 - dd (CTRL_ICH7 shl 16)+VID_INTEL,msg_ICH7,set_ICH4 - - dd (CTRL_NFORCE shl 16)+VID_NVIDIA,msg_NForce, set_ICH - dd (CTRL_NFORCE2 shl 16)+VID_NVIDIA,msg_NForce2,set_ICH - dd (CTRL_NFORCE3 shl 16)+VID_NVIDIA,msg_NForce3,set_ICH - dd (0x5000 shl 16)+0x1274,msgEnsoniq,set_ICH - +devices dd (0x5000 shl 16)+0x1274,msgEnsoniq,set_ICH + dd (0x5880 shl 16)+0x1274,msgVibra128,set_ICH dd 0 ;terminator -msg_ICH db 'Intel ICH', 13,10, 0 -msg_ICH0 db 'Intel ICH0', 13,10, 0 -msg_ICH2 db 'Intel ICH2', 13,10, 0 -msg_ICH3 db 'Intel ICH3', 13,10, 0 -msg_ICH4 db 'Intel ICH4', 13,10, 0 -msg_ICH5 db 'Intel ICH5', 13,10, 0 -msg_ICH6 db 'Intel ICH6', 13,10, 0 -msg_ICH7 db 'Intel ICH7', 13,10, 0 -msg_Intel db 'Intel Corp. ', 0 +version dd 0x00040004 -msg_NForce db 'NForce', 13,10, 0 -msg_NForce2 db 'NForce 2', 13,10, 0 -msg_NForce3 db 'NForce 3', 13,10, 0 -msg_NVidia db 'NVidea', 0 +msgEnsoniq db 'Ensonic 1371',13,10,0 +msgVibra128 db 'Sound Blaster AudioPCI Vibra 128',13,10,0 -msgEnsoniq db 'Ensonic 1371',0 +sz_sound_srv db 'SOUND',0 -szKernel db 'KERNEL', 0 -sz_sound_srv db 'SOUND',0 - -msgInit db 'detect hardware...',13,10,0 -msgPCI db 'PCI accsess not supported',13,10,0 +msgDetect db 'detect hardware...',13,10,0 msgFail db 'device not found',13,10,0 msgAttchIRQ db 'IRQ line not supported', 13,10, 0 msgInvIRQ db 'IRQ line not assigned or invalid', 13,10, 0 msgPlay db 'start play', 13,10,0 msgStop db 'stop play', 13,10,0 msgNotify db 'call notify',13,10,0 -msgIRQ db 'AC97 IRQ', 13,10,0 +msgIRQ db 'AC97 IRQ', 13,10,0 msgInitCtrl db 'init controller',13,10,0 msgInitCodec db 'init codec',13,10,0 msgPrimBuff db 'create primary buffer',13,10,0 -msgReg db 'set service handler',13,10,0 -msgOk db 'service installed',13,10,0 +msgReg db 'set service handler',13,10,0 +msgOk db 'service installed',13,10,0 msgCold db 'cold reset',13,10,0 msgWarm db 'warm reset',13,10,0 msgWRFail db 'warm reset failed',13,10,0 msgCRFail db 'cold reset failed',13,10,0 msgCFail db 'codec not ready',13,10,0 msgResetOk db 'reset complete',13,10,0 +msgStatus db 'global status ',0 +msgControl db 'global control ',0 +msgPCIcmd db 'PCI command ',0 +msgIObase db 'IO base ',0 +msgIRQline db 'IRQ line ',0 section '.data' data readable writable align 16 diff --git a/kernel/branches/flat_kernel/fs/fat12.inc b/kernel/branches/flat_kernel/fs/fat12.inc index d7df53b1fc..0a6c8df711 100644 --- a/kernel/branches/flat_kernel/fs/fat12.inc +++ b/kernel/branches/flat_kernel/fs/fat12.inc @@ -1893,7 +1893,6 @@ fs_FloppyRewrite: dec edi dec edi - ; lea eax, [edi-FLOPPY_FAT] mov eax, edi sub eax, FLOPPY_FAT diff --git a/kernel/branches/flat_kernel/kernel.asm b/kernel/branches/flat_kernel/kernel.asm index 57e725a361..2ec3ea0e9b 100644 --- a/kernel/branches/flat_kernel/kernel.asm +++ b/kernel/branches/flat_kernel/kernel.asm @@ -721,23 +721,13 @@ first_app_found: cmp [IDEContrRegsBaseAddr], 0 setnz [dma_hdd] -;if 0 - call init_com - mov eax, msg_com - mov ebx, 46 - call comm_send -;end if + call init_uart_service sti jmp $ ; wait here for timer to take control ; Fly :) -;if 0 -msg_com db 'com1 port message ',0x0D, 0x0A - db 'test comm_send() function',0 -;end if - include 'unpacker.inc' include 'fdo.inc' diff --git a/kernel/branches/flat_kernel/kernel32.inc b/kernel/branches/flat_kernel/kernel32.inc index 4bbd80a5bf..b772a0244d 100644 --- a/kernel/branches/flat_kernel/kernel32.inc +++ b/kernel/branches/flat_kernel/kernel32.inc @@ -263,9 +263,9 @@ include "video/cursors.inc" ; cursors functions ; Network Interface & TCPIP Stack include "network/stack.inc" -;if 0 + include "drivers/comport.asm" -;end if + ; Mouse pointer