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