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