OSDN Git Service

[VM][COMMON_VM] Include IO:: class to common_vm.
[csp-qt/common_source_project-fm7.git] / source / src / vm / 315-5124.h
1 /*
2         Skelton for retropc emulator
3
4         Origin : SMS Plus
5         Author : tanam
6         Date   : 2013.09.14 -
7
8         [ 315-5124 ]
9 */
10
11 #ifndef _315_5124_H_
12 #define _315_5124_H_
13
14 //#include "vm.h"
15 //#include "../emu.h"
16 #include "device.h"
17
18 #define read_dword(address) *(uint32_t *)address
19 #define write_dword(address,data) *(uint32_t *)address=data
20 #define BACKDROP_COLOR  ((vdp_mode == 4 ? 0x10 : 0x00) + (regs[0x07] & 0x0f))
21 #define ADDR_MASK       (0x4000 - 1)
22
23 #define CYCLES_PER_LINE 228
24
25 namespace GAMEGEAR {
26         class KEYBOARD;
27 }
28 class _315_5124 : public DEVICE
29 {
30 private:
31         GAMEGEAR::KEYBOARD *d_key;
32         DEVICE *d_psg;
33         // output signals
34         outputs_t outputs_irq;
35         
36         uint16_t z80_icount;
37         uint16_t vcounter;
38         uint8_t vscroll;
39         uint8_t status;
40         uint8_t pending;
41         uint16_t addr;
42         uint8_t code;
43         int pn, ct, pg, sa, sg;
44         int ntab;
45         int satb;
46         int line;
47         int left;
48         uint16_t lpf;
49         uint8_t height;
50         uint8_t extended;
51         uint8_t mode;
52         uint8_t irq;
53         uint16_t spr_col;
54         uint8_t spr_ovr;
55         uint8_t bd;
56         uint8_t vram[0x4000];
57         uint8_t screen[192][256];
58         uint8_t regs[0x10], status_reg, read_ahead, first_byte;
59         uint16_t vram_addr;
60         bool latch, intstat;
61         uint16_t color_table, pattern_table, name_table;
62         uint16_t sprite_pattern, sprite_attrib;
63         uint16_t color_mask, pattern_mask;
64         scrntype_t palette_pc[0x20];
65         void set_intstat(bool val);
66         void draw_mode0();
67         void draw_mode1();
68         void draw_mode2();
69         void draw_mode12();
70         void draw_mode3();
71         void draw_mode23();
72         void draw_modebogus();
73         void draw_sprites();
74         uint8_t cram[0x40]; 
75         uint16_t cram_latch;
76         uint16_t hlatch;
77         uint8_t addrmode;                 /* Type of VDP action */
78         uint8_t buffer;
79         uint8_t vdp_mode;                 /* Current mode of the VDP: 0,1,2,3,4 */
80         uint8_t sms_cram_expand_table[4];
81         uint8_t gg_cram_expand_table[16];
82         uint8_t *linebuf;                                       /* Pointer to output buffer */
83         uint8_t bg_name_dirty[0x200];     /* 1= This pattern is dirty */
84         uint16_t bg_name_list[0x200];     /* List of modified pattern indices */
85         uint16_t bg_list_index;           /* # of modified patterns in list */
86         uint8_t bg_pattern_cache[0x20000];/* Cached and flipped patterns */
87         uint8_t lut[0x10000];                           /* Pixel look-up table */
88         uint32_t bp_lut[0x10000];                       /* Bitplane to packed pixel LUT */
89         int vp_x;
90         int vp_y;
91         int vp_w;
92         int vp_h;
93         int console;
94         bool __MASTERSYSTEM;
95         bool __315_5124_LIMIT_SPRITES;
96
97 public:
98         _315_5124(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
99         {
100                 initialize_output_signals(&outputs_irq);
101                 set_device_name(_T("315-5124"));
102         }
103         ~_315_5124() {}
104         
105         // common functions
106         void initialize();
107         void reset();
108         void __FASTCALL write_io8(uint32_t addr, uint32_t data);
109         uint32_t __FASTCALL read_io8(uint32_t addr);
110         void event_vline(int v, int clock);
111         // unique function
112         void set_context_key(GAMEGEAR::KEYBOARD* device)
113         {
114                 d_key = device;
115         }
116         void set_context_psg(DEVICE* device)
117         {
118                 d_psg = device;
119         }
120         void set_context_irq(DEVICE* device, int id, uint32_t mask)
121         {
122                 initialize_output_signals(&outputs_irq);
123                 register_output_signal(&outputs_irq, device, id, mask);
124         }
125         void draw_screen();
126         void palette_sync(int index, int force);
127         void render_bg(int line);
128         void render_obj(int line);
129         void update_bg_pattern_cache(void);
130         void viewport_check(void);
131         void vdp_reg_w(uint8_t r, uint8_t d);
132         void set_console(int gg)
133         {
134                 console = gg;
135         }
136 };
137 #endif