this repo has no description
1/*
2 SCRNHACK.h
3
4 Copyright (C) 2007 Paul C. Pratt
5
6 You can redistribute this file and/or modify it under the terms
7 of version 2 of the GNU General Public License as published by
8 the Free Software Foundation. You should have received a copy
9 of the license along with this file; see the file COPYING.
10
11 This file is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 license for more details.
15*/
16
17/*
18 SCReeN Hack
19
20 Patch ROM to support other screen sizes.
21*/
22
23
24#if CurEmMd <= kEmMd_128K
25 do_put_mem_long(112 + ROM, kVidMem_Base);
26 do_put_mem_long(260 + ROM, kVidMem_Base);
27 do_put_mem_long(292 + ROM, kVidMem_Base
28 + (((vMacScreenHeight / 4) * 2 + 9) * vMacScreenWidth
29 + (vMacScreenWidth / 2 - 24))
30 / 8);
31
32 /* sad mac, error code */
33 do_put_mem_word(330 + ROM, vMacScreenWidth / 8);
34 do_put_mem_word(342 + ROM, vMacScreenWidth / 8);
35 do_put_mem_word(350 + ROM, vMacScreenWidth / 4 * 3 - 1);
36 /* sad mac, blink pixels */
37 do_put_mem_word(358 + ROM, vMacScreenWidth - 4);
38
39 do_put_mem_word(456 + ROM,
40 (vMacScreenHeight * vMacScreenWidth / 32) - 1 + 32);
41
42 /* screen setup, main */
43 {
44 pto = 862 + ROM;
45 do_put_mem_word(pto, 0x4EB9); /* JSR */
46 pto += 2;
47 do_put_mem_long(pto, kROM_Base + (patchp - ROM));
48 pto += 4;
49
50 do_put_mem_word(patchp, 0x21FC); /* MOVE.L */
51 patchp += 2;
52 do_put_mem_long(patchp, kVidMem_Base); /* kVidMem_Base */
53 patchp += 4;
54 do_put_mem_word(patchp, 0x0824); /* (ScrnBase) */
55 patchp += 2;
56 do_put_mem_word(patchp, 0x4E75); /* RTS */
57 patchp += 2;
58 }
59 do_put_mem_word(892 + ROM, vMacScreenHeight - 1);
60 do_put_mem_word(894 + ROM, vMacScreenWidth - 1);
61
62 /* blink floppy, disk icon */
63 do_put_mem_long(1388 + ROM, kVidMem_Base
64 + (((vMacScreenHeight / 4) * 2 - 25) * vMacScreenWidth
65 + (vMacScreenWidth / 2 - 16))
66 / 8);
67 /* blink floppy, question mark */
68 do_put_mem_long(1406 + ROM, kVidMem_Base
69 + (((vMacScreenHeight / 4) * 2 - 10) * vMacScreenWidth
70 + (vMacScreenWidth / 2 - 8))
71 / 8);
72
73 /* blink floppy and sadmac, position */
74 do_put_mem_word(1966 + ROM, vMacScreenWidth / 8 - 4);
75 do_put_mem_word(1982 + ROM, vMacScreenWidth / 8);
76 /* sad mac, mac icon */
77 do_put_mem_long(2008 + ROM, kVidMem_Base
78 + (((vMacScreenHeight / 4) * 2 - 25) * vMacScreenWidth
79 + (vMacScreenWidth / 2 - 16))
80 / 8);
81 /* sad mac, frown */
82 do_put_mem_long(2020 + ROM, kVidMem_Base
83 + (((vMacScreenHeight / 4) * 2 - 19) * vMacScreenWidth
84 + (vMacScreenWidth / 2 - 8))
85 / 8);
86 do_put_mem_word(2052 + ROM, vMacScreenWidth / 8 - 2);
87
88 /* cursor handling */
89#if vMacScreenWidth >= 1024
90 pto = 3448 + ROM;
91 do_put_mem_word(pto, 0x4EB9); /* JSR */
92 pto += 2;
93 do_put_mem_long(pto, kROM_Base + (patchp - ROM));
94 pto += 4;
95
96 do_put_mem_word(patchp, 0x41F8); /* Lea.L (CrsrSave),A0 */
97 patchp += 2;
98 do_put_mem_word(patchp, 0x088C);
99 patchp += 2;
100 do_put_mem_word(patchp, 0x203C); /* MOVE.L #$x,D0 */
101 patchp += 2;
102 do_put_mem_long(patchp, (vMacScreenWidth / 8));
103 patchp += 4;
104 do_put_mem_word(patchp, 0x4E75); /* RTS */
105 patchp += 2;
106#else
107 do_put_mem_word(3452 + ROM, 0x7000 + (vMacScreenWidth / 8));
108#endif
109 do_put_mem_word(3572 + ROM, vMacScreenWidth - 32);
110 do_put_mem_word(3578 + ROM, vMacScreenWidth - 32);
111 do_put_mem_word(3610 + ROM, vMacScreenHeight - 16);
112 do_put_mem_word(3616 + ROM, vMacScreenHeight);
113#if vMacScreenWidth >= 1024
114 pto = 3646 + ROM;
115 do_put_mem_word(pto, 0x4EB9); /* JSR */
116 pto += 2;
117 do_put_mem_long(pto, kROM_Base + (patchp - ROM));
118 pto += 4;
119
120 do_put_mem_word(patchp, 0x2A3C); /* MOVE.L #$x,D5 */
121 patchp += 2;
122 do_put_mem_long(patchp, (vMacScreenWidth / 8));
123 patchp += 4;
124 do_put_mem_word(patchp, 0xC2C5); /* MulU D5,D1 */
125 patchp += 2;
126 do_put_mem_word(patchp, 0xD3C1); /* AddA.L D1,A1 */
127 patchp += 2;
128 do_put_mem_word(patchp, 0x4E75); /* RTS */
129 patchp += 2;
130#else
131 do_put_mem_word(3646 + ROM, 0x7A00 + (vMacScreenWidth / 8));
132#endif
133
134 /* set up screen bitmap */
135 do_put_mem_word(3832 + ROM, vMacScreenHeight);
136 do_put_mem_word(3838 + ROM, vMacScreenWidth);
137 /* do_put_mem_word(7810 + ROM, vMacScreenHeight); */
138
139#elif CurEmMd <= kEmMd_Plus
140
141 do_put_mem_long(138 + ROM, kVidMem_Base);
142 do_put_mem_long(326 + ROM, kVidMem_Base);
143 do_put_mem_long(356 + ROM, kVidMem_Base
144 + (((vMacScreenHeight / 4) * 2 + 9) * vMacScreenWidth
145 + (vMacScreenWidth / 2 - 24))
146 / 8);
147
148 /* sad mac, error code */
149 do_put_mem_word(392 + ROM, vMacScreenWidth / 8);
150 do_put_mem_word(404 + ROM, vMacScreenWidth / 8);
151 do_put_mem_word(412 + ROM, vMacScreenWidth / 4 * 3 - 1);
152 /* sad mac, blink pixels */
153 do_put_mem_long(420 + ROM, kVidMem_Base
154 + (((vMacScreenHeight / 4) * 2 + 17) * vMacScreenWidth
155 + (vMacScreenWidth / 2 - 8))
156 / 8);
157
158 do_put_mem_word(494 + ROM,
159 (vMacScreenHeight * vMacScreenWidth / 32) - 1);
160
161 /* screen setup, main */
162 {
163 pto = 1132 + ROM;
164 do_put_mem_word(pto, 0x4EB9); /* JSR */
165 pto += 2;
166 do_put_mem_long(pto, kROM_Base + (patchp - ROM));
167 pto += 4;
168
169 do_put_mem_word(patchp, 0x21FC); /* MOVE.L */
170 patchp += 2;
171 do_put_mem_long(patchp, kVidMem_Base); /* kVidMem_Base */
172 patchp += 4;
173 do_put_mem_word(patchp, 0x0824); /* (ScrnBase) */
174 patchp += 2;
175 do_put_mem_word(patchp, 0x4E75); /* RTS */
176 patchp += 2;
177 }
178 do_put_mem_word(1140 + ROM, vMacScreenWidth / 8);
179 do_put_mem_word(1172 + ROM, vMacScreenHeight);
180 do_put_mem_word(1176 + ROM, vMacScreenWidth);
181
182 /* blink floppy, disk icon */
183 do_put_mem_long(2016 + ROM, kVidMem_Base
184 + (((vMacScreenHeight / 4) * 2 - 25) * vMacScreenWidth
185 + (vMacScreenWidth / 2 - 16))
186 / 8);
187 /* blink floppy, question mark */
188 do_put_mem_long(2034 + ROM, kVidMem_Base
189 + (((vMacScreenHeight / 4) * 2 - 10) * vMacScreenWidth
190 + (vMacScreenWidth / 2 - 8))
191 / 8);
192
193 do_put_mem_word(2574 + ROM, vMacScreenHeight);
194 do_put_mem_word(2576 + ROM, vMacScreenWidth);
195
196 /* blink floppy and sadmac, position */
197 do_put_mem_word(3810 + ROM, vMacScreenWidth / 8 - 4);
198 do_put_mem_word(3826 + ROM, vMacScreenWidth / 8);
199 /* sad mac, mac icon */
200 do_put_mem_long(3852 + ROM, kVidMem_Base
201 + (((vMacScreenHeight / 4) * 2 - 25) * vMacScreenWidth
202 + (vMacScreenWidth / 2 - 16))
203 / 8);
204 /* sad mac, frown */
205 do_put_mem_long(3864 + ROM, kVidMem_Base
206 + (((vMacScreenHeight / 4) * 2 - 19) * vMacScreenWidth
207 + (vMacScreenWidth / 2 - 8))
208 / 8);
209 do_put_mem_word(3894 + ROM, vMacScreenWidth / 8 - 2);
210
211 /* cursor handling */
212#if vMacScreenWidth >= 1024
213 pto = 7372 + ROM;
214 do_put_mem_word(pto, 0x4EB9); /* JSR */
215 pto += 2;
216 do_put_mem_long(pto, kROM_Base + (patchp - ROM));
217 pto += 4;
218
219 do_put_mem_word(patchp, 0x41F8); /* Lea.L (CrsrSave), A0 */
220 patchp += 2;
221 do_put_mem_word(patchp, 0x088C);
222 patchp += 2;
223 do_put_mem_word(patchp, 0x203C); /* MOVE.L #$x, D0 */
224 patchp += 2;
225 do_put_mem_long(patchp, (vMacScreenWidth / 8));
226 patchp += 4;
227 do_put_mem_word(patchp, 0x4E75); /* RTS */
228 patchp += 2;
229#else
230 do_put_mem_word(7376 + ROM, 0x7000 + (vMacScreenWidth / 8));
231#endif
232 do_put_mem_word(7496 + ROM, vMacScreenWidth - 32);
233 do_put_mem_word(7502 + ROM, vMacScreenWidth - 32);
234 do_put_mem_word(7534 + ROM, vMacScreenHeight - 16);
235 do_put_mem_word(7540 + ROM, vMacScreenHeight);
236#if vMacScreenWidth >= 1024
237 pto = 7570 + ROM;
238 do_put_mem_word(pto, 0x4EB9); /* JSR */
239 pto += 2;
240 do_put_mem_long(pto, kROM_Base + (patchp - ROM));
241 pto += 4;
242
243 do_put_mem_word(patchp, 0x2A3C); /* MOVE.L #$x,D5 */
244 patchp += 2;
245 do_put_mem_long(patchp, (vMacScreenWidth / 8));
246 patchp += 4;
247 do_put_mem_word(patchp, 0xC2C5); /* MulU D5,D1 */
248 patchp += 2;
249 do_put_mem_word(patchp, 0xD3C1); /* AddA.L D1,A1 */
250 patchp += 2;
251 do_put_mem_word(patchp, 0x4E75); /* RTS */
252 patchp += 2;
253#else
254 do_put_mem_word(7570 + ROM, 0x7A00 + (vMacScreenWidth / 8));
255#endif
256
257 /* set up screen bitmap */
258 do_put_mem_word(7784 + ROM, vMacScreenHeight);
259 do_put_mem_word(7790 + ROM, vMacScreenWidth);
260 do_put_mem_word(7810 + ROM, vMacScreenHeight);
261
262#if 0
263 /*
264 Haven't got these working. Alert outlines ok, but
265 not contents. Perhaps global position of contents
266 stored in system resource file.
267 */
268
269 /* perhaps switch disk alert */
270 do_put_mem_word(10936 + ROM, vMacScreenHeight / 2 - 91);
271 do_put_mem_word(10938 + ROM, vMacScreenWidth / 2 - 136);
272 do_put_mem_word(10944 + ROM, vMacScreenHeight / 2 - 19);
273 do_put_mem_word(10946 + ROM, vMacScreenWidth / 2 + 149);
274
275 do_put_mem_word(11008 + ROM, ?);
276 do_put_mem_word(11010 + ROM, ?);
277
278 /* DSAlertRect */
279 do_put_mem_word(4952 + ROM, vMacScreenHeight / 2 - 107);
280 do_put_mem_word(4954 + ROM, vMacScreenWidth / 2 - 236);
281 do_put_mem_word(4958 + ROM, vMacScreenHeight / 2 + 19);
282 do_put_mem_word(4960 + ROM, vMacScreenWidth / 2 + 236);
283
284 do_put_mem_word(5212 + ROM, vMacScreenHeight / 2 - 101);
285 do_put_mem_word(5214 + ROM, vMacScreenWidth / 2 - 218);
286#endif
287
288#elif CurEmMd <= kEmMd_Classic
289
290 /* screen setup, main */
291 {
292 pto = 1482 + ROM;
293 do_put_mem_word(pto, 0x4EB9); /* JSR */
294 pto += 2;
295 do_put_mem_long(pto, kROM_Base + (patchp - ROM));
296 pto += 4;
297
298 do_put_mem_word(patchp, 0x21FC); /* MOVE.L */
299 patchp += 2;
300 do_put_mem_long(patchp, kVidMem_Base); /* kVidMem_Base */
301 patchp += 4;
302 do_put_mem_word(patchp, 0x0824); /* (ScrnBase) */
303 patchp += 2;
304 do_put_mem_word(patchp, 0x4E75); /* RTS */
305 patchp += 2;
306 }
307 do_put_mem_word(1490 + ROM, vMacScreenWidth / 8);
308 do_put_mem_word(1546 + ROM, vMacScreenHeight);
309 do_put_mem_word(1550 + ROM, vMacScreenWidth);
310
311 do_put_mem_word(2252 + ROM, vMacScreenHeight);
312 do_put_mem_word(2254 + ROM, vMacScreenWidth);
313
314 /* blink floppy, disk icon */
315 do_put_mem_long(3916 + ROM, kVidMem_Base
316 + (((vMacScreenHeight / 4) * 2 - 25) * vMacScreenWidth
317 + (vMacScreenWidth / 2 - 16))
318 / 8);
319 /* blink floppy, question mark */
320 do_put_mem_long(3934 + ROM, kVidMem_Base
321 + (((vMacScreenHeight / 4) * 2 - 10) * vMacScreenWidth
322 + (vMacScreenWidth / 2 - 8))
323 / 8);
324
325 do_put_mem_long(4258 + ROM, kVidMem_Base);
326 do_put_mem_word(4264 + ROM, vMacScreenHeight);
327 do_put_mem_word(4268 + ROM, vMacScreenWidth);
328 do_put_mem_word(4272 + ROM, vMacScreenWidth / 8);
329 do_put_mem_long(4276 + ROM, vMacScreenNumBytes);
330
331 /* sad mac, mac icon */
332 do_put_mem_long(4490 + ROM, kVidMem_Base
333 + (((vMacScreenHeight / 4) * 2 - 25) * vMacScreenWidth
334 + (vMacScreenWidth / 2 - 16))
335 / 8);
336 /* sad mac, frown */
337 do_put_mem_long(4504 + ROM, kVidMem_Base
338 + (((vMacScreenHeight / 4) * 2 - 19) * vMacScreenWidth
339 + (vMacScreenWidth / 2 - 8))
340 / 8);
341 do_put_mem_word(4528 + ROM, vMacScreenWidth / 8);
342 /* blink floppy and sadmac, position */
343 do_put_mem_word(4568 + ROM, vMacScreenWidth / 8);
344 do_put_mem_word(4586 + ROM, vMacScreenWidth / 8);
345
346 /* cursor handling */
347#if vMacScreenWidth >= 1024
348 pto = 101886 + ROM;
349 do_put_mem_word(pto, 0x4EB9); /* JSR */
350 pto += 2;
351 do_put_mem_long(pto, kROM_Base + (patchp - ROM));
352 pto += 4;
353
354 do_put_mem_word(patchp, 0x41F8); /* Lea.L (CrsrSave),A0 */
355 patchp += 2;
356 do_put_mem_word(patchp, 0x088C);
357 patchp += 2;
358 do_put_mem_word(patchp, 0x203C); /* MOVE.L #$x,D0 */
359 patchp += 2;
360 do_put_mem_long(patchp, (vMacScreenWidth / 8));
361 patchp += 4;
362 do_put_mem_word(patchp, 0x4E75); /* RTS */
363 patchp += 2;
364#else
365 do_put_mem_word(101890 + ROM, 0x7000 + (vMacScreenWidth / 8));
366#endif
367 do_put_mem_word(102010 + ROM, vMacScreenWidth - 32);
368 do_put_mem_word(102016 + ROM, vMacScreenWidth - 32);
369 do_put_mem_word(102048 + ROM, vMacScreenHeight - 16);
370 do_put_mem_word(102054 + ROM, vMacScreenHeight);
371#if vMacScreenWidth >= 1024
372 pto = 102084 + ROM;
373 do_put_mem_word(pto, 0x4EB9); /* JSR */
374 pto += 2;
375 do_put_mem_long(pto, kROM_Base + (patchp - ROM));
376 pto += 4;
377
378 do_put_mem_word(patchp, 0x2A3C); /* MOVE.L #$x, D5 */
379 patchp += 2;
380 do_put_mem_long(patchp, (vMacScreenWidth / 8));
381 patchp += 4;
382 do_put_mem_word(patchp, 0xC2C5); /* MulU D5, D1 */
383 patchp += 2;
384 do_put_mem_word(patchp, 0xD3C1); /* AddA.L D1, A1 */
385 patchp += 2;
386 do_put_mem_word(patchp, 0x4E75); /* RTS */
387 patchp += 2;
388#else
389 do_put_mem_word(102084 + ROM, 0x7A00 + (vMacScreenWidth / 8));
390#endif
391
392 /* set up screen bitmap */
393 do_put_mem_word(102298 + ROM, vMacScreenHeight);
394 do_put_mem_word(102304 + ROM, vMacScreenWidth);
395 do_put_mem_word(102324 + ROM, vMacScreenHeight);
396
397#endif