private byte _peek(long addr, int firstOffset, long size)
        {
            if (addr < 0 || addr >= size)
            {
                throw new ArgumentOutOfRangeException();
            }

            if (!_memAccess)
            {
                _memAccess = true;
                _mamePeriodicComplete.WaitOne();
            }

            addr += firstOffset;

            var val = (byte)LibMAME.mame_read_byte((uint)addr << _systemBusAddressShift);

            _memoryAccessComplete.Set();

            return(val);
        }