OSDN Git Service

[VM][DEVICE] Use __FASTCALL with interfaces, read_*() ,write_*(), fetch_op() and...
[csp-qt/common_source_project-fm7.git] / source / src / vm / familybasic / ppu.h
index 8d72d1d..4850690 100644 (file)
 #include "../../emu.h"
 #include "../device.h"
 
+#define MIRROR_HORIZ   0
+#define MIRROR_VERT    1
+#define MIRROR_4SCREEN 2
+
+namespace FAMILYBASIC {
+       class MEMORY;
+}
+
+namespace FAMILYBASIC {
 class PPU : public DEVICE
 {
 private:
        DEVICE *d_cpu;
+       FAMILYBASIC::MEMORY *d_memory;
        
-       scrntype palette_pc[64];
-       uint8 screen[240][256 + 16];    // 2*8 = side margin
-       uint8 solid_buf[512];
+       scrntype_t palette_pc[64];
+       uint8_t screen[240][256 + 16];  // 2*8 = side margin
+       uint8_t solid_buf[512];
        
-       uint8* banks[16];
-       uint8 header[16];
-       uint8 chr_rom[0x2000];
-       uint8 name_tables[0x1000];
-       uint8 spr_ram[0x100];
-       uint8 bg_pal[0x10];
-       uint8 spr_pal[0x10];
-       uint8 spr_ram_rw_ptr;
+       header_t header;
+       uint32_t banks[16];
+       uint8_t* bank_ptr[16];
+//     uint8_t chr_rom[0x2000];
+       uint32_t chr_rom_size;
+       uint32_t chr_rom_mask;
+       uint8_t *chr_rom;
+       uint8_t name_tables[0x1000];
+       uint8_t spr_ram[0x100];
+       uint8_t bg_pal[0x10];
+       uint8_t spr_pal[0x10];
+       uint8_t spr_ram_rw_ptr;
        
-       uint8 regs[8];
-       uint16 bg_pattern_table_addr;
-       uint16 spr_pattern_table_addr;
-       uint16 ppu_addr_inc;
-       uint8 rgb_bak;
+       uint8_t regs[8];
+       uint16_t bg_pattern_table_addr;
+       uint16_t spr_pattern_table_addr;
+       uint16_t ppu_addr_inc;
+       uint8_t rgb_bak;
        bool toggle_2005_2006;
-       uint8 read_2007_buffer;
+       uint8_t read_2007_buffer;
        
-       uint16 loopy_v;
-       uint16 loopy_t;
-       uint8 loopy_x;
+       uint16_t loopy_v;
+       uint16_t loopy_t;
+       uint8_t loopy_x;
        
        void render_scanline(int v);
        void render_bg(int v);
@@ -51,27 +65,52 @@ private:
        void update_palette();
        
 public:
-       PPU(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu) {}
+       PPU(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       {
+               set_device_name(_T("PPU"));
+       }
        ~PPU() {}
        
        // common functions
        void initialize();
+       void release();
        void reset();
-       void write_data8(uint32 addr, uint32 data);
-       uint32 read_data8(uint32 addr);
+       void __FASTCALL write_data8(uint32_t addr, uint32_t data);
+       uint32_t __FASTCALL read_data8(uint32_t addr);
        void event_vline(int v, int clock);
+       bool process_state(FILEIO* state_fio, bool loading);
        
-       // unique function
+       // unique functions
        void set_context_cpu(DEVICE* device)
        {
                d_cpu = device;
        }
-       uint8 *get_spr_ram()
+       void set_context_memory(FAMILYBASIC::MEMORY* device)
+       {
+               d_memory = device;
+       }
+       uint8_t *get_spr_ram()
        {
                return spr_ram;
        }
-       void load_rom_image(_TCHAR *file_name);
+       uint8_t *get_name_tables()
+       {
+               return name_tables;
+       }
+       bool spr_enabled()
+       {
+               return ((regs[1] & 0x10) != 0);
+       }
+       bool bg_enabled()
+       {
+               return ((regs[1] & 0x08) != 0);
+       }
+       void load_rom_image(const _TCHAR *file_name);
        void draw_screen();
+       void set_ppu_bank(uint8_t bank, uint32_t bank_num);
+       void set_mirroring(int mirror);
+       void set_mirroring(uint32_t nt0, uint32_t nt1, uint32_t nt2, uint32_t nt3);
 };
+}
 
 #endif