Subversion Repositories pentevo

Rev

Blame | Last modification | View Log | Download | RSS feed | ?url?

  1. #include "std.h"
  2.  
  3. #include "emul.h"
  4. #include "vars.h"
  5. #include "draw.h"
  6. #include "drawnomc.h"
  7.  
  8. void draw_border()
  9. {
  10.    unsigned br = comp.border_attr * 0x11001100;
  11.    for (unsigned i = 0; i < temp.scx*temp.scy/4; i+=4)
  12.       *(unsigned*)(rbuf + i) = br;
  13. }
  14.  
  15. void draw_alco();
  16. void draw_gigascreen_no_border();
  17.  
  18. void draw_screen()
  19. {
  20. /* [vv] ╬Єъы■ўхэ, Є.ъ. ¤ЄюЄ сшЄ шёяюы№чєхЄё  фы  DDp scroll
  21.    if (comp.pEFF7 & EFF7_384)
  22.    {
  23.        draw_alco();
  24.        return;
  25.    }
  26. */
  27.  
  28.    if (conf.nopaper)
  29.    {
  30.        draw_border();
  31.        return;
  32.    }
  33. //   if (comp.pEFF7 & EFF7_GIGASCREEN) { draw_border(); draw_gigascreen_no_border(); return; } //Alone Coder
  34.  
  35.    unsigned char *dst = rbuf;
  36.    unsigned br = comp.border_attr * 0x11001100; // ╨рчьэюцхэшх рЄЁшсєЄр 0xbb00bb00, уфх b - ЎтхЄ сюЁф■Ёр
  37.         //[NS] эхєцхыш ¤Єю урЇэю с√ёЄЁхщ ўхь ёфтшу?
  38.  
  39.    unsigned i;
  40.    // ┬хЁїэшщ сюЁф■Ё (яЁхфяюырурхЄё , ўЄю temp.scx ъЁрЄэю 16 Єюўърь)
  41.    for (i = temp.b_top * temp.scx / 16; i; i--)
  42.    {
  43.       *(unsigned*)dst = br; // ╬сЁрсюЄър ёЁрчє фтєї чэръюьхёЄ (яшъёхыш/pc-рЄЁшсєЄ√)
  44.       dst += 4;
  45.    }
  46.  
  47.    // ▌ъЁрэ
  48.    for (int y = 0; y < 192; y++)
  49.    {
  50.       unsigned x;
  51.           // ╦хт√щ сюЁф■Ё (т яЁхфхырї 192 ёЄЁюъ ¤ъЁрэр)
  52.           for (x = temp.b_left; x; x -= 8) // ╓шъы шфхЄ яю чэръюьхёЄрь
  53.       {
  54.          *(u16 *)dst = u16(br); // ╟ряшё№ Єюўхъ (эр сюЁф■Ёх шї эхЄ) ш рЄЁшсєЄют (ЎтхЄ сюЁф■Ёр) (0xbb00)
  55.          dst += sizeof(u16);
  56.       }
  57.  
  58.           // ▌ъЁрээр  юсырёЄ№ (ЎхэЄЁры№эр  ўрёЄ№)
  59.       for (x = 0; x < 32; x++) // ╓шъы шфхЄ яю чэръюьхёЄрь
  60.       {
  61.          *dst++ = temp.base[t.scrtab[y] + x];           // ╥юўъш (8°Єєъ)
  62.          *dst++ = colortab[temp.base[atrtab[y] + x]];   // pc-рЄЁшсєЄ√
  63.       }
  64.  
  65.       // ╧Ёрт√щ сюЁф■Ё (т яЁхфхырї 192 ёЄЁюъ ¤ъЁрэр)
  66.           for (x = temp.b_right; x; x -= 8) // ╓шъы шфхЄ яю чэръюьхёЄрь
  67.       {
  68.          *(u16 *)dst = u16(br); // ╟ряшё№ Єюўхъ (эр сюЁф■Ёх шї эхЄ) ш рЄЁшсєЄют (ЎтхЄ сюЁф■Ёр) (0xbb00)
  69.          dst += sizeof(u16);
  70.       }
  71.    }
  72.  
  73.    // ═шцэшщ сюЁф■Ё (яЁхфяюырурхЄё , ўЄю temp.scx ъЁрЄэю 16 Єюўърь)
  74.    for (i = temp.b_bottom*temp.scx / 16; i; i--)
  75.    {
  76.       *(unsigned*)dst = br; // ╬сЁрсюЄър ёЁрчє фтєї чэръюьхёЄ (яшъёхыш/pc-рЄЁшсєЄ√)
  77.       dst += 4;
  78.    }
  79. }
  80.  
  81. void draw_gigascreen_no_border()
  82. {
  83.    unsigned char *dst = rbuf + (temp.b_top * temp.scx + temp.b_left) / 4;
  84.    unsigned char * const screen = RAM_BASE_M + 5*PAGE;
  85.    unsigned offset = (comp.frame_counter & 1)? 0 : 2*PAGE;
  86.    for (int y = 0; y < 192; y++) {
  87.       *(volatile unsigned char*)dst;
  88.       for (unsigned x = 0; x < 32; x++) {
  89.          dst[2*x+0] = screen[t.scrtab[y] + x + offset];
  90.          dst[2*x+1] = colortab[screen[atrtab[y] + x + offset]];
  91.       }
  92.       offset ^= 2*PAGE;
  93.       dst += temp.scx / 4;
  94.    }
  95. }
  96.