Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bool HasHeader(string path)
- {
- if (!File.Exists(path)) return false;
- long size = new System.IO.FileInfo(path).Length;
- if ((size & 0x000200) != 0) return true;
- return false;
- }
- bool IsHirom(string path)
- {
- if (!File.Exists(path)) return false;
- BinaryReader reader = new BinaryReader(File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read));
- try
- {
- int o = 0x7FD5;
- if (HasHeader(path)) o += 0x200;
- reader.BaseStream.Seek(o, SeekOrigin.Begin);
- byte v = reader.ReadByte();
- reader.Close();
- if ((v & 1) == 1) return true;
- return false;
- }
- catch(Exception e)
- {
- reader.Close();
- return false;
- }
- }
- uint SNESToPC(string path, uint addr)
- {
- return SNESToPC(path, addr & 0x0000FF, (addr & 0x00FF00)/0x100, (addr & 0xFF0000) / 0x10000);
- }
- uint SNESToPC(string path, uint addrlo, uint addrhi, uint bank)
- {
- bool header = HasHeader(path);
- if (IsHirom(path))
- {
- uint addr = (addrlo) + (addrhi * 0x100) + (bank * 0x10000);
- if ((addr & 0x400000) != 0)
- {
- addr &= 0x3FFFFF;
- }
- else
- {
- addr = ((addr & 0x8000)!=0) ? addr & 0x3FFFFF : 0;
- }
- return addr;
- }
- else
- {
- bank &= 0x7F;
- return (uint)((addrlo & 0xFF) + (0x100 * (addrhi & 0xFF)) + (0x8000 * bank) - ((header) ? 0 : 0x200) - 0x7E00);
- }
- }
- uint SNESToPC(bool header, bool hirom, uint addr)
- {
- return SNESToPC(header, hirom, addr & 0x0000FF, (addr & 0x00FF00) / 0x100, (addr & 0xFF0000) / 0x10000);
- }
- uint SNESToPC(bool header, bool hirom, uint addrlo, uint addrhi, uint bank)
- {
- if (hirom)
- {
- uint addr = (addrlo) + (addrhi * 0x100) + (bank * 0x10000);
- if ((addr & 0x400000) != 0)
- {
- addr &= 0x3FFFFF;
- }
- else
- {
- addr = ((addr & 0x8000) != 0) ? addr & 0x3FFFFF : 0;
- }
- return addr;
- }
- else
- {
- bank &= 0x7F;
- return (uint)((addrlo & 0xFF) + (0x100 * (addrhi & 0xFF)) + (0x8000 * bank) - ((header) ? 0 : 0x200) - 0x7E00);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement