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; } }
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 }