public override PICInstruction Decode(ushort uInstr, PICDisassemblerBase dasm) { if (uInstr == 0x00FFU) { return(new PICInstructionNoOpnd(opcode)); } return(new PICInstructionNoOpnd(Opcode.invalid)); }
public override PICInstruction Decode(ushort uInstr, PICDisassemblerBase dasm) { var adr = uInstr.Extract(0, 8); var acc = uInstr.Extract(8, 1); var dst = uInstr.Extract(9, 1); return(new PICInstructionMemFDA(mnemonic, adr, dst, acc)); }
public override PICInstruction Decode(ushort uInstr, PICDisassemblerBase dasm) { var adr = uInstr.Extract(0, 8); var acc = uInstr.Extract(8, 1); var bitno = uInstr.Extract(9, 3); return(new PICInstructionMemFBA(opcode, adr, bitno, acc)); }
public override PICInstruction Decode(ushort uInstr, PICDisassemblerBase dasm) { var bsrval = uInstr.Extract(0, 8); if (bsrval >= 16) { return(new PICInstructionNoOpnd(Mnemonic.invalid)); } return(new PICInstructionImmedByte(mnemonic, bsrval)); }
public static PICRewriter Create(PICArchitecture arch, PICDisassemblerBase dasm, PICProcessorState state, IStorageBinder binder, IRewriterHost host) { return(new PIC18EggRewriter( arch ?? throw new ArgumentNullException(nameof(arch)), dasm ?? throw new ArgumentNullException(nameof(dasm)), state ?? throw new ArgumentNullException(nameof(state)), binder ?? throw new ArgumentNullException(nameof(binder)), host ?? throw new ArgumentNullException(nameof(host)) )); }
public override PICInstruction Decode(ushort uInstr, PICDisassemblerBase dasm) { byte bsrval = (byte)uInstr.Extract(0, 8); if (bsrval >= 64) { return(new PICInstructionNoOpnd(Opcode.invalid)); } return(new PICInstructionImmedByte(opcode, bsrval)); }
public override PICInstruction Decode(ushort uInstr, PICDisassemblerBase dasm) { // This a 2-words instruction. if (!GetAddlInstrWord(dasm.rdr, out ushort word2)) { return(new PICInstructionNoOpnd(Mnemonic.invalid)); } uint dstaddr = (uint)(uInstr.Extract(0, 8) | (word2 << 8)); return(new PICInstructionProgTarget(opcode, dstaddr)); }
public override PICInstruction Decode(ushort uInstr, PICDisassemblerBase dasm) { if (PICMemoryDescriptor.ExecMode != PICExecMode.Extended) // Is PIC running in Extended Execution mode... { return(new PICInstructionNoOpnd(Mnemonic.invalid)); } var imm8 = (byte)uInstr.Extract(0, 8); return(new PICInstructionImmedByte(mnemonic, imm8)); }
public override PICInstruction Decode(ushort uInstr, PICDisassemblerBase dasm) { if (PICMemoryDescriptor.ExecMode != PICExecMode.Extended) // Only supported by PIC18 running in Extended Execution mode. { return(new PICInstructionNoOpnd(Mnemonic.invalid)); } var imm6 = uInstr.Extract(0, 6); return(new PICInstructionImmedByte(mnemonic, imm6)); }
public override PICInstruction Decode(ushort uInstr, PICDisassemblerBase dasm) { byte fsrnum = (byte)uInstr.Extract(6, 2); if (fsrnum >= 3) { return(null); } var imm6 = (byte)uInstr.Extract(0, 6); return(new PICInstructionFSRUArith(opcode, fsrnum, imm6)); }
public override PICInstruction Decode(ushort uInstr, PICDisassemblerBase dasm) { // This is a 2-word instruction. if (!GetAddlInstrWord(dasm.rdr, out ushort word2)) { return(new PICInstructionNoOpnd(Opcode.invalid)); } uint dstaddr = (uint)(uInstr.Extract(0, 8) | (word2 << 8)); ushort ufast = uInstr.Extract(8, 1); return(new PICInstructionProgTargetFast(opcode, dstaddr, ufast, false)); }
public override PICInstruction Decode(ushort uInstr, PICDisassemblerBase dasm) { // This a 2-word instruction. if (!GetAddlInstrWord(dasm.rdr, out ushort dst)) { return(new PICInstructionNoOpnd(Mnemonic.invalid)); } var src = uInstr.Extract(0, 12); return(new PICInstructionMem2Mem(opcode, src, dst)); }
public override PICInstruction Decode(ushort uInstr, PICDisassemblerBase dasm) { byte fsrnum = (byte)uInstr.Extract(6, 2); if (fsrnum >= 3) { return(dasm.CreateInvalidInstruction()); } var imm6 = (byte)uInstr.Extract(0, 6); return(new PICInstructionFSRUArith(mnemonic, fsrnum, imm6)); }
public override PICInstruction Decode(ushort uInstr, PICDisassemblerBase dasm) { if ((uInstr & 0b11_1111_1111_1100) == 0b00_0001_0000_0000) { return(new PICInstructionNoOpnd(Mnemonic.CLRW)); } if ((uInstr & 0b11_1111_1100_0000) == 0b00_0001_0100_0000) { return(new PICInstructionImmedByte(Mnemonic.MOVLB, (byte)uInstr.Extract(0, 6))); } return(new PICInstructionNoOpnd(Mnemonic.invalid)); }
public override PICInstruction Decode(ushort uInstr, PICDisassemblerBase dasm) { switch (uInstr) { case 0b00_0001_0000_0000: case 0b00_0001_0000_0001: case 0b00_0001_0000_0010: case 0b00_0001_0000_0011: return new PICInstructionNoOpnd(Mnemonic.CLRW); default: return new PICInstructionNoOpnd(Mnemonic.invalid); } }
public override PICInstruction Decode(ushort uInstr, PICDisassemblerBase dasm) { if (!GetAddlInstrWord(dasm.rdr, out ushort lsw)) { return(new PICInstructionNoOpnd(Mnemonic.invalid)); } if (lsw >= 256) // second word must be <xxxx 0000 kkkk kkkk> { return(new PICInstructionNoOpnd(Mnemonic.invalid)); } var msw = uInstr.Extract(0, 4); var operd = (ushort)((msw << 8) | lsw); return(new PICInstructionImmedUShort(opcode, operd)); }
public override PICInstruction Decode(ushort uInstr, PICDisassemblerBase dasm) { if (PICMemoryDescriptor.ExecMode != PICExecMode.Extended) { return(new PICInstructionNoOpnd(Mnemonic.invalid)); } byte fsrnum = (byte)uInstr.Extract(6, 2); if (fsrnum >= 3) { return(dasm.CreateInvalidInstruction()); } var imm6 = (byte)uInstr.Extract(0, 6); return(new PICInstructionFSRUArith(mnemonic, fsrnum, imm6)); }
public override PICInstruction Decode(ushort uInstr, PICDisassemblerBase dasm) { if (PICMemoryDescriptor.ExecMode != PICExecMode.Extended) // Is PIC running in Extended Execution mode... { return(new PICInstructionNoOpnd(Mnemonic.invalid)); } // This is a 2-word instruction. if (!GetAddlInstrWord(dasm.rdr, out ushort word2)) { return(new PICInstructionNoOpnd(Mnemonic.invalid)); } var operzs = (byte)uInstr.Extract(0, 7); var operzd = (byte)word2.Extract(0, 7); return(new PICInstructionMem2Mem(mnemonic, operzs, operzd)); }
public override PICInstruction Decode(ushort uInstr, PICDisassemblerBase dasm) { // This is a 3-word instruction. if (!GetAddlInstrWord(dasm.rdr, out ushort word2) || !GetAddlInstrWord(dasm.rdr, out ushort word3)) { return(new PICInstructionNoOpnd(Opcode.invalid)); } ushort srcaddr = (ushort)((uInstr.Extract(0, 4) << 10) | word2.Extract(2, 10)); ushort dstaddr = (ushort)(word3.Extract(0, 12) | (word2.Extract(0, 2) << 12)); // PCL, TOSL, TOSH, TOSU are invalid destinations. if (PICRegisters.NotAllowedDest(dstaddr)) { return(null); } return(new PICInstructionMem2Mem(opcode, srcaddr, dstaddr)); }
public override PICInstruction Decode(ushort uInstr, PICDisassemblerBase dasm) { switch (uInstr) { case 0b00_0000_0110_0011: return(new PICInstructionNoOpnd(Mnemonic.SLEEP)); case 0b00_0000_0110_0100: return(new PICInstructionNoOpnd(Mnemonic.CLRWDT)); case 0b00_0000_0110_0101: case 0b00_0000_0110_0110: case 0b00_0000_0110_0111: return(new PICInstructionTris(Mnemonic.TRIS, (byte)uInstr.Extract(0, 3))); default: return(new PICInstructionNoOpnd(Mnemonic.invalid)); } }
public override PICInstruction Decode(ushort uInstr, PICDisassemblerBase dasm) { if (PICMemoryDescriptor.ExecMode != PICExecMode.Extended) // PIC not running in Extended Execution mode? { return(new PICInstructionNoOpnd(Mnemonic.invalid)); } // This is a 2-word instruction. if (!GetAddlInstrWord(dasm.rdr, out ushort fd)) { return(new PICInstructionNoOpnd(Mnemonic.invalid)); } // PCL, TOSL, TOSH, TOSU are invalid destinations. if (PICRegisters.NotAllowedDest(fd)) { return(new PICInstructionNoOpnd(Mnemonic.invalid)); } var operzs = (byte)uInstr.Extract(0, 7); return(new PICInstructionMem2Mem(mnemonic, operzs, fd)); }
public override PICInstruction Decode(ushort uInstr, PICDisassemblerBase dasm) { byte fsrnum = (byte)uInstr.Extract(4, 4); if (fsrnum >= 3) { return(new PICInstructionNoOpnd(Mnemonic.invalid)); } // This is a 2-word instruction. if (!GetAddlInstrWord(dasm.rdr, out ushort word2)) { return(new PICInstructionNoOpnd(Mnemonic.invalid)); } if (word2 > 0xFF) // Second word must be 'xxxx-0000-kkkk-kkkk' { return(new PICInstructionNoOpnd(Mnemonic.invalid)); } var imm12 = (ushort)(((uInstr.Extract(0, 4) << 8) | word2)); return(new PICInstructionLFSRLoad(mnemonic, fsrnum, imm12)); }
protected Identifier Fsr2; // cached FSR2 register identifier protected PIC18RewriterBase(PICArchitecture arch, PICDisassemblerBase disasm, PICProcessorState state, IStorageBinder binder, IRewriterHost host) : base(arch, disasm, state, binder, host) { Fsr2 = binder.EnsureRegister(PIC18Registers.FSR2); }
public override PICInstruction Decode(ushort uInstr, PICDisassemblerBase dasm) { var mode = uInstr.Extract(0, 2); return(new PICInstructionTbl(opcode, mode)); }
private PIC18EggRewriter(PICArchitecture arch, PICDisassemblerBase dasm, PICProcessorState state, IStorageBinder binder, IRewriterHost host) : base(arch, dasm, state, binder, host) { }
public override PICInstruction Decode(ushort uInstr, PICDisassemblerBase dasm) { var off = uInstr.ExtractSignExtend(0, 11); return(new PICInstructionProgTarget(opcode, off, dasm.addrCur)); }
public override PICInstruction Decode(ushort uInstr, PICDisassemblerBase dasm) { var ufast = uInstr.Extract(0, 1); return(new PICInstructionFast(opcode, ufast, true)); }
protected PIC16RewriterBase(PICArchitecture arch, PICDisassemblerBase disasm, PICProcessorState state, IStorageBinder binder, IRewriterHost host) : base(arch, disasm, state, binder, host) { }
public override PICInstruction Decode(ushort uInstr, PICDisassemblerBase dasm) { var imm8 = uInstr.Extract(0, 8); return(new PICInstructionImmedByte(opcode, imm8)); }
public override PICInstruction Decode(ushort uInstr, PICDisassemblerBase dasm) { return(new PICInstructionNoOpnd(opcode)); }