this repo has no description
at main 397 lines 12 kB view raw
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