public override string GrfToString(RegisterStorage flagRegister, string prefix, uint grpFlags) { var sb = new StringBuilder(); byte bitPos = 0; while (grpFlags != 0) { if ((grpFlags & 1) != 0) { if (PICRegisters.TryGetBitField(PICRegisters.STATUS, out var fld, bitPos, 1)) { sb.Append(fld.Name); } } grpFlags >>= 1; bitPos++; } return(sb.ToString()); }
protected override void DoRender(MachineInstructionRenderer renderer, MachineInstructionRendererOptions options) { var bankmem = Operands[0] as PICOperandBankedMemory ?? throw new InvalidOperationException($"Invalid memory operand: {Operands[0]}"); var bitno = Operands[1] as PICOperandMemBitNo ?? throw new InvalidOperationException($"Invalid bit number operand: {Operands[1]}"); renderer.WriteMnemonic(Mnemonic.ToString()); renderer.Tab(); if (PICRegisters.TryGetAlwaysAccessibleRegister(bankmem.Offset, out var reg)) { renderer.WriteString($"{reg.Name}"); renderer.WriteString(","); if (PICRegisters.TryGetBitField(reg, out var fld, bitno.BitNo, 1)) { renderer.WriteString($"{fld.Name}"); } else { bitno.Render(renderer, options); } return; }
public override void Render(MachineInstructionWriter writer, MachineInstructionWriterOptions options) { var bankmem = op1 as PICOperandBankedMemory ?? throw new InvalidOperationException($"Invalid memory operand: {op1}"); var bitno = op2 as PICOperandMemBitNo ?? throw new InvalidOperationException($"Invalid bit number operand: {op2}"); writer.WriteOpcode(Opcode.ToString()); writer.Tab(); if (PICRegisters.TryGetAlwaysAccessibleRegister(bankmem.Offset, out var reg)) { writer.WriteString($"{reg.Name}"); writer.WriteString(","); if (PICRegisters.TryGetBitField(reg, out var fld, bitno.BitNo, 1)) { writer.WriteString($"{fld.Name}"); } else { bitno.Write(writer, options); } return; }