[SOURCE-CODE] Comenzar desde cero hacer este proyecto con C# y DexDrive

Iniciado por Meta, 12 Diciembre 2016, 18:15 PM

0 Miembros y 1 Visitante están viendo este tema.

Meta

Hola:

1) Tenemos el diseño hecho de una interfaz en C#.


2) Introducimos los datos configurados del puerto serie indicado abajo.


3) Con esta documentación, hacemos los pasos necesarios para hacer las funciones o métedos.

https://github.com/fbriere/linux-dexdrive/blob/master/protocol.txt
https://web.archive.org/web/20100123200342/http://www.darklock.com/thps/dexdrive.html

4) Cuando ya tengamos las funciones del protocolo hecho, nos metemos en hacer los botones.

Backup: Leer la Memory Card.
Restore: Guardar los datos de la Memory Card en el PC.
Format: Formatear la Memory Card.
Refresh: Refrescarlos datos de la Memory Card.
Duplicate: Duplicar la Memory Card, es decir, hacer una copia de la tarjeta completo y guardar los datos en el PC.

5) Emepzamos aprobar el botón Backup, que es leer la tarjeta o Memory Card.

6) Dejo el proyecto vacío para empezar desde cero. Solo tiene el diseño hecho. Así ahorras tiempo.

Descargar

7) Animarse a hacer esta interfaz.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Eleкtro

#1
Gracias por compartir. He modificado el título del post para que se entienda mejor, pues en un principio parece que estés pidiendo que te hagan el trabajo (quiero pensar que no), pero supongo que en realidad la intención ha sido compartir una especie de plantilla con la que otros puedan empezar a desarrollar su propia implementación del algoritmo de lectura de un dispositivo DexDrive, ¿me equivoco?.

PD: Como mejora visual, estaría bien que puediera representar los iconos de las carpetas.

Saludos!








Meta

Buenas.

Está hecho ya en Linux en C y en Windows en C#, puedo dar el código completo pero no lo haré y funciona.
Cada uno lo puede hacer como quiera, cada persona tiene su forma de pensar y hacer programas internamente diferente aunque en apariencia sean ideánticas, solo que cada uno usa optimizaciones o no.

Para que se hagan una idea. Aquí en este enlace dice:
CitarNative Sony Format
Internally, a PlayStation memory card has a single 1-megabit EEPROM chip. This chip can store a total of 128 kilobytes of data, divided into sixteen blocks. Each block, in turn, contains 64 frames, each of which is 128 bytes. While this arrangement may appear strange, it's primarily an optimisation measure, since the hardware reads and writes the card in one kilobit or 128 byte chunks.

The first thing most people say when they hear that a memory card has 16 blocks is generally "you mean FIFTEEN blocks". No, sixteen; the first block contains a directory of the other fifteen blocks. Each directory entry consumes one of the 64 frames in this block, and takes the following format.

   FRAME 0: Identification frame, used to determine whether the data is a valid PlayStation memory card.
   FRAMES 1 - 15: Directory frame, detailing the nature of the save data in the appropriate block.
   FRAMES 16 - 35: Reserved. Formatted as per normal directory frames, with the "reserved" block type and all implied data.
   FRAMES 36 - 62: Unused. All bytes in this region are set to 0xFF.
   FRAME 63: Write test. If it is desired to do a "test write" of data, this frame can be used without damaging the memory card.

The identification frame is constant, and always contains the following data. If the data differs from this, the card has not yet been formatted.

   The two characters "MC".
   125 NUL bytes (0x00).
   The XOR byte (0x0E).

The XOR byte needs a little clarification. This byte is calculated through an XOR of the preceding 127 bytes; one simply loops through from byte to byte as follows:


   char xor=0;
   for(int x=0;x<127;x++) xor^=frame
  • ;
       frame[127]=xor;

    Since any number XORed with itself is 0, you can verify this byte with the following code:


       char xor=0;
       for(int x=0;x<128;x++) xor^=frame
  • ;
       if(xor==0) return 1; // XOR code correct
       return 0; // XOR code incorrect

En español traducido por google.
https://translate.google.com/translate?hl=es&sl=en&tl=es&u=https%3A%2F%2Fweb.archive.org%2Fweb%2F20100123200342%2Fhttp%3A%2F%2Fwww.darklock.com%2Fthps%2Fdexdrive.html

Vamos por parte, el código lo hice en C# en modo consola.

using System;

namespace DexDrive_for_prueba
{
   class Program
   {
       static void Main(string[] args)
       {
           sbyte[] frame = new sbyte[128];
           frame[0] = (sbyte)'M';
           frame[1] = (sbyte)'C';
           for (int k = 2; k < frame.Length - 1; k++) frame[k] = 0;
           frame[127] = 0x0E;

           sbyte xor = 0;
           for (int x = 0; x < 128; x++) xor ^= frame[x];

           // Muestra 1.
           Console.WriteLine(xor == 0 ? "FRAME 0 formateado" : "XOR code incorrect");

           // Muestra 2.
           if (xor == 0)
           {
               Console.WriteLine("FRAME 0 formateado");
           }

           else
           {
               Console.WriteLine("XOR code incorrect");
           }

           Console.ReadKey();
       }
   }
}


Así se empieza poco a poco.


Saludos 2016.

PD: Pues si, como mejora se puede poner dibujos en los botones.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/