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