Ejemplo n.º 1
0
        private void DiskViewForm_Activated(object sender, EventArgs e)
        {
            DiskViewForm form = (DiskViewForm)this.ActiveMdiChild;
            IDiskImage   di   = form.DiskFormat.DiskImage;

            this.UpdateMenu();
        }
Ejemplo n.º 2
0
        public RSDosFormat(IDiskImage diskImage)
        {
            this.DiskImage = diskImage;

            byte[] sector = this.DiskImage.ReadSector(17, 0, 17);
            int    e      = 0;

            for (int i = 0; i < sector.Length; i++)
            {
                if (sector[i] == 0 || sector[i] == 0xff)
                {
                    e = i;
                    break;
                }
            }

            if (e > 0)
            {
                this.BaseDiskLabel = Encoding.ASCII.GetString(sector.Subset(0, e)).Trim();
            }

            this.LogicalTracks     = 35;
            this.LogicalHeads      = 1;
            this.LogicalSectors    = 18;
            this.LogicalSectorSize = 256;

            if (!(this.DiskImage.IsPartitioned))
            {
                this.LogicalTracks     = this.DiskImage.PhysicalTracks;
                this.LogicalHeads      = this.DiskImage.PhysicalHeads;
                this.LogicalSectors    = this.DiskImage.PhysicalSectors;
                this.LogicalSectorSize = this.DiskImage.PhysicalSectorSize;
            }
        }
Ejemplo n.º 3
0
 /// <summary>
 /// Initializes a new instance of the <see cref="RSDOSFormat"/> class
 /// to create a new logical disk with specific parameters.
 /// </summary>
 /// <param name="diskImage">Underlying virtual disk image class</param>
 /// <param name="tracks">Cylinders per side</param>
 /// <param name="heads">Number of sides</param>
 /// <param name="sectors">Sectors per track</param>
 /// <param name="sectorSize">Size of sectors in bytes</param>
 public RSDOSFormat(IDiskImage diskImage, int tracks, int heads, int sectors, int sectorSize)
 {
     this.DiskImage         = diskImage;
     this.BaseDiskLabel     = string.Empty;
     this.LogicalTracks     = tracks;
     this.LogicalHeads      = heads;
     this.LogicalSectors    = sectors;
     this.LogicalSectorSize = sectorSize;
     this.FormatDisk();
 }
Ejemplo n.º 4
0
        /// <summary>
        /// Initializes a new instance of the <see cref="DragonDosFormat"/> class
        /// to create a new logical disk with specific parameters.
        /// </summary>
        /// <param name="diskImage">Underlying virtual disk image class</param>
        /// <param name="tracks">Cylinders per side</param>
        /// <param name="heads">Number of sides</param>
        /// <param name="sectors">Sectors per track</param>
        /// <param name="sectorSize">Size of sectors in bytes</param>
        public DragonDosFormat(IDiskImage diskImage, int tracks, int heads, int sectors, int sectorSize)
        {
            this.DiskImage = diskImage;

            this.LogicalTracks     = tracks;
            this.LogicalHeads      = heads;
            this.LogicalSectors    = sectors;
            this.LogicalSectorSize = sectorSize;
            this.FormatDisk();

            this.ValidateDragonDos();
        }
Ejemplo n.º 5
0
        public Ultima1Data(IDiskImage image = null)
        {
            if (image == null)
            {
                m_diskImage = new DiskImage();
            }
            else
            {
                m_diskImage = image;
            }

            NumberOfCharacters = 0;
            Characters         = new Ultima1CharacterData[4];
            //for (int i = 0; i < 4; ++i)
            Characters[0] = new Ultima1CharacterData();
        }
Ejemplo n.º 6
0
        public DragonDosFormat(IDiskImage diskImage)
        {
            this.DiskImage = diskImage;

            this.LogicalTracks     = 40;
            this.LogicalHeads      = 1;
            this.LogicalSectors    = 18;
            this.LogicalSectorSize = 256;

            if (!(this.DiskImage.IsPartitioned))
            {
                this.LogicalTracks     = DiskImage.PhysicalTracks;
                this.LogicalHeads      = DiskImage.PhysicalHeads;
                this.LogicalSectors    = DiskImage.PhysicalSectors;
                this.LogicalSectorSize = DiskImage.PhysicalSectorSize;
            }

            this.ValidateDragonDos();
        }
Ejemplo n.º 7
0
        public SectorEditor(IDiskImage Disk)
        {
            InitializeComponent();
            this.toolStrip.Renderer.RenderToolStripBorder += new ToolStripRenderEventHandler(Renderer_RenderToolStripBorder);

            disk = Disk;
            data = Disk.ReadSector((int)numTrack.Value, (int)numSide.Value, (int)numSector.Value);
            FixedLengthByteProvider dbp = new FixedLengthByteProvider(data);

            dbp.Changed         += new EventHandler(dbp_Changed);
            hexBox1.ByteProvider = dbp;
            //hexBox1.ReadOnly = true;
            numTrack.Maximum  = disk.PhysicalTracks - 1;
            numSide.Maximum   = disk.PhysicalHeads - 1;
            numSector.Maximum = disk.PhysicalSectors;
            Init();

            hexBox1.MouseWheel += hexBox1_MouseWheel;
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Update menu when a DiskViewForm is activated
        /// </summary>
        /// <param name="sender">Sending object</param>
        /// <param name="e">Event Arguments</param>
        private void DiskViewForm_Activated(object sender, EventArgs e)
        {
            DiskViewForm form = (DiskViewForm)this.ActiveMdiChild;
            IDiskImage   di   = form.DiskFormat.DiskImage;

            if (di.IsPartitioned)
            {
                this.selectRGBDOSDriveToolStripMenuItem = form.PartitionItems;

                this.selectRGBDOSDriveToolStripMenuItem.Enabled = true;
                this.gotoRGBDOSDriveToolStripMenuItem.Enabled   = true;
            }
            else
            {
                this.selectRGBDOSDriveToolStripMenuItem.Enabled = false;
                this.gotoRGBDOSDriveToolStripMenuItem.Enabled   = false;
            }

            this.UpdateMenu();
        }
Ejemplo n.º 9
0
 /// <summary>
 /// Initializes a new instance of the <see cref="OS9Format"/> class.
 /// </summary>
 /// <param name="diskImage">Underlying virtual disk image class</param>
 public OS9Format(IDiskImage diskImage)
 {
     this.DiskImage = diskImage;
     this.ValidateOS9();
     this.BaseDiskLabel = this.lsn0.VolumeName;
 }
Ejemplo n.º 10
0
        internal void OpenDiskView(string filename)
        {
            IDiskImage  diskimage  = null;
            IDiskFormat diskformat = null;

            if (!File.Exists(filename))
            {
                this.mruManager.Remove(filename);
                return;
            }

            switch (Path.GetExtension(filename).ToUpper())
            {
            case ".OS9":
                diskimage = new RAWImage(filename);
                break;

            case ".JVC":
                diskimage = new JVCImage(filename);
                break;

            case ".VDK":
                diskimage = new VDKImage(filename);
                break;

            case ".DMK":
                diskimage = new DMKImage(filename);
                break;

            case ".VHD":
                diskimage = new VHDImage(filename);
                break;

            case ".DSK":
                diskimage = new JVCImage(filename);
                if (!diskimage.IsValidImage)
                {
                    diskimage.Close();
                    diskimage = new DMKImage(filename);
                }

                break;
            }

            if (diskimage == null || !diskimage.IsValidImage)
            {
                diskimage.Close();
                this.mruManager.Remove(filename);
                MessageBox.Show(string.Format(resourceManager.GetString("MainForm_NotValidDiskImage", cultureInfo), filename), resourceManager.GetString("MainForm_NotValidDiskImageCaption", cultureInfo), MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            diskimage.SetPartition(0);

            diskformat = new OS9Format(diskimage);
            if (diskformat == null || !diskformat.IsValidFormat)
            {
                diskformat = new DragonDosFormat(diskimage);
                if (diskformat == null || !diskformat.IsValidFormat)
                {
                    diskformat = new RSDosFormat(diskimage);
                }
            }

            if (!diskformat.IsValidFormat || !diskimage.IsValidImage)
            {
                diskformat = null;
                diskimage.Close();
            }
            else
            {
                DiskViewForm diskviewform = new DiskViewForm(diskformat);
                diskviewform.Text       = string.Format("EMUDisk - {0}", diskimage.Filename);
                diskviewform.MdiParent  = this;
                diskviewform.Activated += new EventHandler(this.DiskViewForm_Activated);
                diskviewform.Disposed  += new EventHandler(this.DiskViewForm_Disposed);
                diskviewform.Show();

                this.mruManager.Add(filename);
            }
        }
Ejemplo n.º 11
0
 public OS9Format(IDiskImage diskImage)
 {
     this.DiskImage = diskImage;
     this.ValidateOS9();
     this.BaseDiskLabel = this.lsn0.DD_NAM;
 }
Ejemplo n.º 12
0
        public void Save(IDiskImage di)
        {
            if (RawData == null)
            {
                throw new InvalidOperationException("Cannot save a file without loading one first.");
            }

            RawData[SexOffset]            = (byte)Sex;
            RawData[ClassOffset]          = (byte)Class;
            RawData[RaceOffset]           = (byte)Race;
            RawData[HitPointsOffset]      = (byte)(HitPoints & 0x00ff);
            RawData[HitPointsOffset + 1]  = (byte)(HitPoints >> 8);
            RawData[ExperienceOffset]     = (byte)(Experience & 0x00ff);
            RawData[ExperienceOffset + 1] = (byte)(Experience >> 8);

            RawData[StrengthOffset]     = (byte)Strength;
            RawData[AgilityOffset]      = (byte)Agility;
            RawData[StaminaOffset]      = (byte)Stamina;
            RawData[CharismaOffset]     = (byte)Charisma;
            RawData[WisdomOffset]       = (byte)Wisdom;
            RawData[IntelligenceOffset] = (byte)Intelligence;

            for (int i = 0; i < 10; ++i)
            {
                RawData[SpellsOffset + i] = (byte)Spells[i];
            }

            for (int i = 0; i < 5; ++i)
            {
                RawData[ArmorOffset + i] = (byte)Armor[i];
            }

            for (int i = 0; i < 15; ++i)
            {
                RawData[WeaponsOffset + i] = (byte)Weapons[i];
            }

            RawData[FoodOffset]     = (byte)(Food & 0x00ff);
            RawData[FoodOffset + 1] = (byte)(Food >> 8);

            RawData[CoinsOffset]     = (byte)(Coins & 0x00ff);
            RawData[CoinsOffset + 1] = (byte)(Coins >> 8);

            for (int i = 0; i < 4; ++i)
            {
                RawData[GemsOffset + i] = (byte)Gems[i];
            }

            RawData[EnemyShipsOffset] = (byte)EnemyShips;

            RawData[LocationOffset]     = (byte)Location.X;
            RawData[LocationOffset + 1] = (byte)Location.Y;


            IImageFile image = di.Open("P" + RosterId, C64FileType.PRG, "wb");

            if (image == null)
            {
                throw new System.IO.FileLoadException("Cannot open save file 'P" + RosterId + ".PRG' for write.");
            }

            int len = image.Write(RawData, RawData.Length);

            if (len != RawData.Length)
            {
                throw new System.IO.IOException("There was an error writing file 'P" + RosterId + ".PRG'.");
            }

            image.Close();
        }
Ejemplo n.º 13
0
        public void Load(IDiskImage di, int rosterNumber)
        {
            byte[] buffer = new byte[200000]; // they seem to be 460 bytes, but screw it better safe than sorry.

            IImageFile image = di.Open("P" + rosterNumber, C64FileType.PRG, "rb");

            if (image == null)
            {
                throw new System.IO.FileLoadException("Cannot open save file 'P" + RosterId + ".PRG' for read.");
            }
            int len = image.Read(buffer, buffer.Length);

            RawData = new byte[len];
            Buffer.BlockCopy(buffer, 0, RawData, 0, len);
            image.Close();


            RosterId   = rosterNumber;
            m_name     = ProcessName();
            Sex        = (U1Sex)RawData[SexOffset];
            Class      = (U1Class)RawData[ClassOffset];
            Race       = (U1Race)RawData[RaceOffset];
            HitPoints  = RawData[HitPointsOffset] | (RawData[HitPointsOffset + 1] << 8);
            Experience = RawData[ExperienceOffset] | (RawData[ExperienceOffset + 1] << 8);

            Strength     = RawData[StrengthOffset];
            Agility      = RawData[AgilityOffset];
            Stamina      = RawData[StaminaOffset];
            Charisma     = RawData[CharismaOffset];
            Wisdom       = RawData[WisdomOffset];
            Intelligence = RawData[IntelligenceOffset];

            for (int i = 0; i < 10; ++i)
            {
                Spells[i] = RawData[SpellsOffset + i];
            }

            for (int i = 0; i < 5; ++i)
            {
                Armor[i] = RawData[ArmorOffset + i];
            }

            for (int i = 0; i < 15; ++i)
            {
                Weapons[i] = RawData[WeaponsOffset + i];
            }

            Food  = RawData[FoodOffset] | (RawData[FoodOffset + 1] << 8);
            Coins = RawData[CoinsOffset] | (RawData[CoinsOffset + 1] << 8);

            for (int i = 0; i < 4; ++i)
            {
                Gems[i] = RawData[GemsOffset + i];
            }

            for (int i = 0; i < 6; ++i)
            {
                m_transportation[i] = RawData[TransportationOffset + i];
            }
            m_transportation[6] = RawData[TimeMachineOffset];

            EnemyShips = RawData[EnemyShipsOffset];

            Location.X = RawData[LocationOffset];
            Location.Y = RawData[LocationOffset + 1];
        }
Ejemplo n.º 14
0
        /// <summary>
        /// Open virtual disk and display it in a DiskViewForm instance
        /// </summary>
        /// <param name="filename">Filename to open</param>
        internal void OpenDiskView(string filename)
        {
            IDiskImage  diskimage  = null;
            IDiskFormat diskformat = null;

            if (!File.Exists(filename))
            {
                this.mruManager.Remove(filename);
                return;
            }

            switch (Path.GetExtension(filename).ToUpper())
            {
            case ".OS9":
                diskimage = new OS9Image(filename);
                break;

            case ".JVC":
                diskimage = new JVCImage(filename);
                break;

            case ".VDK":
                diskimage = new VDKImage(filename);
                break;

            case ".DMK":
                diskimage = new DMKImage(filename);
                break;

            case ".VHD":
                diskimage = new VHDImage(filename);
                if (!diskimage.IsValidImage)
                {
                    diskimage = new PartitionedVHDImage(filename);
                }

                break;

            case ".DSK":
                diskimage = new JVCImage(filename);
                if (!diskimage.IsValidImage)
                {
                    diskimage = new DMKImage(filename);
                }

                break;
            }

            if (diskimage == null || !diskimage.IsValidImage)
            {
                this.mruManager.Remove(filename);
                MessageBox.Show(string.Format(resourceManager.GetString("MainForm_NotValidDiskImage", cultureInfo), filename), resourceManager.GetString("MainForm_NotValidDiskImageCaption", cultureInfo), MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                if (diskimage.IsPartitioned)
                {
                    ComponentResourceManager resources = new ComponentResourceManager(typeof(MainForm));
                    PartitionedVHDImage      pi        = (PartitionedVHDImage)diskimage;

                    Cursor cursor = this.Cursor;
                    this.Cursor = Cursors.WaitCursor;
                    this.selectRGBDOSDriveToolStripMenuItem.DropDownItems.Clear();
                    ToolStripMenuItem tsi;

                    int i = 0;
                    if (diskimage.ImagePartitionOffset != 0)
                    {
                        tsi              = new ToolStripMenuItem();
                        tsi.Name         = "0";
                        tsi.Text         = "OS9 Drive";
                        tsi.Size         = new System.Drawing.Size(152, 22);
                        tsi.CheckOnClick = true;
                        tsi.Click       += new EventHandler(this.SelectRGBDOSDrive_Click);
                        tsi.Image        = (System.Drawing.Image)resources.GetObject("OS9.image");
                        diskformat       = new OS9Format(diskimage);
                        if (diskformat != null && diskformat.IsValidFormat && !string.IsNullOrEmpty(diskformat.DiskLabel))
                        {
                            tsi.Text = diskformat.DiskLabel;
                        }

                        this.selectRGBDOSDriveToolStripMenuItem.DropDownItems.Add(tsi);
                        i++;
                    }

                    for (int j = 0; i < diskimage.Partitions; j++, i++)
                    {
                        tsi              = new ToolStripMenuItem();
                        tsi.Name         = i.ToString();
                        tsi.Text         = string.Format("RGBDOS Drive {0}", j);
                        tsi.Size         = new System.Drawing.Size(152, 22);
                        tsi.CheckOnClick = true;
                        tsi.Click       += new EventHandler(this.SelectRGBDOSDrive_Click);
                        if (i == 0)
                        {
                            tsi.Checked = true;
                        }

                        pi.CurrentPartition = i;

                        diskformat = new OS9Format(pi);
                        tsi.Image  = (System.Drawing.Image)resources.GetObject("OS9.image");

                        if (!diskformat.IsValidFormat)
                        {
                            diskformat = new DragonDosFormat(pi);
                            tsi.Image  = (System.Drawing.Image)resources.GetObject("DragonDos.image");
                            if (!diskformat.IsValidFormat)
                            {
                                diskformat = new RSDOSFormat(pi);
                                tsi.Image  = (System.Drawing.Image)resources.GetObject("RSDOS.image");
                            }
                        }

                        if (diskformat != null && diskformat.IsValidFormat && !string.IsNullOrEmpty(diskformat.DiskLabel))
                        {
                            tsi.Text = diskformat.DiskLabel;
                        }

                        this.selectRGBDOSDriveToolStripMenuItem.DropDownItems.Add(tsi);
                    }

                    pi.CurrentPartition = 0;
                    ((ToolStripMenuItem)this.selectRGBDOSDriveToolStripMenuItem.DropDownItems[0]).Checked = true;

                    this.selectRGBDOSDriveToolStripMenuItem.Enabled = true;
                    this.gotoRGBDOSDriveToolStripMenuItem.Enabled   = true;

                    this.Cursor = cursor;
                }
                else
                {
                    this.selectRGBDOSDriveToolStripMenuItem.Enabled = false;
                    this.gotoRGBDOSDriveToolStripMenuItem.Enabled   = false;
                }
            }

            diskformat = new OS9Format(diskimage);
            if (diskformat == null || !diskformat.IsValidFormat)
            {
                diskformat = new DragonDosFormat(diskimage);
                if (diskformat == null || !diskformat.IsValidFormat)
                {
                    diskformat = new RSDOSFormat(diskimage);
                }
            }

            if (!diskformat.IsValidFormat && !diskimage.IsPartitioned)
            {
                DialogResult dr = MessageBox.Show(resourceManager.GetString("MainForm_disknotformatted", cultureInfo), resourceManager.GetString("MainForm_formatnotrecognized", cultureInfo), MessageBoxButtons.YesNo, MessageBoxIcon.Error);
                if (dr == System.Windows.Forms.DialogResult.Yes)
                {
                    // FormatWizardForm form = new FormatWizardForm(false, true);
                    // form.Filename = diskimage.Filename;
                    // form.Tracks = diskimage.PhysicalTracks;
                    // form.Heads = diskimage.PhysicalHeads;
                    // form.Sectors = diskimage.PhysicalSectors;
                    // form.SectorSize = diskimage.PhysicalSectorSize;
                    // form.Partitions = diskimage.Partitions;
                    // form.RootPartitionSize = diskimage.ImagePartitionOffset;
                    // form.DiskImageType = diskimage.ImageType;
                    // dr = form.ShowDialog();
                    FormatForm form = new FormatForm();
                    form.Label1 = resourceManager.GetString("FormatForm_formatdisk", cultureInfo);
                    dr          = form.ShowDialog();
                    if (dr == System.Windows.Forms.DialogResult.Cancel)
                    {
                        return;
                    }
                    else
                    {
                        if (form.OS9)
                        {
                            diskformat = new OS9Format(diskimage);
                            diskformat.FormatDisk();
                        }
                        else if (form.RSDOS)
                        {
                            diskformat = new RSDOSFormat(diskimage);
                            diskformat.FormatDisk();
                        }
                        else if (form.DragonDos)
                        {
                            diskformat = new DragonDosFormat(diskimage);
                            diskformat.FormatDisk();
                        }
                    }
                }
            }
            else if (!diskformat.IsValidFormat && diskimage.IsPartitioned)
            {
                DialogResult dr = MessageBox.Show(resourceManager.GetString("MainForm_partitionnotformatted", cultureInfo), resourceManager.GetString("MainForm_formatnotrecognized", cultureInfo), MessageBoxButtons.YesNo, MessageBoxIcon.Error);
                if (dr == System.Windows.Forms.DialogResult.Yes)
                {
                    FormatForm form = new FormatForm();
                    form.Label1 = resourceManager.GetString("FormatForm_formatpartition", cultureInfo);
                    dr          = form.ShowDialog();
                    if (dr == System.Windows.Forms.DialogResult.Cancel)
                    {
                        return;
                    }
                    else
                    {
                        if (form.OS9)
                        {
                            diskformat = new OS9Format(diskimage);
                            diskformat.FormatDisk();
                        }
                        else if (form.RSDOS)
                        {
                            diskformat = new RSDOSFormat(diskimage);
                            diskformat.FormatDisk();
                        }
                        else if (form.DragonDos)
                        {
                            diskformat = new DragonDosFormat(diskimage);
                            diskformat.FormatDisk();
                        }
                    }
                }
            }

            DiskViewForm diskviewform = new DiskViewForm(diskformat);

            diskviewform.Text           = string.Format("EMUDisk - {0}", diskimage.Filename);
            diskviewform.MdiParent      = this;
            diskviewform.Activated     += new EventHandler(this.DiskViewForm_Activated);
            diskviewform.Disposed      += new EventHandler(this.DiskViewForm_Disposed);
            diskviewform.PartitionItems = this.selectRGBDOSDriveToolStripMenuItem;
            diskviewform.Show();

            this.mruManager.Add(filename);
        }