OSDN Git Service

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