Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 380 → Rev 381

/kernel/trunk/kernel.asm
298,26 → 298,26
mov al, [0x2F0000+0x901F] ; DMA writing
mov [allow_dma_write], al
mov al,[0x2f0000+0x9000] ; bpp
mov [0xFBF1],al
mov [ScreenBPP],al
movzx eax,word [0x2f0000+0x900A] ; X max
dec eax
mov [0xfe00],eax
mov [ScreenWidth],eax
mov [screen_workarea.right],eax
movzx eax,word [0x2f0000+0x900C] ; Y max
dec eax
mov [0xfe04],eax
mov [ScreenHeight],eax
mov [screen_workarea.bottom],eax
movzx eax,word [0x2f0000+0x9008] ; screen mode
mov [0xFE0C],eax
mov [SCR_MODE],eax
mov eax,[0x2f0000+0x9014] ; Vesa 1.2 bnk sw add
mov [0xE030],eax
mov [0xfe08],word 640*4 ; Bytes PerScanLine
cmp [0xFE0C],word 0x13 ; 320x200
mov [BANK_SWITCH],eax
mov [BytesPerScanLine],word 640*4 ; Bytes PerScanLine
cmp [SCR_MODE],word 0x13 ; 320x200
je @f
cmp [0xFE0C],word 0x12 ; VGA 640x480
cmp [SCR_MODE],word 0x12 ; VGA 640x480
je @f
mov ax,[0x2f0000+0x9001] ; for other modes
mov [0xfe08],ax
mov [BytesPerScanLine],ax
@@:
 
; GRAPHICS ADDRESSES
334,30 → 334,30
;no_d_lfb:
mov [LFBAddress],eax
 
cmp [0xfe0c],word 0100000000000000b
cmp [SCR_MODE],word 0100000000000000b
jge setvesa20
cmp [0xfe0c],word 0x13
cmp [SCR_MODE],word 0x13
je v20ga32
mov [0xe020],dword Vesa12_putpixel24 ; Vesa 1.2
mov [PUTPIXEL],dword Vesa12_putpixel24 ; Vesa 1.2
mov [0xe024],dword Vesa12_getpixel24
cmp [0xfbf1],byte 24
cmp [ScreenBPP],byte 24
jz ga24
mov [0xe020],dword Vesa12_putpixel32
mov [PUTPIXEL],dword Vesa12_putpixel32
mov [0xe024],dword Vesa12_getpixel32
ga24:
jmp v20ga24
setvesa20:
mov [0xe020],dword Vesa20_putpixel24 ; Vesa 2.0
mov [PUTPIXEL],dword Vesa20_putpixel24 ; Vesa 2.0
mov [0xe024],dword Vesa20_getpixel24
cmp [0xfbf1],byte 24
cmp [ScreenBPP],byte 24
jz v20ga24
v20ga32:
mov [0xe020],dword Vesa20_putpixel32
mov [PUTPIXEL],dword Vesa20_putpixel32
mov [0xe024],dword Vesa20_getpixel32
v20ga24:
cmp [0xfe0c],word 0x12 ; 16 C VGA 640x480
cmp [SCR_MODE],word 0x12 ; 16 C VGA 640x480
jne no_mode_0x12
mov [0xe020],dword VGA_putpixel
mov [PUTPIXEL],dword VGA_putpixel
mov [0xe024],dword Vesa20_getpixel32
no_mode_0x12:
 
512,13 → 512,13
mov esi,char
xor ebx,ebx
mov ecx,2560;26000
mov edx,0x3F600;0x37000
mov edx,FONT_I
call fs_RamdiskRead
 
mov esi,char2
xor ebx,ebx
mov ecx,2560;26000
mov edx,0x3EC00;0x30000
mov edx,FONT_II
call fs_RamdiskRead
 
mov esi,boot_fonts
680,7 → 680,7
call _rdtsc
sub eax,ecx
shl eax,2
mov [0xf600],eax ; save tsc / sec
mov [CPU_FREQ],eax ; save tsc / sec
mov ebx, 1000000
div ebx
mov [stall_mcs], eax
696,7 → 696,7
 
; PALETTE FOR 320x200 and 640x480 16 col
 
cmp [0xfe0c],word 0x12
cmp [SCR_MODE],word 0x12
jne no_pal_vga
mov esi,boot_pal_vga
call boot_log
703,7 → 703,7
call paletteVGA
no_pal_vga:
 
cmp [0xfe0c],word 0x13
cmp [SCR_MODE],word 0x13
jne no_pal_ega
mov esi,boot_pal_ega
call boot_log
782,7 → 782,7
mov esi,boot_tasking
call boot_log
 
mov [0xe000],byte 1 ; multitasking enabled
; mov [ENABLE_TASKSWITCH],byte 1 ; multitasking enabled
 
; UNMASK ALL IRQ'S
 
935,32 → 935,32
 
; RESERVE PORTS
mov edi,1 ; 0x00-0x2d
mov [0x2d0000],edi
mov [RESERVED_PORTS],edi
shl edi,4
mov [0x2d0000+edi+0],dword 1
mov [0x2d0000+edi+4],dword 0x0
mov [0x2d0000+edi+8],dword 0x2d
mov [RESERVED_PORTS+edi+0],dword 1
mov [RESERVED_PORTS+edi+4],dword 0x0
mov [RESERVED_PORTS+edi+8],dword 0x2d
 
inc dword [0x2d0000] ; 0x30-0x4d
mov edi,[0x2d0000]
inc dword [RESERVED_PORTS] ; 0x30-0x4d
mov edi,[RESERVED_PORTS]
shl edi,4
mov [0x2d0000+edi+0],dword 1
mov [0x2d0000+edi+4],dword 0x30
mov [0x2d0000+edi+8],dword 0x4d
mov [RESERVED_PORTS+edi+0],dword 1
mov [RESERVED_PORTS+edi+4],dword 0x30
mov [RESERVED_PORTS+edi+8],dword 0x4d
 
inc dword [0x2d0000] ; 0x50-0xdf
mov edi,[0x2d0000]
inc dword [RESERVED_PORTS] ; 0x50-0xdf
mov edi,[RESERVED_PORTS]
shl edi,4
mov [0x2d0000+edi+0],dword 1
mov [0x2d0000+edi+4],dword 0x50
mov [0x2d0000+edi+8],dword 0xdf
mov [RESERVED_PORTS+edi+0],dword 1
mov [RESERVED_PORTS+edi+4],dword 0x50
mov [RESERVED_PORTS+edi+8],dword 0xdf
 
inc dword [0x2d0000] ; 0xe5-0xff
mov edi,[0x2d0000]
inc dword [RESERVED_PORTS] ; 0xe5-0xff
mov edi,[RESERVED_PORTS]
shl edi,4
mov [0x2d0000+edi+0],dword 1
mov [0x2d0000+edi+4],dword 0xe5
mov [0x2d0000+edi+8],dword 0xff
mov [RESERVED_PORTS+edi+0],dword 1
mov [RESERVED_PORTS+edi+4],dword 0xe5
mov [RESERVED_PORTS+edi+8],dword 0xff
 
 
; cmp [0xf604],byte 2 ; com1 mouse -> 0x3f0-0x3ff
1011,10 → 1011,10
mov ecx,0x100 ; flush port 0x60
.fl60: in al,0x60
loop .fl60
mov [0xfcff],byte 0 ; mouse buffer
mov [0xf400],byte 0 ; keyboard buffer
mov [0xf500],byte 0 ; button buffer
; mov [0xfb0a],dword 100*65536+100 ; mouse x/y
mov [MOUSE_BUFF_COUNT],byte 0 ; mouse buffer
mov [KEY_COUNT],byte 0 ; keyboard buffer
mov [BTN_COUNT],byte 0 ; button buffer
; mov [MOUSE_X],dword 100*65536+100 ; mouse x/y
 
push eax
mov ax,[0x2f0000+0x900c]
1022,12 → 1022,12
shl eax,16
mov ax,[0x2f0000+0x900A]
shr ax,1
mov [0xfb0a],eax
mov [MOUSE_X],eax
pop eax
 
mov byte [SB16_Status],0 ; Minazzi Paolo
mov [display_data-12],dword 1 ; tiled background
mov [0xfe88],dword 0x2C0000 ; address of button list
mov [BTN_ADDR],dword BUTTON_INFO ; address of button list
 
;!! IP 04.02.2005:
mov [next_usage_update], 100
1038,12 → 1038,12
;* mouse centered - start code- Mario79
mouse_centered:
push eax
mov eax,[0xFE00]
mov eax,[ScreenWidth]
shr eax,1
mov [0xFB0A],ax
mov eax,[0xFE04]
mov [MOUSE_X],ax
mov eax,[ScreenHeight]
shr eax,1
mov [0xFB0C],ax
mov [MOUSE_Y],ax
pop eax
ret
;* mouse centered - end code- Mario79
1055,7 → 1055,7
mov edi,ebx ; separate flag for read / write
and ebx,65535
 
mov ecx,[0x2d0000]
mov ecx,[RESERVED_PORTS]
test ecx,ecx
jne sopl8
mov [esp+36],dword 1
1070,7 → 1070,7
 
mov esi,ecx
shl esi,4
add esi,0x2d0000
add esi,RESERVED_PORTS
cmp edx,[esi+0]
jne sopl2
cmp ebx,[esi+4]
1725,15 → 1725,15
ja msset
jmp [mousefn+eax*4]
msscreen:
mov eax,[0xfb0a]
mov eax,[MOUSE_X]
shl eax,16
mov ax,[0xfb0c]
mov ax,[MOUSE_Y]
mov [esp+36],eax
ret
mswin:
mov eax,[0xfb0a]
mov eax,[MOUSE_X]
shl eax,16
mov ax,[0xfb0c]
mov ax,[MOUSE_Y]
mov esi,[TASK_BASE]
mov bx, word [esi-twdw+WDATA.box.left]
shl ebx,16
1749,7 → 1749,7
mov [esp+36],eax
ret
msbutton:
movzx eax,byte [0xfb40]
movzx eax,byte [BTN_DOWN]
mov [esp+36],eax
ret
msset:
1935,7 → 1935,7
mov eax,[TASK_COUNT]
add eax,2
mov [shutdown_processes],eax
mov [0xFF00],al
mov [SYS_SHUTDOWN],al
and dword [esp+36], 0
ret
uglobal
2020,7 → 2020,7
ret
 
sysfn_getcpuclock: ; 18.5 = GET TSC/SEC
mov eax,[0xf600]
mov eax,[CPU_FREQ]
mov [esp+36], eax
ret
 
2074,7 → 2074,7
mov edi,[TASK_BASE]
mov edi,[edi+TASKDATA.mem_start]
add edi,ecx
mov esi,0x40000
mov esi,DRIVE_DATA
ret
full_table:
cmp ebx,2
2141,9 → 2141,9
.set_pointer_position:
cmp ebx,4 ; set mouse pointer position
jnz .end
mov [0xFB0C],cx ;y
mov [MOUSE_Y],cx ;y
ror ecx,16
mov [0xFB0A],cx ;x
mov [MOUSE_X],cx ;x
rol ecx,16
.end:
ret
2255,7 → 2255,7
and edx,0xFF000000 ;255*256*256*256
and ecx,0x00FFFFFF ;255*256*256+255*256+255
add edx,ecx
mov [ebx+0x300000],edx
mov [ebx+IMG_BACKGROUND],edx
; mov [bgrchanged],1
ret
nosb2:
2267,7 → 2267,7
; je nosb31
;draw_background_temp:
; mov [bgrchanged],1 ;0
mov [0xfff0],byte 1
mov [REDRAW_BACKGROUND],byte 1
mov [background_defined], 1
nosb31:
ret
2296,7 → 2296,7
cmp ecx, 0x160000-16
ja .fin
; add edi, 0x300000
add ebx, 0x300000
add ebx, IMG_BACKGROUND
mov ecx, edx
cmp ecx, 0x160000-16
ja .fin
2329,7 → 2329,7
mov edx,0x160000-16
cmp edx,ebx
jbe nogb2
mov eax, [ebx+0x300000]
mov eax, [ebx+IMG_BACKGROUND]
and eax, 0xFFFFFF
mov [esp+36],eax
ret
2353,21 → 2353,21
mov edx,[TASK_COUNT]
cmp ecx,edx
jne .finish
cmp [0xf400],byte 0
cmp [KEY_COUNT],byte 0
je .finish
movzx eax,byte [0xf401]
movzx eax,byte [KEY_BUFF]
shl eax,8
push eax
dec byte [0xf400]
and byte [0xf400],127
movzx ecx,byte [0xf400]
dec byte [KEY_COUNT]
and byte [KEY_COUNT],127
movzx ecx,byte [KEY_COUNT]
add ecx,2
; mov esi,0xf402
; mov edi,0xf401
; cld
; rep movsb
mov eax, 0xF402
mov ebx, 0xF401
mov eax, KEY_BUFF+1
mov ebx, KEY_BUFF
call memmove
pop eax
.ret_eax:
2402,12 → 2402,12
mov edx, [TASK_COUNT] ; less than 256 processes
cmp ecx,edx
jne .exit
movzx eax,byte [0xf500]
movzx eax,byte [BTN_COUNT]
test eax,eax
jz .exit
mov eax,[0xf501]
mov eax,[BTN_BUFF]
shl eax,8
mov [0xf500],byte 0
mov [BTN_COUNT],byte 0
mov [esp+36],eax
.exit:
ret
2623,7 → 2623,7
 
sys_newba2:
 
mov edi,[0xfe88]
mov edi,[BTN_ADDR]
cmp [edi],dword 0 ; empty button list ?
je end_of_buttons_away
 
2666,9 → 2666,9
add edx,draw_data-CURRENT_TASK
mov [edx+RECT.left], 0
mov [edx+RECT.top], 0
mov eax,[0xfe00]
mov eax,[ScreenWidth]
mov [edx+RECT.right],eax
mov eax,[0xfe04]
mov eax,[ScreenHeight]
mov [edx+RECT.bottom],eax
 
mov edi,[TASK_BASE]
2979,8 → 2979,8
call calculatescreen
pop edx ecx ebx eax
 
mov [0xf400],byte 0 ; empty keyboard buffer
mov [0xf500],byte 0 ; empty button buffer
mov [KEY_COUNT],byte 0 ; empty keyboard buffer
mov [BTN_COUNT],byte 0 ; empty button buffer
 
newd:
mov [edi+WDATA.fl_redraw],byte 0 ; no redraw
3108,9 → 3108,9
xor esi,esi
call redrawscreen
 
mov [0xfff5],byte 0 ; mouse pointer
mov [0xfff4],byte 0 ; no mouse under
mov [0xfb44],byte 0 ; react to mouse up/down
mov [DONT_DRAW_MOUSE],byte 0 ; mouse pointer
mov [MOUSE_BACKGROUND],byte 0 ; no mouse under
mov [MOUSE_DOWN],byte 0 ; react to mouse up/down
 
mov ecx,10 ; wait 1/10 second
.wmrl3:
3132,13 → 3132,13
; call change_task
; mov [draw_data+32+0],dword 0
; mov [draw_data+32+4],dword 0
; mov eax,[0xfe00]
; mov eax,[ScreenWidth
; mov ebx,[0xfe04]
; mov [draw_data+32+8],eax
; mov [draw_data+32+12],ebx
; call drawbackground
; mov [0xfff0],byte 0
; mov [0xfff4],byte 0
; mov [MOUSE_BACKGROUND],byte 0
;temp_nobackgr:
; ret
 
3258,7 → 3258,7
checkpixel:
push eax edx
 
mov edx,[0xfe00] ; screen x size
mov edx,[ScreenWidth] ; screen x size
inc edx
imul edx, ebx
mov dl, [eax+edx+display_data] ; lea eax, [...]
3308,21 → 3308,21
mouse_not_active:
 
 
cmp [0xfff0],byte 0 ; background update ?
cmp [REDRAW_BACKGROUND],byte 0 ; background update ?
jz nobackgr
cmp [background_defined], 0
jz nobackgr
mov [0xfff0],byte 2
mov [REDRAW_BACKGROUND],byte 2
call change_task
mov [draw_data+32 + RECT.left],dword 0
mov [draw_data+32 + RECT.top],dword 0
mov eax,[0xfe00]
mov ebx,[0xfe04]
mov eax,[ScreenWidth]
mov ebx,[ScreenHeight]
mov [draw_data+32 + RECT.right],eax
mov [draw_data+32 + RECT.bottom],ebx
call drawbackground
mov [0xfff0],byte 0
mov [0xfff4],byte 0
mov [REDRAW_BACKGROUND],byte 0
mov [MOUSE_BACKGROUND],byte 0
 
nobackgr:
 
3329,17 → 3329,17
 
; system shutdown request
 
cmp [0xFF00],byte 0
cmp [SYS_SHUTDOWN],byte 0
je noshutdown
 
mov edx,[shutdown_processes]
sub dl,2
 
cmp [0xff00],dl
cmp [SYS_SHUTDOWN],dl
jne no_mark_system_shutdown
 
mov edx,0x3040
movzx ecx,byte [0xff00]
movzx ecx,byte [SYS_SHUTDOWN]
add ecx,5
markz:
mov [edx+TASKDATA.state],byte 3
3350,9 → 3350,9
 
call [disable_mouse]
 
dec byte [0xff00]
dec byte [SYS_SHUTDOWN]
 
cmp [0xff00],byte 0
cmp [SYS_SHUTDOWN],byte 0
je system_shutdown
 
noshutdown:
3491,7 → 3491,7
mov [display_data-8],dword 4 ; size x
mov [display_data-4],dword 2 ; size y
 
mov edi, 0x300000 ; set background to black
mov edi, IMG_BACKGROUND ; set background to black
xor eax, eax
mov ecx, 0x0fff00 / 4
cld
3502,7 → 3502,7
mov ecx,0x15ff00 / 4
rep stosd
 
mov byte [0xFFF0], 0 ; do not draw background!
mov byte [REDRAW_BACKGROUND], 0 ; do not draw background!
 
ret
 
3709,7 → 3709,7
 
mov ebx,eax
shl ebx,12
add ebx,0x2e0000
add ebx,IRQ_SAVE
mov eax,[ebx]
mov ecx,1
test eax,eax
3784,7 → 3784,7
ja rpal1
cmp ecx,65536
jae rpal1
mov esi,[0x2d0000]
mov esi,[RESERVED_PORTS]
test esi,esi ; no reserved areas ?
je rpal2
cmp esi,255 ; max reserved
3792,7 → 3792,7
rpal3:
mov edi,esi
shl edi,4
add edi,0x2d0000
add edi,RESERVED_PORTS
cmp ebx,[edi+8]
ja rpal4
cmp ecx,[edi+4]
3840,11 → 3840,11
popad ; end enable io map
sti
 
mov edi,[0x2d0000]
mov edi,[RESERVED_PORTS]
add edi,1
mov [0x2d0000],edi
mov [RESERVED_PORTS],edi
shl edi,4
add edi,0x2d0000
add edi,RESERVED_PORTS
mov esi,[TASK_BASE]
mov esi,[esi+TASKDATA.pid]
mov [edi],esi
3858,7 → 3858,7
 
pushad
 
mov esi,[0x2d0000] ; no reserved areas ?
mov esi,[RESERVED_PORTS] ; no reserved areas ?
test esi,esi
je frpal2
mov edx,[TASK_BASE]
3866,7 → 3866,7
frpal3:
mov edi,esi
shl edi,4
add edi,0x2d0000
add edi,RESERVED_PORTS
cmp edx,[edi]
jne frpal4
cmp ebx,[edi+4]
3890,7 → 3890,7
cld
rep movsb
 
dec dword [0x2d0000]
dec dword [RESERVED_PORTS]
 
popad
 
3960,12 → 3960,12
 
drawbackground:
inc [mouse_pause]
cmp [0xfe0c],word 0x12
cmp [SCR_MODE],word 0x12
je dbrv20
dbrv12:
cmp [0xfe0c],word 0100000000000000b
cmp [SCR_MODE],word 0100000000000000b
jge dbrv20
cmp [0xfe0c],word 0x13
cmp [SCR_MODE],word 0x13
je dbrv20
call vesa12_drawbackground
dec [mouse_pause]
4015,12 → 4015,12
sys_putimage_bpp:
; call [disable_mouse] ; this will be done in xxx_putimage
; mov eax, vga_putimage
cmp [0xfe0c], word 0x12
cmp [SCR_MODE], word 0x12
jz @f ;.doit
mov eax, vesa12_putimage
cmp [0xfe0c], word 0100000000000000b
cmp [SCR_MODE], word 0100000000000000b
jae @f
cmp [0xfe0c], word 0x13
cmp [SCR_MODE], word 0x13
jnz .doit
@@:
mov eax, vesa20_putimage
4114,12 → 4114,12
.forced:
inc [mouse_pause]
; call [disable_mouse]
cmp [0xfe0c],word 0x12
cmp [SCR_MODE],word 0x12
je dbv20
sdbv20:
cmp [0xfe0c],word 0100000000000000b
cmp [SCR_MODE],word 0100000000000000b
jge dbv20
cmp [0xfe0c],word 0x13
cmp [SCR_MODE],word 0x13
je dbv20
call vesa12_drawbar
dec [mouse_pause]
4244,7 → 4244,7
setmouse: ; set mousepicture -pointer
; ps2 mouse enable
 
mov [0xf200],dword mousepointer
mov [MOUSE_PICTURE],dword mousepointer
 
cli
; mov bl,0xa8 ; enable mouse cmd
4596,9 → 4596,9
 
cmp eax,1 ; resolution
jne no_gs1
mov eax,[0xfe00]
mov eax,[ScreenWidth]
shl eax,16
mov ax,[0xfe04]
mov ax,[ScreenHeight]
add eax,0x00010001
mov [esp+36],eax
ret
4606,7 → 4606,7
 
cmp eax,2 ; bits per pixel
jne no_gs2
movzx eax,byte [0xfbf1]
movzx eax,byte [ScreenBPP]
mov [esp+36],eax
ret
no_gs2:
4613,7 → 4613,7
 
cmp eax,3 ; bytes per scanline
jne no_gs3
mov eax,[0xfe08]
mov eax,[BytesPerScanLine]
mov [esp+36],eax
ret
no_gs3:
4709,9 → 4709,9
 
syscall_getscreensize: ; GetScreenSize
 
movzx eax,word[0xfe00]
movzx eax,word[ScreenWidth]
shl eax,16
mov ax,[0xfe04]
mov ax,[ScreenHeight]
mov [esp+36],eax
ret
 
4749,7 → 4749,7
align 4
 
syscall_getpixel: ; GetPixel
mov ecx,[0xfe00]
mov ecx,[ScreenWidth]
inc ecx
xor edx,edx
div ecx