megadrive_test2

diff src/vdp.h @ 4:72ab63f262bf

tiles
author John Tsiombikas <nuclear@member.fsf.org>
date Mon, 19 Jun 2017 08:02:51 +0300
parents 2560a8be8cb8
children ea70f3da150f
line diff
     1.1 --- a/src/vdp.h	Tue Mar 14 09:11:18 2017 +0200
     1.2 +++ b/src/vdp.h	Mon Jun 19 08:02:51 2017 +0300
     1.3 @@ -47,6 +47,19 @@
     1.4  	VDP_MEM_VSRAM	= 4		/* CD5->CD0: 0 0 0 1 0 0 */
     1.5  };
     1.6  
     1.7 +enum {
     1.8 +	VDP_PLANE_A,
     1.9 +	VDP_PLANE_B,
    1.10 +	VDP_PLANE_WIN
    1.11 +};
    1.12 +
    1.13 +enum {
    1.14 +	VDP_TILE_LOW_PRIO	= 0,
    1.15 +	VDP_TILE_HFLIP		= 0x0800,
    1.16 +	VDP_TILE_VFLIP		= 0x1000,
    1.17 +	VDP_TILE_HIGH_PRIO	= 0x8000
    1.18 +};
    1.19 +
    1.20  static inline void vdp_setup_access(uint16_t addr, int rw, int memid)
    1.21  {
    1.22  	uint32_t type;
    1.23 @@ -173,6 +186,41 @@
    1.24  	vdp_setreg(VDP_REG_MODE1, vdp_getreg(VDP_REG_MODE1) & ~VDP_MODE1_HINTR);
    1.25  }
    1.26  
    1.27 +static inline void vdp_set_nametab_addr(int plane, uint16_t addr)
    1.28 +{
    1.29 +	int reg;
    1.30 +	switch(plane) {
    1.31 +	case VDP_PLANE_A:
    1.32 +		reg = VDP_REG_NAMETAB_A;
    1.33 +		break;
    1.34 +	case VDP_PLANE_B:
    1.35 +		reg = VDP_REG_NAMETAB_B;
    1.36 +		break;
    1.37 +	case VDP_PLANE_WIN:
    1.38 +		reg = VDP_REG_NAMETAB_WIN;
    1.39 +		break;
    1.40 +	default:
    1.41 +		return;
    1.42 +	}
    1.43 +
    1.44 +	vdp_setreg(reg, (addr >> 10) & 0x38);
    1.45 +}
    1.46 +
    1.47 +static inline uint16_t vdp_nametab_addr(int idx)
    1.48 +{
    1.49 +	return (uint16_t)idx << 13;
    1.50 +}
    1.51 +
    1.52 +static inline void vdp_set_nametab_idx(int plane, int idx)
    1.53 +{
    1.54 +	vdp_set_nametab_addr(plane, vdp_nametab_addr(idx));
    1.55 +}
    1.56 +
    1.57 +static inline uint16_t vdp_nametab_entry(int tileidx, int palidx, uint16_t flags)
    1.58 +{
    1.59 +	return tileidx | (((uint16_t)palidx & 0x3) << 13) | flags;
    1.60 +}
    1.61 +
    1.62  void vdp_init(void);
    1.63  
    1.64  #endif	/* VDP_H_ */