class VGA_UnchainedEGA_Handler : public VGA_UnchainedRead_Handler { public: template< bool wrapping> void writeHandler(PhysPt start, Bit8u val) { Bit32u data=ModeOperation(val); /* Update video memory and the pixel buffer */ VGA_Latch pixels; // pixels.d=((Bit32u*)vga.mem.linear)[start]; pixels.d=host_readd((HostPt)(&((Bit32u*)vga.mem.linear)[start])); pixels.d&=vga.config.full_not_map_mask; pixels.d|=(data & vga.config.full_map_mask); // ((Bit32u*)vga.mem.linear)[start]=pixels.d; host_writed((HostPt)(&((Bit32u*)vga.mem.linear)[start]),pixels.d); Bit8u * write_pixels=&vga.mem.linear[VGA_CACHE_OFFSET+(start<<3)]; Bit32u colors0_3, colors4_7; VGA_Latch temp;temp.d=(pixels.d>>4) & 0x0f0f0f0f; colors0_3 = Expand16Table[0][temp.b[0]] | Expand16Table[1][temp.b[1]] | Expand16Table[2][temp.b[2]] | Expand16Table[3][temp.b[3]]; // *(Bit32u *)write_pixels=colors0_3; host_writed((HostPt)write_pixels,colors0_3); temp.d=pixels.d & 0x0f0f0f0f; colors4_7 = Expand16Table[0][temp.b[0]] | Expand16Table[1][temp.b[1]] | Expand16Table[2][temp.b[2]] | Expand16Table[3][temp.b[3]]; // *(Bit32u *)(write_pixels+4)=colors4_7; host_writed((HostPt)(write_pixels+4),colors4_7); if (wrapping && GCC_UNLIKELY( start < 512)) { // *(Bit32u *)(write_pixels+512*1024)=colors0_3; // *(Bit32u *)(write_pixels+512*1024+4)=colors4_7; host_writed((HostPt)(write_pixels+512*1024),colors0_3); host_writed((HostPt)(write_pixels+512*1024+4),colors4_7); } }