Top secrets sources NedoPC pentevo

Rev

Rev 799 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

#include "std.h"

#include "emul.h"
#include "vars.h"
#include "draw.h"
#include "drawnomc.h"

void draw_border()
{
   unsigned br = comp.border_attr * 0x11001100;
   for (unsigned i = 0; i < temp.scx*temp.scy/4; i+=4)
      *(unsigned*)(rbuf + i) = br;
}

void draw_alco();
void draw_gigascreen_no_border();

void draw_screen()
{
/* [vv] Îòêëþ÷åí, ò.ê. ýòîò áèò èñïîëüçóåòñÿ äëÿ DDp scroll
   if (comp.pEFF7 & EFF7_384)
   {
       draw_alco();
       return;
   }
*/


   if (conf.nopaper)
   {
       draw_border();
       return;
   }
//   if (comp.pEFF7 & EFF7_GIGASCREEN) { draw_border(); draw_gigascreen_no_border(); return; } //Alone Coder

   unsigned char *dst = rbuf;
   unsigned br = comp.border_attr * 0x11001100; // Ðàçìíîæåíèå àòðèáóòà 0xbb00bb00, ãäå b - öâåò áîðäþðà

   unsigned i;
   // Âåðõíèé áîðäþð (ïðåäïîëàãàåòñÿ, ÷òî temp.scx êðàòíî 16 òî÷êàì)
   for (i = temp.b_top * temp.scx / 16; i; i--)
   {
      *(unsigned*)dst = br; // Îáðàáîòêà ñðàçó äâóõ çíàêîìåñò (ïèêñåëè/pc-àòðèáóòû)
      dst += 4;
   }

   // Ýêðàí
   for (int y = 0; y < 192; y++)
   {
      unsigned x;
          // Ëåâûé áîðäþð (â ïðåäåëàõ 192 ñòðîê ýêðàíà)
          for (x = temp.b_left; x; x -= 8) // Öèêë èäåò ïî çíàêîìåñòàì
      {
         *(u16 *)dst = u16(br); // Çàïèñü òî÷åê (íà áîðäþðå èõ íåò) è àòðèáóòîâ (öâåò áîðäþðà) (0xbb00)
         dst += sizeof(u16);
      }

          // Ýêðàííàÿ îáëàñòü (öåíòðàëüíàÿ ÷àñòü)
      for (x = 0; x < 32; x++) // Öèêë èäåò ïî çíàêîìåñòàì
      {
         *dst++ = temp.base[t.scrtab[y] + x]; // Òî÷êè (8øòóê)
         *dst++ = colortab[temp.base[atrtab[y] + x]]; // pc-àòðèáóòû
      }

      // Ïðàâûé áîðäþð (â ïðåäåëàõ 192 ñòðîê ýêðàíà)
          for (x = temp.b_right; x; x -= 8) // Öèêë èäåò ïî çíàêîìåñòàì
      {
         *(u16 *)dst = u16(br); // Çàïèñü òî÷åê (íà áîðäþðå èõ íåò) è àòðèáóòîâ (öâåò áîðäþðà) (0xbb00)
         dst += sizeof(u16);
      }
   }

   // Íèæíèé áîðäþð (ïðåäïîëàãàåòñÿ, ÷òî temp.scx êðàòíî 16 òî÷êàì)
   for (i = temp.b_bottom*temp.scx / 16; i; i--)
   {
      *(unsigned*)dst = br; // Îáðàáîòêà ñðàçó äâóõ çíàêîìåñò (ïèêñåëè/pc-àòðèáóòû)
      dst += 4;
   }
}

void draw_gigascreen_no_border()
{
   unsigned char *dst = rbuf + (temp.b_top * temp.scx + temp.b_left) / 4;
   unsigned char * const screen = RAM_BASE_M + 5*PAGE;
   unsigned offset = (comp.frame_counter & 1)? 0 : 2*PAGE;
   for (int y = 0; y < 192; y++) {
      *(volatile unsigned char*)dst;
      for (unsigned x = 0; x < 32; x++) {
         dst[2*x+0] = screen[t.scrtab[y] + x + offset];
         dst[2*x+1] = colortab[screen[atrtab[y] + x + offset]];
      }
      offset ^= 2*PAGE;
      dst += temp.scx / 4;
   }
}