27
27
#include " inout.h"
28
28
#include " dos_inc.h"
29
29
30
+ #include " checks.h"
31
+ CHECK_NARROWING ();
32
+
30
33
static callback_number_t call_int16 = 0 ;
31
34
static callback_number_t call_irq1 = 0 ;
32
35
static callback_number_t call_irq6 = 0 ;
@@ -369,9 +372,10 @@ static Bitu IRQ1_Handler(void) {
369
372
break ;
370
373
}
371
374
if (flags1 &0x08 ) {
372
- uint8_t token = mem_readb (BIOS_KEYBOARD_TOKEN);
373
- token = token*10 + (uint8_t )(scan_to_scanascii[scancode].alt &0xff );
374
- mem_writeb (BIOS_KEYBOARD_TOKEN,token);
375
+ const auto token = mem_readb (BIOS_KEYBOARD_TOKEN);
376
+ const auto alt = get_key_codes_for (scancode).alt & 0xff ;
377
+ const auto combined = token * 10 + alt;
378
+ mem_writeb (BIOS_KEYBOARD_TOKEN, check_cast<uint8_t >(combined));
375
379
} else if (flags1 &0x04 ) {
376
380
add_key (scan_to_scanascii[scancode].control );
377
381
} else if ( ((flags1 &0x3 ) != 0 ) ^ ((flags1 &0x20 ) != 0 ) ) { // Xor shift and numlock (both means off)
@@ -534,7 +538,8 @@ static Bitu INT16_Handler(void) {
534
538
IO_Write (0x60 ,0x20 ); // 500 msec delay, 30 cps
535
539
} else if (reg_al == 0x05 ) { // set repeat rate and delay
536
540
IO_Write (0x60 ,0xf3 );
537
- IO_Write (0x60 ,(reg_bh&3 )<<5 |(reg_bl&0x1f ));
541
+ const auto rate_and_delay = (reg_bh & 3 ) << 5 | (reg_bl & 0x1f );
542
+ IO_Write (0x60 , check_cast<uint8_t >(rate_and_delay));
538
543
} else {
539
544
LOG (LOG_BIOS,LOG_ERROR)(" INT16:Unhandled Typematic Rate Call %2X BX=%X" ,reg_al,reg_bx);
540
545
}
@@ -545,9 +550,11 @@ static Bitu INT16_Handler(void) {
545
550
break ;
546
551
case 0x12 : /* GET EXTENDED SHIFT STATES */
547
552
reg_al = mem_readb (BIOS_KEYBOARD_FLAGS1);
548
- reg_ah = (mem_readb (BIOS_KEYBOARD_FLAGS2)&0x73 ) |
549
- ((mem_readb (BIOS_KEYBOARD_FLAGS2)&4 )<<5 ) | // SysReq pressed, bit 7
550
- (mem_readb (BIOS_KEYBOARD_FLAGS3)&0x0c ); // Right Ctrl/Alt pressed, bits 2,3
553
+ reg_ah = check_cast<uint8_t >((mem_readb (BIOS_KEYBOARD_FLAGS2) & 0x73 ) |
554
+ // SysReq pressed, bit 7
555
+ ((mem_readb (BIOS_KEYBOARD_FLAGS2) & 4 ) << 5 ) |
556
+ // Right Ctrl/Alt pressed, bits 2,3
557
+ (mem_readb (BIOS_KEYBOARD_FLAGS3) & 0x0c ));
551
558
break ;
552
559
case 0x55 :
553
560
/* Weird call used by some dos apps */
0 commit comments