#pragma once #include "common/bitfield.h" #include "types.h" #include class Bus; class DMA; class GPU { public: GPU(); ~GPU(); bool Initialize(Bus* bus, DMA* dma); void Reset(); u32 ReadRegister(u32 offset); void WriteRegister(u32 offset, u32 value); private: void SoftReset(); void WriteGP0(u32 value); void WriteGP1(u32 value); Bus* m_bus = nullptr; DMA* m_dma = nullptr; union GPUSTAT { u32 bits; BitField texture_page_x_base; BitField texture_page_y_base; BitField semi_transparency; BitField texture_page_colors; BitField dither_enable; BitField draw_to_display_area; BitField draw_set_mask_bit; BitField draw_to_masked_pixels; BitField interlaced_field; BitField reverse_flag; BitField texture_disable; BitField horizontal_resolution_2; BitField horizontal_resolution_1; BitField vetical_resolution; BitField pal_mode; BitField display_area_color_depth_24; BitField vertical_interlace; BitField display_enable; BitField interrupt_request; BitField dma_data_request; BitField ready_to_recieve_cmd; BitField ready_to_send_vram; BitField ready_to_recieve_dma; BitField dma_direction; BitField drawing_even_line; } m_GPUSTAT = {}; };