diff --git a/src/boot.asm b/src/boot.asm index 761c316..1324bf9 100644 --- a/src/boot.asm +++ b/src/boot.asm @@ -97,8 +97,8 @@ reset: ; on active le mode graphique GFX_DRV GFX_INIT - call mouse_reset - ;call mouse_init + ; call mouse_reset + call mouse_init GFX_DRV GFX_CRS_UPDATE diff --git a/src/drivers/gfx_cgam.asm b/src/drivers/gfx_cgam.asm index 6d6411e..e843275 100644 --- a/src/drivers/gfx_cgam.asm +++ b/src/drivers/gfx_cgam.asm @@ -1,4 +1,4 @@ -80; ============================================================================= +; ============================================================================= ; Project : Custom BIOS / ROM ; File : gfx_cgam.asm ; Author : frater @@ -573,9 +573,10 @@ cga_cursor_move: mov ax, VIDEO_SEG mov es, ax - ;call cga_cursor_restorebg + call cga_cursor_restorebg + + call cga_cursor_savebg - ;call cga_cursor_savebg call cga_cursor_draw mov byte [BDA_MOUSE + mouse.cur_drawing],0 .done: @@ -589,7 +590,7 @@ cga_cursor_move: ; Sauve 16 lignes (3 bytes/ligne) sous le curseur. ; Stocke 16 DWORDs: chaque DWORD contient (b0|b1<<8|b2<<16) dans les 24 bits bas. ; ----------------------------------------------- -gfx_cursor_savebg: +cga_cursor_savebg: cmp byte [BDA_MOUSE + mouse.bkg_saved], 0 jne .done @@ -726,41 +727,45 @@ cga_cursor_draw: mov si, [BDA_MOUSE + mouse.cur_ofs] ; --- CALCUL de l'offset entre 2 lignes +0x2000 ou -0x2000 --- - mov bx, 0x2000 ; Banque opposée - test word [BDA_MOUSE + mouse.y], 1 + + mov ax, 0x2000 ; Banque +1 + mov cx, [BDA_MOUSE + mouse.y] + test cx, 1 jz .setup_done - neg bx + neg ax ; banque -1 .setup_done: - mov [BDA_MOUSE + mouse.cur_bank_add], bx ; interligne + ou - 0x2000 + mov cx, ax .row_loop: ; --- CONSTRUCTION DES MASQUES (EAX/EBX) --- xor eax, eax xor ebx, ebx - mov ax, [gs:si] ; masque AND - xchg al, ah - ; expansion 16 bits -> 32 bits avec padding - ;shl eax, 8 - ;or eax, 0xFF0000FF ; EAX = [FF][GAUCHE][DROITE][FF] - - mov bx, [gs:si+32] ; masque XOR xchg bl, bh ; expansion 16 bits -> 32 bits avec padding - ;shl ebx, 8 ; EBX = [00][GAUCHE][DROITE][00] + shl ebx, 8 ; EBX = [00][GAUCHE][DROITE][00] + mov ax, [gs:si] ; masque AND + xchg al, ah + ; expansion 16 bits -> 32 bits avec padding + shl eax, 8 + or eax, 0xFF0000FF ; EAX = [FF][GAUCHE][DROITE][FF] - mov dx, [es:di] ; lecture des 16 bits a la position du curseur - and dx, ax ; application du masque AND (AX) - xor dx, bx ; application du masque XOR (BX) + mov edx, [es:di] ; lecture des 16 bits a la position du curseur + and edx, eax ; application du masque AND (AX) + xor edx, ebx ; application du masque XOR (BX) - mov [es:di], dx ; ecriture du résultat + mov [es:di], edx ; ecriture du résultat + add di, cx ; banque suivante + test cx,0x8000 + jz .next_line + add di,80 .next_line: - add di, CGA_STRIDE + neg cx ; prochaine banque = -banque ; [BDA_MOUSE + mouse.cur_bank_add] - + ; mov [BDA_MOUSE + mouse.cur_bank_add], bx ; interligne + ou - 0x2000 add si, 2 ; Prochaine ligne du sprite dec bp jnz .row_loop diff --git a/src/drivers/mouse_ps2.asm b/src/drivers/mouse_ps2.asm index 4c05e2a..6049588 100644 --- a/src/drivers/mouse_ps2.asm +++ b/src/drivers/mouse_ps2.asm @@ -335,7 +335,7 @@ isr_mouse_handler: .done: ; update la position du curseur sur l'écran ; en ce moment c'est commented out (debug) - ; call gfx_cursor_move + call cga_cursor_move .done_eoi: mov al, 0x20 out i8259_SLAVE_CMD, al ; EOI PIC esclave