Public feed
#725753
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);
}
}