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_ */