#pragma once #include namespace weee::core { struct mem; struct video_interface { video_interface(mem &); void write16(ircolib::u32, ircolib::u16); void write32(ircolib::u32, ircolib::u32); ircolib::u16 read16(ircolib::u32); ircolib::u32 read32(ircolib::u32); ircolib::u32 xfb_top_addr() { auto addr = tfbl.fbb; if (tfbl.page) { addr <<= 5; } return addr + tfbl.xof; } union DCR { struct { unsigned e : 1; unsigned r : 1; unsigned i : 1; unsigned d : 1; unsigned le0 : 2; unsigned le1 : 2; unsigned fmt : 2; unsigned : 6; }; ircolib::u16 raw; } dcr; union HTR0 { struct { unsigned hlw : 9; unsigned : 7; unsigned hce : 7; unsigned : 1; unsigned hcs : 7; unsigned : 1; }; ircolib::u32 raw; } htr0; union HTR1 { struct { unsigned hsy : 7; unsigned hbe : 10; unsigned hbs : 10; unsigned : 5; }; ircolib::u32 raw; } htr1; union VTR { struct { unsigned equ : 4; unsigned acv : 10; unsigned : 2; }; ircolib::u16 raw; } vtr; union VTO { struct { unsigned prb : 10; unsigned : 6; unsigned psb : 10; unsigned : 6; }; ircolib::u32 raw; } vto, vte; union BBI { struct { unsigned bs1 : 5; unsigned be1 : 11; unsigned bs3 : 5; unsigned be3 : 11; }; ircolib::u32 raw; } bbei, bboi; union FBR { struct { unsigned : 3; unsigned page : 1; unsigned xof : 4; unsigned fbb : 24; }; ircolib::u32 raw; } tfbl{}, bfbl{}; union FCT012 { struct { unsigned tap0 : 10; unsigned tap1 : 10; unsigned tap2 : 10; unsigned : 2; }; ircolib::u32 raw; } fct0[3]; union FCT3456 { struct { unsigned tap0 : 8; unsigned tap1 : 8; unsigned tap2 : 8; unsigned tap3 : 8; }; ircolib::u32 raw; } fct1[4]; union HSR { struct { unsigned stp : 9; unsigned : 3; unsigned hs_en : 1; unsigned : 3; }; ircolib::u16 raw; } hsr; bool viclk; }; } // namespace weee::core