/kernel/trunk/blkdev/fdc.inc |
---|
42,7 → 42,7 |
mov [FDD_Track],0 ; Öèëèíäð |
mov [FDD_Head],0 ; Ñòîðîíà |
mov [FDD_Sector],1 ; Ñåêòîð |
mov esi,0x100000 |
mov esi,RAMDISK |
call SeekTrack |
save_image_1: |
push esi |
/kernel/trunk/blkdev/rd.inc |
---|
12,8 → 12,8 |
pushad |
mov esi,0x100000+512 |
mov edi,0x280000 |
mov esi,RAMDISK+512 |
mov edi,RAMDISK_FAT |
fcnew: |
mov eax,dword [esi] |
38,7 → 38,7 |
add edi,16 |
add esi,12 |
cmp edi,0x280000+2856*2 ;2849 clusters |
cmp edi,RAMDISK_FAT+2856*2 ;2849 clusters |
jnz fcnew |
popad |
49,8 → 49,8 |
pushad |
mov esi,0x280000 |
mov edi,0x100000+512 |
mov esi,RAMDISK_FAT |
mov edi,RAMDISK+512 |
fcnew2: |
mov eax,dword [esi] |
66,11 → 66,11 |
add edi,6 |
add esi,8 |
cmp edi,0x100000+512+4278 ;4274 bytes - all used FAT |
cmp edi,RAMDISK+512+4278 ;4274 bytes - all used FAT |
jb fcnew2 |
mov esi,0x100000+512 ; duplicate fat chain |
mov edi,0x100000+512+0x1200 |
mov esi,RAMDISK+512 ; duplicate fat chain |
mov edi,RAMDISK+512+0x1200 |
mov ecx,1069 ;4274/4 |
cld |
rep movsd |
88,7 → 88,7 |
push eax ebx ecx |
mov edi,0x280000 ;start of FAT |
mov edi,RAMDISK_FAT ;start of FAT |
xor ax,ax ;Free cluster=0x0000 in FAT |
xor ebx,ebx ;counter |
mov ecx,2849 ;2849 clusters |
202,7 → 202,7 |
sub ecx,edx |
fr_do1: |
shl ebx,9 |
mov esi,0x100000+512*19 |
mov esi,RAMDISK+512*19 |
add esi,ebx |
shl ecx,7 |
cld |
246,7 → 246,7 |
add eax,31 ;bootsector+2*fat+filenames |
shl eax,9 ;*512 |
add eax,0x100000 ;image base |
add eax,RAMDISK ;image base |
mov ebx,[esp+8] |
mov ecx,512 ;[esp+4] |
260,7 → 260,7 |
frfl7: |
dec dword [esp+16] |
frfl8: |
movzx eax,word [edi*2+0x280000] ; find next cluster from FAT |
movzx eax,word [edi*2+RAMDISK_FAT] ; find next cluster from FAT |
mov edi,eax |
cmp edi,4095 ;eof - cluster |
jz frnoread2 |
326,7 → 326,7 |
frnewd: |
shl edi,1 ;find next cluster from FAT |
add edi,0x280000 |
add edi,RAMDISK_FAT |
movzx eax,word [edi] |
mov [edi],word 0x0 ;clear fat chain cluster |
mov edi,eax |
375,7 → 375,7 |
push eax ebx ecx edx esi edi |
mov edi,0x100000+512*18+512 ;Point at directory |
mov edi,RAMDISK+512*18+512 ;Point at directory |
mov edx,224 +1 |
; find an empty spot for filename in the root dir |
l20ds: |
407,7 → 407,7 |
call get_time_for_file ; from FAT32.INC |
mov [edi+22],ax ; time |
; End |
mov edi,0x280000 ;pointer to first cluster |
mov edi,RAMDISK_FAT ;pointer to first cluster |
mov ecx,2849 |
cld |
frnewds: |
423,7 → 423,7 |
pusha ; move save to floppy cluster |
add ebx,31 |
shl ebx,9 |
add ebx,0x100000 |
add ebx,RAMDISK |
mov eax,[esp+32+16] |
mov ecx,512 |
call memmove |
458,7 → 458,7 |
;by Mihasik |
;IN: eax - pointer to filename OUT: filestring+11 in edi or notZero in flags and fnf in eax,ebx |
mov edi,0x100000+512*18+512 ;Point at directory |
mov edi,RAMDISK+512*18+512 ;Point at directory |
cld |
rd_newsearch: |
mov esi,eax |
467,7 → 467,7 |
je rd_ff |
add cl,21 |
add edi,ecx |
cmp edi,0x100000+512*33 |
cmp edi,RAMDISK+512*33 |
jb rd_newsearch |
mov eax,5 ;if file not found - eax=5 |
xor ebx,ebx |
902,12 → 902,12 |
ret |
ramdisk_root_first: |
mov edi, 0x100000+512*19 |
mov edi, RAMDISK+512*19 |
clc |
ret |
ramdisk_root_next: |
add edi, 0x20 |
cmp edi, 0x100000+512*33 |
cmp edi, RAMDISK+512*33 |
cmc |
ret |
932,7 → 932,7 |
push [rd_prev_sector] |
pop [rd_prev_prev_sector] |
mov [rd_prev_sector], ecx |
mov ecx, [ecx*2+0x280000] |
mov ecx, [ecx*2+RAMDISK_FAT] |
and ecx, 0xFFF |
cmp ecx, 2849 |
jae ramdisk_notroot_first.err2 |
945,7 → 945,7 |
cmp eax, 2849 |
jae .err |
shl eax, 9 |
lea edi, [eax+(31 shl 9)+0x100000] |
lea edi, [eax+(31 shl 9)+RAMDISK] |
clc |
ret |
.err2: |
962,20 → 962,20 |
ramdisk_notroot_extend_dir: |
pusha |
xor eax, eax |
mov edi, 0x280000 |
mov edi, RAMDISK_FAT |
mov ecx, 2849 |
repnz scasw |
jnz .notfound |
mov word [edi-2], 0xFFF |
sub edi, 0x280000 |
sub edi, RAMDISK_FAT |
shr edi, 1 |
dec edi |
mov eax, [esp+28] |
mov ecx, [eax] |
mov [0x280000+ecx*2], di |
mov [RAMDISK_FAT+ecx*2], di |
mov [eax], edi |
shl edi, 9 |
add edi, (31 shl 9)+0x100000 |
add edi, (31 shl 9)+RAMDISK |
mov [esp], edi |
xor eax, eax |
mov ecx, 128 |
1079,7 → 1079,7 |
jae .eof |
lea eax, [edi+31] ; bootsector+2*fat+filenames |
shl eax, 9 ; *512 |
add eax, 0x100000 ; image base |
add eax, RAMDISK ; image base |
; now eax points to data of cluster |
sub ebx, 512 |
jae .skip |
1097,7 → 1097,7 |
pop ecx |
xor ebx, ebx |
.skip: |
movzx edi, word [edi*2+0x280000] ; find next cluster from FAT |
movzx edi, word [edi*2+RAMDISK_FAT] ; find next cluster from FAT |
jmp .new |
.eof: |
mov ebx, edx |
1168,7 → 1168,7 |
.main_loop: |
mov edi, eax |
shl edi, 9 |
add edi, 0x100000 |
add edi, RAMDISK |
push eax |
.l1: |
call fat_get_name |
1184,7 → 1184,7 |
jz .done |
jns @f |
; read next sector from FAT |
mov eax, [(eax-31-1)*2+0x280000] |
mov eax, [(eax-31-1)*2+RAMDISK_FAT] |
and eax, 0xFFF |
cmp eax, 0xFF8 |
jae .done |
1193,7 → 1193,7 |
@@: |
mov edi, eax |
shl edi, 9 |
add edi, 0x100000 |
add edi, RAMDISK |
push eax |
.do_bdfe: |
inc dword [edx+8] ; new file found |
1213,7 → 1213,7 |
jz .done |
jns @f |
; read next sector from FAT |
mov eax, [(eax-31-1)*2+0x280000] |
mov eax, [(eax-31-1)*2+RAMDISK_FAT] |
and eax, 0xFFF |
cmp eax, 0xFF8 |
jae .done |
1993,7 → 1993,7 |
@@: |
mov eax, edi |
shl eax, 9 |
add eax, 0x100000+31*512+0x200 |
add eax, RAMDISK+31*512+0x200 |
sub eax, ebx |
mov ebx, eax |
mov eax, edx |
2004,7 → 2004,7 |
pop ecx |
jz .ret |
.next_cluster: |
movzx edi, word [edi*2+0x280000] |
movzx edi, word [edi*2+RAMDISK_FAT] |
jmp .write_loop |
ramdisk_extend_file.zero_size: |
2024,7 → 2024,7 |
@@: |
sub ecx, 0x200 |
jbe @f |
mov eax, [eax*2+0x280000] |
mov eax, [eax*2+RAMDISK_FAT] |
and eax, 0xFFF |
jz .fat_err |
cmp eax, 0xFF8 |
2037,7 → 2037,7 |
ret |
@@: |
push eax |
mov eax, [eax*2+0x280000] |
mov eax, [eax*2+RAMDISK_FAT] |
and eax, 0xFFF |
cmp eax, 0xFF8 |
pop eax |
2047,7 → 2047,7 |
push eax edi |
mov edi, eax |
shl edi, 9 |
lea edi, [edi+0x100000+31*512+0x200+ecx] |
lea edi, [edi+RAMDISK+31*512+0x200+ecx] |
neg ecx |
xor eax, eax |
rep stosb |
2056,7 → 2056,7 |
pop ecx |
; now do extend |
push edx esi |
mov esi, 0x280000+2*2 ; start scan from cluster 2 |
mov esi, RAMDISK_FAT+2*2 ; start scan from cluster 2 |
mov edx, 2847 ; number of clusters to scan |
.extend_loop: |
cmp [edi+28], ecx |
2075,12 → 2075,12 |
mov word [edi-2], 0xFFF |
mov esi, edi |
mov edx, ecx |
sub edi, 0x280000 |
sub edi, RAMDISK_FAT |
shr edi, 1 |
dec edi ; now edi=new cluster |
test eax, eax |
jz .first_cluster |
mov [0x280000+eax*2], di |
mov [RAMDISK_FAT+eax*2], di |
jmp @f |
.first_cluster: |
pop eax ; eax->direntry |
2089,7 → 2089,7 |
@@: |
push edi |
shl edi, 9 |
add edi, 0x100000+31*512 |
add edi, RAMDISK+31*512 |
xor eax, eax |
mov ecx, 512/4 |
rep stosd |
2186,7 → 2186,7 |
@@: |
sub eax, 0x200 |
jbe @f |
movzx ecx, word [0x280000+ecx*2] |
movzx ecx, word [RAMDISK_FAT+ecx*2] |
jmp @b |
@@: |
; zero data at the end of last sector |
2193,7 → 2193,7 |
push ecx |
mov edi, ecx |
shl edi, 9 |
lea edi, [edi+0x100000+31*512+eax+0x200] |
lea edi, [edi+RAMDISK+31*512+eax+0x200] |
mov ecx, eax |
neg ecx |
xor eax, eax |
2200,7 → 2200,7 |
rep stosb |
pop ecx |
; terminate FAT chain |
lea ecx, [0x280000+ecx+ecx] |
lea ecx, [RAMDISK_FAT+ecx+ecx] |
push dword [ecx] |
mov word [ecx], 0xFFF |
pop ecx |
2213,7 → 2213,7 |
; mark all clusters as free |
cmp ecx, 0xFF8 |
jae .deleted |
lea ecx, [0x280000+ecx+ecx] |
lea ecx, [RAMDISK_FAT+ecx+ecx] |
push dword [ecx] |
and word [ecx], 0 |
pop ecx |
2334,7 → 2334,7 |
mov edx, [eax+4] ; cluster |
lea esi, [edx+31] |
shl esi, 9 |
add esi, 0x100000 |
add esi, RAMDISK |
mov ecx, 512/4 |
rep movsd |
mov ecx, [eax] |
2348,7 → 2348,7 |
pop eax |
@@: |
mov [eax], ecx |
mov dx, [edx*2+0x280000] |
mov dx, [edx*2+RAMDISK_FAT] |
mov [eax+4], dx ; high word is already zero |
popad |
xor eax, eax |
/kernel/trunk/boot/bootcode.inc |
---|
982,8 → 982,8 |
mov eax,[es:di+0x28] |
mov [es:0x9018],eax |
; ---- vbe voodoo |
BytesPerScanLine equ 0x10 |
mov ax, [es:di+BytesPerScanLine] |
BytesPerLine equ 0x10 |
mov ax, [es:di+BytesPerLine] |
mov [es:0x9001],ax |
; BPP |
mov al,byte [es:di+0x19] |
/kernel/trunk/boot/rdload.inc |
---|
82,7 → 82,7 |
read_image: |
mov eax, hdsysimage |
mov ebx, 1474560/512 |
mov ecx, 0x100000 |
mov ecx, RAMDISK |
mov esi, 0 |
mov edi, 12 |
call file_read |
/kernel/trunk/boot/shutdown.inc |
---|
52,7 → 52,7 |
lea esi,[eax+220] ; x end |
sub eax,220 ; x start |
mov ebx,[0xfe04] |
mov ebx,[ScreenHeight] |
shr ebx,1 |
mov [shutdownpos],ebx |
lea ebp,[ebx+105] ; y end |
/kernel/trunk/const.inc |
---|
146,21 → 146,26 |
mouseunder equ (OS_BASE+0x0006900) |
FLOPPY_BUFF equ (OS_BASE+0x0008000) |
ACTIVE_PROC_STACK equ (OS_BASE+0x000A400) |
ACTIVE_PROC_STACK equ (OS_BASE+0x000A400) ;unused |
idts equ (OS_BASE+0x000B100) |
WIN_STACK equ (OS_BASE+0x000C000) |
WIN_POS equ (OS_BASE+0x000C400) |
FDD_BUFF equ (OS_BASE+0x000D000) |
FDD_DATA equ (OS_BASE+0x000D000) |
;unused ? only one reference |
ENABLE_TASKSWITCH equ (OS_BASE+0x000E000) |
PUTPIXEL equ (OS_BASE+0x000E020) |
GETPIXEL equ (OS_BASE+0x000E024) |
;unused ? only one reference |
BANK_SWITCH equ (OS_BASE+0x000E030) |
;unused ? store mousepointer |
MOUSE_PICTURE equ (OS_BASE+0x000F200) |
MOUSE_VISIBLE equ (OS_BASE+0x000F204) |
XY_TEMP equ (OS_BASE+0x000F300) |
WIN_TEMP_XY equ (OS_BASE+0x000F300) |
KEY_COUNT equ (OS_BASE+0x000F400) |
KEY_BUFF equ (OS_BASE+0x000F401) |
168,9 → 173,13 |
BTN_BUFF equ (OS_BASE+0x000F501) |
CPU_FREQ equ (OS_BASE+0x000F600) |
;unused ? no active references |
MOUSE_PORT equ (OS_BASE+0x000F604) |
;unused |
PS2_CHUNK equ (OS_BASE+0x000FB00) |
MOUSE_X equ (OS_BASE+0x000FB0A) |
MOUSE_Y equ (OS_BASE+0x000FB0C) |
181,14 → 190,17 |
X_UNDER equ (OS_BASE+0x000FB4A) |
Y_UNDER equ (OS_BASE+0x000FB4C) |
ScreenBPP equ (OS_BASE+0x000FBF1) |
;unused ? only one reference |
MOUSE_BUFF_COUNT equ (OS_BASE+0x000FCFF) |
LFBAddress equ (OS_BASE+0x000FE80) |
MEM_AMOUNT equ (OS_BASE+0x000FE8C) |
;LFBSize equ (OS_BASE+0x02f9050) |
SCR_X_SIZE equ (OS_BASE+0x000FE00) |
SCR_Y_SIZE equ (OS_BASE+0x000FE04) |
SCR_BYTES_PER_LINE equ (OS_BASE+0x000FE08) |
ScreenWidth equ (OS_BASE+0x000FE00) |
ScreenHeight equ (OS_BASE+0x000FE04) |
BytesPerScanLine equ (OS_BASE+0x000FE08) |
SCR_MODE equ (OS_BASE+0x000FE0C) |
BTN_ADDR equ (OS_BASE+0x000FE88) |
201,12 → 213,14 |
DONT_DRAW_MOUSE equ (OS_BASE+0x000FFF5) |
DONT_SWITCH equ (OS_BASE+0x000FFFF) |
STACK_TOP equ (OS_BASE+0x003EC00) |
TMP_STACK_TOP equ 0x003EC00 |
FONT_II equ (OS_BASE+0x003EC00) |
FONT_I equ (OS_BASE+0x003F600) |
DISK_DATA equ (OS_BASE+0x0040000) |
DRIVE_DATA equ (OS_BASE+0x0040000) |
SLOT_BASE equ (OS_BASE+0x0080000) |
;unused |
TMP_BUFF equ (OS_BASE+0x0090000) |
VGABasePtr equ (OS_BASE+0x00A0000) |
214,7 → 228,10 |
RAMDISK equ (OS_BASE+0x0100000) |
RAMDISK_FAT equ (OS_BASE+0x0280000) |
FLOPPY_FAT equ (OS_BASE+0x0282000) |
; unused? |
SB16_Status equ (OS_BASE+0x02B0000) |
BUTTON_INFO equ (OS_BASE+0x02C0000) |
RESERVED_PORTS equ (OS_BASE+0x02D0000) |
IRQ_SAVE equ (OS_BASE+0x02E0000) |
222,7 → 239,10 |
IMG_BACKGROUND equ (OS_BASE+0x0300000) |
WinMapAddress equ (OS_BASE+0x0460000) |
display_data equ (OS_BASE+0x0460000) |
;unused ? |
HD_CACHE equ (OS_BASE+0x0600000) |
stack_data_start equ (OS_BASE+0x0700000) |
eth_data_start equ (OS_BASE+0x0700000) |
stack_data equ (OS_BASE+0x0704000) |
230,7 → 250,7 |
VMODE_BASE equ (OS_BASE+0x0760000) |
resendQ equ (OS_BASE+0x0770000) |
;skin_data equ (OS_BASE+0x0778000) |
skin_data equ (OS_BASE+0x0778000) |
tss_data equ (OS_BASE+0x780000) |
/kernel/trunk/core/sched.inc |
---|
22,7 → 22,7 |
call updatecputimes |
.nocounter: |
cmp [0xffff], byte 1 |
cmp [DONT_SWITCH], byte 1 |
jne .change_task |
mov al,0x20 ; send End Of Interrupt signal |
29,7 → 29,7 |
mov dx,0x20 |
out dx,al |
mov [0xffff], byte 0 |
mov [DONT_SWITCH], byte 0 |
restore_ring3_context |
iret |
79,7 → 79,7 |
test eax, eax ; the same task -> skip switch |
jnz .return |
@@: |
mov [0xffff],byte 1 |
mov [DONT_SWITCH],byte 1 |
call do_change_task |
.return: |
/kernel/trunk/core/sys32.inc |
---|
361,7 → 361,7 |
shl esi,6 ; 1 |
add esi,irq00read ; 1 |
shl edi,12 ; 1 |
add edi,0x2E0000 |
add edi,IRQ_SAVE |
mov ecx,16 |
mov [check_idle_semaphore],5 |
461,8 → 461,6 |
ret |
sys_resize_app_memory: |
; eax = 1 - resize |
; ebx = new amount of memory |
477,84 → 475,6 |
.no_application_mem_resize: |
ret |
if 0 |
get_app_params: |
push eax |
cmp [0x90000+6],word '00' |
jne no_00_header |
mov eax,[0x90000+12] |
mov [app_start],eax |
mov eax,[0x90000+16] |
mov [app_i_end],eax |
mov eax,[0x90000+20] |
mov [app_mem],eax |
; \begin{diamond}[20.08.2006] |
; sanity check (functions 19,58 load app_i_end bytes and that must |
; fit in allocated memory to prevent kernel faults) |
cmp eax,[app_i_end] |
jb no_01_header |
; \end{diamond}[20.08.2006] |
shr eax,1 |
sub eax,0x10 |
mov [app_esp],eax |
mov eax,[0x90000+24] |
mov [app_i_param],eax |
mov [app_i_icon],dword 0 |
pop eax |
clc |
ret |
no_00_header: |
cmp [0x90000+6],word '01' |
jne no_01_header |
mov eax,[0x90000+12] |
mov [app_start],eax |
mov eax,[0x90000+16] |
mov [app_i_end],eax |
mov eax,[0x90000+20] |
mov [app_mem],eax |
; \begin{diamond}[20.08.2006] |
cmp eax,[app_i_end] |
jb no_01_header |
; \end{diamond}[20.08.2006] |
mov eax,[0x90000+24] |
mov [app_esp],eax |
mov eax,[0x90000+28] |
mov [app_i_param],eax |
mov eax,[0x90000+32] |
mov [app_i_icon],eax |
pop eax |
clc |
ret |
no_01_header: |
pop eax |
stc |
ret |
uglobal |
; new_process_place dd 0x0 |
; app_start dd 0x0 |
; app_i_end dd 0x0 |
; app_mem dd 0x0 |
; app_esp dd 0x0 |
; app_i_param dd 0x0 |
; app_i_icon dd 0x0 |
; app_mem_pos dd 0x0 |
endg |
end if |
sys_threads: |
; eax=1 create thread |
637,8 → 557,8 |
frstor [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 |
; remove defined hotkeys |
677,7 → 597,7 |
mov ecx,esi ; remove buttons |
bnewba2: |
mov edi,[0xfe88] |
mov edi,[BTN_ADDR] |
mov eax,edi |
cld |
movzx ebx,word [edi] |
827,7 → 747,7 |
rmpr0: |
mov esi,[0x2d0000] |
mov esi,[RESERVED_PORTS] |
cmp esi,0 |
je rmpr9 |
836,7 → 756,7 |
mov edi,esi |
shl edi,4 |
add edi,0x2d0000 |
add edi,RESERVED_PORTS |
cmp edx,[edi] |
je rmpr4 |
857,7 → 777,7 |
cld |
rep movsb |
dec dword [0x2d0000] |
dec dword [RESERVED_PORTS] |
jmp rmpr0 |
898,8 → 818,8 |
xor esi, esi |
call redrawscreen |
mov [0xfff4],byte 0 ; no mouse background |
mov [0xfff5],byte 0 ; draw mouse |
mov [MOUSE_BACKGROUND],byte 0 ; no mouse background |
mov [DONT_DRAW_MOUSE],byte 0 ; draw mouse |
mov [application_table_status],0 |
mov esi,process_terminated |
/kernel/trunk/core/taskman.inc |
---|
284,6 → 284,14 |
mov ecx,[APP_HEADER_01.start] |
mov [ebx+0x08], ecx ;app_eip |
mov edx,[APP_HEADER_01.mem_size] |
; \begin{diamond}[20.08.2006] |
; sanity check (functions 19,58 load app_i_end bytes and that must |
; fit in allocated memory to prevent kernel faults) |
cmp edx,[APP_HEADER_01.i_end] |
jb .fail |
; \end{diamond}[20.08.2006] |
mov [ebx+0x10], edx ;app_mem |
mov ecx,[APP_HEADER_01.stack_top] |
mov [ebx+0x0C], ecx ;app_esp |
1029,9 → 1037,9 |
mov [ecx+0],dword 0 |
mov [ecx+4],dword 0 |
mov eax,[SCR_X_SIZE] |
mov eax,[ScreenWidth] |
mov [ecx+8],eax |
mov eax,[SCR_Y_SIZE] |
mov eax,[ScreenHeight] |
mov [ecx+12],eax |
mov edi,[slot] |
/kernel/trunk/detect/commouse.inc |
---|
19,12 → 19,12 |
shl eax,2 |
mov [irq_owner+eax],byte 1 |
inc dword [0x2d0000] |
mov edi,[0x2d0000] |
inc dword [RESERVED_PORTS] |
mov edi,[RESERVED_PORTS] |
shl edi,4 |
mov [0x2d0000+edi+0],dword 1 |
mov [0x2d0000+edi+4],dword 0x3f0 |
mov [0x2d0000+edi+8],dword 0x3ff |
mov [RESERVED_PORTS+edi+0],dword 1 |
mov [RESERVED_PORTS+edi+4],dword 0x3f0 |
mov [RESERVED_PORTS+edi+8],dword 0x3ff |
popa |
mov esi,boot_setmouse_type+22 |
41,12 → 41,12 |
shl eax,2 |
mov [irq_owner+eax],byte 1 |
inc dword [0x2d0000] |
mov edi,[0x2d0000] |
inc dword [RESERVED_PORTS] |
mov edi,[RESERVED_PORTS] |
shl edi,4 |
mov [0x2d0000+edi+0],dword 1 |
mov [0x2d0000+edi+4],dword 0x2f0 |
mov [0x2d0000+edi+8],dword 0x2ff |
mov [RESERVED_PORTS+edi+0],dword 1 |
mov [RESERVED_PORTS+edi+4],dword 0x2f0 |
mov [RESERVED_PORTS+edi+8],dword 0x2ff |
popa |
mov esi,boot_setmouse_type+44 |
77,14 → 77,14 |
add DX,3 |
mov AL,00000010b |
out DX,AL |
; Çàïðåòèòü âñå ïðåðûâàíèÿ |
; Çàïðåòèòü âñå ïðåðûâàíè |
mov DX,[COMPortBaseAddr] |
inc DX |
mov AL,0 |
out DX,AL |
; Ïðîâåðèòü, ÷òî óñòðîéñòâî ïîäêëþ÷åíî è ÿâëÿåòñÿ |
; Ïðîâåðèòü, ÷òî óñòðîéñòâî ïîäêëþ÷åíî è ÿâëÿåòñ |
; ìûøüþ òèïà MSMouse |
; Îòêëþ÷èòü ïèòàíèå ìûøè è ïðåðûâàíèÿ |
; Îòêëþ÷èòü ïèòàíèå ìûøè è ïðåðûâàíè |
mov DX,[COMPortBaseAddr] |
add DX,4 ;ðåãèñòð óïðàâëåíèÿ ìîäåìîì |
mov AL,0 ;ñáðîñèòü DTR, RTS è OUT2 |
/kernel/trunk/detect/dev_fd.inc |
---|
4,7 → 4,7 |
; àâòîð Mario79 |
;*************************************************** |
xor eax,eax |
mov edi,0x40000 |
mov edi,DRIVE_DATA |
mov ecx,16384 |
cld |
rep stosd |
17,4 → 17,4 |
cmp cx,0 |
jne wait_cmos |
in al,0x71 |
mov [0x40000],al |
mov [DRIVE_DATA],al |
/kernel/trunk/drivers/ensoniq.asm |
---|
0,0 → 1,1381 |
;alpha version |
format MS COFF |
include 'proc32.inc' |
DEBUG equ 1 |
REMAP_IRQ equ 0 |
;irq 0,1,2,8,12,13 íåäîñòóïíû |
; FEDCBA9876543210 |
VALID_IRQ equ 1100111011111000b |
ATTCH_IRQ equ 0000111010101000b |
IRQ_LINE equ 0 |
CPU_FREQ equ 2600d |
BIT0 EQU 0x00000001 |
BIT1 EQU 0x00000002 |
BIT2 EQU 0x00000004 |
BIT3 EQU 0x00000008 |
BIT4 EQU 0x00000010 |
BIT5 EQU 0x00000020 |
BIT6 EQU 0x00000040 |
BIT7 EQU 0x00000080 |
BIT8 EQU 0x00000100 |
BIT9 EQU 0x00000200 |
BIT10 EQU 0x00000400 |
BIT11 EQU 0x00000800 |
BIT12 EQU 0x00001000 |
BIT13 EQU 0x00002000 |
BIT14 EQU 0x00004000 |
BIT15 EQU 0x00008000 |
BIT16 EQU 0x00010000 |
BIT17 EQU 0x00020000 |
BIT18 EQU 0x00040000 |
BIT19 EQU 0x00080000 |
BIT20 EQU 0x00100000 |
BIT21 EQU 0x00200000 |
BIT22 EQU 0x00400000 |
BIT23 EQU 0x00800000 |
BIT24 EQU 0x00100000 |
BIT25 EQU 0x02000000 |
BIT26 EQU 0x04000000 |
BIT27 EQU 0x08000000 |
BIT28 EQU 0x10000000 |
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 |
PCM_OUT_LVI_REG equ 0x15 ; PCM last valid index |
PCM_OUT_SR_REG equ 0x16 ; PCM out Status register |
PCM_OUT_PIV_REG equ 0x1a |
PCM_OUT_CIV_REG equ 0x14 ; PCM out current index |
PCM_IN_CR_REG equ 0x0b ; PCM in Control Register |
MC_IN_CR_REG equ 0x2b ; MIC in Control Register |
RR equ BIT1 ; reset registers. Nukes all regs |
CODEC_MASTER_VOL_REG equ 0x02 |
CODEC_AUX_VOL equ 0x04 ; |
CODEC_PCM_OUT_REG equ 18h ; PCM output volume |
CODEC_EXT_AUDIO_REG equ 28h ; extended audio |
CODEC_EXT_AUDIO_CTRL_REG equ 2ah ; extended audio control |
CODEC_PCM_FRONT_DACRATE_REG equ 2ch ; PCM out sample rate |
CODEC_PCM_SURND_DACRATE_REG equ 2eh ; surround sound sample rate |
CODEC_PCM_LFE_DACRATE_REG equ 30h ; LFE sample rate |
GLOB_CTRL equ 0x2C ; Global Control |
CTRL_STAT equ 0x30 ; Global Status |
CTRL_CAS equ 0x34 ; Codec Access Semiphore |
CAS_FLAG equ 0x01 ; Codec Access Semiphore Bit |
CTRL_ST_CREADY equ BIT8+BIT9+BIT28 ; Primary Codec Ready |
CTRL_ST_RCS equ 0x00008000 ; Read Completion Status |
CTRL_CNT_CRIE equ BIT4+BIT5+BIT6 ; Codecs Resume Interrupt Enable |
CTRL_CNT_AC_OFF equ 0x00000008 ; ACLINK Off |
CTRL_CNT_WARM equ 0x00000004 ; AC97 Warm Reset |
CTRL_CNT_COLD equ 0x00000002 ; AC97 Cold Reset |
CTRL_CNT_GIE equ 0x00000001 ; GPI Interrupt Enable |
CODEC_REG_POWERDOWN equ 0x26 |
CODEC_REG_ST equ 0x26 |
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 |
struc AC_CNTRL ;AC controller base class |
{ .bus dd ? |
.devfn dd ? |
.vendor dd ? |
.dev_id dd ? |
.pci_cmd dd ? |
.pci_stat dd ? |
.codec_io_base dd ? |
.codec_mem_base dd ? |
.ctrl_io_base dd ? |
.ctrl_mem_base dd ? |
.cfg_reg dd ? |
.int_line dd ? |
.vendor_ids dd ? ;vendor id string |
.ctrl_ids dd ? ;hub id string |
.buffer dd ? |
.notify_pos dd ? |
.notify_task dd ? |
.lvi_reg dd ? |
.ctrl_setup dd ? |
.user_callback dd ? |
.codec_read16 dd ? |
.codec_write16 dd ? |
.ctrl_read8 dd ? |
.ctrl_read16 dd ? |
.ctrl_read32 dd ? |
.ctrl_write8 dd ? |
.ctrl_write16 dd ? |
.ctrl_write32 dd ? |
} |
struc CODEC ;Audio Chip base class |
{ |
.chip_id dd ? |
.flags dd ? |
.status dd ? |
.ac_vendor_ids dd ? ;ac vendor id string |
.chip_ids dd ? ;chip model string |
.shadow_flag dd ? |
dd ? |
.regs dw ? ; codec registers |
.reg_master_vol dw ? ;0x02 |
.reg_aux_out_vol dw ? ;0x04 |
.reg_mone_vol dw ? ;0x06 |
.reg_master_tone dw ? ;0x08 |
.reg_beep_vol dw ? ;0x0A |
.reg_phone_vol dw ? ;0x0C |
.reg_mic_vol dw ? ;0x0E |
.reg_line_in_vol dw ? ;0x10 |
.reg_cd_vol dw ? ;0x12 |
.reg_video_vol dw ? ;0x14 |
.reg_aux_in_vol dw ? ;0x16 |
.reg_pcm_out_vol dw ? ;0x18 |
.reg_rec_select dw ? ;0x1A |
.reg_rec_gain dw ? ;0x1C |
.reg_rec_gain_mic dw ? ;0x1E |
.reg_gen dw ? ;0x20 |
.reg_3d_ctrl dw ? ;0X22 |
.reg_page dw ? ;0X24 |
.reg_powerdown dw ? ;0x26 |
.reg_ext_audio dw ? ;0x28 |
.reg_ext_st dw ? ;0x2a |
.reg_pcm_front_rate dw ? ;0x2c |
.reg_pcm_surr_rate dw ? ;0x2e |
.reg_lfe_rate dw ? ;0x30 |
.reg_pcm_in_rate dw ? ;0x32 |
dw ? ;0x34 |
.reg_cent_lfe_vol dw ? ;0x36 |
.reg_surr_vol dw ? ;0x38 |
.reg_spdif_ctrl dw ? ;0x3A |
dw ? ;0x3C |
dw ? ;0x3E |
dw ? ;0x40 |
dw ? ;0x42 |
dw ? ;0x44 |
dw ? ;0x46 |
dw ? ;0x48 |
dw ? ;0x4A |
dw ? ;0x4C |
dw ? ;0x4E |
dw ? ;0x50 |
dw ? ;0x52 |
dw ? ;0x54 |
dw ? ;0x56 |
dw ? ;0x58 |
dw ? ;0x5A |
dw ? ;0x5C |
dw ? ;0x5E |
.reg_page_0 dw ? ;0x60 |
.reg_page_1 dw ? ;0x62 |
.reg_page_2 dw ? ;0x64 |
.reg_page_3 dw ? ;0x66 |
.reg_page_4 dw ? ;0x68 |
.reg_page_5 dw ? ;0x6A |
.reg_page_6 dw ? ;0x6C |
.reg_page_7 dw ? ;0x6E |
dw ? ;0x70 |
dw ? ;0x72 |
dw ? ;0x74 |
dw ? ;0x76 |
dw ? ;0x78 |
dw ? ;0x7A |
.reg_vendor_id_1 dw ? ;0x7C |
.reg_vendor_id_2 dw ? ;0x7E |
.reset dd ? ;virual |
.set_master_vol dd ? |
} |
struc CTRL_INFO |
{ .pci_cmd dd ? |
.irq dd ? |
.glob_cntrl dd ? |
.glob_sta dd ? |
.codec_io_base dd ? |
.ctrl_io_base dd ? |
.codec_mem_base dd ? |
.ctrl_mem_base dd ? |
.codec_id dd ? |
} |
struc IOCTL |
{ .handle dd ? |
.io_code dd ? |
.input dd ? |
.inp_size dd ? |
.output dd ? |
.out_size dd ? |
} |
virtual at 0 |
IOCTL IOCTL |
end virtual |
EVENT_NOTIFY equ 0x00000200 |
OS_BASE equ 0; 0x80400000 |
new_app_base equ 0x60400000; 0x01000000 |
PROC_BASE equ OS_BASE+0x0080000 |
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 |
section '.flat' code readable align 16 |
START: |
if DEBUG |
mov esi, msgInit |
call SysMsgBoardStr |
end if |
call detect_controller |
test eax, eax |
jz .fail |
if DEBUG |
mov esi,[ctrl.vendor_ids] |
call SysMsgBoardStr |
mov esi, [ctrl.ctrl_ids] |
call SysMsgBoardStr |
end if |
call init_controller |
test eax, eax |
jz .fail |
if DEBUG |
mov esi, msgInitCodec |
call SysMsgBoardStr |
end if |
call init_codec |
test eax, eax |
jz .fail |
if DEBUG |
mov esi, [codec.ac_vendor_ids] |
call SysMsgBoardStr |
mov esi, [codec.chip_ids] |
call SysMsgBoardStr |
end if |
call reset_controller |
call setup_codec |
mov esi, msgPrimBuff |
call SysMsgBoardStr |
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 |
bt eax, ebx |
jnc .fail |
mov eax, ATTCH_IRQ |
mov esi, msgAttchIRQ |
bt eax, ebx |
jnc .fail |
stdcall AttachIntHandler, ebx, ac97_irq |
stdcall RegService, sz_sound_srv, service_proc |
ret |
.fail: |
if DEBUG |
mov esi, msgFail |
call SysMsgBoardStr |
end if |
xor eax, eax |
STOP: |
ret |
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, DEV_PLAY |
jne @F |
if DEBUG |
mov esi, msgPlay |
call SysMsgBoardStr |
end if |
call play |
ret |
@@: |
cmp eax, DEV_STOP |
jne @F |
if DEBUG |
mov esi, msgStop |
call SysMsgBoardStr |
end if |
call stop |
ret |
@@: |
cmp eax, DEV_CALLBACK |
jne @F |
mov ebx, [edi+input] |
stdcall set_callback, [ebx] |
ret |
@@: |
cmp eax, DEV_SET_MASTERVOL |
jne @F |
mov ebx, [edi+input] |
stdcall set_master_vol, [ebx] |
ret |
@@: |
cmp eax, DEV_GET_MASTERVOL |
jne @F |
mov ebx, [edi+output] |
test ebx, ebx |
jz .fail |
stdcall get_master_vol, ebx |
ret |
@@: |
cmp eax, DEV_GET_INFO |
jne @F |
mov ebx, [edi+output] |
stdcall get_dev_info, ebx |
ret |
@@: |
.fail: |
xor eax, eax |
ret |
endp |
restore handle |
restore io_code |
restore input |
restore inp_size |
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 |
; if DEBUG |
; mov esi, msgIRQ |
; 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] |
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 |
@@: |
ret |
.skip: |
mov edx, PCM_OUT_CR_REG |
mov ax, 0x1D |
call [ctrl.ctrl_write8] |
ret |
endp |
align 4 |
proc create_primary_buff |
stdcall KernelAlloc, 0x10000 |
mov [ctrl.buffer], eax |
mov edi, eax |
mov ecx, 0x10000/4 |
xor eax, eax |
cld |
rep stosd |
stdcall GetPgAddr, [ctrl.buffer] |
mov ebx, 0xC0002000 |
mov ecx, 4 |
mov edi, pcmout_bdl |
@@: |
mov [edi], eax |
mov [edi+4], ebx |
mov [edi+32], eax |
mov [edi+4+32], ebx |
mov [edi+64], eax |
mov [edi+4+64], ebx |
mov [edi+96], eax |
mov [edi+4+96], ebx |
mov [edi+128], eax |
mov [edi+4+128], ebx |
mov [edi+160], eax |
mov [edi+4+160], ebx |
mov [edi+192], eax |
mov [edi+4+192], ebx |
mov [edi+224], eax |
mov [edi+4+224], ebx |
add eax, 0x4000 |
add edi, 8 |
loop @B |
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 |
add eax, 0x4000 |
add edi, 4 |
loop @B |
mov ecx, pcmout_bdl |
stdcall GetPgAddr, ecx |
and ecx, 0xFFF |
add eax, ecx |
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 |
endp |
align 4 |
proc detect_controller |
locals |
last_bus dd ? |
bus dd ? |
devfn dd ? |
endl |
xor eax, eax |
mov [bus], eax |
inc eax |
call PciApi |
cmp eax, -1 |
je .no_pci |
mov [last_bus], eax |
.next_bus: |
and [devfn], 0 |
.next_dev: |
stdcall PciRead32, [bus], [devfn], dword 0 |
test eax, eax |
jz .next |
cmp eax, -1 |
je .next |
mov edi, devices |
@@: |
mov ebx, [edi] |
test ebx, ebx |
jz .next |
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 |
ret |
@@: |
cmp ebx, VID_NVIDIA |
jne @F |
mov [ctrl.vendor_ids], msg_NVidia |
@@: |
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 |
.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 |
endp |
align 4 |
proc init_controller |
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 |
stdcall PciRead32, [ctrl.bus], [ctrl.devfn], dword 0x10 |
and eax,0xFFFE |
mov [ctrl.codec_io_base], eax |
stdcall PciRead32, [ctrl.bus], [ctrl.devfn], dword 0x14 |
and eax, 0xFFC0 |
mov [ctrl.ctrl_io_base], eax |
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 |
stdcall PciRead32, [ctrl.bus], [ctrl.devfn], dword 0x3C |
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 [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.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 |
endp |
align 4 |
proc reset_controller |
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, MC_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, MC_IN_CR_REG |
call [ctrl.ctrl_write8] |
ret |
endp |
align 4 |
proc init_codec |
locals |
counter dd ? |
endl |
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 eax, 5000 ; wait 5 ms |
call StallExec |
sub [counter] , 1 |
jnz .wait |
.err: |
xor eax, eax ; timeout error |
ret |
.ready: |
call detect_codec |
xor eax, eax |
inc eax |
ret |
endp |
align 4 |
proc reset_codec |
mov edx, GLOB_CTRL |
call [ctrl.ctrl_read32] |
test eax, 0x02 |
jz .cold |
call warm_reset |
jnc .ok |
.cold: |
call cold_reset |
jnc .ok |
if DEBUG |
mov esi, msgCFail |
call SysMsgBoardStr |
end if |
xor eax, eax ; timeout error |
ret |
.ok: |
if DEBUG |
mov esi, msgResetOk |
call SysMsgBoardStr |
end if |
xor eax, eax |
inc eax |
ret |
endp |
align 4 |
proc warm_reset |
locals |
counter dd ? |
endl |
mov eax, 0x06 |
mov edx, GLOB_CTRL |
call [ctrl.ctrl_write32] |
if DEBUG |
mov esi, msgWarm |
call SysMsgBoardStr |
end if |
mov [counter], 10 ; total 10*100 ms = 1s |
.wait: |
mov eax, 100000 ; wait 100 ms |
call StallExec |
mov edx, GLOB_CTRL |
call [ctrl.ctrl_read32] |
test eax, 4 |
jz .ok |
sub [counter], 1 |
jnz .wait |
if DEBUG |
mov esi, msgWRFail |
call SysMsgBoardStr |
end if |
stc |
ret |
.ok: |
mov edx, CTRL_STAT |
call [ctrl.ctrl_read32] |
and eax, CTRL_ST_CREADY |
jz .fail |
clc |
ret |
.fail: |
stc |
ret |
endp |
align 4 |
proc cold_reset |
locals |
counter dd ? |
endl |
xor eax, eax |
mov edx, GLOB_CTRL |
call [ctrl.ctrl_write32] |
if DEBUG |
mov esi, msgCold |
call SysMsgBoardStr |
end if |
mov eax, 1000000 ; wait 1 s |
call StallExec |
mov eax, 2 |
mov edx, GLOB_CTRL |
call [ctrl.ctrl_write32] |
mov [counter], 10 ; total 10*100 ms = 1s |
.wait: |
mov eax, 100000 ; wait 100 ms |
call StallExec |
mov edx, GLOB_CTRL |
call [ctrl.ctrl_read32] |
test eax, 4 |
jz .ok |
sub [counter], 1 |
jnz .wait |
if DEBUG |
mov esi, msgCRFail |
call SysMsgBoardStr |
end if |
stc |
ret |
.ok: |
mov edx, CTRL_STAT |
call [ctrl.ctrl_read32] |
and eax, CTRL_ST_CREADY |
jz .fail |
clc |
ret |
.fail: |
stc |
ret |
endp |
align 4 |
proc play |
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 |
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] |
ret |
endp |
align 4 |
proc get_dev_info stdcall, p_info:dword |
virtual at esi |
CTRL_INFO CTRL_INFO |
end virtual |
mov esi, [p_info] |
mov eax, [ctrl.int_line] |
mov ebx, [ctrl.codec_io_base] |
mov ecx, [ctrl.ctrl_io_base] |
mov edx, [ctrl.codec_mem_base] |
mov edi, [ctrl.ctrl_mem_base] |
mov [CTRL_INFO.irq], eax |
mov [CTRL_INFO.codec_io_base], ebx |
mov [CTRL_INFO.ctrl_io_base], ecx |
mov [CTRL_INFO.codec_mem_base], edx |
mov [CTRL_INFO.ctrl_mem_base], edi |
mov eax, [codec.chip_id] |
mov [CTRL_INFO.codec_id], eax |
mov edx, GLOB_CTRL |
call [ctrl.ctrl_read32] |
mov [CTRL_INFO.glob_cntrl], eax |
mov edx, CTRL_STAT |
call [ctrl.ctrl_read32] |
mov [CTRL_INFO.glob_sta], eax |
mov ebx, [ctrl.pci_cmd] |
mov [CTRL_INFO.pci_cmd], ebx |
ret |
endp |
align 4 |
proc set_callback stdcall, handler:dword |
mov eax, [handler] |
mov [ctrl.user_callback], eax |
ret |
endp |
align 4 |
proc codec_read stdcall, ac_reg:dword ; reg = edx, reval = eax |
mov edx, [ac_reg] |
mov ebx, edx |
shr ebx, 1 |
bt [codec.shadow_flag], ebx |
jc .use_shadow |
call [ctrl.codec_read16] ;change edx !!! |
mov ecx, eax |
mov edx, CTRL_STAT |
call [ctrl.ctrl_read32] |
test eax, CTRL_ST_RCS |
jz .read_ok |
mov edx, CTRL_STAT |
call [ctrl.ctrl_write32] |
xor eax,eax |
not eax ;timeout |
ret |
.read_ok: |
mov edx, [ac_reg] |
mov [codec.regs+edx], cx |
bts [codec.shadow_flag], ebx |
mov eax, ecx |
ret |
.use_shadow: |
movzx eax, word [codec.regs+edx] |
ret |
endp |
align 4 |
proc codec_write stdcall, ac_reg:dword |
push eax |
call check_semafore |
and eax, eax |
jz .err |
pop eax |
mov esi, [ac_reg] |
mov edx, esi |
call [ctrl.codec_write16] |
mov [codec.regs+esi], ax |
shr esi, 1 |
bts [codec.shadow_flag], esi |
ret |
.err: |
pop eax |
ret |
endp |
align 4 |
proc codec_check_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 |
.not_ready: |
xor eax, eax |
ret |
endp |
align 4 |
proc check_semafore |
local counter:DWORD |
mov [counter], 100 |
.l1: |
mov edx, CTRL_CAS |
call [ctrl.ctrl_read8] |
and eax, CAS_FLAG |
jz .ok |
mov eax, 1 |
call StallExec |
sub [counter], 1 |
jnz .l1 |
xor eax, eax |
ret |
align 4 |
.ok: |
xor eax,eax |
inc eax |
ret |
endp |
align 4 |
proc StallExec |
push ecx |
push edx |
push ebx |
push eax |
mov ecx, CPU_FREQ |
mul ecx |
mov ebx, eax ;low |
mov ecx, edx ;high |
rdtsc |
add ebx, eax |
adc ecx,edx |
@@: |
rdtsc |
sub eax, ebx |
sbb edx, ecx |
jb @B |
pop eax |
pop ebx |
pop edx |
pop ecx |
ret |
endp |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
; CONTROLLER IO functions |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
align 4 |
proc codec_io_r16 |
add edx, [ctrl.codec_io_base] |
in ax, dx |
ret |
endp |
align 4 |
proc codec_io_w16 |
add edx, [ctrl.codec_io_base] |
out dx, ax |
ret |
endp |
align 4 |
proc ctrl_io_r8 |
add edx, [ctrl.ctrl_io_base] |
in al, dx |
ret |
endp |
align 4 |
proc ctrl_io_r16 |
add edx, [ctrl.ctrl_io_base] |
in ax, dx |
ret |
endp |
align 4 |
proc ctrl_io_r32 |
add edx, [ctrl.ctrl_io_base] |
in eax, dx |
ret |
endp |
align 4 |
proc ctrl_io_w8 |
add edx, [ctrl.ctrl_io_base] |
out dx, al |
ret |
endp |
align 4 |
proc ctrl_io_w16 |
add edx, [ctrl.ctrl_io_base] |
out dx, ax |
ret |
endp |
align 4 |
proc ctrl_io_w32 |
add edx, [ctrl.ctrl_io_base] |
out dx, eax |
ret |
endp |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
; MEMORY MAPPED IO (os depended) |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
align 4 |
proc codec_mem_r16 |
add edx, [ctrl.codec_mem_base] |
mov ax, word [edx] |
ret |
endp |
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 |
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 |
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 |
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',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 |
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 |
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 |
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 |
section '.data' data readable writable align 16 |
pcmout_bdl rq 32 |
buff_list rd 32 |
codec CODEC |
ctrl AC_CNTRL |
lpc_bus rd 1 |
civ_val rd 1 |
/kernel/trunk/fs/fat12.inc |
---|
219,7 → 219,7 |
frfl8_1: |
mov edi,[n_sector] |
shl edi,1 ;find next cluster from FAT |
add edi,0x282000 |
add edi,FLOPPY_FAT |
mov eax,[edi] |
and eax,4095 |
mov edi,eax |
333,7 → 333,7 |
pushad |
mov esi,FLOPPY_BUFF |
mov edi,0x282000 |
mov edi,FLOPPY_FAT |
fcnew_1: |
mov eax,dword [esi] |
361,7 → 361,7 |
add edi,4 |
add esi,12 |
cmp edi,0x282000+2856*2 ;2849 clusters |
cmp edi,FLOPPY_FAT+2856*2 ;2849 clusters |
jnz fcnew_1 |
popad |
471,7 → 471,7 |
restorefatchain_flp: ; restore fat chain |
pushad |
mov esi,0x282000 |
mov esi,FLOPPY_FAT |
mov edi,FLOPPY_BUFF |
fcnew2_1: |
574,7 → 574,7 |
movzx edi, word [edi+0xf] ;edi = cluster |
frnewd_1: |
shl edi,1 ;find next cluster from FAT |
add edi,0x282000 |
add edi,FLOPPY_FAT |
mov eax,[edi] |
mov [edi],word 0x0 ;clear fat chain cluster |
and eax,4095 |
783,7 → 783,7 |
add ebx,1 |
mov edi,ebx ; find free cluster in FAT |
shl edi,1 |
add edi,0x282000 |
add edi,FLOPPY_FAT |
mov eax,[edi] |
and eax,4095 |
jnz frnewds_2 |
937,7 → 937,7 |
mov eax,[clust_tmp_flp] |
shl eax,1 ;find next cluster from FAT |
add eax,0x282000 |
add eax,FLOPPY_FAT |
mov eax,[eax] |
and eax,4095 |
cmp eax,0x0ff8 |
999,7 → 999,7 |
mov eax,[clust_tmp_flp] |
shl eax,1 ;find next cluster from FAT |
add eax,0x282000 |
add eax,FLOPPY_FAT |
mov eax,[eax] |
and eax,4095 |
cmp eax,0x0ff8 |
1013,8 → 1013,8 |
mov eax,[clust_tmp_flp] |
shl eax,1 ;find next cluster from FAT |
add eax,0x282000 |
sub edi,0x282000 |
add eax,FLOPPY_FAT |
sub edi,FLOPPY_FAT |
mov [eax],di |
pusha |
1061,7 → 1061,7 |
add ebx,1 |
mov edi,ebx ; find free cluster in FAT |
shl edi,1 |
add edi,0x282000 |
add edi,FLOPPY_FAT |
mov eax,[edi] |
and eax,4095 |
cmp eax,0x0 |
1179,7 → 1179,7 |
pop [fd_prev_prev_sector] |
add ecx, 31 |
mov [fd_prev_sector], ecx |
mov ecx, [(ecx-31)*2+0x282000] |
mov ecx, [(ecx-31)*2+FLOPPY_FAT] |
and ecx, 0xFFF |
cmp ecx, 2849 |
jae flp_notroot_first.err2 |
1229,17 → 1229,17 |
; find free cluster in FAT |
pusha |
xor eax, eax |
mov edi, 0x282000 |
mov edi, FLOPPY_FAT |
mov ecx, 2849 |
repnz scasw |
jnz .notfound |
mov word [edi-2], 0xFFF ; mark as last cluster |
sub edi, 0x282000 |
sub edi, FLOPPY_FAT |
shr edi, 1 |
dec edi |
mov eax, [esp+28] |
mov ecx, [eax] |
mov [0x282000+ecx*2], di |
mov [FLOPPY_FAT+ecx*2], di |
mov [eax], edi |
xor eax, eax |
mov edi, FDD_BUFF |
1372,7 → 1372,7 |
pop ecx |
xor ebx, ebx |
.skip: |
movzx edi, word [edi*2+0x282000] |
movzx edi, word [edi*2+FLOPPY_FAT] |
jmp .new |
.done: |
mov ebx, edx |
1468,7 → 1468,7 |
jz .done |
jns @f |
; read next sector from FAT |
mov eax, [(eax-31-1)*2+0x282000] |
mov eax, [(eax-31-1)*2+FLOPPY_FAT] |
and eax, 0xFFF |
cmp eax, 0xFF8 |
jae .done |
1500,7 → 1500,7 |
jz .done |
jns @f |
; read next sector from FAT |
mov eax, [(eax-31-1)*2+0x282000] |
mov eax, [(eax-31-1)*2+FLOPPY_FAT] |
and eax, 0xFFF |
cmp eax, 0xFF8 |
jae .done |
2195,7 → 2195,7 |
jz .done |
.skip: |
.next_cluster: |
movzx edi, word [edi*2+0x282000] |
movzx edi, word [edi*2+FLOPPY_FAT] |
sub esi, 0x200 |
jae @f |
xor esi, esi |
2225,7 → 2225,7 |
@@: |
sub ecx, 0x200 |
jbe @f |
mov eax, [eax*2+0x282000] |
mov eax, [eax*2+FLOPPY_FAT] |
and eax, 0xFFF |
jz .fat_err |
cmp eax, 0xFF8 |
2238,7 → 2238,7 |
ret |
@@: |
push eax |
mov eax, [eax*2+0x282000] |
mov eax, [eax*2+FLOPPY_FAT] |
and eax, 0xFFF |
cmp eax, 0xFF8 |
pop eax |
2249,7 → 2249,7 |
pop ecx |
; now do extend |
push edx esi |
mov esi, 0x282000+2*2 ; start scan from cluster 2 |
mov esi, FLOPPY_FAT+2*2 ; start scan from cluster 2 |
mov edx, 2847 ; number of clusters to scan |
.extend_loop: |
cmp [edi+28], ecx |
2269,12 → 2269,12 |
mov word [edi-2], 0xFFF |
mov esi, edi |
mov edx, ecx |
sub edi, 0x282000 |
sub edi, FLOPPY_FAT |
shr edi, 1 |
dec edi ; now edi=new cluster |
test eax, eax |
jz .first_cluster |
mov [0x282000+eax*2], di |
mov [FLOPPY_FAT+eax*2], di |
jmp @f |
.first_cluster: |
pop eax ; eax->direntry |
2429,7 → 2429,7 |
.next_cluster: |
sub dword [esp+12], 0x200 |
jbe .expand_done |
movzx edi, word [0x282000+edi*2] |
movzx edi, word [FLOPPY_FAT+edi*2] |
jmp .zero_loop |
.expand_done: |
pop eax ecx ecx edi edi |
2444,13 → 2444,13 |
@@: |
sub eax, 0x200 |
jbe @f |
movzx ecx, word [0x282000+ecx*2] |
movzx ecx, word [FLOPPY_FAT+ecx*2] |
jmp @b |
@@: |
; we will zero data at the end of last sector - remember it |
push ecx |
; terminate FAT chain |
lea ecx, [0x282000+ecx+ecx] |
lea ecx, [FLOPPY_FAT+ecx+ecx] |
push dword [ecx] |
mov word [ecx], 0xFFF |
pop ecx |
2464,7 → 2464,7 |
; mark all clusters as free |
cmp ecx, 0xFF8 |
jae .deleted |
lea ecx, [0x282000+ecx+ecx] |
lea ecx, [FLOPPY_FAT+ecx+ecx] |
push dword [ecx] |
and word [ecx], 0 |
pop ecx |
2642,7 → 2642,7 |
@@: |
mov [eax], ecx |
mov edx, [eax+4] |
mov dx, [edx*2+0x282000] |
mov dx, [edx*2+FLOPPY_FAT] |
mov [eax+4], dx ; high word is already zero |
popad |
xor eax, eax |
/kernel/trunk/fs/fs.inc |
---|
579,7 → 579,7 |
mov esi,eax |
shl esi,9 |
add esi,0x100000 |
add esi,RAMDISK |
mov ecx,512/4 |
; cld |
rep movsd |
/kernel/trunk/fs/fs_lfn.inc |
---|
552,30 → 552,30 |
ret |
fs_HasFloppy: |
cmp byte [0x40000], 0 |
cmp byte [DRIVE_DATA], 0 |
setnz al |
ret |
fs_HasHd0: |
mov al, [0x40001] |
mov al, [DRIVE_DATA+1] |
and al, 11000000b |
cmp al, 01000000b |
setz al |
ret |
fs_HasHd1: |
mov al, [0x40001] |
mov al, [DRIVE_DATA+1] |
and al, 00110000b |
cmp al, 00010000b |
setz al |
ret |
fs_HasHd2: |
mov al, [0x40001] |
mov al, [DRIVE_DATA+1] |
and al, 00001100b |
cmp al, 00000100b |
setz al |
ret |
fs_HasHd3: |
mov al, [0x40001] |
mov al, [DRIVE_DATA+1] |
and al, 00000011b |
cmp al, 00000001b |
setz al |
583,25 → 583,25 |
;******************************************************* |
fs_HasCd0: |
mov al, [0x40001] |
mov al, [DRIVE_DATA+1] |
and al, 11000000b |
cmp al, 10000000b |
setz al |
ret |
fs_HasCd1: |
mov al, [0x40001] |
mov al, [DRIVE_DATA+1] |
and al, 00110000b |
cmp al, 00100000b |
setz al |
ret |
fs_HasCd2: |
mov al, [0x40001] |
mov al, [DRIVE_DATA+1] |
and al, 00001100b |
cmp al, 00001000b |
setz al |
ret |
fs_HasCd3: |
mov al, [0x40001] |
mov al, [DRIVE_DATA+1] |
and al, 00000011b |
cmp al, 00000010b |
setz al |
624,8 → 624,8 |
ret |
fs_NextFloppy: |
; we have /fd/1 iff (([0x40000] and 0xF0) != 0) and /fd/2 iff (([0x40000] and 0x0F) != 0) |
test byte [0x40000], 0xF0 |
; we have /fd/1 iff (([DRIVE_DATA] and 0xF0) != 0) and /fd/2 iff (([DRIVE_DATA] and 0x0F) != 0) |
test byte [DRIVE_DATA], 0xF0 |
jz .no1 |
test eax, eax |
jnz .no1 |
632,7 → 632,7 |
inc eax |
ret ; CF cleared |
.no1: |
test byte [0x40000], 0x0F |
test byte [DRIVE_DATA], 0x0F |
jz .no2 |
cmp al, 2 |
jae .no2 |
657,7 → 657,7 |
push 3 |
fs_NextHd: |
pop ecx |
movzx ecx, byte [0x40002+ecx] |
movzx ecx, byte [DRIVE_DATA+2+ecx] |
cmp eax, ecx |
jae fs_NextFloppy.no2 |
inc eax |
/kernel/trunk/gui/button.inc |
---|
237,7 → 237,7 |
and ecx,0xffff |
mov edi,[0xfe88] |
mov edi,[BTN_ADDR] |
movzx eax,word [edi] |
cmp eax,max_buttons |
jge noaddbutt |
286,7 → 286,7 |
rnewba2: |
mov edi,[0xfe88] |
mov edi,[BTN_ADDR] |
mov eax,edi |
movzx ebx,word [edi] |
inc bx |
456,7 → 456,7 |
checkbuttons: |
cmp [0xfb40],byte 0 ; mouse buttons pressed |
cmp [BTN_DOWN],byte 0 ; mouse buttons pressed |
jnz @f |
ret |
@@: |
464,7 → 464,7 |
pushad |
xor esi, esi |
mov edi, [0xfe88] |
mov edi, [BTN_ADDR] |
movzx edx, word [edi] |
test edx, edx |
jne @f |
534,7 → 534,7 |
mov ecx, [ebx+WDATA.box.left] ; window x start |
movzx edx,word [eax+4] ; button x start |
add edx,ecx |
mov cx,[0xfb0a] |
mov cx,[MOUSE_X] |
cmp edx,ecx |
jg buttonnewcheck |
550,7 → 550,7 |
mov ecx, [ebx+WDATA.box.top] ; window y start |
movzx edx,word [eax+8] ; button y start |
add edx,ecx |
mov cx,[0xfb0c] |
mov cx,[MOUSE_Y] |
cmp edx,ecx |
jg buttonnewcheck |
569,7 → 569,7 |
mov bx,[eax+2] ; button id : bits 00-16 |
push ebx |
mov [0xfb44],byte 1 ; no mouse down checks |
mov [MOUSE_DOWN],byte 1 ; no mouse down checks |
call find_pressed_button_frames |
call negativebutton |
584,13 → 584,13 |
call stack_handler |
popad |
cmp [0xfb40],byte 0 ; mouse buttons pressed ? |
cmp [BTN_DOWN],byte 0 ; mouse buttons pressed ? |
jnz cbwaitmouseup |
popad |
call negativebutton |
mov [0xfff4],byte 0 ; no mouse background |
mov [0xfff5],byte 0 ; draw mouse |
mov [MOUSE_BACKGROUND],byte 0 ; no mouse background |
mov [DONT_DRAW_MOUSE],byte 0 ; draw mouse |
;..................................... start 2/2 : modified by vhanla ............................. |
; check coordinates |
jmp afterbuttonid |
605,7 → 605,7 |
mov ecx, [ebx+WDATA.box.left] ; window x start |
movzx edx,word [eax+4] ; button x start |
add edx,ecx |
mov cx,[0xfb0a] |
mov cx,[MOUSE_X] |
cmp edx,ecx |
jg no_on_button ;if we release the pointer out of the button area |
621,7 → 621,7 |
mov ecx, [ebx+WDATA.box.top] ; window y start |
movzx edx,word [eax+8] ; button y start |
add edx,ecx |
mov cx,[0xfb0c] |
mov cx,[MOUSE_Y] |
cmp edx,ecx |
jg no_on_button |
630,16 → 630,16 |
cmp ecx,edx |
jg no_on_button |
popa |
mov [0xf500],byte 1 ; no of buttons in buffer |
mov [BTN_COUNT],byte 1 ; no of buttons in buffer |
pop ebx |
mov [0xf501],ebx ; lets put the button id in buffer |
mov [BTN_BUFF],ebx ; lets put the button id in buffer |
push ebx |
pusha |
jmp yes_on_button |
no_on_button: |
mov [0xf500],byte 0 ; no of buttons in buffer |
mov [BTN_COUNT],byte 0 ; no of buttons in buffer |
yes_on_button: |
mov [0xfb44],byte 0 ; mouse down -> do not draw |
mov [MOUSE_DOWN],byte 0 ; mouse down -> do not draw |
popa |
pop ebx |
popa |
/kernel/trunk/gui/event.inc |
---|
530,7 → 530,7 |
mov eax, [TASK_COUNT] |
cmp eax,edx |
jne no_eventoccur2x |
cmp [0xf400],byte 0 |
cmp [KEY_COUNT],byte 0 |
je no_eventoccur2x |
eventoccur2: |
popad |
549,7 → 549,7 |
;mov edi,[TASK_BASE] ; BUTTON IN BUFFER |
test [edi+TASKDATA.event_mask],dword 4 |
jz no_eventoccur3 |
cmp [0xf500],byte 0 |
cmp [BTN_COUNT],byte 0 |
je no_eventoccur3 |
mov ecx, [CURRENT_TASK] |
movzx edx, word [WIN_STACK+ecx*2] |
557,7 → 557,7 |
cmp eax,edx |
jnz no_eventoccur3 |
popad |
mov eax,[0xf501] |
mov eax,[BTN_BUFF] |
cmp eax,65535 |
je no_event_1 |
mov eax,3 |
565,7 → 565,7 |
no_event_1: |
mov [window_minimize],1 |
mov [0xf500],byte 0 |
mov [BTN_COUNT],byte 0 |
xor eax, eax |
ret |
589,7 → 589,7 |
;mov edi,[TASK_BASE] ; DESKTOP BACKGROUND REDRAW |
test [edi+TASKDATA.event_mask],dword 16 |
jz no_eventoccur5 |
cmp [0xfff0],byte 2 |
cmp [REDRAW_BACKGROUND],byte 2 |
jnz no_eventoccur5 |
popad |
mov eax,5 |
647,7 → 647,7 |
cmp dword [edi+TASKDATA.event_mask], 0xFFFF |
jbe no_events |
mov esi,0x2e0000 ; IRQ'S AND DATA |
mov esi,IRQ_SAVE ; IRQ'S AND DATA |
mov ebx,0x00010000 |
xor ecx, ecx |
irq_event_test: |
/kernel/trunk/gui/font.inc |
---|
36,7 → 36,7 |
jnz .font2 |
pushad |
mov esi, 9 |
lea ebp, [0x3F600+8*edx+edx] |
lea ebp, [FONT_I+8*edx+edx] |
.symloop1: |
mov dl, byte [ebp] |
or dl, 1 shl 6 |
69,7 → 69,7 |
.font2: |
pushad |
add edx, edx |
lea ebp, [0x3EC00+4*edx+edx+1] |
lea ebp, [FONT_II+4*edx+edx+1] |
push 9 |
movzx esi, byte [ebp-1] |
.symloop2: |
/kernel/trunk/gui/skincode.inc |
---|
1,6 → 1,6 |
include "skindata.inc" |
skin_data = 0x00778000 |
;skin_data = 0x00778000 |
load_skin_file: |
; eax = filename |
355,7 → 355,7 |
jne no_skin_add_button |
;* close button |
mov edi,[0xfe88] |
mov edi,[BTN_ADDR] |
movzx eax,word [edi] |
cmp eax,1000 |
jge no_skin_add_button |
394,7 → 394,7 |
mov [eax],bx |
;* minimize button |
mov edi,[0xfe88] |
mov edi,[BTN_ADDR] |
movzx eax,word [edi] |
cmp eax,1000 |
jge no_skin_add_button |
/kernel/trunk/gui/window.inc |
---|
169,7 → 169,7 |
inc edx |
; get WinMap start |
mov edi, [0xFE00] ; screen_sx |
mov edi, [ScreenWidth] ; screen_sx |
inc edi |
imul edi, ebx |
add edi, eax |
189,7 → 189,7 |
pop edx |
pop ecx |
add edi, [0xFE00] |
add edi, [ScreenWidth] |
inc edi |
sub edi, ecx |
dec edx |
230,7 → 230,7 |
; get WinMap start -> ebp |
push eax |
mov eax, [0xFE00] ; screen_sx |
mov eax, [ScreenWidth] ; screen_sx |
inc eax |
imul eax, ebx |
add eax, [esp] |
292,7 → 292,7 |
jb .ff_new_x |
sub ebp, [ff_xsz] |
add ebp, [ff_x] |
add ebp, [0xFE00] ; screen.x |
add ebp, [ScreenWidth] ; screen.x |
inc ebp |
inc ebx |
cmp ebx, [ff_ysz] |
349,9 → 349,9 |
redraw_screen_direct: |
mov [dlx],dword 0 |
mov [dly],dword 0 |
mov eax,[0xfe00] |
mov eax,[ScreenWidth] |
mov [dlxe],eax |
mov eax,[0xfe04] |
mov eax,[ScreenHeight] |
mov [dlye],eax |
mov eax,window_data |
call redrawscreen |
427,10 → 427,10 |
movsx ebx,word[esp+16] |
cmp eax,ebx |
jge .lp1 |
or eax,eax;[0xFE00] |
or eax,eax;[ScreenWidth] |
jl @f |
mov [screen_workarea.left],eax |
@@: cmp ebx,[0xFE00] |
@@: cmp ebx,[ScreenWidth] |
jg .lp1 |
mov [screen_workarea.right],ebx |
.lp1: movsx eax,word[esp+24+2] |
440,14 → 440,14 |
or eax,eax;[0xFE04] |
jl @f |
mov [screen_workarea.top],eax |
@@: cmp ebx,[0xFE04] |
@@: cmp ebx,[ScreenHeight] |
jg .lp2 |
mov [screen_workarea.bottom],ebx |
.lp2: call repos_windows |
mov eax, 0 |
mov ebx, 0 |
mov ecx, [0xfe00] |
mov edx, [0xfe04] |
mov ecx, [ScreenWidth] |
mov edx, [ScreenHeight] |
call calculatescreen |
; jmp redraw_screen_direct |
.exit: |
498,8 → 498,8 |
pushad |
mov eax, 0 |
mov ebx, 0 |
mov ecx, [0xfe00] |
mov edx, [0xfe04] |
mov ecx, [ScreenWidth] |
mov edx, [ScreenHeight] |
call calculatescreen |
popad |
mov dword[esp+32+36],0 |
517,7 → 517,7 |
repos_windows: |
mov ecx,[TASK_COUNT] |
mov edi,0x20*2 |
mov byte[0x0000fff0],1 |
mov byte[REDRAW_BACKGROUND],1 |
dec ecx |
jge @f |
ret |
543,7 → 543,7 |
ret |
.lp2: mov eax,[edi+WDATA.box.left] |
add eax,[edi+WDATA.box.width] |
mov ebx,[0x0000fe00] |
mov ebx,[ScreenWidth] |
; inc ebx |
cmp eax,ebx |
jle .lp4 |
555,7 → 555,7 |
mov [edi+WDATA.box.left],ebx |
.lp4: mov eax,[edi+WDATA.box.top] |
add eax,[edi+WDATA.box.height] |
mov ebx,[0x0000fe04] |
mov ebx,[ScreenHeight] |
; inc ebx |
cmp eax,ebx |
jle .lp6 |
586,7 → 586,7 |
mov esi,ecx ; check x pos |
add esi,eax |
cmp esi,[0xfe00] |
cmp esi,[ScreenWidth] |
jbe x_pos_ok |
mov [edi+WDATA.box.left],dword 0 |
xor eax, eax |
594,7 → 594,7 |
mov esi,edx ; check y pos |
add esi,ebx |
cmp esi,[0xfe04] |
cmp esi,[ScreenHeight] |
jbe y_pos_ok |
mov [edi+WDATA.box.top],dword 0 |
mov ebx,0 |
602,17 → 602,17 |
mov esi,ecx ; check x size |
add esi,eax |
cmp esi,[0xfe00] |
cmp esi,[ScreenWidth] |
jbe x_size_ok |
mov ecx,[0xfe00] |
mov ecx,[ScreenWidth] |
mov [edi+WDATA.box.width],ecx |
x_size_ok: |
mov esi,edx ; check y size |
add esi,ebx |
cmp esi,[0xfe04] |
cmp esi,[ScreenHeight] |
jbe y_size_ok |
mov edx,[0xfe04] |
mov edx,[ScreenHeight] |
mov [edi+WDATA.box.height],edx |
y_size_ok: |
634,8 → 634,8 |
cmp [new_window_starting],eax |
jb swml1 |
mov [0xfff4],byte 0 ; no mouse background |
mov [0xfff5],byte 0 ; draw mouse |
mov [MOUSE_BACKGROUND],byte 0 ; no mouse background |
mov [DONT_DRAW_MOUSE],byte 0 ; draw mouse |
mov [new_window_starting],eax |
958,8 → 958,8 |
mov [ebx*2 + WIN_POS], si |
jmp waloop2 |
wacont2: |
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 |
popad |
ret |
1053,7 → 1053,7 |
jz .do_not_draw |
popad |
mov [0xfb44], byte 1 ; do draw mouse |
mov [MOUSE_DOWN], byte 1 ; do draw mouse |
call windowactivate |
; update screen info |
1078,7 → 1078,7 |
popad |
mov [edi + WDATA.fl_redraw], 1 ; redraw flag for app |
mov [0xfb44],byte 0 ; mouse down checks |
mov [MOUSE_DOWN],byte 0 ; mouse down checks |
ret |
1087,9 → 1087,9 |
popad |
call windowactivate |
mov [0xfb44],byte 0 ; mouse down checks |
mov [0xfff4],byte 0 ; no mouse background |
mov [0xfff5],byte 0 ; draw mouse |
mov [MOUSE_DOWN],byte 0 ; mouse down checks |
mov [MOUSE_BACKGROUND],byte 0 ; no mouse background |
mov [DONT_DRAW_MOUSE],byte 0 ; draw mouse |
ret |
1156,7 → 1156,7 |
add edx, [edi+WDATA.box.height] |
call calculatescreen |
.done: |
mov [0xfff4],byte 0 ; no mouse under |
mov [MOUSE_BACKGROUND],byte 0 ; no mouse under |
.skip_redrawings: |
popfd |
ret |
1186,7 → 1186,7 |
.continue: |
.no_minimizing: |
cmp [0xfb40],byte 0 ; mouse buttons pressed ? |
cmp [BTN_DOWN],byte 0 ; mouse buttons pressed ? |
jne .mouse_buttons_pressed |
popad |
ret |
1212,8 → 1212,8 |
test [edi+WDATA.fl_wstate],WSTATE_MINIMIZED |
jnz cwloop |
movzx eax, word [0xfb0a] |
movzx ebx, word [0xfb0c] |
movzx eax, word [MOUSE_X] |
movzx ebx, word [MOUSE_Y] |
cmp ecx, eax |
jae cwloop |
1292,7 → 1292,7 |
mov [latest_window_touch], ecx |
mov [latest_window_touch_delta], edx |
mov cl, [0xfb40] ; save for shade check |
mov cl, [BTN_DOWN] ; save for shade check |
mov [do_resize], cl |
no_emulation_righ_button: |
mov ecx, [edi + WDATA.box.left] |
1312,8 → 1312,8 |
sub eax, ecx |
sub ebx, edx |
mov esi, [0xfb0a] |
mov [0xf300], esi |
mov esi, [MOUSE_X] |
mov [WIN_TEMP_XY], esi |
pushad ; wait for putimages to finish |
; mov eax,5 |
1340,19 → 1340,19 |
call drawwindowframes |
mov [reposition],0 |
mov [0xfb44],byte 1 ; no reaction to mouse up/down |
mov [MOUSE_DOWN],byte 1 ; no reaction to mouse up/down |
; move window |
newchm: |
mov [0xfff5],byte 1 |
mov [DONT_DRAW_MOUSE],byte 1 |
call checkidle |
call checkVga_N13 |
mov [0xfff4],byte 0 |
mov [MOUSE_BACKGROUND],byte 0 |
call [draw_pointer] |
1360,12 → 1360,12 |
call stack_handler |
popad |
mov esi,[0xf300] |
cmp esi,[0xfb0a] |
mov esi,[WIN_TEMP_XY] |
cmp esi,[MOUSE_X] |
je cwb |
mov cx,[0xfb0a] |
mov dx,[0xfb0c] |
mov cx,[MOUSE_X] |
mov dx,[MOUSE_Y] |
sub cx,ax |
sub dx,bx |
1374,8 → 1374,8 |
call drawwindowframes |
mov ax,[0xfe00] |
mov bx,[0xfe04] |
mov ax,[ScreenWidth] |
mov bx,[ScreenHeight] |
cmp [do_resize_from_corner],1 |
je no_new_position |
1415,7 → 1415,7 |
;add edx,0x80000 ; process base at 0x80000+ |
lea edx, [SLOT_BASE + edx*8] |
movzx eax,word [0xfb0a] |
movzx eax,word [MOUSE_X] |
cmp eax,[edi + WDATA.box.left] |
jb nnepx |
sub eax,[edi + WDATA.box.left] |
1428,7 → 1428,7 |
call get_rolledup_height |
mov ebx,eax |
movzx eax,word [0xfb0c] |
movzx eax,word [MOUSE_Y] |
cmp eax,[edi + WDATA.box.top] |
jb nnepy |
sub eax,[edi + WDATA.box.top] |
1448,14 → 1448,14 |
pop ax |
call drawwindowframes |
mov esi,[0xfb0a] |
mov [0xf300],esi |
mov esi,[MOUSE_X] |
mov [WIN_TEMP_XY],esi |
cwb: |
cmp [0xfb40],byte 0 |
cmp [BTN_DOWN],byte 0 |
jne newchm |
; new position done |
mov [0xfff5],byte 1 |
mov [DONT_DRAW_MOUSE],byte 1 |
mov cl,0 |
test [edi+WDATA.fl_wstate],WSTATE_MAXIMIZED |
jnz @f |
1566,16 → 1566,16 |
mov eax,[edi+WDATA.box.top] ; check Y inside screen |
add eax,[edi+WDATA.box.height] |
cmp eax,[0xfe04] |
cmp eax,[ScreenHeight] |
jbe no_window_sizing |
mov eax,[edi+WDATA.box.left] ; check X inside screen |
add eax,[edi+WDATA.box.width] |
cmp eax,[0xfe00] |
cmp eax,[ScreenWidth] |
jbe no_window_sizing |
mov eax,[0xfe00] |
mov eax,[ScreenWidth] |
sub eax,[edi+WDATA.box.width] |
mov [edi+WDATA.box.left],eax |
mov eax,[0xfe04] |
mov eax,[ScreenHeight] |
sub eax,[edi+WDATA.box.height] |
mov [edi+WDATA.box.top],eax |
call set_window_clientbox |
1586,7 → 1586,7 |
cmp [reposition],0 |
je retwm |
mov [0xfff5],byte 1 ; no mouse |
mov [DONT_DRAW_MOUSE],byte 1 ; no mouse |
push eax ebx ecx edx |
1615,7 → 1615,7 |
mov ecx,100 ; wait to avoid mouse residuals |
waitre2: |
mov [0xfff5],byte 1 |
mov [DONT_DRAW_MOUSE],byte 1 |
call checkidle |
cmp [edi+WDATA.fl_redraw],0 |
jz retwm |
1623,9 → 1623,9 |
retwm: |
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 esi,window_moved |
call sys_msg_board_str |
/kernel/trunk/hid/keyboard.inc |
---|
267,12 → 267,12 |
.scancode: |
mov bl, ch |
.dowrite: |
movzx eax,byte[0xF400] |
movzx eax,byte[KEY_COUNT] |
cmp al,120 |
jae .exit.irq1 |
inc eax |
mov [0xF400],al |
mov [0xF400+eax],bl |
mov [KEY_COUNT],al |
mov [KEY_COUNT+eax],bl |
.exit.irq1: |
mov [check_idle_semaphore],5 |
/kernel/trunk/hid/m_com1.inc |
---|
61,7 → 61,7 |
shr ah,5 |
and ah,1 |
add al,ah |
mov [0xfb40],al |
mov [BTN_DOWN],al |
mov [mouse_active],1 |
; Ïðèáàâèòü ïåðåìåùåíèå ïî X ê êîîðäèíàòå X |
mov AL,[FirstByte] |
69,14 → 69,14 |
or AL,[SecondByte] |
cbw |
call mouse_acceleration_com1 |
add AX,[0xFB0A] ;[XCoordinate] |
add AX,[MOUSE_X] ;[XCoordinate] |
; Êóðñîð íå äîëæåí âûõîäèòü çà ëåâóþ èëè |
; ïðàâóþ ãðàíèöó ýêðàíà |
js @@X1 |
cmp AX,[0xFE00] ;ScreenLength |
cmp AX,[ScreenWidth] ;ScreenLength |
jb @@X2 |
; Óñòàíîâèòü êîîðäèíàòó X ïî ïðàâîé ãðàíèöå |
mov AX,[0xFE00] ;ScreenLength-1 |
mov AX,[ScreenWidth] ;ScreenLength-1 |
dec ax |
jmp @@X2 |
@@X1: |
83,7 → 83,7 |
; Óñòàíîâèòü êîîðäèíàòó X ïî ëåâîé ãðàíèöå |
xor AX,AX |
@@X2: |
mov [0xFB0A],AX ;[XCoordinate] |
mov [MOUSE_X],AX ;[XCoordinate] |
; Ïðèáàâèòü ïåðåìåùåíèå ïî Y ê êîîðäèíàòå Y |
mov AL,[FirstByte] |
and AL,00001100b |
91,14 → 91,14 |
or AL,[ThirdByte] |
cbw |
call mouse_acceleration_com1 |
add AX,[0xFB0C] ;[YCoordinate] |
add AX,[MOUSE_Y] ;[YCoordinate] |
; Êóðñîð íå äîëæåí âûõîäèòü çà âåðõíþþ èëè |
; íèæíþþ ãðàíèöó ýêðàíà |
js @@Y1 |
cmp AX,[0xFE04] ;ScreenHeigth |
cmp AX,[ScreenHeight] ;ScreenHeigth |
jb @@Y2 |
; Óñòàíîâèòü êîîðäèíàòó X ïî íèæíåé ãðàíèöå |
mov AX,[0xFE04] ;ScreenHeigth-1 |
mov AX,[ScreenHeight] ;ScreenHeigth-1 |
dec ax |
jmp @@Y2 |
@@Y1: |
105,7 → 105,7 |
; Óñòàíîâèòü êîîðäèíàòó X ïî âåðõíåé ãðàíèöå |
xor AX,AX |
@@Y2: |
mov [0xFB0C],AX ;[YCoordinate] |
mov [MOUSE_Y],AX ;[YCoordinate] |
mov eax,[timer_ticks] |
mov [timer_ticks_com],eax |
jmp @@EndMouseInterrupt |
/kernel/trunk/hid/m_com2.inc |
---|
61,7 → 61,7 |
shr ah,5 |
and ah,1 |
add al,ah |
mov [0xfb40],al |
mov [BTN_DOWN],al |
mov [mouse_active],1 |
; Ïðèáàâèòü ïåðåìåùåíèå ïî X ê êîîðäèíàòå X |
mov AL,[FirstByte_1] |
69,14 → 69,14 |
or AL,[SecondByte_1] |
cbw |
call mouse_acceleration_com2 |
add AX,[0xFB0A] ;[XCoordinate] |
add AX,[MOUSE_X] ;[XCoordinate] |
; Êóðñîð íå äîëæåí âûõîäèòü çà ëåâóþ èëè |
; ïðàâóþ ãðàíèöó ýêðàíà |
js @@X1_1 |
cmp AX,[0xFE00] ;ScreenLength |
cmp AX,[ScreenWidth] ;ScreenLength |
jb @@X2_1 |
; Óñòàíîâèòü êîîðäèíàòó X ïî ïðàâîé ãðàíèöå |
mov AX,[0xFE00] ;ScreenLength-1 |
mov AX,[ScreenWidth] ;ScreenLength-1 |
dec ax |
jmp @@X2_1 |
@@X1_1: |
83,7 → 83,7 |
; Óñòàíîâèòü êîîðäèíàòó X ïî ëåâîé ãðàíèöå |
xor AX,AX |
@@X2_1: |
mov [0xFB0A],AX ;[XCoordinate] |
mov [MOUSE_X],AX ;[XCoordinate] |
; Ïðèáàâèòü ïåðåìåùåíèå ïî Y ê êîîðäèíàòå Y |
mov AL,[FirstByte_1] |
and AL,00001100b |
91,14 → 91,14 |
or AL,[ThirdByte_1] |
cbw |
call mouse_acceleration_com2 |
add AX,[0xFB0C] ;[YCoordinate] |
add AX,[MOUSE_Y] ;[YCoordinate] |
; Êóðñîð íå äîëæåí âûõîäèòü çà âåðõíþþ èëè |
; íèæíþþ ãðàíèöó ýêðàíà |
js @@Y1_1 |
cmp AX,[0xFE04] ;ScreenHeigth |
cmp AX,[ScreenHeight] ;ScreenHeigth |
jb @@Y2_1 |
; Óñòàíîâèòü êîîðäèíàòó X ïî íèæíåé ãðàíèöå |
mov AX,[0xFE04] ;ScreenHeigth-1 |
mov AX,[ScreenHeight] ;ScreenHeigth-1 |
dec ax |
jmp @@Y2_1 |
@@Y1_1: |
105,7 → 105,7 |
; Óñòàíîâèòü êîîðäèíàòó X ïî âåðõíåé ãðàíèöå |
xor AX,AX |
@@Y2_1: |
mov [0xFB0C],AX ;[YCoordinate] |
mov [MOUSE_Y],AX ;[YCoordinate] |
mov eax,[timer_ticks] |
mov [timer_ticks_com_1],eax |
jmp @@EndMouseInterrupt_1 |
/kernel/trunk/hid/m_ps2.inc |
---|
42,7 → 42,7 |
; Çàïèñàòü íîâîå çíà÷åíèå áàéòà ñîñòîÿíèÿ êíîïîê |
mov al,[FirstByte_2] ;[0xfb01] |
and eax,3 |
mov [0xfb40],al |
mov [BTN_DOWN],al |
mov [mouse_active],1 |
; Âû÷èñëèòü íîâóþ X-êîîðäèíàòó êóðñîðà |
; Çàíåñòè â AX ïåðåìåùåíèå ïî X |
57,18 → 57,18 |
call mouse_acceleration_ps2 |
; Âû÷èñëèòü íîâîå çíà÷åíèå êîîðäèíàòû |
; êóðñîðà ïî X |
add AX,[0xFB0A] ;[XCoordinate] |
add AX,[MOUSE_X] ;[XCoordinate] |
cmp AX,0 |
jge @@M1 |
mov AX,0 |
jmp @@M2 |
@@M1: |
cmp AX,[0xFE00] ;ScreenLength |
cmp AX,[ScreenWidth] ;ScreenLength |
jl @@M2 |
mov AX,[0xFE00] ;ScreenLength-1 |
mov AX,[ScreenWidth] ;ScreenLength-1 |
dec ax |
@@M2: |
mov [0xFB0A],AX ;[XCoordinate] |
mov [MOUSE_X],AX ;[XCoordinate] |
; Âû÷èñëÿåì íîâóþ Y-êîîðäèíàòó êóðñîðà |
; Çàíåñòè â AX ïåðåìåùåíèå ïî Y |
85,18 → 85,18 |
; ïî Y (Y-êîîðäèíàòà ìûøè PS/2 íàïðàâëåíà |
; ïðîòèâîïîëîæíî ýêðàííîé) |
neg AX |
add AX,[0xFB0C] ;[YCoordinate] |
add AX,[MOUSE_Y] ;[YCoordinate] |
cmp AX,0 |
jge @@M4 |
mov AX,0 |
jmp @@M5 |
@@M4: |
cmp AX,[0xFE04] ;ScreenHeigth |
cmp AX,[ScreenHeight] ;ScreenHeigth |
jl @@M5 |
mov AX,[0xFE04] ;ScreenHeigth-1 |
mov AX,[ScreenHeight] ;ScreenHeigth-1 |
dec ax |
@@M5: |
mov [0xFB0C],AX ;[YCoordinate] |
mov [MOUSE_Y],AX ;[YCoordinate] |
; Ïîêàçàòü êóðñîð â íîâîé ïîçèöèè |
mov eax,[timer_ticks] |
106,7 → 106,7 |
; Îáíàðóæåí ñáîé â ïîðÿäêå ïåðåäà÷è èíôîðìàöèè îò ìûøè |
@@Error_2: |
mov [MouseByteNumber_2],0 |
; Íîðìàëüíîå çàâåðøåíèå ïðåðûâàíèÿ |
; Íîðìàëüíîå çàâåðøåíèå ïðåðûâàíè |
@@EndMouseInterrupt_2: |
call ready_for_next_irq_1 |
ret |
129,7 → 129,7 |
;*********************************************** |
Wait8042BufferEmpty: |
; push CX |
; mov CX,0FFFFh ;çàäàòü ÷èñëî öèêëîâ îæèäàíèÿ |
; mov CX,0FFFFh ;çàäàòü ÷èñëî öèêëîâ îæèäàíè |
;@@kb: |
; in AL,64h ;ïîëó÷èòü ñòàòóñ |
; test AL,10b ;áóôåð i8042 ñâîáîäåí? |
151,7 → 151,7 |
;*************************************** |
WaitMouseData: |
; push CX |
; mov CX,0FFFFh ;çàäàòü ÷èñëî öèêëîâ îæèäàíèÿ |
; mov CX,0FFFFh ;çàäàòü ÷èñëî öèêëîâ îæèäàíè |
;@@mouse: |
; in AL,64h ;îïðîñèòü ðåãèñòð ñòàòóñà |
; test AL,100000b ;äàííûå ïîñòóïèëè? |
/kernel/trunk/hid/mousedrv.inc |
---|
43,8 → 43,8 |
cmp [set_hw_cursor], 0 |
jz @F |
pushad |
movzx eax,word [0xfb4a] |
movzx ebx,word [0xfb4c] |
movzx eax,word [X_UNDER] |
movzx ebx,word [Y_UNDER] |
stdcall [hw_restore], eax, ebx |
popad |
ret |
54,8 → 54,8 |
xor edx,edx |
align 4 |
mres: |
movzx eax,word [0xfb4a] |
movzx ebx,word [0xfb4c] |
movzx eax,word [X_UNDER] |
movzx ebx,word [Y_UNDER] |
add eax,ecx |
add ebx,edx |
push ecx |
90,14 → 90,14 |
jz @F |
pushad |
mov [0xfb4a],ax |
mov [0xfb4c],bx |
movzx eax,word [0xfb0c] |
movzx ebx,word [0xfb0a] |
mov [X_UNDER],ax |
mov [Y_UNDER],bx |
movzx eax,word [MOUSE_Y] |
movzx ebx,word [MOUSE_X] |
push eax |
push ebx |
mov ecx, [0xfe00] |
mov ecx, [ScreenWidth] |
inc ecx |
mul ecx |
movzx edx, byte [display_data+ebx+eax] |
123,8 → 123,8 |
@@: |
pushad |
; save & draw |
mov [0xfb4a],ax |
mov [0xfb4c],bx |
mov [X_UNDER],ax |
mov [Y_UNDER],bx |
push eax |
push ebx |
mov ecx,0 |
141,7 → 141,7 |
add ebx,edx |
push ecx |
call getpixel |
mov [0xfb30],ecx |
mov [COLOR_TEMP],ecx |
pop ecx |
mov eax,edx |
shl eax,6 |
148,7 → 148,7 |
shl ecx,2 |
add eax,ecx |
add eax,mouseunder |
mov ebx,[0xfb30] |
mov ebx,[COLOR_TEMP] |
mov [eax],ebx |
pop ecx |
mov edi,edx ; y cycle |
157,13 → 157,13 |
mov esi, edi |
add edi, esi |
add edi, esi ; *3 |
add edi,[0xf200] ; we have our str address |
add edi,[MOUSE_PICTURE] ; we have our str address |
mov esi, edi |
add esi, 16*24*3 |
push ecx |
mov ecx, [0xfb30] |
mov ecx, [COLOR_TEMP] |
call combine_colors |
mov [0xfb10], ecx |
mov [MOUSE_COLOR_MEM], ecx |
pop ecx |
pop edx |
pop ecx |
172,7 → 172,7 |
add eax,ecx ; we have x coord+cycle |
add ebx,edx ; and y coord+cycle |
push ecx |
mov ecx, [0xfb10] |
mov ecx, [MOUSE_COLOR_MEM] |
mov edi, 1 |
call [putpixel] |
pop ecx |
260,7 → 260,7 |
__sys_disable_mouse: |
cmp dword [0xf204],dword 0 |
cmp dword [MOUSE_VISIBLE],dword 0 |
je @f |
ret |
@@: |
270,9 → 270,9 |
mov edx,[CURRENT_TASK] |
shl edx,5 |
add edx,window_data |
movzx eax, word [0xfb0a] |
movzx ebx, word [0xfb0c] |
mov ecx,[0xfe00] |
movzx eax, word [MOUSE_X] |
movzx ebx, word [MOUSE_Y] |
mov ecx,[ScreenWidth] |
inc ecx |
imul ecx,ebx |
add ecx,eax |
284,7 → 284,7 |
movzx ebx, byte [ecx+16] |
cmp eax,ebx |
je yes_mouse_disable |
mov ebx,[0xfe00] |
mov ebx,[ScreenWidth] |
inc ebx |
imul ebx,10 |
add ecx,ebx |
299,8 → 299,8 |
mov edx,[CURRENT_TASK] |
shl edx,5 |
add edx,window_data |
movzx eax, word [0xfb0a] |
movzx ebx, word [0xfb0c] |
movzx eax, word [MOUSE_X] |
movzx ebx, word [MOUSE_Y] |
mov ecx,[edx+0] ; mouse inside the area ? |
add eax,14 |
cmp eax,ecx |
318,12 → 318,12 |
cmp ebx,ecx |
jg no_mouse_disable |
disable_m: |
cmp dword [0xf204],dword 0 |
cmp dword [MOUSE_VISIBLE],dword 0 |
jne no_mouse_disable |
cli |
call draw_mouse_under |
sti |
mov [0xf204],dword 1 |
mov [MOUSE_VISIBLE],dword 1 |
no_mouse_disable: |
popad |
ret |
345,11 → 345,11 |
mov [MouseTickCounter],eax |
pop eax |
pushad |
cmp dword [0xf204],dword 0 ; mouse visible ? |
cmp dword [MOUSE_VISIBLE],dword 0 ; mouse visible ? |
je chms00 |
mov [0xf204], dword 0 |
movzx ebx,word [0xfb0c] |
movzx eax,word [0xfb0a] |
mov [MOUSE_VISIBLE], dword 0 |
movzx ebx,word [MOUSE_Y] |
movzx eax,word [MOUSE_X] |
cli |
call save_draw_mouse |
sti |
357,10 → 357,10 |
popad |
ret |
chms00: |
movzx ecx,word [0xfb4a] |
movzx edx,word [0xfb4c] |
movzx ebx,word [0xfb0c] |
movzx eax,word [0xfb0a] |
movzx ecx,word [X_UNDER] |
movzx edx,word [Y_UNDER] |
movzx ebx,word [MOUSE_Y] |
movzx eax,word [MOUSE_X] |
cmp eax,ecx |
jne redrawmouse |
cmp ebx,edx |
/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 |
/kernel/trunk/video/cursors.inc |
---|
426,11 → 426,11 |
align 4 |
proc init_cursors |
cmp [0xfe0c],word 0x13 |
cmp [SCR_MODE],word 0x13 |
jbe .fail |
movzx eax, byte [ScreenBPP] |
mov ebx, [SCR_BYTES_PER_LINE] |
mov ebx, [BytesPerScanLine] |
cmp eax, 32 |
jne @F |
sub ebx, 128 |
456,8 → 456,8 |
stdcall load_cursor, def_arrow, dword LOAD_FROM_MEM |
mov [def_cursor], eax |
mov ecx, [SCR_X_SIZE] |
mov edx, [SCR_Y_SIZE] |
mov ecx, [ScreenWidth] |
mov edx, [ScreenHeight] |
inc ecx |
inc edx |
mov [scr_width], ecx |
/kernel/trunk/video/vesa12.inc |
---|
32,9 → 32,9 |
; modified by Mario79 |
;set_bank: |
;cli |
;cmp al,[0xfff2] |
;cmp al,[BANK_RW] |
;je retsb |
;mov [0xfff2],al |
;mov [BANK_RW],al |
;push dx |
;mov dx,3D8h |
;out dx,al |
50,9 → 50,9 |
set_bank: |
pushfd |
cli |
cmp al,[0xfff2] |
cmp al,[BANK_RW] |
je retsb |
mov [0xfff2],al |
mov [BANK_RW],al |
push ax |
push dx |
push cx |
132,9 → 132,9 |
; |
;set_bank: |
;cli |
;cmp al,[0xfff2] |
;cmp al,[BANK_RW] |
;je retsb |
;mov [0xfff2],al |
;mov [BANK_RW],al |
;push ax |
;push dx |
;mov dx,3CEh |
160,9 → 160,9 |
;set_bank: |
; cli |
; cmp al,[0xfff2] |
; cmp al,[BANK_RW] |
; je retsb |
; mov [0xfff2],al |
; mov [BANK_RW],al |
; push ax |
; push dx |
; mov ah,al |
216,7 → 216,7 |
push eax |
push ebx |
mov esi,0x300000 |
mov esi,IMG_BACKGROUND |
cmp [WinMapAddress-12],dword 1 ; tiled background |
jne no_vesa12_tiled_bgr |
247,7 → 247,7 |
imul eax,dword [WinMapAddress-8] |
xor edx,edx |
mov ecx,[0xfe00] |
mov ecx,[ScreenWidth] |
inc ecx |
div ecx |
255,7 → 255,7 |
mov eax,ebx |
imul eax,dword [WinMapAddress-4] |
xor edx,edx |
mov ecx,[0xfe04] |
mov ecx,[ScreenHeight] |
inc ecx |
div ecx |
mov ebx,eax |
278,7 → 278,7 |
add esi,eax |
add esi,eax |
add esi,eax |
add esi,0x300000 |
add esi,IMG_BACKGROUND |
pop ebx |
pop eax |
288,7 → 288,7 |
pusha |
mov esi,eax |
mov edi,ebx |
mov eax,[0xfe00] |
mov eax,[ScreenWidth] |
add eax,1 |
mul ebx |
add eax,esi |
295,13 → 295,13 |
add eax,WinMapAddress |
cmp [eax],byte 1 |
jnz v12nbgp |
mov eax,[0xfe08] |
mov eax,[BytesPerScanLine] |
mov ebx,edi |
mul ebx |
add eax,esi |
add eax,esi |
add eax,esi |
cmp [0xFBF1],byte 24 |
cmp [ScreenBPP],byte 24 |
jz v12bgl3 |
add eax,esi |
310,13 → 310,13 |
push ebx |
push eax |
sub eax,[0xfe80] |
sub eax,[LFBAddress] |
shr eax,16 |
call set_bank |
pop eax |
and eax,65535 |
add eax,0xa0000 |
add eax,VGABasePtr |
pop ebx |
mov [eax],cx |
369,19 → 369,19 |
add ebx,[ecx-twdw+WDATA.box.top] |
push eax |
mov eax,ebx ; y |
mov ebx,[0xfe08] |
mov ebx,[BytesPerScanLine] |
mul ebx |
pop ecx |
add eax,ecx ; x |
add eax,ecx |
add eax,ecx |
cmp [0xfbf1],byte 24 ; 24 or 32 bpp ? - x start |
cmp [ScreenBPP],byte 24 ; 24 or 32 bpp ? - x start |
jz dbpi2412 |
add eax,ecx |
dbpi2412: |
add eax,[0xfe80] |
add eax,[LFBAddress] |
mov edi,eax |
; x size |
390,7 → 390,7 |
mov ecx,eax |
add ecx,eax |
add ecx,eax |
cmp [0xfbf1],byte 24 ; 24 or 32 bpp ? - x size |
cmp [ScreenBPP],byte 24 ; 24 or 32 bpp ? - x size |
jz dbpi24312 |
add ecx,eax |
410,10 → 410,10 |
cmp ecx,0 |
jnz dbcblimitlset12 |
mov ecx,[eax+draw_data-CURRENT_TASK+RECT.right] |
cmp ecx,[0xfe00] |
cmp ecx,[ScreenWidth] |
jnz dbcblimitlset12 |
mov ecx,[eax+draw_data-CURRENT_TASK+RECT.bottom] |
cmp ecx,[0xfe04] |
cmp ecx,[ScreenHeight] |
jnz dbcblimitlset12 |
pop ecx |
pop eax |
428,7 → 428,7 |
dbcblimitlno12: |
cmp [0xfbf1],byte 24 ; 24 or 32 bpp ? |
cmp [ScreenBPP],byte 24 ; 24 or 32 bpp ? |
jz dbpi24bit12 |
jmp dbpi32bit12 |
458,7 → 458,7 |
xor edx,edx |
mov eax,edi |
sub eax,[0xfe80] |
sub eax,[LFBAddress] |
mov ebx,3 |
div ebx |
add eax,WinMapAddress |
481,11 → 481,11 |
push edi |
mov eax,edi |
sub eax,[0xfe80] |
sub eax,[LFBAddress] |
shr eax,16 |
call set_bank |
and edi,0xffff |
add edi,0xa0000 |
add edi,VGABasePtr |
mov eax,[esp+8+3*4+16+4+4] |
stosw |
shr eax,16 |
523,7 → 523,7 |
pop ecx |
pop edi |
pop ebx |
add edi,[0xfe08] |
add edi,[BytesPerScanLine] |
dec ebx |
jz dbnonewpi12 |
jmp dbnewpi12 |
550,7 → 550,7 |
push ecx |
mov eax,edi |
sub eax,[0xfe80] |
sub eax,[LFBAddress] |
shr eax,2 |
add eax,WinMapAddress |
mov ebx,[CURRENT_TASK] |
572,11 → 572,11 |
push edi |
mov eax,edi |
sub eax,[0xfe80] |
sub eax,[LFBAddress] |
shr eax,16 |
call set_bank |
and edi,0xffff |
add edi,0xa0000 |
add edi,VGABasePtr |
mov eax,[esp+8+3*4+16+4+4] |
stosw |
shr eax,16 |
615,7 → 615,7 |
pop ecx |
pop edi |
pop ebx |
add edi,[0xfe08] |
add edi,[BytesPerScanLine] |
dec ebx |
jz nodbnewpi3212 |
jmp dbnewpi3212 |
631,7 → 631,7 |
mov edi,eax ; x |
mov eax,ebx ; y |
lea edi,[edi+edi*2] |
mov ebx,[0xfe08] |
mov ebx,[BytesPerScanLine] |
mul ebx |
add edi,eax |
mov eax,edi |
638,7 → 638,7 |
shr eax,16 |
call set_bank |
and edi,65535 |
add edi,0xa0000 |
add edi,VGABasePtr |
mov eax,[esp+28] |
stosw |
shr eax,16 |
653,7 → 653,7 |
mov edi,eax ; x |
mov eax,ebx ; y |
shl edi,2 |
mov ebx,[0xfe08] |
mov ebx,[BytesPerScanLine] |
mul ebx |
add edi,eax |
mov eax,edi |
660,7 → 660,7 |
shr eax,16 |
call set_bank |
and edi,65535 |
add edi,0xa0000 |
add edi,VGABasePtr |
mov ecx,[esp+28] |
mov [edi],ecx |
sti |
672,7 → 672,7 |
mov edi,eax ; x |
mov eax,ebx ; y |
lea edi,[edi+edi*2] |
mov ebx,[0xfe08] |
mov ebx,[BytesPerScanLine] |
mul ebx |
add edi,eax |
mov eax,edi |
679,7 → 679,7 |
shr eax,16 |
call set_bank |
and edi,65535 |
add edi,0xa0000 |
add edi,VGABasePtr |
mov ecx,[edi] |
and ecx,255*256*256+255*256+255 |
sti |
691,7 → 691,7 |
mov edi,eax ; x |
mov eax,ebx ; y |
shl edi,2 |
mov ebx,[0xfe08] |
mov ebx,[BytesPerScanLine] |
xor edx,edx |
mul ebx |
add edi,eax |
699,7 → 699,7 |
shr eax,16 |
call set_bank |
and edi,65535 |
add edi,0xa0000 |
add edi,VGABasePtr |
mov ecx,[edi] |
and ecx,255*256*256+255*256+255 |
sti |
736,18 → 736,18 |
add ebx,[ecx-twdw+WDATA.box.top] |
push eax |
mov eax,ebx ; y |
mul dword [0xfe08] |
mul dword [BytesPerScanLine] |
pop ecx |
add eax,ecx ; x |
add eax,ecx |
add eax,ecx |
cmp [0xfbf1],byte 24 ; 24 or 32 bpp ? - x start |
cmp [ScreenBPP],byte 24 ; 24 or 32 bpp ? - x start |
jz pi2412 |
add eax,ecx |
pi2412: |
add eax,[0xfe80] |
add eax,[LFBAddress] |
mov edi,eax |
; x size |
766,10 → 766,10 |
cmp dword [eax+draw_data-CURRENT_TASK+RECT.top], 0 |
jnz dbcblimitlset212 |
mov ecx,[eax+draw_data-CURRENT_TASK+RECT.right] |
cmp ecx,[0xfe00] |
cmp ecx,[ScreenWidth] |
jnz dbcblimitlset212 |
mov ecx,[eax+draw_data-CURRENT_TASK+RECT.bottom] |
cmp ecx,[0xfe04] |
cmp ecx,[ScreenHeight] |
jnz dbcblimitlset212 |
pop ecx |
push 0 |
782,7 → 782,7 |
dbcblimitlno212: |
cmp [0xfbf1],byte 24 ; 24 or 32 bpp ? |
cmp [ScreenBPP],byte 24 ; 24 or 32 bpp ? |
jnz pi32bit12 |
pi24bit12: |
794,7 → 794,7 |
push ebx |
mov edx,edi |
sub edx,[0xfe80] |
sub edx,[LFBAddress] |
mov ebx,3 |
div ebx |
add edx,WinMapAddress |
818,12 → 818,12 |
push edi |
push eax |
mov eax,edi |
sub eax,[0xfe80] |
sub eax,[LFBAddress] |
shr eax,16 |
call set_bank |
pop eax |
and edi,0xffff |
add edi,0xa0000 |
add edi,VGABasePtr |
mov [edi],ax |
shr eax,16 |
mov [edi+2],al |
843,7 → 843,7 |
pop ecx |
pop edi |
add edi,[0xfe08] |
add edi,[BytesPerScanLine] |
add esi,[esp+32] |
dec ebx |
jnz newpi12 |
864,7 → 864,7 |
push ebx |
mov edx,edi |
sub edx,[0xfe80] |
sub edx,[LFBAddress] |
shr edx,2 |
add edx,WinMapAddress |
mov ebx,[CURRENT_TASK] |
887,12 → 887,12 |
push edi |
push eax |
mov eax,edi |
sub eax,[0xfe80] |
sub eax,[LFBAddress] |
shr eax,16 |
call set_bank |
pop eax |
and edi,0xffff |
mov [edi+0xa0000],eax |
mov [edi+VGABasePtr],eax |
pop edi |
imp32no12: |
909,7 → 909,7 |
pop ecx |
pop edi |
add edi,[0xfe08] |
add edi,[BytesPerScanLine] |
dec ebx |
jnz newpi3212 |
923,7 → 923,7 |
vesa12_read_screen_pixel: |
and eax,0x3FFFFF |
cmp [0xfbf1],byte 24 ; 24 or 32 bpp ? |
cmp [ScreenBPP],byte 24 ; 24 or 32 bpp ? |
jz v12rsp24 |
mov edi,eax |
shl edi,2 |
931,7 → 931,7 |
shr eax,16 |
call set_bank |
and edi,65535 |
add edi,0xa0000 |
add edi,VGABasePtr |
mov eax,[edi] |
and eax,0x00ffffff |
ret |
942,7 → 942,7 |
shr eax,16 |
call set_bank |
and edi,65535 |
add edi,0xa0000 |
add edi,VGABasePtr |
mov eax,[edi] |
and eax,0x00ffffff |
ret |
/kernel/trunk/video/vesa20.inc |
---|
17,12 → 17,12 |
; If you're planning to write your own video driver I suggest |
; you replace the VESA12.INC file and see those instructions. |
ScreenWidth equ 0xfe00 |
ScreenHeight equ 0xfe04 |
BytesPerScanLine equ 0xfe08 |
LFBAddress equ 0xfe80 |
ScreenBPP equ 0xfbf1 |
WinMapAddress equ 0x460000 |
;ScreenWidth equ 0xfe00 |
;ScreenHeight equ 0xfe04 |
;BytesPerScanLine equ 0xfe08 |
;LFBAddress equ 0xfe80 |
;ScreenBPP equ 0xfbf1 |
;WinMapAddress equ 0x460000 |
333,7 → 333,7 |
mov [esp+32-8],ecx |
.noneg: |
; OK to set pixel |
call dword [0xe020] ; call the real put_pixel function |
call dword [PUTPIXEL] ; call the real put_pixel function |
.exit: |
popad |
930,7 → 930,7 |
mov ebx,[esp+8] ; ebx:=B*3 |
mul ebx ; |
add esi,eax ; |
mov eax,[esi+0x300000] |
mov eax,[esi+IMG_BACKGROUND] |
and eax,0xffffff |
xchg edi, ebp |
1066,7 → 1066,7 |
mov cx,dx |
imul eax, [esp+8] ;8 |
add esi,eax |
mov eax,[esi+0x300000] |
mov eax,[esi+IMG_BACKGROUND] |
push eax |
ror ecx,16 |
xor eax,eax |
1079,7 → 1079,7 |
cmp eax,5 |
pop eax |
jb @f |
mov ebx,[esi+0x300000+3] |
mov ebx,[esi+IMG_BACKGROUND+3] |
call overlapping_of_points |
@@: |
push eax |
1097,7 → 1097,7 |
mov ebx,[display_data-8] |
shl ebx,1 |
add ebx,[display_data-8] |
add ebx,0x300000 |
add ebx,IMG_BACKGROUND |
add ebx,esi |
mov ebx,[ebx] |
call overlapping_of_points |
/kernel/trunk/video/vga.inc |
---|
122,7 → 122,7 |
checkVga_N13: |
cmp [0xfe0c],dword 0x13 |
cmp [SCR_MODE],dword 0x13 |
jne @f |
; cnvl: |
129,7 → 129,7 |
pushad |
cmp [EGA_counter],1 |
je novesal |
mov ecx,[0xfb0a] |
mov ecx,[MOUSE_X] |
cmp ecx,[novesachecksum] |
jne novesal |
popad |
151,7 → 151,7 |
sub eax,100 |
imul eax,640*4 |
add ecx,eax |
movzx eax,word [0xfb0a] |
movzx eax,word [MOUSE_X] |
cmp eax,160 |
jge m13l1 |
mov eax,160 |
163,9 → 163,9 |
sub eax,160 |
shl eax,2 |
add ecx,eax |
mov esi,[0xfe80] |
mov esi,[LFBAddress] |
add esi,ecx |
mov edi,0xa0000 |
mov edi,VGABasePtr |
mov edx,200 |
mov ecx,320 |
cld |
197,11 → 197,11 |
VGA_drawbackground: |
; draw all |
cmp [0xfe0c],dword 0x12 |
cmp [SCR_MODE],dword 0x12 |
jne .end |
pushad |
mov esi,[0xfe80] |
mov edi,0xa0000 |
mov esi,[LFBAddress] |
mov edi,VGABasePtr |
mov ebx,640/32 ; 640*480/(8*4) |
mov edx,480 |
@@: |
322,11 → 322,11 |
lea ebx,[ebx+ebx*4] ; óìíîæåíèå íà 5 |
lea edx, [ebx+ecx*4] ; + x*BytesPerPixel (Vesa2.0 32) |
mov edi,edx |
add edi, [0xfe80] ; + LFB address |
add edi, [LFBAddress] ; + LFB address |
mov [edi], eax ; write to LFB for Vesa2.0 |
shr edx,5 ; change BytesPerPixel to 1/8 |
mov edi,edx |
add edi, 0x0a0000 ; address of pixel in VGA area |
add edi, VGABasePtr ; address of pixel in VGA area |
and ecx,0x07 ; bit no. (modulo 8) |
pushfd |
; edi = address, eax = 24bit colour, ecx = bit no. (modulo 8) |
373,7 → 373,7 |
VGA__putimage: |
; ecx = size [x|y] |
; edx = coordinates [x|y] |
cmp [0xfe0c],dword 0x12 |
cmp [SCR_MODE],dword 0x12 |
jne @f |
pushad |
rol edx,16 |
393,7 → 393,7 |
; ebx cy |
; ecx xe |
; edx ye |
cmp [0xfe0c],dword 0x12 |
cmp [SCR_MODE],dword 0x12 |
jne @f |
pushad |
sub ecx,eax |
418,10 → 418,10 |
lea ebx,[ebx+ebx*4] ; óìíîæåíèå íà 5 |
lea ebx, [ebx+eax*4] ; + x*BytesPerPixel (Vesa2.0 32) |
mov esi,ebx |
add esi, [0xfe80] ; + LFB address |
add esi, [LFBAddress] ; + LFB address |
shr ebx,5 ; change BytesPerPixel to 1/8 |
mov edi,ebx |
add edi, 0x0a0000 ; address of pixel in VGA area |
add edi, VGABasePtr ; address of pixel in VGA area |
mov ebx,ecx |
shr ebx,5 |
inc ebx |
/kernel/trunk/vmodeint.inc |
---|
16,7 → 16,7 |
cmp eax,13 ; CALL VIDEOMODE DRIVER FUNCTIONS |
jne .no_vmode_drv_access |
pushd [0x0000fe00] [0x0000fe04] |
pushd [ScreenWidth] [ScreenHeight] |
popd [old_screen_height] [old_screen_width] |
or eax,-1 ; If driver is absent then eax does not change |
call 0x760100 ; Entry point of video driver |
26,12 → 26,12 |
; mov [esp+28],edx |
mov eax,[old_screen_width] |
mov ebx,[old_screen_height] |
sub eax,[0x0000fe00] |
sub eax,[ScreenWidth] |
jnz @f |
sub ebx,[0x0000fe04] |
sub ebx,[ScreenHeight] |
jz .resolution_wasnt_changed |
jmp .lp1 |
@@: sub ebx,[0x0000fe04] |
@@: sub ebx,[ScreenHeight] |
.lp1: sub [screen_workarea.right],eax |
sub [screen_workarea.bottom],ebx |
38,8 → 38,8 |
call repos_windows |
mov eax, 0 |
mov ebx, 0 |
mov ecx, [0xfe00] |
mov edx, [0xfe04] |
mov ecx, [ScreenWidth] |
mov edx, [ScreenHeight] |
call calculatescreen |
.resolution_wasnt_changed: |