Ticket #14927: cbrk_bug.patch
| File cbrk_bug.patch, 3.0 KB (added by , 9 years ago) |
|---|
-
src/VBox/Devices/PC/BIOS/keyboard.c
old new 49 49 # define BX_DEBUG_INT16(...) 50 50 #endif 51 51 52 #if 1 //@todo: should be implement as inline asm? 53 extern void invoke_int1B(void); 54 #endif 55 52 56 extern void post(void); 53 57 #pragma aux post "*"; 54 58 … … 456 460 break; 457 461 458 462 case 0x46: /* Scroll Lock press */ 463 if (mf2_state & 0x02) { // Ctrl-Break 464 uint16_t buffer_start; 465 shift_flags |= 0x80; 466 write_byte(0x0040, 0x17, shift_flags); 467 #if BX_CPU < 2 468 buffer_start = 0x001E; 469 #else 470 buffer_start = read_word(0x0040, 0x0080); 471 #endif 472 write_word(0x0040, 0x001A, buffer_start); // buffer_head 473 write_word(0x0040, 0x001C, buffer_start); // buffer_tail 474 enqueue_key(0, 0); 475 #if 0 //@todo: should be implement as inline asm? 476 ASM_START 477 push bp 478 mov bp, sp 479 int 0x1B 480 pop bp 481 ASM_END 482 #else 483 invoke_int1B(); 484 #endif 485 break; 486 } 459 487 mf2_flags |= 0x10; 460 488 write_byte(0x0040, 0x18, mf2_flags); 461 489 shift_flags ^= 0x10; … … 463 491 break; 464 492 465 493 case 0xc6: /* Scroll Lock release */ 466 mf2_flags &= ~0x10; 467 write_byte(0x0040, 0x18, mf2_flags); 494 if ((mf2_state & 0x02) == 0) { // not Ctrl-Break released 495 mf2_flags &= ~0x10; 496 write_byte(0x0040, 0x18, mf2_flags); 497 } 468 498 break; 469 499 470 500 case 0x53: /* Del press */ -
src/VBox/Devices/PC/BIOS/orgs.asm
old new 940 940 pop ax 941 941 iret 942 942 943 if 1 ;@todo: should be implement as inline asm? 944 public invoke_int1B_ 945 invoke_int1B_: 946 push bp 947 mov bp, sp 948 int 1Bh 949 pop bp 950 retn 951 endif 943 952 944 953 ;; -------------------------------------------------------- 945 954 ;; INT 06h handler - Invalid Opcode Exception -
src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp
old new 1431 1431 1432 1432 void UIMachineLogic::sltTypeCtrlBreak() 1433 1433 { 1434 static QVector<LONG> sequence( 4);1434 static QVector<LONG> sequence(6); 1435 1435 sequence[0] = 0x1d; /* Ctrl down */ 1436 sequence[1] = 0x46; /* Break down */ 1437 sequence[2] = 0x46 | 0x80; /* Break up */ 1438 sequence[3] = 0x1d | 0x80; /* Ctrl up */ 1436 sequence[1] = 0xe0; /* Ctrl-... */ 1437 sequence[2] = 0x46; /* ...-Break down */ 1438 sequence[3] = 0xe0; /* Ctrl-... */ 1439 sequence[4] = 0x46 | 0x80; /* ...-Break up */ 1440 sequence[5] = 0x1d | 0x80; /* Ctrl up */ 1439 1441 keyboard().PutScancodes(sequence); 1440 1442 AssertWrapperOk(keyboard()); 1441 1443 }

