Example #1
0
        /// <summary>
        /// dekodiert zwei Parameter (Parameter-Größe muss bereits in <see cref="DecodeStatus.p1"/> gesetzt sein)
        /// </summary>
        /// <param name="c">Zeiger auf die aktuell zu lesende Bytefolge</param>
        /// <param name="cerr">Zeiger auf letztes Byte, welches nicht mehr gelesen werden darf</param>
        /// <param name="status">aktueller Status der Dekodierung</param>
        /// <param name="swap">gibt an, ob beide Parameter getauscht gelesen werden müssen</param>
        /// <returns>Zeiger auf das nachfolgende Byte</returns>
        static byte *DecodeDualParam(byte *c, byte *cerr, ref DecodeStatus status, bool swap = false)
        {
            Debug.Assert(status.p1 != ParamType.None);
            Debug.Assert(status.p2 != ParamType.None);
            byte code = *c++;

            if (c >= cerr)
            {
                return(cerr);
            }
            if (code < 0xc0)
                throw new NotImplementedException("todo: " + code.ToString("x2")); }
Example #2
0
        /// <summary>
        /// dekodiert eine allgemeine Instruktion
        /// </summary>
        /// <param name="c">Zeiger auf die aktuell zu lesende Bytefolge</param>
        /// <param name="cerr">Zeiger auf letztes Byte, welches nicht mehr gelesen werden darf</param>
        /// <param name="status">aktueller Status der Dekodierung</param>
        /// <returns>Zeiger auf das nachfolgende Byte</returns>
        static byte *DecodeInternal(byte *c, byte *cerr, ref DecodeStatus status)
        {
            byte code = *c++;

            if (c >= cerr)
            {
                return(cerr);
            }
            switch (code)
            {
            case 0x00: status.S2(Instruction.Add, ParamType.Reg8); return(DecodeDualParam(c, cerr, ref status));

            case 0x06: return(cerr);

            case 0xcc: status.S(Instruction.Int3); return(c);

            default: throw new NotImplementedException("todo: " + code.ToString("x2"));
            }
        }
 internal DecodedDataPck(UInt32 dataPckCrc, DecodeStatus status, DataPck decodedDataPck)
 {
     this.status         = status;
     this.decodedDataPck = decodedDataPck;
     this.dataPckCrc     = dataPckCrc;
 }