Subversion Repositories pentevo

Rev

Rev 883 | Blame | Compare with Previous | 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.  
  38.    unsigned i;
  39.    // ┬хЁїэшщ сюЁф■Ё (яЁхфяюырурхЄё , ўЄю temp.scx ъЁрЄэю 16 Єюўърь)
  40.    for (i = temp.b_top * temp.scx / 16; i; i--)
  41.    {
  42.       *(unsigned*)dst = br; // ╬сЁрсюЄър ёЁрчє фтєї чэръюьхёЄ (яшъёхыш/pc-рЄЁшсєЄ√)
  43.       dst += 4;
  44.    }
  45.  
  46.    // ▌ъЁрэ
  47.    for (int y = 0; y < 192; y++)
  48.    {
  49.       unsigned x;
  50.           // ╦хт√щ сюЁф■Ё (т яЁхфхырї 192 ёЄЁюъ ¤ъЁрэр)
  51.           for (x = temp.b_left; x; x -= 8) // ╓шъы шфхЄ яю чэръюьхёЄрь
  52.       {
  53.          *(u16 *)dst = u16(br); // ╟ряшё№ Єюўхъ (эр сюЁф■Ёх шї эхЄ) ш рЄЁшсєЄют (ЎтхЄ сюЁф■Ёр) (0xbb00)
  54.          dst += sizeof(u16);
  55.       }
  56.  
  57.           // ▌ъЁрээр  юсырёЄ№ (ЎхэЄЁры№эр  ўрёЄ№)
  58.       for (x = 0; x < 32; x++) // ╓шъы шфхЄ яю чэръюьхёЄрь
  59.       {
  60.          *dst++ = temp.base[t.scrtab[y] + x]; // ╥юўъш (8°Єєъ)
  61.          *dst++ = colortab[temp.base[atrtab[y] + x]]; // pc-рЄЁшсєЄ√
  62.       }
  63.  
  64.       // ╧Ёрт√щ сюЁф■Ё (т яЁхфхырї 192 ёЄЁюъ ¤ъЁрэр)
  65.           for (x = temp.b_right; x; x -= 8) // ╓шъы шфхЄ яю чэръюьхёЄрь
  66.       {
  67.          *(u16 *)dst = u16(br); // ╟ряшё№ Єюўхъ (эр сюЁф■Ёх шї эхЄ) ш рЄЁшсєЄют (ЎтхЄ сюЁф■Ёр) (0xbb00)
  68.          dst += sizeof(u16);
  69.       }
  70.    }
  71.  
  72.    // ═шцэшщ сюЁф■Ё (яЁхфяюырурхЄё , ўЄю temp.scx ъЁрЄэю 16 Єюўърь)
  73.    for (i = temp.b_bottom*temp.scx / 16; i; i--)
  74.    {
  75.       *(unsigned*)dst = br; // ╬сЁрсюЄър ёЁрчє фтєї чэръюьхёЄ (яшъёхыш/pc-рЄЁшсєЄ√)
  76.       dst += 4;
  77.    }
  78. }
  79.  
  80. void draw_gigascreen_no_border()
  81. {
  82.    unsigned char *dst = rbuf + (temp.b_top * temp.scx + temp.b_left) / 4;
  83.    unsigned char * const screen = RAM_BASE_M + 5*PAGE;
  84.    unsigned offset = (comp.frame_counter & 1)? 0 : 2*PAGE;
  85.    for (int y = 0; y < 192; y++) {
  86.       *(volatile unsigned char*)dst;
  87.       for (unsigned x = 0; x < 32; x++) {
  88.          dst[2*x+0] = screen[t.scrtab[y] + x + offset];
  89.          dst[2*x+1] = colortab[screen[atrtab[y] + x + offset]];
  90.       }
  91.       offset ^= 2*PAGE;
  92.       dst += temp.scx / 4;
  93.    }
  94. }
  95.