mirror of
https://github.com/danbulant/Cosmos
synced 2026-05-19 20:39:01 +00:00
128 lines
4.1 KiB
C#
128 lines
4.1 KiB
C#
using System;
|
|
using HALVGAScreen = Cosmos.HAL.VGAScreen;
|
|
|
|
namespace Cosmos.System
|
|
{
|
|
public class VGAScreen
|
|
{
|
|
public enum TextSize { Size40x25, Size40x50, Size80x25, Size80x50, Size90x30, Size90x60 };
|
|
|
|
public enum ScreenSize
|
|
{
|
|
Size640x480,
|
|
Size720x480,
|
|
Size320x200
|
|
};
|
|
|
|
public enum ColorDepth
|
|
{
|
|
BitDepth2, BitDepth4, BitDepth8, BitDepth16
|
|
};
|
|
|
|
private static HALVGAScreen mScreen = new HALVGAScreen();
|
|
|
|
public static void SetGraphicsMode(ScreenSize screenSize, ColorDepth colorDepth)
|
|
{
|
|
HALVGAScreen.ScreenSize ScrSize = HALVGAScreen.ScreenSize.Size320x200;
|
|
HALVGAScreen.ColorDepth ClrDepth = HALVGAScreen.ColorDepth.BitDepth8;
|
|
|
|
switch (screenSize)
|
|
{
|
|
case ScreenSize.Size320x200:
|
|
ScrSize = HALVGAScreen.ScreenSize.Size320x200;
|
|
break;
|
|
case ScreenSize.Size640x480:
|
|
ScrSize = HALVGAScreen.ScreenSize.Size640x480;
|
|
break;
|
|
case ScreenSize.Size720x480:
|
|
ScrSize = HALVGAScreen.ScreenSize.Size720x480;
|
|
break;
|
|
default:
|
|
throw new Exception("This situation is not implemented!");
|
|
}
|
|
|
|
switch (colorDepth)
|
|
{
|
|
case ColorDepth.BitDepth2:
|
|
ClrDepth = HALVGAScreen.ColorDepth.BitDepth2;
|
|
break;
|
|
case ColorDepth.BitDepth4:
|
|
ClrDepth = HALVGAScreen.ColorDepth.BitDepth4;
|
|
break;
|
|
case ColorDepth.BitDepth8:
|
|
ClrDepth = HALVGAScreen.ColorDepth.BitDepth8;
|
|
break;
|
|
case ColorDepth.BitDepth16:
|
|
ClrDepth = HALVGAScreen.ColorDepth.BitDepth16;
|
|
break;
|
|
default:
|
|
throw new Exception("This situation is not implemented!");
|
|
}
|
|
|
|
mScreen.SetGraphicsMode(ScrSize, ClrDepth);
|
|
}
|
|
|
|
public static void SetPixel(uint X, uint Y, uint Color)
|
|
{
|
|
mScreen.SetPixel(X, Y, Color);
|
|
}
|
|
|
|
public static void Clear(int Color)
|
|
{
|
|
mScreen.Clear(Color);
|
|
}
|
|
|
|
public static void TestMode320x200x8()
|
|
{
|
|
mScreen.TestMode320x200x8();
|
|
}
|
|
|
|
public static void SetPalette(int Index, byte[] Palette)
|
|
{
|
|
mScreen.SetPalette(Index, Palette);
|
|
}
|
|
|
|
public static void SetPaletteEntry(int Index, byte R, byte G, byte B)
|
|
{
|
|
mScreen.SetPaletteEntry(Index, R, G, B);
|
|
}
|
|
|
|
public static uint GetPixel(uint X, uint Y)
|
|
{
|
|
return mScreen.GetPixel(X, Y);
|
|
}
|
|
|
|
public static void SetTextMode(TextSize Size)
|
|
{
|
|
switch (Size)
|
|
{
|
|
case TextSize.Size40x25:
|
|
mScreen.SetTextMode(HALVGAScreen.TextSize.Size40x25);
|
|
break;
|
|
case TextSize.Size40x50:
|
|
mScreen.SetTextMode(HALVGAScreen.TextSize.Size40x50);
|
|
break;
|
|
case TextSize.Size80x25:
|
|
mScreen.SetTextMode(HALVGAScreen.TextSize.Size80x25);
|
|
break;
|
|
case TextSize.Size80x50:
|
|
mScreen.SetTextMode(HALVGAScreen.TextSize.Size80x50);
|
|
break;
|
|
case TextSize.Size90x30:
|
|
mScreen.SetTextMode(HALVGAScreen.TextSize.Size90x30);
|
|
break;
|
|
case TextSize.Size90x60:
|
|
mScreen.SetTextMode(HALVGAScreen.TextSize.Size90x60);
|
|
break;
|
|
default:
|
|
throw new Exception("This situation is not implemented!");
|
|
}
|
|
}
|
|
|
|
public static int PixelHeight = mScreen.PixelHeight;
|
|
|
|
public static int PixelWidth = mScreen.PixelWidth;
|
|
|
|
public static int Colors = mScreen.Colors;
|
|
}
|
|
}
|