|
|
1.1 root 1:
2: /* extra declarations for z80stb.c to make life easier.
3: */
4:
5: #ifndef h_z80stb_h
6: #define h_z80stb_h
7:
8: /* RC hack */
9: #define DWORD UINT32
10: #define WORD UINT16
11: #define BYTE UINT8
12: #define LPBYTE UINT8*
13: #define ULONG unsigned long
14: #define BOOL UINT8
15:
16: /* accessors */
17: #define LOWORD(x) ( x & 0xFFFF )
18: #define HIWORD(x) ( x >> 16 )
19: #define LOBYTE(x) ( x & 0xFF )
20: #define HIBYTE(x) ( x >> 8 )
21: #define MAKEWORD(lo,hi) ( lo | ( hi << 8 ) )
22:
23: /* execz80.h */
24: #define S_FLAG 0x80
25: #define Z_FLAG 0x40
26: #define H_FLAG 0x10
27: #define V_FLAG 0x04
28: #define N_FLAG 0x02
29: #define C_FLAG 0x01
30:
31: typedef struct {
32: WORD AF,BC,DE,HL,IX,IY,PC,SP;
33: WORD AF2,BC2,DE2,HL2;
34: unsigned IFF1,IFF2,HALT,IM,I,R,R2;
35: } EXECZ80_CONTEXT;
36:
37: // typedef BYTE (*EXECZ80_MEMREAD_PROC)(WORD);
38: // typedef void (*EXECZ80_MEMWRITE_PROC)(WORD, BYTE);
39: // typedef BYTE (*EXECZ80_PORTREAD_PROC)(BYTE);
40: // typedef void (*EXECZ80_PORTWRITE_PROC)(BYTE, BYTE);
41:
42: // #define Z80_END_TABLE ((EXECZ80_MEMREAD_PROC) 0xFFFFFFFF)
43: // #define Z80_IGNORE_READ ((EXECZ80_MEMREAD_PROC) 0xFFFFFFFE)
44: // #define Z80_IGNORE_WRITE ((EXECZ80_MEMWRITE_PROC)0xFFFFFFFE)
45: // #define Z80_ILLEGAL_READ ((EXECZ80_MEMREAD_PROC) 0xFFFFFFFD)
46: // #define Z80_ILLEGAL_WRITE ((EXECZ80_MEMWRITE_PROC)0xFFFFFFFD)
47:
48: // typedef struct {
49: // DWORD dwAddrMin;
50: // DWORD dwAddrMax;
51: // DWORD dwFlags;
52: // EXECZ80_MEMREAD_PROC pfnMemRead;
53: // EXECZ80_MEMWRITE_PROC pfnMemWrite;
54: // } EXECZ80_MEM_DESCRIPTOR;
55:
56: // typedef struct {
57: // DWORD dwFlags;
58: // LPBYTE rgbMemory;
59: // const BYTE *rgbInstructions;
60: // EXECZ80_MEMREAD_PROC pfnMemRead;
61: // EXECZ80_MEMWRITE_PROC pfnMemWrite;
62: // EXECZ80_PORTREAD_PROC pfnPortRead;
63: // EXECZ80_PORTWRITE_PROC pfnPortWrite;
64: // const EXECZ80_MEM_DESCRIPTOR *pmd;
65: // } EXECZ80_CREATE;
66:
67: /* execz80i.h */
68: #define ARITH_TABLES
69:
70: /* int Create ( EXECZ80_CREATE &cs, IExecZ80 *&pExec ); */
71: /* int CExecZ80 ( EXECZ80_CREATE &cs ); */
72: /* int ~CExecZ80(); */
73:
74: int Irq(BYTE bVal);
75: int Nmi(void);
76: int Exec(int cCyclesArg);
77:
78: /* inline */ BYTE ImmedByte(void);
79: /* inline */ WORD ImmedWord(void);
80: /* inline */ WORD GetPC(void);
81: /* inline */ void SetPC(WORD wAddr);
82: /* inline */ void AdjustPC(signed char cb);
83:
84: /* inline */ void Push(WORD wArg);
85: /* inline */ WORD Pop(void);
86: /* inline */ WORD GetSP(void);
87: /* inline */ void SetSP(WORD wAddr);
88:
89: /* inline */ int Jr0(int f);
90: /* inline */ int Jr1(int f);
91: /* inline */ int Call0(int f);
92: /* inline */ int Call1(int f);
93: /* inline */ int Ret0(int f);
94: /* inline */ int Ret1(int f);
95: /* inline */ int Jp0(int f);
96: /* inline */ int Jp1(int f);
97:
98: /* inline */ void Rst(WORD wAddr);
99: /* inline */ WORD MemReadWord(WORD wAddr);
100: /* inline */ BYTE MemReadByte(WORD wAddr);
101: /* inline */ void MemWriteByte(WORD wAddr, BYTE bVal);
102: /* inline */ void MemWriteWord(WORD wAddr, WORD wVal);
103: WORD CallbackMemReadWord(WORD wAddr);
104: BYTE CallbackMemReadByte(WORD wAddr);
105: void CallbackMemWriteByte(WORD wAddr, BYTE bVal);
106: void CallbackMemWriteWord(WORD wAddr, WORD wVal);
107:
108: /* inline */ void Add_1(BYTE b);
109: /* inline */ void Adc_1(BYTE b);
110: /* inline */ void Sub(BYTE b);
111: /* inline */ void Sbc_1(BYTE b);
112: /* inline */ void And(BYTE b);
113: /* inline */ void Or(BYTE b);
114: /* inline */ void Xor(BYTE b);
115: /* inline */ void Cp(BYTE b);
116: /* inline */ BYTE Set(BYTE b,int);
117: /* inline */ BYTE Res(BYTE b,int);
118: /* inline */ void Bit(BYTE b,int);
119: /* inline */ void Rlca(void);
120: /* inline */ void Rrca(void);
121: /* inline */ void Rla(void);
122: /* inline */ void Rra(void);
123: /* inline */ BYTE Rlc(BYTE b);
124: /* inline */ BYTE Rrc(BYTE b);
125: /* inline */ BYTE Rl(BYTE b);
126: /* inline */ BYTE Rr(BYTE b);
127: /* inline */ BYTE Sll(BYTE b);
128: /* inline */ BYTE Srl(BYTE b);
129: /* inline */ BYTE Sla(BYTE b);
130: /* inline */ BYTE Sra(BYTE b);
131: /* inline */ BYTE Inc(BYTE b);
132: /* inline */ BYTE Dec(BYTE b);
133:
134: /* inline */ WORD Add_2(WORD wArg1, WORD wArg2);
135: /* inline */ WORD Adc_2(WORD wArg1, WORD wArg2);
136: /* inline */ WORD Sbc_2(WORD wArg1, WORD wArg2);
137:
138: int Ei(void);
139: void Di(void);
140:
141: int HandleCB(void);
142: int HandleDD(void);
143: int HandleED(int cCycles);
144: int HandleFD(void);
145: int HandleDDCB(void);
146: int HandleFDCB(void);
147:
148: void Out(BYTE bPort, BYTE bVal);
149: BYTE In(BYTE bPort);
150:
151: void Exx(void);
152:
153: /* inline */ WORD IndirectIX(void);
154: /* inline */ WORD IndirectIY(void);
155:
156: void Dump(void);
157:
158: extern BYTE ZSTable[256];
159: extern BYTE ZSPTable[256];
160: extern short DAATable[2048];
161: extern BYTE rgfAdd[256][256];
162: extern BYTE rgfAddc[256][256][2];
163: extern BYTE rgfSub[256][256];
164: extern BYTE rgfSubc[256][256][2];
165: extern BYTE rgfInc[256];
166: extern BYTE rgfDec[256];
167: extern BYTE rgfBit[256][8];
168:
169: #define ISF_PENDING 0x00000008
170: #define ISF_MODE_MASK 0x00000003
171: #define ISF_HALT 0x00000004
172: #define ISF_IFF1 0x00000010
173: #define ISF_IFF2 0x00000020
174: #define ISF_IREG_MASK 0x00000F00
175:
176: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.