
,    g_Frame = 20   50 
   :
1.  . (   )
1.   20   50 
3. CPU_Clk / g_Frame  
 
. 312.5 , 256   + 56.5       
1  - 64 . 512 . 48    
512  == 32  == 32    . 
1     - 8  6 (  4   + 4  )
312.5  == 15000    

  -  CPU_Clk, 3   . 

 28  * 48  = 1344    

    12288 
for (int i = 0; i < 256; i++)
{
	8    
	32   32 
	8    
}

 28.5  * 48  = 1368     

    ,     .  .
        ,   .




!.  ,             0011  ,     GID prod.,  ,   " ".   GID-  ! :)

   100     -  D3.2,  D6.3,  D28,  D35.      ( )    D20,    WTI -     ( ),   .  WTI   (   )     D3.2 -     100. 
.        ,    . 

               .         .          ,         ,           .      (   "")   40*256*8 ()  CLK    .     330 ()           140000.    330      ,    ""           .


int nScreenStage = 0;	// : 0 -  , 1 -  , 2 -  
DWORD_PTR nAddress = 0;
int nScreenCycleCount = 0;	//    
int nScreenLinesCount = 0;	//  
int nScreenLineBytesCount = 0; //    
int nScreenLinesStage = 0; //   : 0 -  , 1 -  (32), 2 -  
int nScreenLineCycleCount = 0; //       
BYTE *pScreenAddress;

Make_One_Screen_Cycle()
{
	nScreenCycleCount++;

	switch(nScreenStage)
	{
		case 0:
		{	// 0 -  
			if (nScreenCycleCount >= 50 * 48)
			{
				m_pScreenBufferAddress = m_pMemory;
				nScreenStage = 1;
				nScreenLinesCount = 0;
				nScreenLinesStage = 0;
				nScreenLineCycleCount = 0;
			}
			break;
		}
		case 1:
		{	// 1 -  , 256  
			nScreenLineCycleCount++;

			switch(nScreenLinesStage)
			{
				case 0:
				{
					if (nScreenLineCycleCount >= 8)
					{
						nScreenLinesStage = 1;
						nScreenLineBytesCount = 0;
					}
					break;
				}
				case 1:
				{
					DWORD_PTR nScreenAddr = GetScreenPage() << 14;
					m_pScreen->PrepareScreenLineByteRGB32(nScreenLinesCount, nScreenLineBytesCount++, m_pScreenBufferAddress[nScreenAddr]);
					m_pScreenBufferAddress++;
					m_pScreen->PrepareScreenLineByteRGB32(nScreenLinesCount, nScreenLineBytesCount++, m_pScreenBufferAddress[nScreenAddr]);
					m_pScreenBufferAddress++;

					if (nScreenLineBytesCount >= 64)
					{
						nScreenLinesStage = 2;

						if (++nScreenLinesCount >= 256)
						{
							CView *view = m_pParent->GetActiveView();

							if (view)
							{
								view->Invalidate(FALSE);
							}

							nScreenStage = 2;
							//      100?
						}
					}
					break;
				}
				case 2:
				{
					if (nScreenLineCycleCount >= 48)
					{
						nScreenLinesStage = 0;
						nScreenLineCycleCount = 0;
					}
					break;
				}
			}
			break;
		}
		case 2:
		{	// 2 -   +   
			if (nScreenCycleCount >= 15000)
			{
				nScreenStage = 0;
				nScreenCycleCount = 0;
			}
			break;
		}
	}
}


