@@ -1477,24 +1477,26 @@ public void VbeGetControllerInfo() {
14771477
14781478 /// <inheritdoc cref="IVesaBiosExtension.VbeGetModeInfo"/>
14791479 public void VbeGetModeInfo ( ) {
1480- ushort modeNumber = State . CX ;
1480+ ushort requestedModeNumber = State . CX ;
1481+ const ushort SupportedVbeMode = 0x0102 ;
1482+ ushort modeNumber = ( ushort ) ( requestedModeNumber & 0x3FFF ) ;
14811483 ushort segment = State . ES ;
14821484 ushort offset = State . DI ;
14831485 uint address = MemoryUtils . ToPhysicalAddress ( segment , offset ) ;
14841486
1485- // Get mode parameters based on VESA mode number
1487+ // Get mode parameters based on VESA base mode number (without high flag bits)
14861488 ( ushort width , ushort height , byte bpp , bool supported ) = GetVesaModeParams ( modeNumber ) ;
14871489
1488- if ( ! supported ) {
1490+ if ( ! supported || modeNumber != SupportedVbeMode ) {
14891491 if ( _logger . IsEnabled ( LogEventLevel . Warning ) ) {
14901492 _logger . Warning ( "{ClassName} INT 10 4F01 VbeGetModeInfo - Unsupported mode 0x{Mode:X4}" ,
1491- nameof ( VgaBios ) , modeNumber ) ;
1493+ nameof ( VgaBios ) , requestedModeNumber ) ;
14921494 }
14931495 State . AX = ( ushort ) VbeStatus . Failed ;
14941496 return ;
14951497 }
14961498
1497- var modeInfo = new VbeModeInfoBlock ( Memory , address ) ;
1499+ VbeModeInfoBlock modeInfo = new VbeModeInfoBlock ( Memory , address ) ;
14981500 modeInfo . Clear ( ) ;
14991501
15001502 // Mode Attributes
0 commit comments