Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 4699 → Rev 4700

/kernel/trunk/kernel.asm
369,6 → 369,14
call mutex_init
mov ecx, ide_channel2_mutex
call mutex_init
mov ecx, ide_channel3_mutex
call mutex_init
mov ecx, ide_channel4_mutex
call mutex_init
mov ecx, ide_channel5_mutex
call mutex_init
mov ecx, ide_channel6_mutex
call mutex_init
;-----------------------------------------------------------------------------
; SAVE REAL MODE VARIABLES
;-----------------------------------------------------------------------------
1504,266 → 1512,231
mov eax, [esp+64+8] ; background color (if given)
mov edi, [esp+64+4]
jmp dtext
 
;-----------------------------------------------------------------------------
iglobal
midi_base dw 0
endg
;-----------------------------------------------------------------------------
align 4
 
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
; 3 = not used
; 4 = not used
; 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
; 9
; 10 = sound dma channel
; 6 = not used
; 7 = not used
; 8 = not used
; 9 = not used
; 10 = not used
; 11 = enable lba read
; 12 = enable pci access
;-----------------------------------------------------------------------------
and [esp+32], dword 0
; F.21.1 - set MPU MIDI base port
dec ebx
jnz @f
 
 
and [esp+32], dword 0
dec ebx ; MIDI
jnz nsyse1
cmp ecx, 0x100
jb @f
 
jb nsyse1
mov esi, 65535
cmp esi, ecx
jb @f
 
jb nsyse1
mov [midi_base], cx ;bx
mov word [mididp], cx;bx
inc cx ;bx
mov word [midisp], cx;bx
mov [midi_base], cx
mov word [mididp], cx
inc cx
mov word [midisp], cx
ret
;--------------------------------------
@@:
; F.21.2 - set keyboard layout
dec ebx
jnz @f
 
iglobal
midi_base dw 0
endg
 
nsyse1:
dec ebx ; KEYBOARD
jnz nsyse2
mov edi, [TASK_BASE]
mov eax, [edi+TASKDATA.mem_start]
add eax, edx
; 1 = normal layout
dec ecx
jnz .shift
 
dec ecx
jnz kbnobase
mov ebx, keymap
mov ecx, 128
call memmove
ret
kbnobase:
;--------------------------------------
.shift:
; 2 = layout at pressed Shift
dec ecx
jnz kbnoshift
jnz .alt
 
mov ebx, keymap_shift
mov ecx, 128
call memmove
ret
kbnoshift:
;--------------------------------------
.alt:
; 3 = layout at pressed Alt
dec ecx
jnz kbnoalt
jnz .country
 
mov ebx, keymap_alt
mov ecx, 128
call memmove
ret
kbnoalt:
;--------------------------------------
.country:
; country identifier
sub ecx, 6
jnz kbnocountry
jnz .error
 
mov word [keyboard], dx
ret
kbnocountry:
mov [esp+32], dword 1
ret
nsyse2:
dec ebx ; CD
jnz nsyse4
;--------------------------------------
@@:
; F.21.5 - set system language
sub ebx, 3
jnz @f
 
test ecx, ecx
jz nosesl
 
cmp ecx, 4
ja nosesl
mov [cd_base], cl
 
dec ecx
jnz noprma
mov eax, [hd_address_table]
mov [cdbase], eax ;0x1f0
mov [cdid], 0xa0
noprma:
 
dec ecx
jnz noprsl
mov eax, [hd_address_table]
mov [cdbase], eax ;0x1f0
mov [cdid], 0xb0
noprsl:
dec ecx
jnz nosema
mov eax, [hd_address_table+16]
mov [cdbase], eax ;0x170
mov [cdid], 0xa0
nosema:
dec ecx
jnz nosesl
mov eax, [hd_address_table+16]
mov [cdbase], eax ;0x170
mov [cdid], 0xb0
nosesl:
ret
 
iglobal
cd_base db 0
 
endg
nsyse4:
 
sub ebx, 2 ; SYSTEM LANGUAGE
jnz nsyse5
mov [syslang], ecx
ret
nsyse5:
;--------------------------------------
@@:
; F.21.11 - enable/disable low-level access to HD
and ecx, 1
sub ebx, 6
jnz @f
 
sub ebx, 2 ; HD BASE - obsolete
jnz nsyse7
 
nosethd:
mov [lba_read_enabled], ecx
ret
 
nsyse7:
 
; cmp eax,8 ; HD PARTITION - obsolete
;--------------------------------------
@@:
; F.21.12 - enable/disable low-level access to PCI
dec ebx
jnz nsyse8
ret
jnz .error
 
nsyse8:
; cmp eax,11 ; ENABLE LBA READ
and ecx, 1
sub ebx, 3
jnz no_set_lba_read
mov [lba_read_enabled], ecx
ret
 
no_set_lba_read:
; cmp eax,12 ; ENABLE PCI ACCESS
dec ebx
jnz sys_setup_err
mov [pci_access_enabled], ecx
ret
 
sys_setup_err:
;--------------------------------------
.error:
or [esp+32], dword -1
ret
 
;-----------------------------------------------------------------------------
align 4
 
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
; 3 = not used
; 4 = not used
; 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
; 6 = not used
; 7 = not used
; 8 = not used
; 9=get hs timer tic
; 10 = not used
; 11 = get the state "lba read"
; 12 = get the state "pci access"
;-----------------------------------------------------------------------------
; F.26.1 - get MPU MIDI base port
dec ebx
jnz @f
 
; cmp eax,1
dec ebx
jnz ngsyse1
movzx eax, [midi_base]
mov [esp+32], eax
ret
ngsyse1:
; cmp eax,2
;--------------------------------------
@@:
; F.26.2 - get keyboard layout
dec ebx
jnz ngsyse2
jnz @f
 
mov edi, [TASK_BASE]
mov ebx, [edi+TASKDATA.mem_start]
add ebx, edx
; 1 = normal layout
dec ecx
jnz .shift
 
; cmp ebx,1
dec ecx
jnz kbnobaseret
mov eax, keymap
mov ecx, 128
call memmove
ret
kbnobaseret:
; cmp ebx,2
;--------------------------------------
.shift:
; 2 = layout with pressed Shift
dec ecx
jnz kbnoshiftret
jnz .alt
 
mov eax, keymap_shift
mov ecx, 128
call memmove
ret
kbnoshiftret:
; cmp ebx,3
;--------------------------------------
.alt:
; 3 = layout with pressed Alt
dec ecx
jne kbnoaltret
jne .country
 
mov eax, keymap_alt
mov ecx, 128
call memmove
ret
kbnoaltret:
; cmp ebx,9
;--------------------------------------
.country:
; 9 = country identifier
sub ecx, 6
jnz ngsyse2
jnz .error
 
movzx eax, word [keyboard]
mov [esp+32], eax
ret
;--------------------------------------
@@:
; F.26.5 - get system language
sub ebx, 3
jnz @f
 
 
ngsyse2:
; cmp eax,3
dec ebx
jnz ngsyse3
movzx eax, [cd_base]
mov [esp+32], eax
ret
ngsyse3:
; cmp eax,5
sub ebx, 2
jnz ngsyse5
mov eax, [syslang]
mov [esp+32], eax
ret
ngsyse5:
; cmp eax,9
;--------------------------------------
@@:
; F.26.9 - get the value of the time counter
sub ebx, 4
jnz ngsyse9
mov eax, [timer_ticks];[0xfdf0]
jnz @f
 
mov eax, [timer_ticks]
mov [esp+32], eax
ret
ngsyse9:
; cmp eax,11
;--------------------------------------
@@:
; F.26.11 - Find out whether low-level HD access is enabled
sub ebx, 2
jnz ngsyse11
jnz @f
 
mov eax, [lba_read_enabled]
mov [esp+32], eax
ret
ngsyse11:
; cmp eax,12
;--------------------------------------
@@:
; F.26.12 - Find out whether low-level PCI access is enabled
dec ebx
jnz ngsyse12
jnz .error
 
mov eax, [pci_access_enabled]
mov [esp+32], eax
ret
ngsyse12:
mov [esp+32], dword 1
;--------------------------------------
.error:
or [esp+32], dword -1
ret
 
 
;-----------------------------------------------------------------------------
get_timer_ticks:
mov eax, [timer_ticks]
ret
 
;-----------------------------------------------------------------------------
iglobal
align 4
mousefn dd msscreen, mswin, msbutton, msset
1772,7 → 1745,7
dd app_delete_cursor
dd msz
endg
 
;-----------------------------------------------------------------------------
readmousepos:
 
; eax=0 screen relative
5080,38 → 5053,52
mov ax, word [Screen_Max_Y]
mov [esp + 32], eax
ret
 
;-----------------------------------------------------------------------------
align 4
 
syscall_cdaudio: ; CD
cmp ebx, 4
je .eject
 
cmp ebx, 4
jb .audio
jz .eject
cmp ebx, 5
jnz .ret
je .load
 
ret
;--------------------------------------
.load:
call .reserve
call LoadMedium
;call .free
jmp .free
; ret
;--------------------------------------
.eject:
call .reserve
call clear_CD_cache
call allow_medium_removal
call EjectMedium
; call .free
jmp .free
; ret
.audio:
call sys_cd_audio
mov [esp+36-4], eax
.ret:
ret
 
;--------------------------------------
.reserve:
call reserve_cd
 
mov ebx, ecx
inc ebx
mov [cdpos], ebx
mov eax, ebx
 
mov ebx, ecx
and ebx, 11b
shl ebx, 1
mov cl, 8
sub cl, bl
 
dec eax
shr eax, 2
lea eax, [eax*5]
mov al, [eax+DRIVE_DATA+1]
 
shr al, cl
test al, 2 ; it's not an ATAPI device
jz .ret
 
mov eax, ecx
shr eax, 1
and eax, 1
5121,25 → 5108,14
and eax, 1
mov [DiskNumber], al
call reserve_cd_channel
and ebx, 3
inc ebx
mov [cdpos], ebx
add ebx, ebx
mov cl, 8
sub cl, bl
mov al, [DRIVE_DATA+1]
shr al, cl
test al, 2
jz .free;.err
;--------------------------------------
.ret:
ret
;--------------------------------------
.free:
call free_cd_channel
and [cd_status], 0
ret
.err:
call .free
; pop eax
ret
;-----------------------------------------------------------------------------
align 4
syscall_getpixel_WinMap: ; GetPixel WinMap
5537,8 → 5513,6
ret
@@:
call stop_all_services
movi eax, 3
call sys_cd_audio
 
yes_shutdown_param:
cli