From b10b7632e8be3e9a829842521b605cf97621a656 Mon Sep 17 00:00:00 2001 From: taotao54321 Date: Mon, 12 Mar 2012 05:26:48 +0000 Subject: [PATCH] Forgot to add files. very sorry --- BizHawk.MultiClient/PCEtools/PCEBGCanvas.cs | 47 +++++++ .../PCEtools/PCEBGViewer.Designer.cs | 60 +++++++++ BizHawk.MultiClient/PCEtools/PCEBGViewer.cs | 97 ++++++++++++++ BizHawk.MultiClient/PCEtools/PCEBGViewer.resx | 120 ++++++++++++++++++ 4 files changed, 324 insertions(+) create mode 100644 BizHawk.MultiClient/PCEtools/PCEBGCanvas.cs create mode 100644 BizHawk.MultiClient/PCEtools/PCEBGViewer.Designer.cs create mode 100644 BizHawk.MultiClient/PCEtools/PCEBGViewer.cs create mode 100644 BizHawk.MultiClient/PCEtools/PCEBGViewer.resx diff --git a/BizHawk.MultiClient/PCEtools/PCEBGCanvas.cs b/BizHawk.MultiClient/PCEtools/PCEBGCanvas.cs new file mode 100644 index 0000000000..adaa8a8d2d --- /dev/null +++ b/BizHawk.MultiClient/PCEtools/PCEBGCanvas.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using System.Drawing.Imaging; + +namespace BizHawk.MultiClient +{ + public partial class PCEBGCanvas : Control + { + const int BAT_WIDTH = 1024; + const int BAT_HEIGHT = 512; + public Bitmap bat; + + public PCEBGCanvas() + { + bat = new Bitmap(BAT_WIDTH, BAT_HEIGHT, PixelFormat.Format32bppArgb); + SetStyle(ControlStyles.AllPaintingInWmPaint, true); + SetStyle(ControlStyles.UserPaint, true); + SetStyle(ControlStyles.DoubleBuffer, true); + //SetStyle(ControlStyles.SupportsTransparentBackColor, true); + this.Size = new Size(BAT_WIDTH, BAT_HEIGHT); + //this.BackColor = Color.Transparent; + this.Paint += new System.Windows.Forms.PaintEventHandler(this.BGViewer_Paint); + } + + private void BGViewer_Paint(object sender, PaintEventArgs e) + { + e.Graphics.DrawImageUnscaled(bat, 0, 0); + } + + private void InitializeComponent() + { + this.SuspendLayout(); + // + // PCEBGCanvas + // + this.Name = "PCEBGCanvas"; + this.ResumeLayout(false); + + } + } +} diff --git a/BizHawk.MultiClient/PCEtools/PCEBGViewer.Designer.cs b/BizHawk.MultiClient/PCEtools/PCEBGViewer.Designer.cs new file mode 100644 index 0000000000..a16cb4e407 --- /dev/null +++ b/BizHawk.MultiClient/PCEtools/PCEBGViewer.Designer.cs @@ -0,0 +1,60 @@ +namespace BizHawk.MultiClient +{ + partial class PCEBGViewer + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.canvas = new BizHawk.MultiClient.PCEBGCanvas(); + this.SuspendLayout(); + // + // canvas + // + this.canvas.Location = new System.Drawing.Point(12, 12); + this.canvas.Name = "canvas"; + this.canvas.Size = new System.Drawing.Size(1024, 512); + this.canvas.TabIndex = 0; + // + // PCEBGViewer + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1056, 549); + this.Controls.Add(this.canvas); + this.Name = "PCEBGViewer"; + this.ShowIcon = false; + this.Text = "PCE BG Viewer (interim)"; + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.PCEBGViewer_FormClosed); + this.Load += new System.EventHandler(this.PCEBGViewer_Load); + this.ResumeLayout(false); + + } + + #endregion + + private PCEBGCanvas canvas; + } +} \ No newline at end of file diff --git a/BizHawk.MultiClient/PCEtools/PCEBGViewer.cs b/BizHawk.MultiClient/PCEtools/PCEBGViewer.cs new file mode 100644 index 0000000000..b473769794 --- /dev/null +++ b/BizHawk.MultiClient/PCEtools/PCEBGViewer.cs @@ -0,0 +1,97 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using System.Drawing.Imaging; +using BizHawk.Emulation.Consoles.TurboGrafx; + +namespace BizHawk.MultiClient +{ + public partial class PCEBGViewer : Form + { + PCEngine pce; + + public PCEBGViewer() + { + InitializeComponent(); + Activated += (o, e) => Generate(); + } + + private unsafe void Generate() + { + if (!this.IsHandleCreated || this.IsDisposed) return; + if (pce == null) return; + + int width = 8 * pce.VDC1.BatWidth; + int height = 8 * pce.VDC1.BatHeight; + BitmapData buf = canvas.bat.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.WriteOnly, canvas.bat.PixelFormat); + int pitch = buf.Stride / 4; + int* begin = (int*)buf.Scan0.ToPointer(); + int* p = begin; + + // TODO: this does not clear background, why? + for (int i = 0; i < pitch * buf.Height; ++i, ++p) + *p = canvas.BackColor.ToArgb(); + + p = begin; + for (int y = 0; y < height; ++y) + { + int yTile = y / 8; + int yOfs = y % 8; + for (int x = 0; x < width; ++x, ++p) + { + int xTile = x / 8; + int xOfs = x % 8; + int tileNo = pce.VDC1.VRAM[(ushort)(((yTile * pce.VDC1.BatWidth) + xTile))] & 0x07FF; + int paletteNo = pce.VDC1.VRAM[(ushort)(((yTile * pce.VDC1.BatWidth) + xTile))] >> 12; + int paletteBase = paletteNo * 16; + + byte c = pce.VDC1.PatternBuffer[(tileNo * 64) + (yOfs * 8) + xOfs]; + if (c == 0) + *p = pce.VCE.Palette[0]; + else + { + *p = pce.VCE.Palette[paletteBase + c]; + } + } + p += pitch - width; + } + + canvas.bat.UnlockBits(buf); + canvas.Refresh(); + } + + public void Restart() + { + if (!(Global.Emulator is PCEngine)) + { + this.Close(); + return; + } + else + pce = Global.Emulator as PCEngine; + } + + public void UpdateValues() + { + if (!this.IsHandleCreated || this.IsDisposed) return; + if (!(Global.Emulator is PCEngine)) return; + + + } + + private void PCEBGViewer_Load(object sender, EventArgs e) + { + pce = Global.Emulator as PCEngine; + } + + private void PCEBGViewer_FormClosed(object sender, FormClosedEventArgs e) + { + + } + } +} diff --git a/BizHawk.MultiClient/PCEtools/PCEBGViewer.resx b/BizHawk.MultiClient/PCEtools/PCEBGViewer.resx new file mode 100644 index 0000000000..29dcb1b3a3 --- /dev/null +++ b/BizHawk.MultiClient/PCEtools/PCEBGViewer.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file