Subversion Repositories pentevo

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
716 lvd 1
#include "std.h"
2
 
3
// SAM style video drive (only 8 bit, double-size screen)
4
 
5
 
6
#ifdef MOD_VID_VD
7
 
8
void rend_vd8dbl(unsigned char *dst, unsigned pitch)
9
{
10
   unsigned char *dst2 = dst + (temp.ox-512)*temp.obpp/16;
11
   dst2 += (temp.scy-192)/2*(pitch*2);
12
 
13
   if (conf.fast_sl) {
14
 
15
      pitch *= 2;
16
      rend_frame_8d1(dst, pitch);
17
      dst = dst2;
18
      for (unsigned y = 0; y < 192; y++) {
19
         unsigned char *src = (unsigned char*)vdmem + t.scrtab[y];
20
         for (unsigned x = 0; x < 32; x++) {
21
            __m64 d =          t.vdtab[0][0][src[0x2000*0+x]];
22
            d = _mm_add_pi8(d, t.vdtab[0][1][src[0x2000*1+x]]);
23
            d = _mm_add_pi8(d, t.vdtab[0][2][src[0x2000*2+x]]);
24
            d = _mm_add_pi8(d, t.vdtab[0][3][src[0x2000*3+x]]);
25
 
26
            *(__m64*)(dst+x*16+0) = _mm_unpacklo_pi8(d,d);
27
            *(__m64*)(dst+x*16+8) = _mm_unpackhi_pi8(d,d);
28
         }
29
         dst += pitch;
30
      }
31
 
32
   } else {
33
 
34
      rend_frame_8d(dst, pitch);
35
      dst = dst2;
36
      for (unsigned y = 0; y < 192; y++) {
37
         unsigned char *src = (unsigned char*)vdmem + t.scrtab[y];
38
         for (unsigned pass = 0; pass < 2; pass++) {
39
            for (unsigned x = 0; x < 32; x++) {
40
               __m64 d =          t.vdtab[pass][0][src[0x2000*0+x]];
41
               d = _mm_add_pi8(d, t.vdtab[pass][1][src[0x2000*1+x]]);
42
               d = _mm_add_pi8(d, t.vdtab[pass][2][src[0x2000*2+x]]);
43
               d = _mm_add_pi8(d, t.vdtab[pass][3][src[0x2000*3+x]]);
44
 
45
               *(__m64*)(dst+x*16+0) = _mm_unpacklo_pi8(d,d);
46
               *(__m64*)(dst+x*16+8) = _mm_unpackhi_pi8(d,d);
47
            }
48
            dst += pitch;
49
         }
50
      }
51
   }
52
   _mm_empty();
53
}
54
 
55
#endif