Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Meta

#671
Buenas honorable Elektro:

Para arriba y para abajo me salió esto.
Código (csharp) [Seleccionar]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using System.IO; // No olvidar.

namespace ROM_SNES
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {

            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                SnesKit.RomDump VARIABLE = new SnesKit.RomDump(File.ReadAllBytes(openFileDialog1.FileName.ToString()));
                textBox_Nombre_ruta_archivo.Text = openFileDialog1.FileName.ToString(); // Muestra la ruta del archivo.

                textBox_RomSize.Text = VARIABLE.RomSize.ToString();
            }
        }
    }
}




Auí hay una Web perfecta para convertir códigos.
https://www.easycalculation.com/hex-converter.php

O verlo directamenta la tabla ASCII.
http://www.elcodigoascii.com.ar/codigo-americano-estandar-intercambio-informacion/codigo-ascii.gif

El 12 que presenta es decimal, quiero se se vea hexadecimal, que es 0C. (En C# se presenta así 0x0C).

Busqué aquí.
https://msdn.microsoft.com/es-es/library/bb311038.aspx?f=255&MSPPError=-2147217396

Este es el código que hice.
Código (csharp) [Seleccionar]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using System.IO; // No olvidar.

namespace ROM_SNES
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {

            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                SnesKit.RomDump VARIABLE = new SnesKit.RomDump(File.ReadAllBytes(openFileDialog1.FileName.ToString()));
                textBox_Nombre_ruta_archivo.Text = openFileDialog1.FileName.ToString(); // Muestra la ruta del archivo.

                textBox_RomSize.Text = string.Format("{0:X}", VARIABLE.RomSize);
            }
        }
    }
}


Me sale la C. Quiero que salga 0C.
#672
Hola Señor:

Lo he hecho así, me ejecuta, no da problemas, no se si realmente así funciona. Ahora te toca hacer algo como esto a ver que tal.
Código (csharp) [Seleccionar]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using System.IO; // No olvidar.

namespace ROM_SNES
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {

            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                SnesKit.RomDump VARIABLE = new SnesKit.RomDump(File.ReadAllBytes(openFileDialog1.FileName.ToString()));
                textBox_Nombre_ruta_archivo.Text = openFileDialog1.FileName.ToString(); // Muestra la ruta del archivo.
            }
        }
    }
}


Ahora estoy bien perdido para leer la variable Name del archivo Snes_dumper.cs.
Usando este otro código, no logro de ninguna manera leer algo de la ROM, al menos el nombre.
Código (csharp,25) [Seleccionar]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using System.IO; // No olvidar.

namespace ROM_SNES
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Mostar_Datos();
        }

            public void Mostar_Datos()
    {
         this.textBox_Name.Text  = RomDump.Name;
    }

        private void button1_Click(object sender, EventArgs e)
        {

            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                SnesKit.RomDump VARIABLE = new SnesKit.RomDump(File.ReadAllBytes(openFileDialog1.FileName.ToString()));
                textBox_Nombre_ruta_archivo.Text = openFileDialog1.FileName.ToString(); // Muestra la ruta del archivo.
            }
        }
    }
}


Error   1   El nombre 'RomDump' no existe en el contexto actual   C:\Users\Usuario\Documents\Visual Studio 2013\Projects\ROM_SNES\ROM_SNES\Form1.cs   25   36   ROM_SNES

Da igual lo que haga, aquí si estoy perdido. Intento leer la classe pero no lo capto.

Saludos.
#673
Buenas campeón:

Buscando el IO.Stream encontré códigos de ejemplo como este.

Me interesa leer, no modificar, al menos por ahora. Supuestamente es este por lo que veo.
Código (csharp) [Seleccionar]
       //Open the stream and read it back.
       using (FileStream fs = File.OpenRead(path))
       {
           byte[] b = new byte[1024];
           UTF8Encoding temp = new UTF8Encoding(true);
           while (fs.Read(b,0,b.Length) > 0)
           {
               Console.WriteLine(temp.GetString(b));
           }
       }


Viendo File.ReadAllBytes. En el Form1 hice este código.
Código (csharp,27) [Seleccionar]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using System.IO; // No olvidar.

namespace ROM_SNES
{
   public partial class Form1 : Form
   {
       public Form1()
       {
           InitializeComponent();
       }

       private void button1_Click(object sender, EventArgs e)
       {

           if (openFileDialog1.ShowDialog() == DialogResult.OK)
           {
               SnesKit.RomDump VARIABLE = new SnesKit.RomDump(File.ReadAllBytes(textBox_Nombre_de_archivo.Text.ToString()));
               textBox_Nombre_ruta_archivo.Text = openFileDialog1.FileName.ToString(); // Muestra la ruta del archivo.
           }
       }
   }
}


Lo ejecuta efectivamente, si pulso el botón abrir, muestra este error.
CitarExcepción no controlada del tipo 'System.ArgumentException' en mscorlib.dll

Información adicional: No se puede dejar vacío el nombre de la ruta de acceso.

Encontré lo que dice del System.ArgumentException. Ahí no entiendo nada.

Estoy haciendo pruebas por si acaso. :)

Dejo lo que hice en este enlace.

Descarga Proyecto alfa v0.3. (incluye una rom de 4 MB).

Saludos.
#674
Buenas:

Voy a empezar desde el principio. El código lo he sacado de esta Web.

https://github.com/Zeokat/SNES-ROM-Header-Dumper-CSharp/blob/master/snes_dumper.cs

El archivo se llama snes_dumper.cs.

Creo un proyecto nuevo. Se que lo expliqué pero haré lo mismo por si acaso no me haya expresado bien o no he entendido bien. Uso Visual C# Express 2013. Hay gente que me recomienda el VS Comunity, ni sabía su existencia, no se de que va ni ventajas que tiene y no se si es gratuito como el Express, esto es otra historia.

Archivo-->Nuevo Proyecto...


A crear una clase nueva en, PROYECTO-->Agregar clase...


Le pongo el nombre de la clase llamado snes_dumper.cs, como indica abajo, luego pulso el botón Agregar.


Seañade la calse snes_dumper.cs como muestra abajo. El código generado a borrarlo.


He copiado el código que descargué en la Web de origen dentro del archivo snes_dumper.cs en el formulario como puedes ver abajo.


¿Qué es lo que quiero?

1) Con un botón leer el archivo *.smc, es una ROM, un archivo binario.
2) Lo que lea la clase snes_dumper.cs lo tiene que mostrar en sus textBox correspondiente en el Form1.

La mayoría de los datos que quiero visualizar en el TextBox son estas variables.
Código (csharp) [Seleccionar]
      // Los diferentes datos que obtenemos de la ROM
       public string Name;
       public byte Layout;
       public byte CartridgeType;
       public byte RomSize;
       public byte RamSize;
       public byte CountryCode;
       public byte LicenseCode;
       public byte VersionNumber;
       ushort Checksum;
       ushort ChecksumCompliment;
       public BankTypeEnum BankType;


Hay 11 variables en el primer Cuadro en verde. Esas 11 variables es lo que tengo que leer en el textBox. La lectura lo hace a la hora de pulsar un botón, seleccionar el archivo binario a leer y lo leído, lo muestra en el formulario. Les dejo el formulario hecho estilo colores y nombrado por Cuadros 1 al 4. El que me interesa mucho es el Cuadro 1 y el Cuadro 4 para cargar el archivo binario.


Los nombres de cada textBox están identificado por el nombre de sus variables así no te perderás. Digamos que esto es una plantilla con la clase snes_dumper.cs sin hacer nada, solo a la espera de ser programado.

Les dejo aquí para descargar esta plantilla por llamarlo de alguna manera, bueno, lo llamaremos proyecto vacío.

Descarga

Espero ayuda para leer esta clase. En resumen, quiero leer las variables que indiqué arriba y lo muestre en el Formulario que he hecho arriba de colorines.

Saludos.
#675
Windows / Re: El teclado se vuelve loco.
10 Junio 2015, 00:56 AM
No.


Llevo unos días que no da fallos. ;)

Saludos.
#676
Windows / Re: El teclado se vuelve loco.
7 Junio 2015, 21:31 PM
Hola:

Es un sobremesa. Si, abrí un archivo y a partir d eahí pasó cosas al rato, perono siempre. He mirado editor de registro y nada, antivirus y nada, el msconfig y nada.

Saludos.
#677
Windows / El teclado se vuelve loco.
7 Junio 2015, 01:51 AM
Hola:

Si pulso la tecla Control me aparece se me escribe esto letras, a veces se abre la calculadora, a veces abre otras cosas, aveces lo hace bien.

Lo he reiniciado, le he puesto antivirus y cora fuegos por si acaso, siempre lo he tenido, lo que estoy escaneando. Cuando acaba con un antivirus, empiezo con otro, a desinstalar y instalar.

¿Qué es lo que puede ser?

Saludos.
#678
Hola:

Verdad. Ahora quiero probar esto cuanto antes. ;)

Empecé otra vez.
Creé una nueva referencia.


Añadí el código dentro.
Código (csharp) [Seleccionar]
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.IO;

namespace SnesKit
{
    public enum BankTypeEnum { Lo, Hi };
    public class RomDump
    {
        // Indica si la ROM tiene el smc header o no
        bool SmcHeader;

        // Indica la localización del header de SNES
        int HeaderLocation;

        // Array con los datos de la ROM
        public byte[] Data;

        // Los diferentes datos que obtenemos de la ROM
        public string Name;
        public byte Layout;
        public byte CartridgeType;
        public byte RomSize;
        public byte RamSize;
        public byte CountryCode;
        public byte LicenseCode;
        public byte VersionNumber;
        ushort Checksum;
        ushort ChecksumCompliment;
        public BankTypeEnum BankType;

        // Esta funcion permite el analisis de ROMS de SNES con extensiones SMC y SFC
        public RomDump(byte[] rom)
        {
            this.Data = rom;
            // Comprobamos si existe el header smc
            if (this.Data.Length % 1024 == 512)
                SmcHeader = true;
            else if (this.Data.Length % 1024 == 0)
                SmcHeader = false;
            else
                throw new Exception("Archivo de rom invalida.");
            this.HeaderLocation = 0x81C0;

            if (HeaderIsAt(0x07FC0)) // La Rom es LoROM
            {
                this.BankType = BankTypeEnum.Lo;
            }
            else if (HeaderIsAt(0x0FFC0))
            {
                this.BankType = BankTypeEnum.Hi;
            }

            // Leemos el Header
            ReadHeader();

        }
        // Función para comprobar si el header esta en la dirección correcta
        private bool HeaderIsAt(ushort addr)
        {
            this.HeaderLocation = addr;
            return VerifyChecksum();
        }

        // Offset 0x07FC0 in a headerless LoROM image (LoROM rom sin smc header)
        // Offset 0x0FFC0 in a headerless HiROM image (HiROM rom sin smc header)
        // verifica el checksum
        private bool VerifyChecksum()
        {
            // La rom tiene header smc
            if (SmcHeader)
                this.HeaderLocation += 512;

            this.ChecksumCompliment = BitConverter.ToUInt16(this.Get(0x1C, 0x1D), 0);
            this.Checksum = BitConverter.ToUInt16(this.Get(0x1E, 0x1F), 0);
            ushort ver = (ushort)(this.Checksum ^ this.ChecksumCompliment);
            return (ver == 0xFFFF);
        }

        private void ReadHeader()
        {
            this.Name = Encoding.ASCII.GetString(this.Get(0x00, 0x14)); // 21 chars
            this.Layout = this.At(0x15);
            this.CartridgeType = this.At(0x16);
            this.RomSize = this.At(0x17);
            this.RamSize = this.At(0x18);
            this.CountryCode = this.At(0x19);
            this.LicenseCode = this.At(0x1A);
            this.VersionNumber = this.At(0x1B);
        }

        private string GetROmB()
        {
            return String.Format("{0}", this.RomSize);
        }
        private byte[] Get(int from, int to)
        {
            return this.Data.Skip(this.HeaderLocation + from).Take(to - from + 1).ToArray();
        }
        private byte At(int addr)
        {
            return this.Data[this.HeaderLocation + addr];
        }
    }
}


Ahora a investigar com lo llamo y lo ejecute.

https://msdn.microsoft.com/es-es/library/z2kcy19k.aspx?f=255&MSPPError=-2147217396
https://msdn.microsoft.com/es-es/library/ee461504.aspx
https://www.youtube.com/watch?v=Mu2LYOhEMpM

Si que tengo que leer. ;)

Gracias por todo.



#679
Juegos y Consolas / Saga Strike
6 Junio 2015, 12:21 PM
Hola:



En su época jugaba mucho al juego Jungle Strike de MegaDrive y era pirata, jajajajaja. Ahora con la Raspberry Pi 2 también juedo jugar y con el mando de la PS3.

http://www.taringa.net/comunidades/gamearcade/8773895/Aporte-La-saga-Strike.html
http://es.wikipedia.org/wiki/Saga_Strike#Future_Strike

Quiero saber algunas cosas que no tengo idea. Está calro que al final no sacaron el Futuro Strike para PSx en su época, es más, ni en PS2, ni en PS3 ni mucho menos en PS4 aunque sea um juego tipo indie, una lástima. No he encontrado noticias sobre esto si algún día lo harán.

1) Quiero saber si hay alguna ROM sea de SNES o MD, me interesa más la MD porque tiene mejores música, para mi, claro, me refiero el tipo de tono que ponen. Me refiero quiero saber si hay una ROM de las tres primeras sagas están en español o castellano, ya que en Inglés me cansé.

2)
¿Hay alguna Web o foro que traten de este tema en concreto de traducir ROM?

Saludos.
#680
Hola:

Gracias por la información. Me he olvidado de comentar los errores. Sorry.

He encontrado un código hecho en C#, lo que veo que es muy viejo, ya que la programación tiene cosas diferente, algunos detalles básicos. Te dejo el archivo original.
Código (csharp) [Seleccionar]
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.IO;

namespace SnesKit
{
    public enum BankTypeEnum { Lo, Hi };
    public class RomDump
    {
        // Indica si la ROM tiene el smc header o no
        bool SmcHeader;

        // Indica la localización del header de SNES
        int HeaderLocation;

        // Array con los datos de la ROM
        public byte[] Data;

        // Los diferentes datos que obtenemos de la ROM
        public string Name;
        public byte Layout;
        public byte CartridgeType;
        public byte RomSize;
        public byte RamSize;
        public byte CountryCode;
        public byte LicenseCode;
        public byte VersionNumber;
        ushort Checksum;
        ushort ChecksumCompliment;
        public BankTypeEnum BankType;

        // Esta funcion permite el analisis de ROMS de SNES con extensiones SMC y SFC
        public RomDump(byte[] rom)
        {
            this.Data = rom;
            // Comprobamos si existe el header smc
            if (this.Data.Length % 1024 == 512)
                SmcHeader = true;
            else if (this.Data.Length % 1024 == 0)
                SmcHeader = false;
            else
                throw new Exception("Archivo de rom invalida.");
            this.HeaderLocation = 0x81C0;

            if (HeaderIsAt(0x07FC0)) // La Rom es LoROM
            {
                this.BankType = BankTypeEnum.Lo;
            }
            else if (HeaderIsAt(0x0FFC0))
            {
                this.BankType = BankTypeEnum.Hi;
            }

            // Leemos el Header
            ReadHeader();

        }
        // Función para comprobar si el header esta en la dirección correcta
        private bool HeaderIsAt(ushort addr)
        {
            this.HeaderLocation = addr;
            return VerifyChecksum();
        }

        // Offset 0x07FC0 in a headerless LoROM image (LoROM rom sin smc header)
        // Offset 0x0FFC0 in a headerless HiROM image (HiROM rom sin smc header)
        // verifica el checksum
        private bool VerifyChecksum()
        {
            // La rom tiene header smc
            if (SmcHeader)
                this.HeaderLocation += 512;

            this.ChecksumCompliment = BitConverter.ToUInt16(this.Get(0x1C, 0x1D), 0);
            this.Checksum = BitConverter.ToUInt16(this.Get(0x1E, 0x1F), 0);
            ushort ver = (ushort)(this.Checksum ^ this.ChecksumCompliment);
            return (ver == 0xFFFF);
        }

        private void ReadHeader()
        {
            this.Name = Encoding.ASCII.GetString(this.Get(0x00, 0x14)); // 21 chars
            this.Layout = this.At(0x15);
            this.CartridgeType = this.At(0x16);
            this.RomSize = this.At(0x17);
            this.RamSize = this.At(0x18);
            this.CountryCode = this.At(0x19);
            this.LicenseCode = this.At(0x1A);
            this.VersionNumber = this.At(0x1B);
        }

        private string GetROmB()
        {
            return String.Format("{0}", this.RomSize);
        }
        private byte[] Get(int from, int to)
        {
            return this.Data.Skip(this.HeaderLocation + from).Take(to - from + 1).ToArray();
        }
        private byte At(int addr)
        {
            return this.Data[this.HeaderLocation + addr];
        }
    }
}


En Visual Basic convertido.
Código (vbnet) [Seleccionar]
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Linq
Imports System.Text
Imports System.Windows.Forms
Imports System.IO

Namespace SnesKit
Public Enum BankTypeEnum
Lo
Hi
End Enum
Public Class RomDump
' Indica si la ROM tiene el smc header o no
Private SmcHeader As Boolean

' Indica la localización del header de SNES
Private HeaderLocation As Integer

' Array con los datos de la ROM
Public Data As Byte()

' Los diferentes datos que obtenemos de la ROM
Public Name As String
Public Layout As Byte
Public CartridgeType As Byte
Public RomSize As Byte
Public RamSize As Byte
Public CountryCode As Byte
Public LicenseCode As Byte
Public VersionNumber As Byte
Private Checksum As UShort
Private ChecksumCompliment As UShort
Public BankType As BankTypeEnum

' Esta funcion permite el analisis de ROMS de SNES con extensiones SMC y SFC
Public Sub New(rom As Byte())
Me.Data = rom
' Comprobamos si existe el header smc
If Me.Data.Length Mod 1024 = 512 Then
SmcHeader = True
ElseIf Me.Data.Length Mod 1024 = 0 Then
SmcHeader = False
Else
Throw New Exception("Archivo de rom invalida.")
End If
Me.HeaderLocation = &H81c0

If HeaderIsAt(&H7fc0) Then
' La Rom es LoROM
Me.BankType = BankTypeEnum.Lo
ElseIf HeaderIsAt(&Hffc0) Then
Me.BankType = BankTypeEnum.Hi
End If

' Leemos el Header

ReadHeader()
End Sub
' Función para comprobar si el header esta en la dirección correcta
Private Function HeaderIsAt(addr As UShort) As Boolean
Me.HeaderLocation = addr
Return VerifyChecksum()
End Function

' Offset 0x07FC0 in a headerless LoROM image (LoROM rom sin smc header)
' Offset 0x0FFC0 in a headerless HiROM image (HiROM rom sin smc header)
' verifica el checksum
Private Function VerifyChecksum() As Boolean
' La rom tiene header smc
If SmcHeader Then
Me.HeaderLocation += 512
End If

Me.ChecksumCompliment = BitConverter.ToUInt16(Me.[Get](&H1c, &H1d), 0)
Me.Checksum = BitConverter.ToUInt16(Me.[Get](&H1e, &H1f), 0)
Dim ver As UShort = CUShort(Me.Checksum Xor Me.ChecksumCompliment)
Return (ver = &Hffff)
End Function

Private Sub ReadHeader()
Me.Name = Encoding.ASCII.GetString(Me.[Get](&H0, &H14))
' 21 chars
Me.Layout = Me.At(&H15)
Me.CartridgeType = Me.At(&H16)
Me.RomSize = Me.At(&H17)
Me.RamSize = Me.At(&H18)
Me.CountryCode = Me.At(&H19)
Me.LicenseCode = Me.At(&H1a)
Me.VersionNumber = Me.At(&H1b)
End Sub

Private Function GetROmB() As String
Return [String].Format("{0}", Me.RomSize)
End Function
Private Function [Get](from As Integer, [to] As Integer) As Byte()
Return Me.Data.Skip(Me.HeaderLocation + from).Take([to] - from + 1).ToArray()
End Function
Private Function At(addr As Integer) As Byte
Return Me.Data(Me.HeaderLocation + addr)
End Function
End Class
End Namespace


Creo un proyecto nuevo que se llama igual SnesKit.
Código (csharp,9) [Seleccionar]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SnesKit
{
    class Program
    {
        static void Main(string[] args)
        {

        }
    }
}


Indicado arriba, justo donde pone class Program lo llamaré como el archivo original public class RomDump como indica abajo. No se si esto es obligatorio. Ver código justo abajo.
Código (csharp,9) [Seleccionar]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SnesKit
{
    public class RomDump
    {
        static void Main(string[] args)
        {

        }
    }
}


El código original no veo que use este código que se crea indicado abajo.
Código (csharp,11,12,13,14) [Seleccionar]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SnesKit
{
    public class RomDump
    {
        static void Main(string[] args)
        {

        }
    }
}


He intentado incrustar el código para que me funcione y no me sale.

¿Hay alguna posibilidad?

Saludos.