Previous 199869 Revisions Next

r20900 Sunday 10th February, 2013 at 15:28:19 UTC by David Haywood
by request, favor safety over speed in jaguar for now
(tempest 2k does bad things)
[src/mame/video]jagblit.c

trunk/src/mame/video/jagblit.c
r20899r20900
3838#define READ_RDATA_1(r,a,p)   ((p) ? (((((UINT8 *)&m_blitter_regs[r])[BYTE4_XOR_BE(((UINT32)a##_x >> 19) & 7)]) >> PIXEL_SHIFT_1(a)) & 0x01) : (m_blitter_regs[r] & 0x01))
3939#define READ_PIXEL_1(a)       (((((UINT8 *)a##_base_mem)[PIXEL_OFFSET_1(a)]) >> PIXEL_SHIFT_1(a)) & 0x01)
4040#define READ_ZDATA_1(a)       0 /* huh? */
41#define WRITE_PIXEL_1(a,d)    do { UINT8 *pix = &((UINT8 *)a##_base_mem)[PIXEL_OFFSET_1(a)]; *pix = (*pix & ~(0x01 << PIXEL_SHIFT_1(a))) | ((d) << PIXEL_SHIFT_1(a)); } while (0)
42#define WRITE_ZDATA_1(a,d)    /* huh? */
4341
4442#define PIXEL_SHIFT_2(a)      ((~a##_x >> 15) & 6)
4543#define PIXEL_OFFSET_2(a)     BYTE4_XOR_BE(((UINT32)a##_y >> 16) * a##_width / 4 + (((UINT32)a##_x >> 18) & ~7) * (1 + a##_pitch) + (((UINT32)a##_x >> 18) & 7))
r20899r20900
4745#define READ_RDATA_2(r,a,p)   ((p) ? (((((UINT8 *)&m_blitter_regs[r])[BYTE4_XOR_BE(((UINT32)a##_x >> 18) & 7)]) >> PIXEL_SHIFT_2(a)) & 0x03) : (m_blitter_regs[r] & 0x03))
4846#define READ_PIXEL_2(a)       (((((UINT8 *)a##_base_mem)[PIXEL_OFFSET_2(a)]) >> PIXEL_SHIFT_2(a)) & 0x03)
4947#define READ_ZDATA_2(a)       0 /* huh? */
50#define WRITE_PIXEL_2(a,d)    do { UINT8 *pix = &((UINT8 *)a##_base_mem)[PIXEL_OFFSET_2(a)]; *pix = (*pix & ~(0x03 << PIXEL_SHIFT_2(a))) | ((d) << PIXEL_SHIFT_2(a)); } while (0)
51#define WRITE_ZDATA_2(a,d)    /* huh? */
5248
5349#define PIXEL_SHIFT_4(a)      ((~a##_x >> 14) & 4)
5450#define PIXEL_OFFSET_4(a)     BYTE4_XOR_BE(((UINT32)a##_y >> 16) * a##_width / 2 + (((UINT32)a##_x >> 17) & ~7) * (1 + a##_pitch) + (((UINT32)a##_x >> 17) & 7))
r20899r20900
5652#define READ_RDATA_4(r,a,p)   ((p) ? (((((UINT8 *)&m_blitter_regs[r])[BYTE4_XOR_BE(((UINT32)a##_x >> 17) & 7)]) >> PIXEL_SHIFT_4(a)) & 0x0f) : (m_blitter_regs[r] & 0x0f))
5753#define READ_PIXEL_4(a)       (((((UINT8 *)a##_base_mem)[PIXEL_OFFSET_4(a)]) >> PIXEL_SHIFT_4(a)) & 0x0f)
5854#define READ_ZDATA_4(a)       0 /* huh? */
59#define WRITE_PIXEL_4(a,d)    do { UINT8 *pix = &((UINT8 *)a##_base_mem)[PIXEL_OFFSET_4(a)]; *pix = (*pix & ~(0x0f << PIXEL_SHIFT_4(a))) | ((d) << PIXEL_SHIFT_4(a)); } while (0)
60#define WRITE_ZDATA_4(a,d)    /* huh? */
6155
6256#define PIXEL_OFFSET_8(a)     BYTE4_XOR_BE(((UINT32)a##_y >> 16) * a##_width + (((UINT32)a##_x >> 16) & ~7) * (1 + a##_pitch) + (((UINT32)a##_x >> 16) & 7))
6357#define ZDATA_OFFSET_8(a)     (PIXEL_OFFSET_8(a) + a##_zoffs * 8)
6458#define READ_RDATA_8(r,a,p)   ((p) ? (((UINT8 *)&m_blitter_regs[r])[BYTE4_XOR_BE(((UINT32)a##_x >> 16) & 7)]) : (m_blitter_regs[r] & 0xff))
6559#define READ_PIXEL_8(a)       (((UINT8 *)a##_base_mem)[PIXEL_OFFSET_8(a)])
6660#define READ_ZDATA_8(a)       (((UINT8 *)a##_base_mem)[ZDATA_OFFSET_8(a)])
67#define WRITE_PIXEL_8(a,d)    do { ((UINT8 *)a##_base_mem)[PIXEL_OFFSET_8(a)] = (d); } while (0)
68#define WRITE_ZDATA_8(a,d)    do { ((UINT8 *)a##_base_mem)[ZDATA_OFFSET_8(a)] = (d); } while (0)
6961
7062#define PIXEL_OFFSET_16(a)    BYTE_XOR_BE(((UINT32)a##_y >> 16) * a##_width + (((UINT32)a##_x >> 16) & ~3) * (1 + a##_pitch) + (((UINT32)a##_x >> 16) & 3))
7163#define ZDATA_OFFSET_16(a)    (PIXEL_OFFSET_16(a) + a##_zoffs * 4)
7264#define READ_RDATA_16(r,a,p)  ((p) ? (((UINT16 *)&m_blitter_regs[r])[BYTE_XOR_BE(((UINT32)a##_x >> 16) & 3)]) : (m_blitter_regs[r] & 0xffff))
7365#define READ_PIXEL_16(a)      (((UINT16 *)a##_base_mem)[PIXEL_OFFSET_16(a)])
7466#define READ_ZDATA_16(a)      (((UINT16 *)a##_base_mem)[ZDATA_OFFSET_16(a)])
75#define WRITE_PIXEL_16(a,d)   do { ((UINT16 *)a##_base_mem)[PIXEL_OFFSET_16(a)] = (d); } while (0)
76#define WRITE_ZDATA_16(a,d)   do { ((UINT16 *)a##_base_mem)[ZDATA_OFFSET_16(a)] = (d); } while (0)
7767
7868#define PIXEL_OFFSET_32(a)    (((UINT32)a##_y >> 16) * a##_width + (((UINT32)a##_x >> 16) & ~1) * (1 + a##_pitch) + (((UINT32)a##_x >> 16) & 1))
7969#define ZDATA_OFFSET_32(a)    (PIXEL_OFFSET_32(a) + a##_zoffs * 2)
8070#define READ_RDATA_32(r,a,p)  ((p) ? (m_blitter_regs[r + (((UINT32)a##_x >> 16) & 1)]) : m_blitter_regs[r])
8171#define READ_PIXEL_32(a)      (((UINT32 *)a##_base_mem)[PIXEL_OFFSET_32(a)])
8272#define READ_ZDATA_32(a)      (((UINT32 *)a##_base_mem)[ZDATA_OFFSET_32(a)])
83#define WRITE_PIXEL_32(a,d)   do { ((UINT32 *)a##_base_mem)[PIXEL_OFFSET_32(a)] = (d); } while (0)
84#define WRITE_ZDATA_32(a,d)   do { ((UINT32 *)a##_base_mem)[ZDATA_OFFSET_32(a)] = (d); } while (0)
8573
8674#define READ_RDATA(r,a,f,p) \
8775   ((((f) & 0x38) == (0 << 3)) ? (READ_RDATA_1(r,a,p)) : \
r20899r20900
10795      (((f) & 0x38) == (4 << 3)) ? (READ_ZDATA_16(a)) : \
10896      (((f) & 0x38) == (5 << 3)) ? (READ_ZDATA_32(a)) : 0)
10997
110#define WRITE_PIXEL(a,f,d) \
98#define PIXEL_SHIFT_WRITE_1      ((~adest_x >> 16) & 7)
99#define PIXEL_SHIFT_WRITE_2      ((~adest_x >> 15) & 6)
100#define PIXEL_SHIFT_WRITE_4      ((~adest_x >> 14) & 4)
101
102#define PIXEL_OFFSET_WRITE_1     (((UINT32)adest_y >> 16) * adest_width / 8 + (((UINT32)adest_x >> 19) & ~7) * (1 + adest_pitch) + (((UINT32)adest_x >> 19) & 7))
103#define PIXEL_OFFSET_WRITE_2     (((UINT32)adest_y >> 16) * adest_width / 4 + (((UINT32)adest_x >> 18) & ~7) * (1 + adest_pitch) + (((UINT32)adest_x >> 18) & 7))
104#define PIXEL_OFFSET_WRITE_4     (((UINT32)adest_y >> 16) * adest_width / 2 + (((UINT32)adest_x >> 17) & ~7) * (1 + adest_pitch) + (((UINT32)adest_x >> 17) & 7))
105#define PIXEL_OFFSET_WRITE_8     (((UINT32)adest_y >> 16) * adest_width + (((UINT32)adest_x >> 16) & ~7) * (1 + adest_pitch) + (((UINT32)adest_x >> 16) & 7))
106#define PIXEL_OFFSET_WRITE_16    (((UINT32)adest_y >> 16) * adest_width + (((UINT32)adest_x >> 16) & ~3) * (1 + adest_pitch) + (((UINT32)adest_x >> 16) & 3))
107#define PIXEL_OFFSET_WRITE_32    (((UINT32)adest_y >> 16) * adest_width + (((UINT32)adest_x >> 16) & ~1) * (1 + adest_pitch) + (((UINT32)adest_x >> 16) & 1))
108
109#define ZDATA_OFFSET_WRITE_1     0 /* huh? */
110#define ZDATA_OFFSET_WRITE_2     0 /* huh? */
111#define ZDATA_OFFSET_WRITE_4     0 /* huh? */
112#define ZDATA_OFFSET_WRITE_8     (PIXEL_OFFSET_WRITE_8 + adest_zoffs * 8)
113#define ZDATA_OFFSET_WRITE_16    (PIXEL_OFFSET_WRITE_16 + adest_zoffs * 4)
114#define ZDATA_OFFSET_WRITE_32    (PIXEL_OFFSET_WRITE_32 + adest_zoffs * 2)
115
116
117#define WRITE_PIXEL_1(d)    do { int writeoffs = PIXEL_OFFSET_WRITE_1; int shift = PIXEL_SHIFT_WRITE_1; UINT8 pix = m_gpu->space(AS_PROGRAM).read_byte(adest_base + (writeoffs)); pix = (pix & ~(0x01 << shift)) | ((d) << shift); m_gpu->space(AS_PROGRAM).write_byte(adest_base + (writeoffs), pix); } while (0)
118#define WRITE_ZDATA_1(d)    /* huh? */
119#define WRITE_PIXEL_2(d)    do { int writeoffs = PIXEL_OFFSET_WRITE_2; int shift = PIXEL_SHIFT_WRITE_2; UINT8 pix = m_gpu->space(AS_PROGRAM).read_byte(adest_base + (writeoffs)); pix = (pix & ~(0x03 << shift)) | ((d) << shift); m_gpu->space(AS_PROGRAM).write_byte(adest_base + (writeoffs), pix); } while (0)
120#define WRITE_ZDATA_2(d)    /* huh? */
121#define WRITE_PIXEL_4(d)    do { int writeoffs = PIXEL_OFFSET_WRITE_4; int shift = PIXEL_SHIFT_WRITE_4; UINT8 pix = m_gpu->space(AS_PROGRAM).read_byte(adest_base + (writeoffs)); pix = (pix & ~(0x0f << shift)) | ((d) << shift); m_gpu->space(AS_PROGRAM).write_byte(adest_base + (writeoffs), pix); } while (0)
122#define WRITE_ZDATA_4(d)    /* huh? */
123#define WRITE_PIXEL_8(d)    do { int writeoffs = PIXEL_OFFSET_WRITE_8;  m_gpu->space(AS_PROGRAM).write_byte(adest_base + (writeoffs), (d)); } while (0)
124#define WRITE_ZDATA_8(d)    do { int writeoffs = ZDATA_OFFSET_WRITE_8;  m_gpu->space(AS_PROGRAM).write_byte(adest_base + (writeoffs), (d)); } while (0)
125#define WRITE_PIXEL_16(d)   do { int writeoffs = PIXEL_OFFSET_WRITE_16; m_gpu->space(AS_PROGRAM).write_word(adest_base + (writeoffs<<1), (d)); } while (0)
126#define WRITE_ZDATA_16(d)   do { int writeoffs = ZDATA_OFFSET_WRITE_16; m_gpu->space(AS_PROGRAM).write_word(adest_base + (writeoffs<<1), (d)); } while (0)
127#define WRITE_PIXEL_32(d)   do { int writeoffs = PIXEL_OFFSET_WRITE_32; m_gpu->space(AS_PROGRAM).write_dword(adest_base + (writeoffs<<2), (d)); } while (0)
128#define WRITE_ZDATA_32(d)   do { int writeoffs = ZDATA_OFFSET_WRITE_32; m_gpu->space(AS_PROGRAM).write_dword(adest_base + (writeoffs<<2), (d)); } while (0)
129
130
131
132#define WRITE_PIXEL(f,d) \
111133   do \
112134   { \
113            if (((f) & 0x38) == (0 << 3)) WRITE_PIXEL_1(a,d); \
114      else if (((f) & 0x38) == (1 << 3)) WRITE_PIXEL_2(a,d); \
115      else if (((f) & 0x38) == (2 << 3)) WRITE_PIXEL_4(a,d); \
116      else if (((f) & 0x38) == (3 << 3)) WRITE_PIXEL_8(a,d); \
117      else if (((f) & 0x38) == (4 << 3)) WRITE_PIXEL_16(a,d); \
118      else if (((f) & 0x38) == (5 << 3)) WRITE_PIXEL_32(a,d); \
135            if (((f) & 0x38) == (0 << 3)) WRITE_PIXEL_1(d); \
136      else if (((f) & 0x38) == (1 << 3)) WRITE_PIXEL_2(d); \
137      else if (((f) & 0x38) == (2 << 3)) WRITE_PIXEL_4(d); \
138      else if (((f) & 0x38) == (3 << 3)) WRITE_PIXEL_8(d); \
139      else if (((f) & 0x38) == (4 << 3)) WRITE_PIXEL_16(d); \
140      else if (((f) & 0x38) == (5 << 3)) WRITE_PIXEL_32(d); \
119141   } while (0)
120142
121#define WRITE_ZDATA(a,f,d) \
143#define WRITE_ZDATA(f,d) \
122144   do \
123145   { \
124            if (((f) & 0x38) == (0 << 3)) WRITE_ZDATA_1(a,d); \
125      else if (((f) & 0x38) == (1 << 3)) WRITE_ZDATA_2(a,d); \
126      else if (((f) & 0x38) == (2 << 3)) WRITE_ZDATA_4(a,d); \
127      else if (((f) & 0x38) == (3 << 3)) WRITE_ZDATA_8(a,d); \
128      else if (((f) & 0x38) == (4 << 3)) WRITE_ZDATA_16(a,d); \
129      else if (((f) & 0x38) == (5 << 3)) WRITE_ZDATA_32(a,d); \
146            if (((f) & 0x38) == (0 << 3)) WRITE_ZDATA_1(d); \
147      else if (((f) & 0x38) == (1 << 3)) WRITE_ZDATA_2(d); \
148      else if (((f) & 0x38) == (2 << 3)) WRITE_ZDATA_4(d); \
149      else if (((f) & 0x38) == (3 << 3)) WRITE_ZDATA_8(d); \
150      else if (((f) & 0x38) == (4 << 3)) WRITE_ZDATA_16(d); \
151      else if (((f) & 0x38) == (5 << 3)) WRITE_ZDATA_32(d); \
130152   } while (0)
131153#endif
132154
r20899r20900
169191   void *a2_base_mem = memory_base(a2_base);
170192
171193   void *asrc_base_mem =   (COMMAND & 0x00000800) ? a1_base_mem : a2_base_mem;
194   void *adest_base_mem =  (COMMAND & 0x00000800) ? a2_base_mem : a1_base_mem;
172195   UINT32 asrcflags =      (COMMAND & 0x00000800) ? A1FIXED : A2FIXED;
173196   INT32 asrc_x =          (COMMAND & 0x00000800) ? a1_x : a2_x;
174197   INT32 asrc_y =          (COMMAND & 0x00000800) ? a1_y : a2_y;
r20899r20900
179202   INT32 asrc_xadd, asrc_xstep, asrc_yadd, asrc_ystep;
180203   UINT32 asrc_xmask, asrc_ymask;
181204
182   void *adest_base_mem =  (COMMAND & 0x00000800) ? a2_base_mem : a1_base_mem;
205   UINT32 adest_base =  (COMMAND & 0x00000800) ? a2_base : a1_base;
183206   UINT32 adestflags =     (COMMAND & 0x00000800) ? A2FIXED : A1FIXED;
184207   INT32 adest_x =         (COMMAND & 0x00000800) ? a2_x : a1_x;
185208   INT32 adest_y =         (COMMAND & 0x00000800) ? a2_y : a1_y;
r20899r20900
431454         if (adest_phrase_mode || (command & 0x10000000) || !inhibit)
432455            {
433456               /* write to the destination */
434               WRITE_PIXEL(adest, adestflags, writedata);
457               WRITE_PIXEL(adestflags, writedata);
435458               if (COMMAND & 0x00000020)
436               WRITE_ZDATA(adest, adestflags, srczdata);
459               WRITE_ZDATA(adestflags, srczdata);
437460            }
438461
439462            /* update X/Y */

Previous 199869 Revisions Next


© 1997-2024 The MAME Team