Пример #1
0
        public void WriteVCE(int address, byte data)
        {
            switch (address)
            {
            case 0:
                //m_VCE_BW = (data & 0x80) != 0;
                //m_VCE_Blur = (data & 0x04) != 0;
                switch (data & 3)
                {
                case 0:
                    m_VCE_DotClock = DotClock.MHZ_5;
                    break;

                case 1:
                    m_VCE_DotClock = DotClock.MHZ_7;
                    break;

                default:
                    m_VCE_DotClock = DotClock.MHZ_10;
                    break;
                }
                break;

            case 2:
                m_VCE_Index = (m_VCE_Index & 0x100) | (data & 0xFF);
                break;

            case 3:
                m_VCE_Index = (m_VCE_Index & 0xFF) | ((data & 0x01) << 8);
                break;

            case 4:
                m_VCE[m_VCE_Index] = (ushort)((m_VCE[m_VCE_Index] & 0xFF00) | data);
                break;

            case 5:
                m_VCE[m_VCE_Index] = (ushort)((m_VCE[m_VCE_Index] & 0xFF) | ((data << 8) & 0x100));
                m_VCE_Index        = (m_VCE_Index + 1) & 0x1FF;
                break;
            }
        }
Пример #2
0
        public Video()
        {
            m_Screen     = Sdl.SDL_SetVideoMode(640, 512, 32, (Sdl.SDL_SWSURFACE | Sdl.SDL_DOUBLEBUF | Sdl.SDL_ANYFORMAT));
            m_ScreenSurf = (Sdl.SDL_Surface)Marshal.PtrToStructure(m_Screen, typeof(Sdl.SDL_Surface));
            Sdl.SDL_PixelFormat format = (Sdl.SDL_PixelFormat)Marshal.PtrToStructure(m_ScreenSurf.format, typeof(Sdl.SDL_PixelFormat));

            for (int i = 0; i < 512; i++)
            {
                int b = ((i) & 0x7) * 0x49 >> 1;
                int r = ((i >> 3) & 0x7) * 0x49 >> 1;
                int g = ((i >> 6) & 0x7) * 0x49 >> 1;

                PALETTE[i] =
                    (r << format.Rshift & format.Rmask) |
                    (g << format.Gshift & format.Gmask) |
                    (b << format.Bshift & format.Bmask);
            }
            m_ScreenSurf.pitch /= 4;

            Sdl.SDL_WM_SetCaption("TurboSharp", null);

            m_VRAM      = new ushort[0x10000];
            m_SAT       = new SpriteAttribute[0x40];
            m_VCE       = new ushort[0x200];
            m_VCE_Index = 0;

            for (int i = 0; i < 0x40; i++)
            {
                m_SAT[i] = new SpriteAttribute();
            }

            m_RenderLine = 0;
            m_DoSAT_DMA  = false;
            m_WaitingIRQ = false;

            m_VCE_DotClock  = DotClock.MHZ_5;
            m_VDC_Increment = 1;

            m_VDC_BSY = false;  // We don't halt the CPU
        }