/// <summary>
        ///     Generates Parameters that can be passed into a method
        ///
        ///     Memory must be Reset() between runs or else string will remain allocated in the heap
        /// </summary>
        /// <param name="values"></param>
        /// <returns></returns>
        protected List <ushort> GenerateParameters(object[] values)
        {
            var parameters = new List <ushort>();

            foreach (var v in values)
            {
                switch (v)
                {
                case string @parameterString:
                {
                    var stringParameterPointer = mbbsEmuMemoryCore.AllocateVariable(Guid.NewGuid().ToString(), (ushort)(@parameterString.Length + 1));
                    mbbsEmuMemoryCore.SetArray(stringParameterPointer, Encoding.ASCII.GetBytes(@parameterString));
                    parameters.Add(stringParameterPointer.Offset);
                    parameters.Add(stringParameterPointer.Segment);
                    break;
                }

                case uint @parameterULong:
                {
                    var longBytes = BitConverter.GetBytes(@parameterULong);
                    parameters.Add(BitConverter.ToUInt16(longBytes, 0));
                    parameters.Add(BitConverter.ToUInt16(longBytes, 2));
                    break;
                }

                case int @parameterLong:
                {
                    var longBytes = BitConverter.GetBytes(@parameterLong);
                    parameters.Add(BitConverter.ToUInt16(longBytes, 0));
                    parameters.Add(BitConverter.ToUInt16(longBytes, 2));
                    break;
                }

                case ushort @parameterUInt:
                    parameters.Add(@parameterUInt);
                    break;

                case short @parameterInt:
                    parameters.Add((ushort)@parameterInt);
                    break;
                }
            }

            return(parameters);
        }