Esempio n. 1
0
        private unsafe void DrawATile(int tileNumber, ref BitmapData b, int bitmapXPos, int bitmapYPos)
        {
            int    stride  = b.Stride;
            byte * ptr     = (byte *)b.Scan0;
            int    tileAdr = 0x8000 + tileNumber * 0x10;
            int    y       = bitmapXPos;
            int    x       = bitmapYPos;
            ushort adr1    = 0;
            ushort adr2    = 0;

            Color[] halfLine = new Color[8];
            for (int j = 0; j < 16; j += 2)
            {
                adr1 = (ushort)(tileAdr + j);
                adr2 = (ushort)(tileAdr + j + 1);
                byte b1 = m_ram.ReadByteAt(adr1);   // a line of 8 px is 2 bytes.
                byte b2 = m_ram.ReadByteAt(adr2);   // a line of 8 px is 2 bytes.
                Read8PixelsFrom2Byte(b1, b2, ref halfLine, ref m_bgPalette);
                for (int m = 0; m < 8; m++)
                {
                    int px = x + m;
                    //if (y >= 0 && y <= h && px <= w && px >= 0)
                    {
                        Color c = halfLine[m];
                        ptr[(px * 3) + y * stride]     = c.B;
                        ptr[(px * 3) + y * stride + 1] = c.G;
                        ptr[(px * 3) + y * stride + 2] = c.R;
                    }
                }
                y++;
            }
        }
Esempio n. 2
0
        //////////////////////////////////////////////////////////////////////
        //
        //////////////////////////////////////////////////////////////////////
        private void DrawTiles(Graphics g)
        {
            if (m_ram == null)
            {
                return;
            }
            int   nbTiles = 256;// 32 * 16;// 32 * 32;
            int   x;
            int   y;
            sTile tile;

            Color[]        halfLine = new Color[8];
            ColorConverter cv       = new ColorConverter();
            Pen            p        = new Pen(Color.Black);

            for (int i = 0; i < nbTiles; i++)
            {
                tile = m_tiles[i];
                y    = (i / 16) * 8;
                x    = (i % 16) * 8;
                ushort adr1 = 0;
                ushort adr2 = 0;
                for (int j = 0; j < 16; j += 2)
                {
                    adr1 = (ushort)(tile.startAdr + j);
                    adr2 = (ushort)(tile.startAdr + j + 1);
                    byte b1 = m_ram.ReadByteAt(adr1);   // a line of 8 px is 2 bytes.
                    byte b2 = m_ram.ReadByteAt(adr2);   // a line of 8 px is 2 bytes.
                    Read8PixelsFrom2Byte(b1, b2, ref halfLine);
                    for (int k = 0; k < 8; k++)
                    {
                        //m_bitmap.SetPixel(x + k, y, halfLine[k  ]);
                        p.Color = halfLine[k];
                        g.DrawRectangle(p, x + k, y, 1, 1);
                    }
                    y++;
                }
            }
        }
Esempio n. 3
0
 public void UpdateForm()
 {
     for (ushort i = m_OAMStartAdr; i < m_OAMEndAdr; i += 4)
     {
         UpdateSprite(i);
     }
     // update bg tiles
     for (int i = 0; i < 32; i++)
     {
         for (int j = 0; j < 32; j++)
         {
             ushort adr        = (ushort)(m_BGTilesStartAdr + i + j * 32);
             int    tileNumber = m_ram.ReadByteAt(adr);
             // todo : tile start adr switch
             ushort tileAdr = (ushort)(0x8000 + tileNumber * 16);
             UpdateBackgroundTile(tileAdr, i, j);
         }
     }
 }