OSDN Git Service

[VM][X1][VRAM] Apply renderer to TEXT/(P)CG rendering.
authorK.Ohta <whatisthis.sowhat@gmail.com>
Mon, 5 Nov 2018 12:57:03 +0000 (21:57 +0900)
committerK.Ohta <whatisthis.sowhat@gmail.com>
Mon, 5 Nov 2018 12:57:03 +0000 (21:57 +0900)
source/src/vm/x1/display.cpp
source/src/vm/x1/display.h

index 643213e..46e649c 100644 (file)
@@ -146,6 +146,10 @@ void DISPLAY::initialize()
        zpalette_pc[8 + 6] = zpalette_pc[16 + 0xff0];
        zpalette_pc[8 + 7] = zpalette_pc[16 + 0xfff];
 #endif 
+
+       PrepareBitTransTableUint16(&bit_trans_table_b0, 0x01, 0x00);
+       PrepareBitTransTableUint16(&bit_trans_table_r0, 0x02, 0x00);
+       PrepareBitTransTableUint16(&bit_trans_table_g0, 0x04, 0x00);
 }
 
 void DISPLAY::reset()
@@ -1135,11 +1139,16 @@ void DISPLAY::draw_text(int y)
                
                        if(attr & 0x80) {
                                // horizontal doubled char
+#if 0                          
                                d[ 0] = d[ 1] = ((b & 0x80) >> 7) | ((r & 0x80) >> 6) | ((g & 0x80) >> 5);
                                d[ 2] = d[ 3] = ((b & 0x40) >> 6) | ((r & 0x40) >> 5) | ((g & 0x40) >> 4);
                                d[ 4] = d[ 5] = ((b & 0x20) >> 5) | ((r & 0x20) >> 4) | ((g & 0x20) >> 3);
                                d[ 6] = d[ 7] = ((b & 0x10) >> 4) | ((r & 0x10) >> 3) | ((g & 0x10) >> 2);
+#else
+                               ConvertRGBTo8ColorsUint8_Zoom2Left(r, g, b, d, &bit_trans_table_r0, &bit_trans_table_g0, &bit_trans_table_b0, 0);
+#endif
                        } else {
+#if 0                          
                                d[0] = ((b & 0x80) >> 7) | ((r & 0x80) >> 6) | ((g & 0x80) >> 5);
                                d[1] = ((b & 0x40) >> 6) | ((r & 0x40) >> 5) | ((g & 0x40) >> 4);
                                d[2] = ((b & 0x20) >> 5) | ((r & 0x20) >> 4) | ((g & 0x20) >> 3);
@@ -1148,6 +1157,9 @@ void DISPLAY::draw_text(int y)
                                d[5] = ((b & 0x04) >> 2) | ((r & 0x04) >> 1) | ((g & 0x04) >> 0);
                                d[6] = ((b & 0x02) >> 1) | ((r & 0x02) >> 0) | ((g & 0x02) << 1);
                                d[7] = ((b & 0x01) >> 0) | ((r & 0x01) << 1) | ((g & 0x01) << 2);
+#else
+                               ConvertRGBTo8ColorsUint8(r, g, b, d, &bit_trans_table_r0, &bit_trans_table_g0, &bit_trans_table_b0, 0);
+#endif
                        }
                        prev_attr = attr;
                }
@@ -1254,7 +1266,8 @@ void DISPLAY::draw_cg(int line, int plane)
                int ofs_b = ofs + 0x0000;
                int ofs_r = ofs + 0x4000;
                int ofs_g = ofs + 0x8000;
-               
+
+#if 0          
                for(int x = 0; x < hz_disp && x < width; x++) {
                        src &= 0x7ff;
                        uint8_t b = vram_ptr[ofs_b | src];
@@ -1271,6 +1284,28 @@ void DISPLAY::draw_cg(int line, int plane)
                        d[6] = ((b & 0x02) >> 1) | ((r & 0x02) >> 0) | ((g & 0x02) << 1);
                        d[7] = ((b & 0x01) >> 0) | ((r & 0x01) << 1) | ((g & 0x01) << 2);
                }
+#else
+               _render_command_data_t cmd;
+               for(int i = 0; i < 3; i++) {
+                       cmd.data[i] = vram_ptr;
+                       cmd.baseaddress[i] = 0;
+               }
+               cmd.voffset[0] = ofs_b;
+               cmd.voffset[1] = ofs_r;
+               cmd.voffset[2] = ofs_g;
+               cmd.bit_trans_table[0] = &bit_trans_table_b0;
+               cmd.bit_trans_table[1] = &bit_trans_table_r0;
+               cmd.bit_trans_table[2] = &bit_trans_table_g0;
+               cmd.addrmask = 0xffffffff;
+               cmd.addrmask2 = 0x07ff;
+               cmd.begin_pos = src;
+               cmd.shift = 0;
+               int iwidth = (hz_disp > width) ? width : hz_disp;
+               uint8_t* d = &(cg[line][0]);
+               cmd.render_width = (iwidth <= 0) ? 0 : (uint32_t)iwidth;
+               
+               Convert8ColorsToByte_Line(&cmd, d);
+#endif
        }
 }
 
index b59081f..691d29e 100644 (file)
@@ -149,6 +149,10 @@ private:
        uint16_t jis2sjis(uint16_t jis);
 
        int tmp_kanji_ptr;
+
+       _bit_trans_table_t bit_trans_table_b0 __attribute__((aligned(sizeof(uint16_vec8_t))));  
+       _bit_trans_table_t bit_trans_table_r0 __attribute__((aligned(sizeof(uint16_vec8_t))));  
+       _bit_trans_table_t bit_trans_table_g0 __attribute__((aligned(sizeof(uint16_vec8_t))));  
 public:
        DISPLAY(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {