core: try to reimplement Screen (WIP)