public static int CFGtoD64(string set_cfg, string set_rom, string set_ipladdr, string set_iplsize, string set_o) { //Make Disk from CFG and ROM int cfg_disktype = -1; int cfg_destcode = 0; byte[] cfg_diskid; Util.ProcessCfg(set_cfg, out cfg_disktype, out cfg_destcode, out cfg_diskid); uint cfg_ipladdr = uint.Parse(set_ipladdr, System.Globalization.NumberStyles.HexNumber); int cfg_iplsize = Leo.ByteToLBA(cfg_disktype, int.Parse(set_iplsize), 24); //Take ROM size FileStream file_rom = new FileStream(set_rom, FileMode.Open); if (cfg_disktype == -1) { if (file_rom.Length < 26014080) { cfg_disktype = 0; } else if (file_rom.Length < 34957440) { cfg_disktype = 1; } else if (file_rom.Length < 43155520) { cfg_disktype = 2; } else if (file_rom.Length < 50608320) { cfg_disktype = 3; } else if (file_rom.Length < 57315840) { cfg_disktype = 4; } else if (file_rom.Length < 62516480) { cfg_disktype = 5; } else if (file_rom.Length < 64458560) { cfg_disktype = 6; } } if (file_rom.Length > 64458560) { //TOO BIG! Console.WriteLine("ERROR: ROM FILE IS TOO BIG! (MAX SIZE 64458560 bytes)"); return(-1); } int block_rom_size = Leo.ByteToLBA(cfg_disktype, (int)file_rom.Length, 24); int block_rom_byte_size = Leo.LBAToByte(cfg_disktype, block_rom_size, 24); byte[] rom_data = new byte[block_rom_byte_size]; Array.Fill <byte>(rom_data, 0xFF); file_rom.Read(rom_data, 0, (int)file_rom.Length); //Make D64 file FileStream file_out = new FileStream(set_o, FileMode.Create); byte[] d64_sys_data = new byte[256]; byte[] d64_sys_id = new byte[256]; d64_sys_data[0x05] = (byte)cfg_disktype; d64_sys_data[0x06] = (byte)(cfg_iplsize >> 8); d64_sys_data[0x07] = (byte)(cfg_iplsize & 0xFF); d64_sys_data[0x1C] = (byte)(cfg_ipladdr >> 24); d64_sys_data[0x1D] = (byte)(cfg_ipladdr >> 16); d64_sys_data[0x1E] = (byte)(cfg_ipladdr >> 8); d64_sys_data[0x1F] = (byte)(cfg_ipladdr & 0xFF); d64_sys_data[0xE0] = (byte)((block_rom_size - 1) >> 8); d64_sys_data[0xE1] = (byte)((block_rom_size - 1) & 0xFF); d64_sys_data[0xE2] = 0xFF; d64_sys_data[0xE3] = 0xFF; d64_sys_data[0xE4] = 0xFF; d64_sys_data[0xE5] = 0xFF; Array.Copy(cfg_diskid, d64_sys_id, cfg_diskid.Length); d64_sys_id[0xE8] = (byte)cfg_destcode; file_out.Write(d64_sys_data, 0, d64_sys_data.Length); file_out.Write(d64_sys_id, 0, d64_sys_id.Length); file_out.Write(rom_data, 0, rom_data.Length); file_out.Close(); return(0); }