static void write_tandy(Bitu port,Bitu val,Bitu iolen) { switch (port) { case 0x3d8: vga.tandy.mode_control=val; TandyCheckLineMask(); VGA_SetBlinking(val & 0x20); TANDY_FindMode(); break; case 0x3d9: write_color_select(val); break; case 0x3da: vga.tandy.reg_index=val; break; // case 0x3db: //Clear lightpen latch break; // case 0x3dc: //Preset lightpen latch break; // case 0x3dd: //Extended ram page address register: break; case 0x3de: write_tandy_reg(val); break; case 0x3df: vga.tandy.line_mask = val >> 6; vga.tandy.draw_bank = val & ((vga.tandy.line_mask&2) ? 0x6 : 0x7); vga.tandy.mem_bank = (val >> 3) & ((vga.tandy.line_mask&2) ? 0x6 : 0x7); TandyCheckLineMask(); VGA_SetupHandlers(); break; } }
static void TANDY_FindMode(void) { if (vga.tandy.mode_control & 0x2) { if (vga.tandy.gfx_control & 0x10) VGA_SetMode(M_TANDY16); else if (vga.tandy.gfx_control & 0x08) VGA_SetMode(M_TANDY4); else if (vga.tandy.mode_control & 0x10) VGA_SetMode(M_TANDY2); else VGA_SetMode(M_TANDY4); write_color_select(vga.tandy.color_select); } else { VGA_SetMode(M_TANDY_TEXT); } }
static void write_mode_control(Bit8u val) { /* Check if someone changes the blinking/hi intensity bit */ vga.tandy.mode_control=val; VGA_SetBlinking((val & 0x20)); if (val & 0x2) { if (val & 0x10) { } else VGA_SetMode(M_CGA4); write_color_select(vga.tandy.color_select); //Setup the correct palette } else { VGA_SetMode(M_TEXT); } }
static void write_cga(Bitu port,Bitu val,Bitu iolen) { switch (port) { case 0x3d8: vga.tandy.mode_control=val; if (vga.tandy.mode_control & 0x2) { if (vga.tandy.mode_control & 0x10) { if (!(val & 0x4) && machine==MCH_CGA) { VGA_SetMode(M_CGA16); //Video burst 16 160x200 color mode } else { VGA_SetMode(M_TANDY2); } } else VGA_SetMode(M_TANDY4); write_color_select(vga.tandy.color_select); } else { VGA_SetMode(M_TANDY_TEXT); } VGA_SetBlinking(val & 0x20); break; case 0x3d9: write_color_select(val); break; } }
static void PCJr_FindMode(void) { if (vga.tandy.mode_control & 0x2) { if (vga.tandy.mode_control & 0x10) { /* bit4 of mode control 1 signals 16 colour graphics mode */ VGA_SetMode(M_TANDY16); } else if (vga.tandy.gfx_control & 0x08) { /* bit3 of mode control 2 signals 2 colour graphics mode */ VGA_SetMode(M_TANDY2); } else { /* otherwise some 4-colour graphics mode */ VGA_SetMode(M_TANDY4); } write_color_select(vga.tandy.color_select); } else { VGA_SetMode(M_TANDY_TEXT); } }
static void write_pcjr(Bitu port,Bitu val,Bitu iolen) { switch (port) { case 0x3d9: write_color_select(val); break; case 0x3da: if (vga.tandy.pcjr_flipflop) write_tandy_reg(val); else vga.tandy.reg_index=val; vga.tandy.pcjr_flipflop=!vga.tandy.pcjr_flipflop; break; case 0x3df: vga.tandy.is_32k_mode=(val & 0x80)==0x80; vga.tandy.disp_bank=val & (vga.tandy.is_32k_mode ? 0x6 : 0x7); vga.tandy.mem_bank=(val >> 3) & 0x7; VGA_SetupHandlers(); break; } }
static void write_pcjr(Bitu port,Bitu val,Bitu iolen) { switch (port) { case 0x3d9: write_color_select(val); break; case 0x3da: if (vga.tandy.pcjr_flipflop) write_tandy_reg(val); else vga.tandy.reg_index=val; vga.tandy.pcjr_flipflop=!vga.tandy.pcjr_flipflop; break; case 0x3df: vga.tandy.line_mask = val >> 6; vga.tandy.draw_bank = val & ((vga.tandy.line_mask&2) ? 0x6 : 0x7); vga.tandy.mem_bank = (val >> 3) & ((vga.tandy.line_mask&2) ? 0x6 : 0x7); vga.tandy.draw_base = &MemBase[vga.tandy.draw_bank * 16 * 1024]; vga.tandy.mem_base = &MemBase[vga.tandy.mem_bank * 16 * 1024]; TandyCheckLineMask(); VGA_SetupHandlers(); break; } }
static void write_tandy(Bitu port,Bitu val,Bitu iolen) { switch (port) { case 0x3d8: vga.tandy.mode_control=val; VGA_SetBlinking(val & 0x20); TANDY_FindMode(); break; case 0x3d9: write_color_select(val); break; case 0x3da: vga.tandy.reg_index=val; break; case 0x3de: write_tandy_reg(val); break; case 0x3df: vga.tandy.is_32k_mode=(val & 0x80)==0x80; vga.tandy.disp_bank=val & ((val & 0x80) ? 0x6 : 0x7); vga.tandy.mem_bank=(val >> 3) & ((val & 0x80) ? 0x6 : 0x7); VGA_SetupHandlers(); break; } }