Changeset 10 for trunk/Disassembler.pas


Ignore:
Timestamp:
Apr 20, 2026, 9:52:45 PM (6 days ago)
Author:
chronos
Message:
  • Added: Decoding area of instructions with two prefixes.
  • Modified: Improved parameter handling in disassembler.
  • Modified: Improving handling of flags.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Disassembler.pas

    r7 r10  
    103103    Value := Memory.ReadByte;
    104104    DecodedInstruction.AddOpcode(Value);
    105     if Value = $cb then begin
     105    if Value = $CB then begin
    106106      Value := Memory.ReadByte;
    107107      DecodedInstruction.AddOpcode(Value);
    108108      Value := $100 or Value;
    109109    end else
    110     if Value = $dd then begin
    111       Value := Memory.ReadByte;
    112       DecodedInstruction.AddOpcode(Value);
    113       Value := $200 or Value;
     110    if Value = $DD then begin
     111      Value := Memory.ReadByte;
     112      DecodedInstruction.AddOpcode(Value);
     113      if Value = $CB then begin
     114        Value := Memory.ReadByte;
     115        DecodedInstruction.AddOpcode(Value);
     116        Value := $500 or Value;
     117      end else Value := $200 or Value;
    114118    end else
    115     if Value = $ed then begin
     119    if Value = $ED then begin
    116120      Value := Memory.ReadByte;
    117121      DecodedInstruction.AddOpcode(Value);
    118122      Value := $300 or Value;
    119123    end else
    120     if Value = $fd then begin
    121       Value := Memory.ReadByte;
    122       DecodedInstruction.AddOpcode(Value);
    123       Value := $400 or Value;
     124    if Value = $FD then begin
     125      Value := Memory.ReadByte;
     126      DecodedInstruction.AddOpcode(Value);
     127      if Value = $CB then begin
     128        Value := Memory.ReadByte;
     129        DecodedInstruction.AddOpcode(Value);
     130        Value := $600 or Value;
     131      end else Value := $400 or Value;
    124132    end;
    125133    if (Value >= 0) and (Value <= Integer(High(TInstruction))) then begin
     
    153161            DecodedInstruction.Parameters := DecodedInstruction.Parameters + '(' + IntToHex(Value, 4) + ')';
    154162          end else
     163          if InstructionInfo.Params[J] = ptDisplacement then begin
     164            Value := Memory.ReadByte;
     165            DecodedInstruction.AddOpcode(Value);
     166            DecodedInstruction.Parameters := DecodedInstruction.Parameters + IntToStr(ShortInt(Value));
     167          end else
    155168          if InstructionInfo.Params[J] in [ptRegA, ptRegB, ptRegC, ptRegD,
    156             ptRegE, ptRegH, ptRegL, ptRegBC, ptRegDE, ptRegHL, ptRegSP, ptRegIX,
    157             ptRegIY,
    158             ptFlagZ, ptFlagNZ, ptFlagC, ptFlagNC, ptFlagP, ptFlagPO,
    159             ptRegBCIndir, ptRegDEIndir, ptRegHLIndir, ptRegSPIndir,
     169            ptRegE, ptRegH, ptRegL, ptRegR, ptRegI,
     170            ptRegAF, ptRegBC, ptRegDE, ptRegHL, ptRegSP, ptRegIX, ptRegIY,
     171            ptRegAFPair, ptRegBCPair, ptRegDEPair, ptRegHLPair,
     172            ptFlagZ, ptFlagNZ, ptFlagC, ptFlagNC, ptFlagP, ptFlagPO, ptFlagPE, ptFlagM,
     173            ptRegBCIndir, ptRegDEIndir, ptRegHLIndir, ptRegSPIndir, ptRegCIndir,
    160174            pt00, pt08, pt10, pt18, pt20, pt28, pt30, pt38,
    161175            pt0, pt1, pt2, pt3, pt4, pt5, pt6, pt7] then begin
Note: See TracChangeset for help on using the changeset viewer.