|
|
1.1 root 1: /*
2: Hatari
3: */
4:
5: #define BUS_ERROR_ADDR 0xE00000 // Address below here causes bus error exception
6:
7: #define INTERCEPT_WORKSPACE_SIZE (8*1024) // 8k, size of intercept lists
8:
9: // List of hardware addresses to be intercepted
10: enum {
11: INTERCEPT_NULL,
12: INTERCEPT_VIDEOHIGH, //0xff8205 byte
13: INTERCEPT_VIDEOMED, //0xff8207 byte
14: INTERCEPT_VIDEOLOW, //0xff8209 byte
15: INTERCEPT_VIDEOSYNC, //0xff820a byte
16: INTERCEPT_VIDEOBASELOW, //0xff820d byte
17: INTERCEPT_LINEWIDTH, //0xff820e byte
18: INTERCEPT_COLOUR0, //0xff8240 word
19: INTERCEPT_COLOUR1, //0xff8242 word
20: INTERCEPT_COLOUR2, //0xff8244 word
21: INTERCEPT_COLOUR3, //0xff8246 word
22: INTERCEPT_COLOUR4, //0xff8248 word
23: INTERCEPT_COLOUR5, //0xff824a word
24: INTERCEPT_COLOUR6, //0xff824c word
25: INTERCEPT_COLOUR7, //0xff824e word
26: INTERCEPT_COLOUR8, //0xff8250 word
27: INTERCEPT_COLOUR9, //0xff8252 word
28: INTERCEPT_COLOUR10, //0xff8254 word
29: INTERCEPT_COLOUR11, //0xff8256 word
30: INTERCEPT_COLOUR12, //0xff8258 word
31: INTERCEPT_COLOUR13, //0xff825a word
32: INTERCEPT_COLOUR14, //0xff825c word
33: INTERCEPT_COLOUR15, //0xff825e word
34: INTERCEPT_SHIFTERMODE, //0xff8260 byte
35: INTERCEPT_DISKCONTROL, //0xff8604 word
36: INTERCEPT_DMASTATUS, //0xff8606 word
37: INTERCEPT_PSG_REGISTER, //0xff8800 byte
38: INTERCEPT_PSG_DATA, //0xff8802 byte
39: INTERCEPT_MICROWIREDATA, //0xff8922 word
40: INTERCEPT_MONITOR, //0xfffa01 byte
41: INTERCEPT_ACTIVE_EDGE, //0xfffa03 byte
42: INTERCEPT_DATA_DIRECTION, //0xfffa05 byte
43: INTERCEPT_ENABLE_A, //0xfffa07 byte
44: INTERCEPT_ENABLE_B, //0xfffa09 byte
45: INTERCEPT_PENDING_A, //0xfffa0b byte
46: INTERCEPT_PENDING_B, //0xfffa0d byte
47: INTERCEPT_INSERVICE_A, //0xfffa0f byte
48: INTERCEPT_INSERVICE_B, //0xfffa11 byte
49: INTERCEPT_MASK_A, //0xfffa13 byte
50: INTERCEPT_MASK_B, //0xfffa15 byte
51: INTERCEPT_VECTOR_REG, //0xfffa17 byte
52: INTERCEPT_TIMERA_CTRL, //0xfffa19 byte
53: INTERCEPT_TIMERB_CTRL, //0xfffa1b byte
54: INTERCEPT_TIMERCD_CTRL, //0xfffa1d byte
55: INTERCEPT_TIMERA_DATA, //0xfffa1f byte
56: INTERCEPT_TIMERB_DATA, //0xfffa21 byte
57: INTERCEPT_TIMERC_DATA, //0xfffa23 byte
58: INTERCEPT_TIMERD_DATA, //0xfffa25 byte
59: INTERCEPT_KEYBOARDCONTROL, //0xfffc00 byte
60: INTERCEPT_KEYBOARDDATA, //0xfffc02 byte
61: INTERCEPT_MIDICONTROL, //0xfffc04 byte
62: INTERCEPT_MIDIDATA, //0xfffc06 byte
63:
64: INTERCEPT_COUNT
65: };
66:
67: // Hardware address details
68: typedef struct {
69: unsigned int Address; // ST hardware address
70: int SpanInBytes; // SIZE_BYTE, SIZE_WORD or SIZE_LONG
71: void *ReadWriteFunc[2]; // Read,Write
72: } INTERCEPT_ACCESS_FUNC;
73:
74: // List of hardware address which are not documented, ie STe, TT, Falcon locations - should be unconnected on STfm
75: typedef struct {
76: unsigned int Start_Address;
77: unsigned int End_Address;
78: } INTERCEPT_ADDRESSRANGE;
79:
80:
81:
82: uae_u32 Intercept_ReadByte(uaecptr addr);
83: uae_u32 Intercept_ReadWord(uaecptr addr);
84: uae_u32 Intercept_ReadLong(uaecptr addr);
85:
86: void Intercept_WriteByte(uaecptr addr, uae_u32 val);
87: void Intercept_WriteWord(uaecptr addr, uae_u32 val);
88: void Intercept_WriteLong(uaecptr addr, uae_u32 val);
89:
90:
91:
92: // Read intercept functions
93: extern void Intercept_VideoHigh_ReadByte(void);
94: extern void Intercept_VideoMed_ReadByte(void);
95: extern void Intercept_VideoLow_ReadByte(void);
96: extern void Intercept_VideoSync_ReadByte(void);
97: extern void Intercept_VideoBaseLow_ReadByte(void);
98: extern void Intercept_LineWidth_ReadByte(void);
99: extern void Intercept_Colour0_ReadWord(void);
100: extern void Intercept_Colour1_ReadWord(void);
101: extern void Intercept_Colour2_ReadWord(void);
102: extern void Intercept_Colour3_ReadWord(void);
103: extern void Intercept_Colour4_ReadWord(void);
104: extern void Intercept_Colour5_ReadWord(void);
105: extern void Intercept_Colour6_ReadWord(void);
106: extern void Intercept_Colour7_ReadWord(void);
107: extern void Intercept_Colour8_ReadWord(void);
108: extern void Intercept_Colour9_ReadWord(void);
109: extern void Intercept_Colour10_ReadWord(void);
110: extern void Intercept_Colour11_ReadWord(void);
111: extern void Intercept_Colour12_ReadWord(void);
112: extern void Intercept_Colour13_ReadWord(void);
113: extern void Intercept_Colour14_ReadWord(void);
114: extern void Intercept_Colour15_ReadWord(void);
115: extern void Intercept_ShifterMode_ReadByte(void);
116: extern void Intercept_DiskControl_ReadWord(void);
117: extern void Intercept_DmaStatus_ReadWord(void);
118: extern void Intercept_PSGRegister_ReadByte(void);
119: extern void Intercept_PSGData_ReadByte(void);
120: extern void Intercept_MicrowireData_ReadWord(void);
121: extern void Intercept_Monitor_ReadByte(void);
122: extern void Intercept_ActiveEdge_ReadByte(void);
123: extern void Intercept_DataDirection_ReadByte(void);
124: extern void Intercept_EnableA_ReadByte(void);
125: extern void Intercept_EnableB_ReadByte(void);
126: extern void Intercept_PendingA_ReadByte(void);
127: extern void Intercept_PendingB_ReadByte(void);
128: extern void Intercept_InServiceA_ReadByte(void);
129: extern void Intercept_InServiceB_ReadByte(void);
130: extern void Intercept_MaskA_ReadByte(void);
131: extern void Intercept_MaskB_ReadByte(void);
132: extern void Intercept_VectorReg_ReadByte(void);
133: extern void Intercept_TimerACtrl_ReadByte(void);
134: extern void Intercept_TimerBCtrl_ReadByte(void);
135: extern void Intercept_TimerCDCtrl_ReadByte(void);
136: extern void Intercept_TimerAData_ReadByte(void);
137: extern void Intercept_TimerBData_ReadByte(void);
138: extern void Intercept_TimerCData_ReadByte(void);
139: extern void Intercept_TimerDData_ReadByte(void);
140: extern void Intercept_KeyboardControl_ReadByte(void);
141: extern void Intercept_KeyboardData_ReadByte(void);
142: extern void Intercept_MidiControl_ReadByte(void);
143: extern void Intercept_MidiData_ReadByte(void);
144:
145: // Write intercept functions
146: extern void Intercept_VideoHigh_WriteByte(void);
147: extern void Intercept_VideoMed_WriteByte(void);
148: extern void Intercept_VideoLow_WriteByte(void);
149: extern void Intercept_VideoSync_WriteByte(void);
150: extern void Intercept_VideoBaseLow_WriteByte(void);
151: extern void Intercept_LineWidth_WriteByte(void);
152: extern void Intercept_Colour0_WriteWord(void);
153: extern void Intercept_Colour1_WriteWord(void);
154: extern void Intercept_Colour2_WriteWord(void);
155: extern void Intercept_Colour3_WriteWord(void);
156: extern void Intercept_Colour4_WriteWord(void);
157: extern void Intercept_Colour5_WriteWord(void);
158: extern void Intercept_Colour6_WriteWord(void);
159: extern void Intercept_Colour7_WriteWord(void);
160: extern void Intercept_Colour8_WriteWord(void);
161: extern void Intercept_Colour9_WriteWord(void);
162: extern void Intercept_Colour10_WriteWord(void);
163: extern void Intercept_Colour11_WriteWord(void);
164: extern void Intercept_Colour12_WriteWord(void);
165: extern void Intercept_Colour13_WriteWord(void);
166: extern void Intercept_Colour14_WriteWord(void);
167: extern void Intercept_Colour15_WriteWord(void);
168: extern void Intercept_ShifterMode_WriteByte(void);
169: extern void Intercept_DiskControl_WriteWord(void);
170: extern void Intercept_DmaStatus_WriteWord(void);
171: extern void Intercept_PSGRegister_WriteByte(void);
172: extern void Intercept_PSGData_WriteByte(void);
173: extern void Intercept_MicrowireData_WriteWord(void);
174: extern void Intercept_Monitor_WriteByte(void);
175: extern void Intercept_ActiveEdge_WriteByte(void);
176: extern void Intercept_DataDirection_WriteByte(void);
177: extern void Intercept_EnableA_WriteByte(void);
178: extern void Intercept_EnableB_WriteByte(void);
179: extern void Intercept_PendingA_WriteByte(void);
180: extern void Intercept_PendingB_WriteByte(void);
181: extern void Intercept_InServiceA_WriteByte(void);
182: extern void Intercept_InServiceB_WriteByte(void);
183: extern void Intercept_MaskA_WriteByte(void);
184: extern void Intercept_MaskB_WriteByte(void);
185: extern void Intercept_VectorReg_WriteByte(void);
186: extern void Intercept_TimerACtrl_WriteByte(void);
187: extern void Intercept_TimerBCtrl_WriteByte(void);
188: extern void Intercept_TimerCDCtrl_WriteByte(void);
189: extern void Intercept_TimerAData_WriteByte(void);
190: extern void Intercept_TimerBData_WriteByte(void);
191: extern void Intercept_TimerCData_WriteByte(void);
192: extern void Intercept_TimerDData_WriteByte(void);
193: extern void Intercept_KeyboardControl_WriteByte(void);
194: extern void Intercept_KeyboardData_WriteByte(void);
195: extern void Intercept_MidiControl_WriteByte(void);
196: extern void Intercept_MidiData_WriteByte(void);
197:
198: extern void Intercept_Init(void);
199: extern void Intercept_UnInit(void);
200: extern void Intercept_CreateTable(unsigned long *pInterceptTable[],int Span,int ReadWrite);
201: extern void Intercept_ModifyTablesForBusErrors(void);
202: extern void Intercept_ModifyTablesForNoMansLand(void);
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.