2 * Common source code project -> FM-7 -> Display -> Vram access
3 * (C) 2015 K.Ohta <whatisthis.sowhat _at_ gmail.com>
5 * Sep 27, 2015 : Split from display.cpp .
10 #include "fm7_display.h"
15 uint8_t DISPLAY::read_vram_l4_400l(uint32_t addr, uint32_t offset)
20 uint32_t raddr = addr & 0x3fff;
21 if((multimode_accessmask & 0x04) == 0) {
22 return gvram[0x8000 + (raddr + offset) & 0x7fff];
26 pagemod = addr & 0x4000;
27 return gvram[((addr + offset) & mask) | pagemod];
28 } else if(addr < 0x9800) {
29 return textvram[addr & 0x0fff];
30 } else { // $9800-$bfff
31 return subrom_l4[addr - 0x9800];
37 void DISPLAY::write_vram_l4_400l(uint32_t addr, uint32_t offset, uint32_t data)
42 uint32_t raddr = addr & 0x3fff;
43 if((multimode_accessmask & 0x04) == 0) {
44 gvram[0x8000 + (raddr + offset) & 0x7fff] = (uint8_t)data;
48 pagemod = addr & 0x4000;
49 gvram[((addr + offset) & mask) | pagemod] = (uint8_t)data;
50 } else if(addr < 0x9800) {
51 textvram[addr & 0x0fff] = (uint8_t)data;
52 } else { // $9800-$bfff
53 //return subrom_l4[addr - 0x9800];
61 void DISPLAY::draw_screen()
63 //#if !defined(_FM77AV_VARIANTS)
68 extern config_t config;
69 void DISPLAY::draw_screen2()
73 scrntype_t *p, *pp, *p2;
78 uint32_t yoff_d1, yoff_d2;
79 uint16_t wx_begin, wx_end, wy_low, wy_high;
80 bool scan_line = config.scan_line;
81 bool ff = force_update;
83 #if defined(_FM77AV40EX) || defined(_FM77AV40SX)
85 wx_begin = window_xbegin;
88 wy_high = window_high;
89 bool _flag = window_opened;
90 if((wx_begin < wx_end) && (wy_low < wy_high)) {
93 window_opened = false;
95 if(_flag != window_opened) {
96 vram_wrote_shadow = true;
100 // frame_skip_count_draw++;
101 #if defined(_FM77AV_VARIANTS)
105 //if(!(vram_wrote_shadow)) return;
106 yoff_d1 = yoff_d2 = offset_point;
111 switch(display_mode) {
112 case DISPLAY_MODE_8_200L:
116 case DISPLAY_MODE_8_400L:
125 # if !defined(FIXED_FRAMEBUFFER_SIZE)
126 emu->set_vm_screen_size(xpixels, ylines, WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_WIDTH_ASPECT, WINDOW_HEIGHT_ASPECT);
128 emu->set_vm_screen_lines(ylines);
132 #if !defined(FIXED_FRAMEBUFFER_SIZE)
133 for(y = 0; y < ylines; y += 8) {
134 for(yy = 0; yy < 8; yy++) {
135 vram_draw_table[y + yy] = false;
136 ppp = emu->get_screen_buffer(y + yy);
137 if(ppp != NULL) memset(ppp, 0x00, xpixels * sizeof(scrntype_t));
141 for(y = 0; y < 400; y += 8) {
142 for(yy = 0; yy < 8; yy++) {
143 vram_draw_table[y + yy] = false;
144 ppp = emu->get_screen_buffer(y + yy);
145 if(ppp != NULL) memset(ppp, 0x00, 640 * sizeof(scrntype_t));
151 crt_flag_bak = crt_flag;
154 crt_flag_bak = crt_flag;
155 if(!(vram_wrote_shadow | ff)) return;
156 vram_wrote_shadow = false;
157 if(display_mode == DISPLAY_MODE_8_200L) {
160 #ifdef USE_GREEN_DISPLAY
161 if((config.dipswitch & FM7_DIPSW_GREEN_DISPLAY) != 0) {
162 // Green display had only connected to FM-8, FM-7/NEW7 and FM-77.
163 for(y = 0; y < 200; y += 8) {
164 for(yy = 0; yy < 8; yy++) {
165 if(!(vram_draw_table[y + yy] | ff)) continue;
166 vram_draw_table[y + yy] = false;
167 #if !defined(FIXED_FRAMEBUFFER_SIZE)
168 p = emu->get_screen_buffer(y + yy);
171 p = emu->get_screen_buffer((y + yy) * 2);
172 p2 = emu->get_screen_buffer((y + yy) * 2 + 1);
174 if(p == NULL) continue;
175 yoff = (y + yy) * 80;
177 for(x = 0; x < 10; x++) {
178 for(ii = 0; ii < 8; ii++) {
179 GETVRAM_8_200L_GREEN(yoff + ii, p, p2, false, scan_line);
180 #if defined(FIXED_FRAMEBUFFER_SIZE)
190 if(ff) force_update = false;
194 for(y = 0; y < 200; y += 8) {
195 for(yy = 0; yy < 8; yy++) {
197 if(!(vram_draw_table[y + yy] | ff)) continue;
198 vram_draw_table[y + yy] = false;
199 #if !defined(FIXED_FRAMEBUFFER_SIZE)
200 p = emu->get_screen_buffer(y + yy);
203 p = emu->get_screen_buffer((y + yy) * 2);
204 p2 = emu->get_screen_buffer((y + yy) * 2 + 1);
206 if(p == NULL) continue;
207 yoff = (y + yy) * 80;
208 # if defined(_FM77AV40EX) || defined(_FM77AV40SX)
209 if(window_opened && (wy_low <= (y + yy)) && (wy_high > (y + yy))) {
210 for(x = 0; x < 80; x++) {
211 if((x >= wx_begin) && (x < wx_end)) {
212 GETVRAM_8_200L(yoff, p, p2, true, scan_line);
214 GETVRAM_8_200L(yoff, p, p2, false, scan_line);
216 #if defined(FIXED_FRAMEBUFFER_SIZE)
225 for(x = 0; x < 10; x++) {
226 for(ii = 0; ii < 8; ii++) {
227 GETVRAM_8_200L(yoff + ii, p, p2, false, scan_line);
228 #if defined(FIXED_FRAMEBUFFER_SIZE)
239 if(ff) force_update = false;
242 # if defined(_FM77AV_VARIANTS)
243 if(display_mode == DISPLAY_MODE_4096) {
247 if(!multimode_dispflags[0]) mask = 0x00f;
248 if(!multimode_dispflags[1]) mask = mask | 0x0f0;
249 if(!multimode_dispflags[2]) mask = mask | 0xf00;
250 for(y = 0; y < 200; y += 4) {
251 for(yy = 0; yy < 4; yy++) {
252 if(!(vram_draw_table[y + yy] | ff)) continue;
253 vram_draw_table[y + yy] = false;
255 #if !defined(FIXED_FRAMEBUFFER_SIZE)
256 p = emu->get_screen_buffer(y + yy);
259 p = emu->get_screen_buffer((y + yy) * 2 );
260 p2 = emu->get_screen_buffer((y + yy) * 2 + 1);
262 if(p == NULL) continue;
263 yoff = (y + yy) * 40;
264 # if defined(_FM77AV40EX) || defined(_FM77AV40SX)
265 if(window_opened && (wy_low <= (y + yy)) && (wy_high > (y + yy))) {
266 for(x = 0; x < 40; x++) {
267 if((x >= wx_begin) && (x < wx_end)) {
268 GETVRAM_4096(yoff, p, p2, mask, true, scan_line);
270 GETVRAM_4096(yoff, p, p2, mask, false, scan_line);
272 #if defined(FIXED_FRAMEBUFFER_SIZE)
283 for(x = 0; x < 5; x++) {
284 for(ii = 0; ii < 8; ii++) {
285 GETVRAM_4096(yoff + ii, p, p2, mask, false, scan_line);
286 #if defined(FIXED_FRAMEBUFFER_SIZE)
299 if(ff) force_update = false;
302 # if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
303 else if(display_mode == DISPLAY_MODE_8_400L) {
306 //rgbmask = ~multimode_dispmask;
307 for(y = 0; y < 400; y += 8) {
308 for(yy = 0; yy < 8; yy++) {
309 if(!(vram_draw_table[y + yy] | ff)) continue;
310 vram_draw_table[y + yy] = false;
312 p = emu->get_screen_buffer(y + yy);
313 if(p == NULL) continue;
315 yoff = (y + yy) * 80;
316 # if defined(_FM77AV40EX) || defined(_FM77AV40SX)
317 if(window_opened && (wy_low <= (y + yy)) && (wy_high > (y + yy))) {
318 for(x = 0; x < 80; x++) {
319 if((x >= wx_begin) && (x < wx_end)) {
320 GETVRAM_8_400L(yoff, p, true);
322 GETVRAM_8_400L(yoff, p, false);
329 for(x = 0; x < 10; x++) {
331 for(ii = 0; ii < 8; ii++) {
332 GETVRAM_8_400L(yoff + ii, p);
339 if(ff) force_update = false;
341 } else if(display_mode == DISPLAY_MODE_256k) {
343 //rgbmask = ~multimode_dispmask;
345 for(y = 0; y < 200; y += 4) {
346 for(yy = 0; yy < 4; yy++) {
347 if(!(vram_draw_table[y + yy] | ff)) continue;
348 vram_draw_table[y + yy] = false;
349 #if !defined(FIXED_FRAMEBUFFER_SIZE)
350 p = emu->get_screen_buffer(y + yy);
353 p = emu->get_screen_buffer((y + yy) * 2 );
354 p2 = emu->get_screen_buffer((y + yy) * 2 + 1);
356 if(p == NULL) continue;
358 yoff = (y + yy) * 40;
360 for(x = 0; x < 5; x++) {
361 for(ii = 0; ii < 8; ii++) {
362 GETVRAM_256k(yoff + ii, p, p2, scan_line);
363 #if !defined(FIXED_FRAMEBUFFER_SIZE)
375 if(ff) force_update = false;
379 # endif //_FM77AV_VARIANTS
382 bool DISPLAY::screen_update(void)
385 bool f = screen_update_flag;
386 screen_update_flag = false;
389 if(crt_flag_bak) return true;
394 void DISPLAY::reset_screen_update(void)
396 screen_update_flag = false;
399 void DISPLAY::GETVRAM_8_200L(int yoff, scrntype_t *p,
406 #if defined(_FM77AV40EX) || defined(_FM77AV40SX)
407 int dpage = vram_display_block;
409 if(p == NULL) return;
411 yoff_d = (yoff + yoff_d) & 0x3fff;
413 #if defined(_FM77AV40EX) || defined(_FM77AV40SX)
421 if(dpage != 0) yoff_d += 0x18000;
424 #if defined(_FM77AV_VARIANTS)
425 if(display_page_bak == 1) yoff_d += 0xc000;
427 if(!multimode_dispflags[0]) b = gvram_shadow[yoff_d + 0x00000];
428 if(!multimode_dispflags[1]) r = gvram_shadow[yoff_d + 0x04000];
429 if(!multimode_dispflags[2]) g = gvram_shadow[yoff_d + 0x08000];
431 uint16_t *pg = &(bit_trans_table_0[g][0]);
432 uint16_t *pr = &(bit_trans_table_1[r][0]);
433 uint16_t *pb = &(bit_trans_table_2[b][0]);
435 scrntype_t tmp_dd[8];
437 __DECL_VECTORIZED_LOOP
438 for(int i = 0; i < 8; i++) {
440 tmp_d[i] = tmp_d[i] | pg[i];
441 tmp_d[i] = tmp_d[i] | pb[i];
442 tmp_d[i] = tmp_d[i] >> 5;
445 __DECL_VECTORIZED_LOOP
446 for(int i = 0; i < 8; i++) {
447 tmp_dd[i] = dpalette_pixel[tmp_d[i]];
449 #if defined(FIXED_FRAMEBUFFER_SIZE)
452 #if defined(_RGB555) || defined(_RGBA565)
453 static const int shift_factor = 2;
455 static const int shift_factor = 3;
457 __DECL_VECTORIZED_LOOP
458 for(int i = 0; i < 8; i++) {
460 tmp_dd[i] = (tmp_dd[i] >> shift_factor) & (const scrntype_t)RGBA_COLOR(31, 31, 31, 255);;
464 __DECL_VECTORIZED_LOOP
465 for(int i = 0; i < 8; i++) {
471 __DECL_VECTORIZED_LOOP
472 for(int i = 0; i < 8; i++) {
478 #if defined(USE_GREEN_DISPLAY)
479 void DISPLAY::GETVRAM_8_200L_GREEN(int yoff, scrntype_t *p,
486 #if defined(_FM77AV40EX) || defined(_FM77AV40SX)
487 int dpage = vram_display_block;
489 if(p == NULL) return;
491 yoff_d = (yoff + yoff_d) & 0x3fff;
494 if(!multimode_dispflags[0]) b = gvram_shadow[yoff_d + 0x00000];
495 if(!multimode_dispflags[1]) r = gvram_shadow[yoff_d + 0x04000];
496 if(!multimode_dispflags[2]) g = gvram_shadow[yoff_d + 0x08000];
498 uint16_t *pg = &(bit_trans_table_0[g][0]);
499 uint16_t *pr = &(bit_trans_table_1[r][0]);
500 uint16_t *pb = &(bit_trans_table_2[b][0]);
502 scrntype_t tmp_dd[8];
504 __DECL_VECTORIZED_LOOP
505 for(int i = 0; i < 8; i++) {
507 tmp_d[i] = tmp_d[i] | pg[i];
508 tmp_d[i] = tmp_d[i] | pb[i];
509 tmp_d[i] = tmp_d[i] >> 5;
512 __DECL_VECTORIZED_LOOP
513 for(int i = 0; i < 8; i++) {
514 tmp_dd[i] = dpalette_pixel_green[tmp_d[i]];
516 #if defined(FIXED_FRAMEBUFFER_SIZE)
519 #if defined(_RGB555) || defined(_RGBA565)
520 static const int shift_factor = 2;
522 static const int shift_factor = 3;
524 __DECL_VECTORIZED_LOOP
525 for(int i = 0; i < 8; i++) {
527 tmp_dd[i] = (tmp_dd[i] >> shift_factor) & (const scrntype_t)RGBA_COLOR(31, 31, 31, 255);;
531 __DECL_VECTORIZED_LOOP
532 for(int i = 0; i < 8; i++) {
538 __DECL_VECTORIZED_LOOP
539 for(int i = 0; i < 8; i++) {
546 #if defined(_FM77AV_VARIANTS)
547 void DISPLAY::GETVRAM_4096(int yoff, scrntype_t *p, scrntype_t *px,
553 uint8_t bb[4], rr[4], gg[4];
555 const uint16_t __masks[8] = {(uint16_t)mask, (uint16_t)mask, (uint16_t)mask, (uint16_t)mask, (uint16_t)mask, (uint16_t)mask, (uint16_t)mask, (uint16_t)mask};
561 # if defined(_FM77AV40EX) || defined(_FM77AV40SX)
562 int dpage = vram_display_block;
564 if(p == NULL) return;
568 # if defined(_FM77AV40EX) || defined(_FM77AV40SX)
581 bb[0] = gvram_shadow[yoff_d1];
582 bb[1] = gvram_shadow[yoff_d1 + 0x02000];
583 rr[0] = gvram_shadow[yoff_d1 + 0x04000];
584 rr[1] = gvram_shadow[yoff_d1 + 0x06000];
586 gg[0] = gvram_shadow[yoff_d1 + 0x08000];
587 gg[1] = gvram_shadow[yoff_d1 + 0x0a000];
589 bb[2] = gvram_shadow[yoff_d2 + 0x0c000];
590 bb[3] = gvram_shadow[yoff_d2 + 0x0e000];
592 rr[2] = gvram_shadow[yoff_d2 + 0x10000];
593 rr[3] = gvram_shadow[yoff_d2 + 0x12000];
594 gg[2] = gvram_shadow[yoff_d2 + 0x14000];
595 gg[3] = gvram_shadow[yoff_d2 + 0x16000];
597 uint16_t tmp_g[8], tmp_r[8], tmp_b[8];
598 uint16_t *p0, *p1, *p2, *p3;
599 #if !defined(FIXED_FRAMEBUFFER_SIZE)
600 scrntype_t tmp_dd[8];
602 scrntype_t tmp_dd[16];
605 p0 = &(bit_trans_table_0[gg[0]][0]);
606 p1 = &(bit_trans_table_1[gg[1]][0]);
607 p2 = &(bit_trans_table_2[gg[2]][0]);
608 p3 = &(bit_trans_table_3[gg[3]][0]);
609 __DECL_VECTORIZED_LOOP
610 for(int i = 0; i < 8; i++) {
612 tmp_g[i] = tmp_g[i] | p1[i];
613 tmp_g[i] = tmp_g[i] | p2[i];
614 tmp_g[i] = tmp_g[i] | p3[i];
617 p0 = &(bit_trans_table_0[rr[0]][0]);
618 p1 = &(bit_trans_table_1[rr[1]][0]);
619 p2 = &(bit_trans_table_2[rr[2]][0]);
620 p3 = &(bit_trans_table_3[rr[3]][0]);
621 __DECL_VECTORIZED_LOOP
622 for(int i = 0; i < 8; i++) {
624 tmp_r[i] = tmp_r[i] | p1[i];
625 tmp_r[i] = tmp_r[i] | p2[i];
626 tmp_r[i] = tmp_r[i] | p3[i];
629 p0 = &(bit_trans_table_0[bb[0]][0]);
630 p1 = &(bit_trans_table_1[bb[1]][0]);
631 p2 = &(bit_trans_table_2[bb[2]][0]);
632 p3 = &(bit_trans_table_3[bb[3]][0]);
633 __DECL_VECTORIZED_LOOP
634 for(int i = 0; i < 8; i++) {
636 tmp_b[i] = tmp_b[i] | p1[i];
637 tmp_b[i] = tmp_b[i] | p2[i];
638 tmp_b[i] = tmp_b[i] | p3[i];
640 __DECL_VECTORIZED_LOOP
641 for(int i = 0; i < 8; i++) {
643 pixels[i] = tmp_b[i] >> 4;
644 pixels[i] = pixels[i] | tmp_r[i];
645 pixels[i] = pixels[i] | tmp_g[i];
646 pixels[i] = pixels[i] & __masks[i];
648 //for(int i = 0; i < 8; i++) {
649 // pixels[i] = pixels[i] & mask;
651 #if !defined(FIXED_FRAMEBUFFER_SIZE)
652 __DECL_VECTORIZED_LOOP
653 for(int i = 0; i < 8; i++) {
654 tmp_dd[i] = analog_palette_pixel[pixels[i]];
658 __DECL_VECTORIZED_LOOP
659 for(int i = 0; i < 8; i++) {
660 tmp_dd[i * 2] = tmp_dd[i * 2 + 1] = analog_palette_pixel[pixels[i]];;
662 __DECL_VECTORIZED_LOOP
663 for(int i = 0; i < 16; i++) {
668 __DECL_VECTORIZED_LOOP
669 for(int i = 0; i < 16; i++) {
670 #if defined(_RGB888) || defined(_RGBA888)
671 tmp_dd[i] = tmp_dd[i] >> 3;
672 #elif defined(_RGB555)
673 tmp_dd[i] = tmp_dd[i] >> 2;
674 #elif defined(_RGB565)
675 tmp_dd[i] = tmp_dd[i] >> 2;
678 __DECL_VECTORIZED_LOOP
679 for(int i = 0; i < 16; i++) {
680 tmp_dd[i] = tmp_dd[i] & (const scrntype_t)RGBA_COLOR(31, 31, 31, 255);
684 __DECL_VECTORIZED_LOOP
685 for(int i = 0; i < 16; i++) {
694 #if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
695 void DISPLAY::GETVRAM_8_400L(int yoff, scrntype_t *p,
701 # if defined(_FM77AV40EX) || defined(_FM77AV40SX)
702 int dpage = vram_display_block;
704 if(p == NULL) return;
706 # if defined(_FM77AV40EX) || defined(_FM77AV40SX)
714 if(dpage != 0) yoff_d += 0x18000;
717 if(!multimode_dispflags[0]) b = gvram_shadow[yoff_d + 0x00000];
718 if(!multimode_dispflags[1]) r = gvram_shadow[yoff_d + 0x08000];
719 if(!multimode_dispflags[2]) g = gvram_shadow[yoff_d + 0x10000];
721 uint16_t *pg = &(bit_trans_table_0[g][0]);
722 uint16_t *pr = &(bit_trans_table_1[r][0]);
723 uint16_t *pb = &(bit_trans_table_2[b][0]);
726 __DECL_VECTORIZED_LOOP
727 for(int i = 0; i < 8; i++) {
728 tmp_d[i] = pg[i] | pr[i] | pb[i];
729 tmp_d[i] = tmp_d[i] >> 5;
731 __DECL_VECTORIZED_LOOP
732 for(int i = 0; i < 8; i++) {
733 p[i] = dpalette_pixel[tmp_d[i]];
737 void DISPLAY::GETVRAM_256k(int yoff, scrntype_t *p, scrntype_t *px, bool scan_line)
741 uint32_t btmp, rtmp, gtmp;
750 if(p == NULL) return;
759 uint8_t bb[8], rr[8], gg[8];
760 uint16_t *p0, *p1, *p2, *p3, *p4, *p5;
761 uint32_t _btmp[8], _rtmp[8], _gtmp[8];
762 #if !defined(FIXED_FRAMEBUFFER_SIZE)
763 scrntype_t tmp_dd[8];
765 scrntype_t tmp_dd[16];
768 if(!multimode_dispflags[0]) {
770 bb[0] = gvram_shadow[yoff_d1];
771 bb[1] = gvram_shadow[yoff_d1 + 0x02000];
773 bb[2] = gvram_shadow[yoff_d2 + 0x0c000];
774 bb[3] = gvram_shadow[yoff_d2 + 0x0e000];
776 bb[4] = gvram_shadow[yoff_d1 + 0x18000];
777 bb[5] = gvram_shadow[yoff_d1 + 0x1a000];
779 p0 = &(bit_trans_table_0[bb[0]][0]);
780 p1 = &(bit_trans_table_1[bb[1]][0]);
781 p2 = &(bit_trans_table_2[bb[2]][0]);
782 p3 = &(bit_trans_table_3[bb[3]][0]);
783 p4 = &(bit_trans_table_4[bb[4]][0]);
784 p5 = &(bit_trans_table_5[bb[5]][0]);
785 __DECL_VECTORIZED_LOOP
786 for(int i = 0; i < 8; i++) {
788 _btmp[i] = _btmp[i] | p1[i];
789 _btmp[i] = _btmp[i] | p2[i];
790 _btmp[i] = _btmp[i] | p3[i];
791 _btmp[i] = _btmp[i] | p4[i];
792 _btmp[i] = _btmp[i] | p5[i];
795 __DECL_VECTORIZED_LOOP
796 for(int i = 0; i < 8; i++) {
800 if(!multimode_dispflags[1]) {
803 rr[0] = gvram_shadow[yoff_d1 + 0x04000];
804 rr[1] = gvram_shadow[yoff_d1 + 0x06000];
806 rr[2] = gvram_shadow[yoff_d2 + 0x10000];
807 rr[3] = gvram_shadow[yoff_d2 + 0x12000];
809 rr[4] = gvram_shadow[yoff_d1 + 0x1c000];
810 rr[5] = gvram_shadow[yoff_d1 + 0x1e000];
812 p0 = &(bit_trans_table_0[rr[0]][0]);
813 p1 = &(bit_trans_table_1[rr[1]][0]);
814 p2 = &(bit_trans_table_2[rr[2]][0]);
815 p3 = &(bit_trans_table_3[rr[3]][0]);
816 p4 = &(bit_trans_table_4[rr[4]][0]);
817 p5 = &(bit_trans_table_5[rr[5]][0]);
818 __DECL_VECTORIZED_LOOP
819 for(int i = 0; i < 8; i++) {
821 _rtmp[i] = _rtmp[i] | p1[i];
822 _rtmp[i] = _rtmp[i] | p2[i];
823 _rtmp[i] = _rtmp[i] | p3[i];
824 _rtmp[i] = _rtmp[i] | p4[i];
825 _rtmp[i] = _rtmp[i] | p5[i];
828 __DECL_VECTORIZED_LOOP
829 for(int i = 0; i < 8; i++) {
833 if(!multimode_dispflags[2]) {
836 gg[0] = gvram_shadow[yoff_d1 + 0x08000];
837 gg[1] = gvram_shadow[yoff_d1 + 0x0a000];
839 gg[2] = gvram_shadow[yoff_d2 + 0x14000];
840 gg[3] = gvram_shadow[yoff_d2 + 0x16000];
842 gg[4] = gvram_shadow[yoff_d1 + 0x20000];
843 gg[5] = gvram_shadow[yoff_d1 + 0x22000];
845 p0 = &(bit_trans_table_0[gg[0]][0]);
846 p1 = &(bit_trans_table_1[gg[1]][0]);
847 p2 = &(bit_trans_table_2[gg[2]][0]);
848 p3 = &(bit_trans_table_3[gg[3]][0]);
849 p4 = &(bit_trans_table_4[gg[4]][0]);
850 p5 = &(bit_trans_table_5[gg[5]][0]);
851 __DECL_VECTORIZED_LOOP
852 for(int i = 0; i < 8; i++) {
854 _gtmp[i] = _gtmp[i] | p1[i];
855 _gtmp[i] = _gtmp[i] | p2[i];
856 _gtmp[i] = _gtmp[i] | p3[i];
857 _gtmp[i] = _gtmp[i] | p4[i];
858 _gtmp[i] = _gtmp[i] | p5[i];
861 __DECL_VECTORIZED_LOOP
862 for(int i = 0; i < 8; i++) {
866 #if !defined(FIXED_FRAMEBUFFER_SIZE)
867 __DECL_VECTORIZED_LOOP
868 for(int i = 0; i < 8; i++) {
869 tmp_dd[i] = RGB_COLOR(_rtmp[i], _gtmp[i], _btmp[i]);
873 __DECL_VECTORIZED_LOOP
874 for(int i = 0; i < 8; i++) {
875 tmp_dd[i * 2] = tmp_dd[i * 2 + 1] = RGB_COLOR(_rtmp[i], _gtmp[i], _btmp[i]);
877 __DECL_VECTORIZED_LOOP
878 for(int i = 0; i < 16; i++) {
883 __DECL_VECTORIZED_LOOP
884 for(int i = 0; i < 16; i++) {
885 #if defined(_RGB888) || defined(_RGBA888)
886 tmp_dd[i] = tmp_dd[i] >> 3;
887 #elif defined(_RGB555)
888 tmp_dd[i] = tmp_dd[i] >> 2;
889 #elif defined(_RGB565)
890 tmp_dd[i] = tmp_dd[i] >> 2;
893 __DECL_VECTORIZED_LOOP
894 for(int i = 0; i < 16; i++) {
895 tmp_dd[i] = tmp_dd[i] & RGBA_COLOR(31, 31, 31, 256);
899 __DECL_VECTORIZED_LOOP
900 for(int i = 0; i < 16; i++) {