2948{
2950 {
2951
2952 case 0x00:
2953 {
2955 break;
2956 }
2957
2958
2959 case 0x01:
2960 {
2962 break;
2963 }
2964
2965
2966 case 0x02:
2967 {
2969
2970
2972
2974 break;
2975 }
2976
2977
2978 case 0x03:
2979 {
2981
2982
2986 break;
2987
2988
2991 break;
2992 }
2993
2994
2995 case 0x04:
2996 {
2997
2998
2999
3000
3002 break;
3003 }
3004
3005
3006 case 0x05:
3007 {
3009 break;
3010 }
3011
3012
3013 case 0x06:
3014 case 0x07:
3015 {
3017
3020
3021 break;
3022 }
3023
3024
3025 case 0x08:
3026 {
3030
3031
3035 break;
3036
3037
3041
3042
3047
3048
3050
3051 break;
3052 }
3053
3054
3055 case 0x09:
3056
3057 case 0x0A:
3058 {
3064
3065
3069 break;
3070
3071
3073
3074
3076 {
3077
3079 Column++;
3080
3081
3083 {
3084
3085 Column = 0;
3086 Row++;
3087 }
3088
3089
3091 {
3093 }
3094 }
3095
3096 break;
3097 }
3098
3099
3100 case 0x0B:
3101 {
3103 {
3104 DPRINT1(
"BIOS Function INT 10h, AH = 0Bh, BH = 0x%02X is unsupported for non-CGA modes\n",
3106 break;
3107 }
3108
3110 {
3111 case 0x00:
3112 {
3113#ifdef DOSBOX
3115
3116
3118
3120
3121
3123
3124
3126
3128
3130
3136#else
3137
3139#endif
3140
3141
3144 break;
3145 }
3146
3147 case 0x01:
3148 {
3150
3151
3152
3154
3155
3157
3159
3165
3166
3169 break;
3170 }
3171
3172 default:
3173 DPRINT1(
"BIOS Function INT 10h, AH = 0Bh, BH = 0x%02X NOT IMPLEMENTED\n",
3175 break;
3176 }
3177
3178 break;
3179 }
3180
3181
3182 case 0x0E:
3183 {
3185
3186
3190 break;
3191
3193 break;
3194 }
3195
3196
3197 case 0x0F:
3198 {
3201 break;
3202 }
3203
3204
3205 case 0x10:
3206 {
3208 {
3209
3210 case 0x00:
3211 {
3213
3214
3217 break;
3218 }
3219
3220
3221 case 0x01:
3222 {
3224
3225
3228 break;
3229 }
3230
3231
3232 case 0x02:
3233 {
3236
3237
3239 {
3241 }
3242
3243
3244
3248
3249
3252 break;
3253 }
3254
3255
3256 case 0x03:
3257 {
3258
3259 BYTE VgaAcControlReg;
3260
3264
3265
3267 {
3270 }
3271 else
3272 {
3273 VgaAcControlReg &= ~VGA_AC_CONTROL_BLINK;
3275 }
3276
3280
3281
3284 break;
3285 }
3286
3287
3288 case 0x07:
3289 {
3290
3293
3294
3296
3297
3300 break;
3301 }
3302
3303
3304 case 0x08:
3305 {
3306
3309
3310
3312
3313
3316 break;
3317 }
3318
3319
3320 case 0x09:
3321 {
3324
3325
3327 {
3328
3331
3332
3334 }
3335
3336
3340
3341
3344 break;
3345 }
3346
3347
3348 case 0x10:
3349 {
3350
3351
3353
3354
3358
3359 break;
3360 }
3361
3362
3363 case 0x12:
3364 {
3367
3368
3369
3371
3373 {
3374
3378 }
3379
3380 break;
3381 }
3382
3383
3384 case 0x13:
3385 {
3387 {
3388
3392 }
3393 else if (
getBL() == 1)
3394 {
3395
3399 }
3400 else
3401 {
3402 DPRINT1(
"BIOS Palette Control Sub-sub-command BL = 0x%02X INVALID\n",
getBL());
3403 }
3404
3405 break;
3406 }
3407
3408
3409 case 0x15:
3410 {
3411
3413
3414
3418
3419 break;
3420 }
3421
3422
3423 case 0x17:
3424 {
3427
3428
3429
3431
3433 {
3434
3438 }
3439
3440 break;
3441 }
3442
3443
3444 case 0x18:
3445 {
3447 break;
3448 }
3449
3450
3451 case 0x19:
3452 {
3454 break;
3455 }
3456
3457 default:
3458 {
3459 DPRINT1(
"BIOS Palette Control Sub-command AL = 0x%02X NOT IMPLEMENTED\n",
3461 break;
3462 }
3463 }
3464
3465 break;
3466 }
3467
3468
3469 case 0x11:
3470 {
3472 {
3473
3474
3475
3476 case 0x00:
3477 case 0x10:
3478 {
3479
3480
3481
3482
3483
3485 break;
3486 }
3487
3488
3489 case 0x01:
3490 case 0x11:
3491 {
3492
3493
3494
3496
3498 break;
3499 }
3500
3501
3502 case 0x02:
3503 case 0x12:
3504 {
3505
3506
3507
3509
3511 break;
3512 }
3513
3514
3515 case 0x04:
3516 case 0x14:
3517 {
3518
3519
3520
3522
3524 break;
3525 }
3526
3527
3528 case 0x20:
3529 {
3530
3531
3533 break;
3534 }
3535
3536
3537 case 0x21:
3538 {
3539
3540
3541
3542
3544
3545
3548 {
3552 case 0x02:
3554 }
3555
3556 break;
3557 }
3558
3559
3560 case 0x22:
3561 {
3562
3563
3564
3565
3567
3568
3571 {
3575 case 0x02:
3577 }
3578
3579 break;
3580 }
3581
3582
3583 case 0x23:
3584 {
3585
3586
3587
3588
3590
3591
3594 {
3598 case 0x02:
3600 }
3601
3602 break;
3603 }
3604
3605
3606 case 0x24:
3607 {
3608
3609
3610
3611
3613
3614
3617 {
3621 case 0x02:
3623 }
3624
3625 break;
3626 }
3627
3628
3629 case 0x30:
3630 {
3632
3634 {
3635
3636 case 0x00:
3638 break;
3639
3640
3641 case 0x01:
3643 break;
3644
3645
3646 case 0x02:
3648 break;
3649
3650
3651 case 0x03:
3653 break;
3654
3655
3656 case 0x04:
3658 break;
3659
3660
3661 case 0x05:
3662 break;
3663
3664
3665 case 0x06:
3667 break;
3668
3669
3670 case 0x07:
3671 break;
3672
3673 default:
3674 DPRINT1(
"INT 10h, AL=30h Function BH = 0x%02X NOT IMPLEMENTED\n",
3676 }
3677
3678
3683
3684 break;
3685 }
3686
3687 default:
3688 {
3689 DPRINT1(
"BIOS Font Control Sub-command AL = 0x%02X NOT IMPLEMENTED\n",
3691 }
3692 }
3693
3694 break;
3695 }
3696
3697
3698 case 0x12:
3699 {
3701 {
3702
3703 case 0x10:
3704 {
3709 break;
3710 }
3711
3712
3713 case 0x34:
3714 {
3716
3717
3718 if (
State > 1)
break;
3719
3720
3721
3722
3723
3724
3726
3727
3729 break;
3730 }
3731
3732
3733 case 0x36:
3734 {
3737
3738
3739 if (
State > 1)
break;
3740
3741
3744
3746 Clocking &= ~VGA_SEQ_CLOCK_SD;
3747 else
3749
3751
3752
3754 break;
3755 }
3756
3757 default:
3758 {
3759 DPRINT1(
"BIOS Function INT 10h, AH = 12h (Alternate Function Select), BX = 0x%04X NOT IMPLEMENTED\n",
3761 break;
3762 }
3763 }
3764
3765 break;
3766 }
3767
3768
3769 case 0x13:
3770 {
3774 BYTE OldRow, OldColumn;
3779
3780
3784 break;
3785
3786
3788
3789
3792 if (Row == 0xFF)
3793 {
3794 Row = OldRow;
3795 Column = OldColumn;
3796 }
3798
3800 {
3804 }
3805
3806
3808
3809 break;
3810 }
3811
3812
3813 case 0x1A:
3814 {
3816 {
3817 case 0x00:
3818 {
3821
3822
3824 break;
3825 }
3826 case 0x01:
3827 {
3828 DPRINT1(
"Set Display combination code - Unsupported\n");
3829 break;
3830 }
3831 default:
3832 break;
3833 }
3834 break;
3835 }
3836
3837
3838 case 0x1B:
3839 {
3841
3842
3843 if (
getBX() != 0x0000)
3844 {
3845 DPRINT1(
"INT 10h, AH=1Bh, unsupported subfunction 0x%04x\n",
getBX());
3846 break;
3847 }
3848
3849
3850
3852
3866
3868 Table->VGADccIDAlternate = 0x00;
3869
3870
3871
3872
3873
3874
3876
3877
3879
3880
3882 break;
3883 }
3884
3885
3886 case 0x4F:
3887 {
3889 break;
3890 }
3891
3892 default:
3893 {
3894 DPRINT1(
"BIOS Function INT 10h, AH = 0x%02X, AL = 0x%02X, BH = 0x%02X NOT IMPLEMENTED\n",
3896 }
3897 }
3898}
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
_In_ ULONG _In_ ULONG Offset
_In_ PVOID _Out_opt_ BOOLEAN _Out_opt_ PPFN_NUMBER Page
WORD CursorPosition[BIOS_MAX_PAGES]
VOID WINAPI VbeService(LPWORD Stack)
static LARGE_INTEGER Counter
FAST486_STATE EmulatorContext
VOID IOWriteB(USHORT Port, UCHAR Buffer)
UCHAR IOReadB(USHORT Port)
VOID FASTCALL EmulatorReadMemory(PFAST486_STATE State, ULONG Address, PVOID Buffer, ULONG Size)
VOID VgaWriteTextModeFont(UINT FontNumber, CONST UCHAR *FontData, UINT Height)
#define VGA_DAC_READ_INDEX
#define VGA_DAC_WRITE_INDEX
#define VGA_FONT_CHARACTERS
#define VGA_AC_CONTROL_BLINK
VOID WINAPI setCX(USHORT)
VOID WINAPI setDX(USHORT)
USHORT WINAPI getBX(VOID)
USHORT WINAPI getCX(VOID)
USHORT WINAPI getDX(VOID)
USHORT WINAPI getES(VOID)
USHORT WINAPI getBP(VOID)
USHORT WINAPI getDI(VOID)
VOID WINAPI setBP(USHORT)
VOID WINAPI setAX(USHORT)
VOID WINAPI setES(USHORT)
#define IS_TEXT_MODE(ModeNumber)
static BOOLEAN VidBiosScrollWindow(SCROLL_DIRECTION Direction, DWORD Amount, SMALL_RECT Rectangle, BYTE Page, BYTE FillAttribute)
static __inline VOID VgaSetSinglePaletteRegister(BYTE Index, BYTE Value)
static VOID VidBiosDrawGlyph(WORD CharData, BOOLEAN UseAttr, BYTE Page, BYTE Row, BYTE Column)
static BYTE VidBiosGetVideoMode(VOID)
static VOID VidBiosSetCursorPosition(BYTE Row, BYTE Column, BYTE Page)
static VOID VidBiosSetCursorShape(WORD CursorStartEnd)
static VOID VidBiosPrintCharacter(CHAR Character, BYTE Attribute, BOOLEAN UseAttr, BYTE Page)
static BOOLEAN VidBiosSetVideoPage(BYTE PageNumber)
static __inline VOID VidBiosGetCursorPosition(PBYTE Row, PBYTE Column, BYTE Page)
_In_ WDFCOLLECTION _In_ ULONG Index
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
BOOL WINAPI Rectangle(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int)
_Must_inspect_result_ _In_ ULONG Flags