public GraphicsMode(int width, int height, int pixelsPerByte) { this.pixelsPerByte = pixelsPerByte; texture = new Texture2D(width, height); texture.filterMode = FilterMode.Point; texture.wrapMode = TextureWrapMode.Clamp; pixels = new Color[width * height]; uint size = (uint)(width * height / pixelsPerByte); range = new ComputerMemory.MemoryRange(videoMemStart, videoMemStart + size); if (videoMemStart + size > memEnd) { memEnd = videoMemStart + size; } }
void Start() { mem = GetComponent <ComputerMemory>(); modes = new GraphicsMode[4]; modes[0] = new GraphicsMode(charWidth * textWidth, charHeight * textHeight, 2); modes[1] = new GraphicsMode(800, 600, 2); modes[2] = new GraphicsMode(800, 600, 1); modes[3] = new GraphicsMode(1024, 768, 2); ComputerMemory.MemoryRange screenRange = new ComputerMemory.MemoryRange(videoMemStart, memEnd); mem.Subscribe("Screen", screenRange, OnScreenMemoryChange); ComputerMemory.MemoryRange paletteRange = new ComputerMemory.MemoryRange(paletteStart, paletteEnd); mem.Subscribe("ScreenPalette", paletteRange, OnPaletteChange); ComputerMemory.MemoryRange modeTriggerRange = new ComputerMemory.MemoryRange(modeTrigger, modeTrigger); mem.Subscribe("ScreenModeTrigger", modeTriggerRange, OnModeChange); SwitchMode(0); SetDefaultPalette(); SetDefaultCharset(); isReady = true; // WriteTestScreen(); // WriteTestText(); }
public void OnModeChange(ComputerMemory.MemoryRange range) { byte mode = ComputerMemory.memory[modeTrigger]; SwitchMode(mode); }
public void OnPaletteChange(ComputerMemory.MemoryRange range) { Debug.Log("Palette memory changed"); needPaletteChange = true; needRedraw = true; }
public void OnScreenMemoryChange(ComputerMemory.MemoryRange range) { Debug.Log("Screen memory changed"); needRedraw = true; }
void OnMemoryChange(ComputerMemory.MemoryRange range) { dirty = true; }