#include #include #include namespace weee::core { video_interface::video_interface(mem &mem) { mem.register_write16_handler(0x0c002000, 0x0c0020ff, [&](ircolib::u32 addr, ircolib::u16 value) { write16(addr, value); }); mem.register_write32_handler(0x0c002000, 0x0c0020ff, [&](ircolib::u32 addr, ircolib::u32 value) { write32(addr, value); }); } void video_interface::write16(ircolib::u32 addr, ircolib::u16 value) { switch (addr) { case 0x00: vtr.raw = value; break; case 0x02: dcr.raw = value; break; case 0x4a: hsr.raw = value; break; case 0x6c: viclk = value & 1; break; case 0x70: break; default: ircolib::panic("video_interface::write16 to unimplemented addr 0x{:04X} with value 0x{:04X}", addr, value); } } void video_interface::write32(ircolib::u32 addr, ircolib::u32 value) { switch (addr) { case 0x02: dcr.raw = value; break; case 0x04: htr0.raw = value; break; case 0x08: htr1.raw = value; break; case 0x0c: vto.raw = value; break; case 0x10: vte.raw = value; break; case 0x14: bbei.raw = value; break; case 0x18: bboi.raw = value; break; case 0x1c: tfbl.raw = value & 0x1ffffe00; break; case 0x24: bfbl.raw = value & 0x10fffe00; break; case 0x4c: case 0x50: case 0x54: fct0[addr - 0x4c].raw = value; break; case 0x58: case 0x5c: case 0x60: case 0x64: fct1[addr - 0x58].raw = value; break; default: ircolib::panic("video_interface::write32 to unimplemented addr 0x{:04X} with value 0x{:08X}", addr, value); } } } // namespace weee::core