Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /*
  2.         dZ80 Disassembler Private Header
  3. */
  4.  
  5. #ifndef _MIDISSZ80P_
  6. #define _MIDISSZ80P_
  7.  
  8. #include "types.h"
  9. #include "dissz80.h"
  10.  
  11. #define MARKBLANKLINE                   d->lineCmd |= LC_BLANKLINE
  12. #define ISCODEBYTE(d, pc)       (d->opMap[pc >> 3] & (1 << (pc & 7)))
  13.  
  14. #define Z80IX                                   0x01            /* We're on a IX prefix */
  15. #define Z80IY                                   0x02            /* We're on a IY prefix */
  16. #define Z80GOTIXIYDISP                  0x04            /* Got IX/IY displacement  */
  17. #define Z80CB                                   0x08            /* Processing a CB op-code */
  18. #define Z80ED                                   0x10            /* Processing a ED op-code */
  19. #define Z80COMMENT                              0x20            /* Have written a comment  */
  20.  
  21. #define Z80IXIY                                 (Z80IX | Z80IY)
  22.  
  23. /* The options are used to control what happens after each instruction disassembly */
  24. #define LC_BLANKLINE                    0x0001
  25.  
  26. #define TABSIZE                                 8
  27. #define COMMENTCOLUMN                   40
  28.  
  29. /* Opcode trap map bits */
  30. #define D_SCRIPT_PRE                    0x01
  31. #define D_SCRIPT_POST                   0x02
  32.  
  33. #define PROGRESSUPDATEFREQ              100     /* Num. instructions to disassemble before updating progress */
  34.  
  35. #define REG_B           0
  36. #define REG_C           1
  37. #define REG_D           2
  38. #define REG_E           3
  39. #define REG_H           4
  40. #define REG_L           5
  41. #define REG_HL          6
  42. #define REG_A           7
  43.  
  44. void    PrepareDisInstruction(DISZ80 *d);
  45. void    DisassembleInstruction(DISZ80 *d);
  46. int     LookOpcode(DISZ80 *d, int offset);
  47. int     GetNextOpCode(DISZ80 *d);
  48.  
  49. void    DisCB(DISZ80 *d);
  50. void    DisDDCB(DISZ80 *d);
  51. void    DisED(DISZ80 *d);
  52. void    Dis40to7F(DISZ80 *d);
  53. void    Dis80toBF(DISZ80 *d);
  54. void    DisC0toFF(DISZ80 *d);
  55. void    Dis00to3F(DISZ80 *d);
  56. int     DisED00to3F(DISZ80 *d);
  57. int     DisED40to7F(DISZ80 *d);
  58. int     DisED80toBF(DISZ80 *d);
  59.  
  60. void    AddToDis(DISZ80 *d, char *str);
  61. void    AddToDisTab(DISZ80 *d, char *str);
  62. void    AddToDisTabDB(DISZ80 *d);
  63. void    AddToDisTabLD(DISZ80 *d, char *str);
  64. void    AddToDisReg8(DISZ80 *d, int op, int op2);
  65. void    AddToDisReg16(DISZ80 *d, int op);
  66. void    AddToDisReg16NoAnd(DISZ80 *d, int op);
  67. void    AddToDisHLIXIY(DISZ80 *d);
  68. void    AddToDisUnknown(DISZ80 *d, char *Comment);
  69. char    GetIXIYDisplacement(DISZ80 *d);
  70.  
  71. WORD    AddToDis16BitAbs(DISZ80 *d, int CommaFlag);
  72. void    AddToDis8BitAbs(DISZ80 *d, int CommaFlag);
  73. WORD    AddToDisRel8(DISZ80 *d, int CommaFlag);
  74. void    AddToDisComment(DISZ80 *d, char *str);
  75. void    AddToDisCommentZ180(DISZ80 *d);
  76. void    FlagFn(DISZ80 *d, unsigned int Addr);
  77. int     IsFnUsed(DISZ80 *d, unsigned int Addr);
  78. void    AddToDisUndoc(DISZ80 *d);
  79. void    AddToDisUndocNop(DISZ80 *d);
  80. WORD    Get16BitParam(DISZ80 *d);
  81. void    DisZ80CleanUp(DISZ80 *d);
  82. int     CreateOutputASMFile(DISZ80 *d);
  83. int     PrepareOpMap(DISZ80 *d);
  84. void    AddRefEntry(DISZ80 *d, int Addr, int PC, int RefType);
  85. void    AddReferenceAddr(DISZ80 *d, DISREF *p, int PC);
  86. void    WriteReferenceFile(DISZ80 *d);
  87. int     PrepareReferenceListing(DISZ80 *d);
  88. void    DoProgress(DISZ80 *d, int forceUpdate);
  89. void    Add16BitAddress(DISZ80 *d, WORD Addr);
  90. void    UnderlineText(FILE *stream, char *text);
  91.  
  92. /* Added in 1.50 */
  93. void    Add8BitNum(DISZ80 *d, int Num);
  94. void    Make8BitNum(DISZ80 *d, char *Dst, int Num);
  95. void    Add16BitNum(DISZ80 *d, int Num);
  96. void    Make16BitNum(DISZ80 *d, char *Dst, int Num);
  97. void    MakeLJustified16BitNum(DISZ80 *d, char *Dst, int Num);
  98. BYTE*   AllocateMap(DISZ80 *d, char *ErrorStr, unsigned int BytesWanted);
  99. int     WriteDisLine(DISZ80 *d, unsigned int Addr);
  100. void    StartPass(DISZ80 *d);
  101. int             WithinDisRange(DISZ80 *d);
  102.  
  103. /* Added in 2.0: Script functions */
  104. int     InitOpcodeTraps(DISZ80 *d);
  105. int     ShutdownScripting(DISZ80 *d);
  106. int     InitScripting(DISZ80 *d);
  107. int     ExecPreTrap(DISZ80 *d);
  108. void    ExecPostTrap(DISZ80 *d);
  109.  
  110. #ifndef _DZ80_EXCLUDE_SCRIPT
  111. /* Lua support extensions */
  112. DISZ80 *GetD(lua_State *ls);
  113. int d_FromHex(lua_State *ls);
  114. int LuaErrorHandler(lua_State *ls);
  115. #endif
  116.  
  117. /* Misc tables */
  118. extern char *VersionString;
  119. extern char *IMModes[4];
  120. extern char *Conditions[8];
  121. extern char *AccRotType[8];
  122. extern char *CBRotType[8];
  123. extern char *Reg8Idx[8];
  124. extern char *Reg8AFIdx[8];
  125. extern char *Reg16Idx[5];
  126. extern char *BasicOps[8];
  127. extern char *RepeatOps[16];
  128. extern char *Z180RepeatOps[4];
  129. extern char *dZ80ErrorMsgs[DERR_TOTAL];
  130.  
  131.  
  132.  
  133. #endif          /* _MIDISSZ80P_ */
  134.  
  135.