static Bitu INT10_Handler(void) { // NTS: We do have to check the "current video mode" from the BIOS data area every call. // Some OSes like Windows 95 rely on overwriting the "current video mode" byte in // the BIOS data area to play tricks with the BIOS. If we don't call this, tricks // like the Windows 95 boot logo or INT 10h virtualization in Windows 3.1/9x/ME // within the DOS "box" will not work properly. INT10_SetCurMode(); switch (reg_ah) { case 0x00: /* Set VideoMode */ INT10_SetVideoMode(reg_al); break; case 0x01: /* Set TextMode Cursor Shape */ INT10_SetCursorShape(reg_ch,reg_cl); break; case 0x02: /* Set Cursor Pos */ INT10_SetCursorPos(reg_dh,reg_dl,reg_bh); break; case 0x03: /* get Cursor Pos and Cursor Shape*/ // reg_ah=0; reg_dl=CURSOR_POS_COL(reg_bh); reg_dh=CURSOR_POS_ROW(reg_bh); reg_cx=real_readw(BIOSMEM_SEG,BIOSMEM_CURSOR_TYPE); break; case 0x04: /* read light pen pos YEAH RIGHT */ /* Light pen is not supported */ reg_ax=0; break; case 0x05: /* Set Active Page */ if ((reg_al & 0x80) && IS_TANDY_ARCH) { Bit8u crtcpu=real_readb(BIOSMEM_SEG, BIOSMEM_CRTCPU_PAGE); switch (reg_al) { case 0x80: reg_bh=crtcpu & 7; reg_bl=(crtcpu >> 3) & 0x7; break; case 0x81: crtcpu=(crtcpu & 0xc7) | ((reg_bl & 7) << 3); break; case 0x82: crtcpu=(crtcpu & 0xf8) | (reg_bh & 7); break; case 0x83: crtcpu=(crtcpu & 0xc0) | (reg_bh & 7) | ((reg_bl & 7) << 3); break; } if (machine==MCH_PCJR) { /* always return graphics mapping, even for invalid values of AL */ reg_bh=crtcpu & 7; reg_bl=(crtcpu >> 3) & 0x7; } IO_WriteB(0x3df,crtcpu); real_writeb(BIOSMEM_SEG, BIOSMEM_CRTCPU_PAGE,crtcpu); }
static Bitu INT10_Handler(void) { #if 0 switch (reg_ah) { case 0x02: case 0x03: case 0x09: case 0xc: case 0xd: case 0x0e: case 0x10: case 0x4f: break; default: LOG(LOG_INT10,LOG_NORMAL)("Function AX:%04X , BX %04X DX %04X",reg_ax,reg_bx,reg_dx); break; } #endif switch (reg_ah) { case 0x00: /* Set VideoMode */ INT10_SetVideoMode(reg_al); break; case 0x01: /* Set TextMode Cursor Shape */ INT10_SetCursorShape(reg_ch,reg_cl); break; case 0x02: /* Set Cursor Pos */ INT10_SetCursorPos(reg_dh,reg_dl,reg_bh); break; case 0x03: /* get Cursor Pos and Cursor Shape*/ // reg_ah=0; reg_dl=CURSOR_POS_COL(reg_bh); reg_dh=CURSOR_POS_ROW(reg_bh); reg_cx=real_readw(BIOSMEM_SEG,BIOSMEM_CURSOR_TYPE); break; case 0x04: /* read light pen pos YEAH RIGHT */ /* Light pen is not supported */ reg_ax=0; break; case 0x05: /* Set Active Page */ if ((reg_al & 0x80) && IS_TANDY_ARCH) { Bit8u crtcpu=real_readb(BIOSMEM_SEG, BIOSMEM_CRTCPU_PAGE); switch (reg_al) { case 0x80: reg_bh=crtcpu & 7; reg_bl=(crtcpu >> 3) & 0x7; break; case 0x81: crtcpu=(crtcpu & 0xc7) | ((reg_bl & 7) << 3); break; case 0x82: crtcpu=(crtcpu & 0xf8) | (reg_bh & 7); break; case 0x83: crtcpu=(crtcpu & 0xc0) | (reg_bh & 7) | ((reg_bl & 7) << 3); break; } if (machine==MCH_PCJR) { /* always return graphics mapping, even for invalid values of AL */ reg_bh=crtcpu & 7; reg_bl=(crtcpu >> 3) & 0x7; } IO_WriteB(0x3df,crtcpu); real_writeb(BIOSMEM_SEG, BIOSMEM_CRTCPU_PAGE,crtcpu); }