1 
2 #ifndef _SMSVDP_H_
3 #define _SMSVDP_H_
4 
5 /*
6     vdp1
7 
8     mode 4 when m4 set and m1 reset
9 
10     vdp2
11 
12     mode 4 when m4 set and m2,m1 != 1,0
13 
14 
15 */
16 
17 /* Display timing (NTSC) */
18 
19 #define MASTER_CLOCK        3579545
20 #define LINES_PER_FRAME     262
21 #define FRAMES_PER_SECOND   60
22 #define CYCLES_PER_LINE     ((MASTER_CLOCK / FRAMES_PER_SECOND) / LINES_PER_FRAME)
23 
24 /* VDP context */
25 typedef struct
26 {
27     UINT8 vram[0x4000];
28     UINT8 cram[0x40];
29     UINT8 reg[0x10];
30     UINT8 status;
31     UINT8 latch;
32     UINT8 pending;
33     UINT8 buffer;
34     UINT8 code;
35     UINT16 addr;
36     INT32 pn, ct, pg, sa, sg;
37     INT32 ntab;
38     INT32 satb;
39     INT32 line;
40     INT32 left;
41     UINT8 height;
42     UINT8 extended;
43     UINT8 mode;
44     UINT8 vint_pending;
45     UINT8 hint_pending;
46     UINT16 cram_latch;
47     UINT8 bd;
48 } vdp_t;
49 
50 /* Global data */
51 extern vdp_t vdp;
52 extern UINT32 smsvdp_tmsmode;
53 
54 /* Function prototypes */
55 void vdp_init(void);
56 void vdp_shutdown(void);
57 void vdp_reset(void);
58 UINT8 vdp_counter_r(INT32 offset);
59 UINT8 vdp_read(INT32 offset);
60 void vdp_write(INT32 offset, UINT8 data);
61 void gg_vdp_write(INT32 offset, UINT8 data);
62 void md_vdp_write(INT32 offset, UINT8 data);
63 void tms_write(INT32 offset, INT32 data);
64 void viewport_check(void);
65 
66 #endif /* _VDP_H_ */
67 
68