private void UpdateFramerate() { VsyncNumerator = 1000000000; long refresh = (long)LibMAME.mame_lua_get_double(MAMELuaCommand.GetRefresh); VsyncDenominator = (int)(refresh / 1000000000); }
private void InitMemoryDomains() { var domains = new List <MemoryDomain>(); _systemBusAddressShift = LibMAME.mame_lua_get_int(MAMELuaCommand.GetSpaceAddressShift); var dataWidth = LibMAME.mame_lua_get_int(MAMELuaCommand.GetSpaceDataWidth) >> 3; // mame returns in bits var size = (long)LibMAME.mame_lua_get_double(MAMELuaCommand.GetSpaceAddressMask) + dataWidth; var endianString = MameGetString(MAMELuaCommand.GetSpaceEndianness); var deviceName = MameGetString(MAMELuaCommand.GetMainCPUName); //var addrSize = (size * 2).ToString(); MemoryDomain.Endian endian = MemoryDomain.Endian.Unknown; if (endianString == "little") { endian = MemoryDomain.Endian.Little; } else if (endianString == "big") { endian = MemoryDomain.Endian.Big; } var mapCount = LibMAME.mame_lua_get_int(MAMELuaCommand.GetSpaceMapCount); for (int i = 1; i <= mapCount; i++) { var read = MameGetString($"return { MAMELuaCommand.SpaceMap }[{ i }].readtype"); var write = MameGetString($"return { MAMELuaCommand.SpaceMap }[{ i }].writetype"); if (read == "ram" && write == "ram" || read == "rom") { var firstOffset = LibMAME.mame_lua_get_int($"return { MAMELuaCommand.SpaceMap }[{ i }].offset"); var lastOffset = LibMAME.mame_lua_get_int($"return { MAMELuaCommand.SpaceMap }[{ i }].endoff"); var name = $"{ deviceName } : { read } : 0x{ firstOffset:X}-0x{ lastOffset:X}"; domains.Add(new MemoryDomainDelegate(name, lastOffset - firstOffset + 1, endian, delegate(long addr) { return(_peek(addr, firstOffset, size)); }, read == "rom" ? (Action <long, byte>) null : delegate(long addr, byte val) { _poke(addr, val, firstOffset, size); }, dataWidth)); } } domains.Add(new MemoryDomainDelegate(deviceName + " : System Bus", size, endian, delegate(long addr) { return(_peek(addr, 0, size)); }, null, dataWidth)); _memoryDomains = new MemoryDomainList(domains); (ServiceProvider as BasicServiceProvider).Register <IMemoryDomains>(_memoryDomains); }
private void UpdateAspect() { int x = (int)LibMAME.mame_lua_get_double(MAMELuaCommand.GetBoundX); int y = (int)LibMAME.mame_lua_get_double(MAMELuaCommand.GetBoundY); VirtualHeight = BufferWidth > BufferHeight * x / y ? BufferWidth * y / x : BufferHeight; VirtualWidth = VirtualHeight * x / y; }
private void InitMemoryDomains() { var domains = new List <MemoryDomain>(); _systemBusAddressShift = LibMAME.mame_lua_get_int(MAMELuaCommand.GetSpaceAddressShift); var size = (long)LibMAME.mame_lua_get_double(MAMELuaCommand.GetSpaceAddressMask) + 1; var dataWidth = LibMAME.mame_lua_get_int(MAMELuaCommand.GetSpaceDataWidth) >> 3; // mame returns in bits var endianString = MameGetString(MAMELuaCommand.GetSpaceEndianness); MemoryDomain.Endian endian = MemoryDomain.Endian.Unknown; if (endianString == "little") { endian = MemoryDomain.Endian.Little; } else if (endianString == "big") { endian = MemoryDomain.Endian.Big; } var mapCount = LibMAME.mame_lua_get_int(MAMELuaCommand.GetSpaceMapCount); for (int i = 1; i <= mapCount; i++) { var read = MameGetString($"return { MAMELuaCommand.SpaceMap }[{ i }].readtype"); var write = MameGetString($"return { MAMELuaCommand.SpaceMap }[{ i }].writetype"); if (read == "ram" && write == "ram" /* || read == "rom" */) { var firstOffset = LibMAME.mame_lua_get_int($"return { MAMELuaCommand.SpaceMap }[{ i }].offset"); var lastOffset = LibMAME.mame_lua_get_int($"return { MAMELuaCommand.SpaceMap }[{ i }].endoff"); var name = $"{ read.ToUpper() } { firstOffset:X}-{ lastOffset:X}"; domains.Add(new MemoryDomainDelegate(name, lastOffset - firstOffset + 1, endian, delegate(long addr) { if (addr < 0 || addr >= size) { throw new ArgumentOutOfRangeException(); } _memAccess = true; _mamePeriodicComplete.WaitOne(); addr += firstOffset; var val = (byte)LibMAME.mame_lua_get_int($"{ MAMELuaCommand.GetSpace }:read_u8({ addr << _systemBusAddressShift })"); _memoryAccessComplete.Set(); _memAccess = false; return(val); }, read == "rom" ? (Action <long, byte>) null : delegate(long addr, byte val) { if (addr < 0 || addr >= size) { throw new ArgumentOutOfRangeException(); } _memAccess = true; _mamePeriodicComplete.WaitOne(); addr += firstOffset; LibMAME.mame_lua_execute($"{ MAMELuaCommand.GetSpace }:write_u8({ addr << _systemBusAddressShift }, { val })"); _memoryAccessComplete.Set(); _memAccess = false; }, dataWidth)); } } domains.Add(new MemoryDomainDelegate("System Bus", size, endian, delegate(long addr) { if (addr < 0 || addr >= size) { throw new ArgumentOutOfRangeException(); } _memAccess = true; _mamePeriodicComplete.WaitOne(); var val = (byte)LibMAME.mame_lua_get_int($"{ MAMELuaCommand.GetSpace }:read_u8({ addr << _systemBusAddressShift })"); _memoryAccessComplete.Set(); _memAccess = false; return(val); }, null, dataWidth)); _memoryDomains = new MemoryDomainList(domains); (ServiceProvider as BasicServiceProvider).Register <IMemoryDomains>(_memoryDomains); }