|
|
1.1 ! root 1: #include "main.h" ! 2: #include "configuration.h" ! 3: #include "m68000.h" ! 4: #include "sysdeps.h" ! 5: #include "dimension.h" ! 6: #include "nd_mem.h" ! 7: #include "nd_devs.h" ! 8: #include "nd_rom.h" ! 9: ! 10: #if ENABLE_DIMENSION ! 11: ! 12: #define write_log printf ! 13: ! 14: /* --------- NEXTDIMENSION MEMORY ---------- */ ! 15: ! 16: /* NeXTdimension board memory */ ! 17: #define ND_RAM_START 0xF8000000 ! 18: #define ND_RAM_SIZE 0x04000000 ! 19: #define ND_RAM_MASK 0x03FFFFFF ! 20: ! 21: #define ND_VRAM_START 0xFE000000 ! 22: #define ND_VRAM_SIZE 0x00400000 ! 23: #define ND_VRAM_MASK 0x003FFFFF ! 24: ! 25: #define ND_EEPROM_START 0xFFFE0000 ! 26: #define ND_EEPROM_SIZE 0x00020000 ! 27: #define ND_EEPROM_MASK 0x0001FFFF ! 28: ! 29: /* RAM banks */ ! 30: #define ND_RAM_BANKSIZE 0x01000000 ! 31: #define ND_RAM_BANKMASK 0x03000000 ! 32: uae_u32 ND_RAM_bankmask0; ! 33: uae_u32 ND_RAM_bankmask1; ! 34: uae_u32 ND_RAM_bankmask2; ! 35: uae_u32 ND_RAM_bankmask3; ! 36: ! 37: Uint8 ND_ram[64*1024*1024]; ! 38: Uint32 ND_vram_off; ! 39: Uint8 ND_vram[4*1024*1024]; ! 40: Uint8 ND_rom[128*1024]; ! 41: ! 42: Uint8 ND_dmem[512]; ! 43: ! 44: /* NeXTdimension dither memory */ ! 45: #define ND_DMEM_START 0xFF000000 ! 46: #define ND_DMEM_SIZE 0x00000200 ! 47: #define ND_DMEM_MASK 0x000001FF ! 48: ! 49: /* NeXTdimension board devices */ ! 50: #define ND_IO_START 0xFF800000 ! 51: #define ND_IO_SIZE 0x00004000 ! 52: #define ND_IO_MASK 0x00003FFF ! 53: ! 54: /* NeXTdimension board RAMDAC */ ! 55: #define ND_RAMDAC_START 0xFF200000 ! 56: #define ND_RAMDAC_SIZE 0x00001000 ! 57: #define ND_RAMDAC_MASK 0x00000FFF ! 58: ! 59: /* NeXTdimension board data path */ ! 60: #define ND_DP_START 0xF0000000 ! 61: #define ND_DP_SIZE 0x00001000 ! 62: #define ND_DP_MASK 0x00000FFF ! 63: ! 64: /* NeXTdimension EEPROM access */ ! 65: #define ND_EEPROM2_STRT 0xFFF00000 ! 66: #define ND_EEPROM2_SIZE 0x00080000 ! 67: #define ND_EEPROM2_MASK 0x0007FFFC ! 68: ! 69: /* Memory banks */ ! 70: ! 71: nd_addrbank *nd_mem_banks[65536]; ! 72: ! 73: void nd_map_banks (nd_addrbank *bank, int start, int size) ! 74: { ! 75: int bnr; ! 76: ! 77: for (bnr = start; bnr < start + size; bnr++) ! 78: nd_put_mem_bank (bnr << 16, bank); ! 79: return; ! 80: } ! 81: ! 82: /* NeXTdimension RAM */ ! 83: static uae_u32 nd_ram_bank0_lget(uaecptr addr) ! 84: { ! 85: addr &= ND_RAM_bankmask0; ! 86: return do_get_mem_long(ND_ram + addr); ! 87: } ! 88: ! 89: static uae_u32 nd_ram_bank0_wget(uaecptr addr) ! 90: { ! 91: addr &= ND_RAM_bankmask0; ! 92: return do_get_mem_word(ND_ram + addr); ! 93: } ! 94: ! 95: static uae_u32 nd_ram_bank0_bget(uaecptr addr) ! 96: { ! 97: addr &= ND_RAM_bankmask0; ! 98: return ND_ram[addr]; ! 99: } ! 100: ! 101: static void nd_ram_bank0_lput(uaecptr addr, uae_u32 l) ! 102: { ! 103: addr &= ND_RAM_bankmask0; ! 104: do_put_mem_long(ND_ram + addr, l); ! 105: } ! 106: ! 107: static void nd_ram_bank0_wput(uaecptr addr, uae_u32 w) ! 108: { ! 109: addr &= ND_RAM_bankmask0; ! 110: do_put_mem_word(ND_ram + addr, w); ! 111: } ! 112: ! 113: static void nd_ram_bank0_bput(uaecptr addr, uae_u32 b) ! 114: { ! 115: addr &= ND_RAM_bankmask0; ! 116: ND_ram[addr] = b; ! 117: } ! 118: ! 119: static uae_u32 nd_ram_bank1_lget(uaecptr addr) ! 120: { ! 121: addr &= ND_RAM_bankmask1; ! 122: return do_get_mem_long(ND_ram + addr); ! 123: } ! 124: ! 125: static uae_u32 nd_ram_bank1_wget(uaecptr addr) ! 126: { ! 127: addr &= ND_RAM_bankmask1; ! 128: return do_get_mem_word(ND_ram + addr); ! 129: } ! 130: ! 131: static uae_u32 nd_ram_bank1_bget(uaecptr addr) ! 132: { ! 133: addr &= ND_RAM_bankmask1; ! 134: return ND_ram[addr]; ! 135: } ! 136: ! 137: static void nd_ram_bank1_lput(uaecptr addr, uae_u32 l) ! 138: { ! 139: addr &= ND_RAM_bankmask1; ! 140: do_put_mem_long(ND_ram + addr, l); ! 141: } ! 142: ! 143: static void nd_ram_bank1_wput(uaecptr addr, uae_u32 w) ! 144: { ! 145: addr &= ND_RAM_bankmask1; ! 146: do_put_mem_word(ND_ram + addr, w); ! 147: } ! 148: ! 149: static void nd_ram_bank1_bput(uaecptr addr, uae_u32 b) ! 150: { ! 151: addr &= ND_RAM_bankmask1; ! 152: ND_ram[addr] = b; ! 153: } ! 154: ! 155: static uae_u32 nd_ram_bank2_lget(uaecptr addr) ! 156: { ! 157: addr &= ND_RAM_bankmask2; ! 158: return do_get_mem_long(ND_ram + addr); ! 159: } ! 160: ! 161: static uae_u32 nd_ram_bank2_wget(uaecptr addr) ! 162: { ! 163: addr &= ND_RAM_bankmask2; ! 164: return do_get_mem_word(ND_ram + addr); ! 165: } ! 166: ! 167: static uae_u32 nd_ram_bank2_bget(uaecptr addr) ! 168: { ! 169: addr &= ND_RAM_bankmask2; ! 170: return ND_ram[addr]; ! 171: } ! 172: ! 173: static void nd_ram_bank2_lput(uaecptr addr, uae_u32 l) ! 174: { ! 175: addr &= ND_RAM_bankmask2; ! 176: do_put_mem_long(ND_ram + addr, l); ! 177: } ! 178: ! 179: static void nd_ram_bank2_wput(uaecptr addr, uae_u32 w) ! 180: { ! 181: addr &= ND_RAM_bankmask2; ! 182: do_put_mem_word(ND_ram + addr, w); ! 183: } ! 184: ! 185: static void nd_ram_bank2_bput(uaecptr addr, uae_u32 b) ! 186: { ! 187: addr &= ND_RAM_bankmask2; ! 188: ND_ram[addr] = b; ! 189: } ! 190: ! 191: static uae_u32 nd_ram_bank3_lget(uaecptr addr) ! 192: { ! 193: addr &= ND_RAM_bankmask3; ! 194: return do_get_mem_long(ND_ram + addr); ! 195: } ! 196: ! 197: static uae_u32 nd_ram_bank3_wget(uaecptr addr) ! 198: { ! 199: addr &= ND_RAM_bankmask3; ! 200: return do_get_mem_word(ND_ram + addr); ! 201: } ! 202: ! 203: static uae_u32 nd_ram_bank3_bget(uaecptr addr) ! 204: { ! 205: addr &= ND_RAM_bankmask3; ! 206: return ND_ram[addr]; ! 207: } ! 208: ! 209: static void nd_ram_bank3_lput(uaecptr addr, uae_u32 l) ! 210: { ! 211: addr &= ND_RAM_bankmask3; ! 212: do_put_mem_long(ND_ram + addr, l); ! 213: } ! 214: ! 215: static void nd_ram_bank3_wput(uaecptr addr, uae_u32 w) ! 216: { ! 217: addr &= ND_RAM_bankmask3; ! 218: do_put_mem_word(ND_ram + addr, w); ! 219: } ! 220: ! 221: static void nd_ram_bank3_bput(uaecptr addr, uae_u32 b) ! 222: { ! 223: addr &= ND_RAM_bankmask3; ! 224: ND_ram[addr] = b; ! 225: } ! 226: ! 227: static uae_u32 nd_ram_empty_lget(uaecptr addr) ! 228: { ! 229: write_log("[ND] empty memory bank lget at %08X\n",addr); ! 230: return 0; ! 231: } ! 232: ! 233: static uae_u32 nd_ram_empty_wget(uaecptr addr) ! 234: { ! 235: write_log("[ND] empty memory bank wget at %08X\n",addr); ! 236: return 0; ! 237: } ! 238: ! 239: static uae_u32 nd_ram_empty_bget(uaecptr addr) ! 240: { ! 241: write_log("[ND] empty memory bank bget at %08X\n",addr); ! 242: return 0; ! 243: } ! 244: ! 245: static void nd_ram_empty_lput(uaecptr addr, uae_u32 l) ! 246: { ! 247: write_log("[ND] empty memory bank lput at %08X\n",addr); ! 248: } ! 249: ! 250: static void nd_ram_empty_wput(uaecptr addr, uae_u32 w) ! 251: { ! 252: write_log("[ND] empty memory bank wput at %08X\n",addr); ! 253: } ! 254: ! 255: static void nd_ram_empty_bput(uaecptr addr, uae_u32 b) ! 256: { ! 257: write_log("[ND] empty memory bank bput at %08X\n",addr); ! 258: } ! 259: ! 260: /* NeXTdimension VRAM */ ! 261: static uae_u32 nd_vram_lget(uaecptr addr) ! 262: { ! 263: addr &= ND_VRAM_MASK; ! 264: return do_get_mem_long(ND_vram + addr); ! 265: } ! 266: ! 267: static uae_u32 nd_vram_wget(uaecptr addr) ! 268: { ! 269: addr &= ND_VRAM_MASK; ! 270: return do_get_mem_word(ND_vram + addr); ! 271: } ! 272: ! 273: static uae_u32 nd_vram_bget(uaecptr addr) ! 274: { ! 275: addr &= ND_VRAM_MASK; ! 276: return ND_vram[addr]; ! 277: } ! 278: ! 279: static void nd_vram_lput(uaecptr addr, uae_u32 l) ! 280: { ! 281: addr &= ND_VRAM_MASK; ! 282: do_put_mem_long(ND_vram + addr, l); ! 283: } ! 284: ! 285: static void nd_vram_wput(uaecptr addr, uae_u32 w) ! 286: { ! 287: addr &= ND_VRAM_MASK; ! 288: do_put_mem_word(ND_vram + addr, w); ! 289: } ! 290: ! 291: static void nd_vram_bput(uaecptr addr, uae_u32 b) ! 292: { ! 293: addr &= ND_VRAM_MASK; ! 294: ND_vram[addr] = b; ! 295: } ! 296: ! 297: /* NeXTdimension ROM */ ! 298: static uae_u32 nd_rom_lget(uaecptr addr) ! 299: { ! 300: addr &= ND_EEPROM_MASK; ! 301: addr |= 3; /* byte lane at msb */ ! 302: return (ND_rom[addr] << 24); ! 303: } ! 304: ! 305: static uae_u32 nd_rom_wget(uaecptr addr) ! 306: { ! 307: addr &= ND_EEPROM_MASK; ! 308: addr |= 3; /* byte lane at msb */ ! 309: return (ND_rom[addr] << 8); ! 310: } ! 311: ! 312: static uae_u32 nd_rom_bget(uaecptr addr) ! 313: { ! 314: addr &= ND_EEPROM_MASK; ! 315: addr |= 3; /* byte lane at msb */ ! 316: return ND_rom[addr]; ! 317: } ! 318: ! 319: static uae_u32 nd_rom_cs8get(uaecptr addr) ! 320: { ! 321: addr &= ND_EEPROM_MASK; ! 322: return ND_rom[addr]; ! 323: } ! 324: ! 325: /* Illegal access functions */ ! 326: ! 327: static uae_u32 nd_illegal_lget(uaecptr addr) ! 328: { ! 329: write_log("[ND] Illegal lget at %08X\n",addr); ! 330: return 0; ! 331: } ! 332: ! 333: static uae_u32 nd_illegal_wget(uaecptr addr) ! 334: { ! 335: write_log("[ND] Illegal wget at %08X\n",addr); ! 336: return 0; ! 337: } ! 338: ! 339: static uae_u32 nd_illegal_bget(uaecptr addr) ! 340: { ! 341: write_log("[ND] Illegal bget at %08X\n",addr); ! 342: return 0; ! 343: } ! 344: ! 345: static void nd_illegal_lput(uaecptr addr, uae_u32 l) ! 346: { ! 347: write_log("[ND] Illegal lput at %08X\n",addr); ! 348: } ! 349: ! 350: static void nd_illegal_wput(uaecptr addr, uae_u32 w) ! 351: { ! 352: write_log("[ND] Illegal wput at %08X\n",addr); ! 353: } ! 354: ! 355: static void nd_illegal_bput(uaecptr addr, uae_u32 b) ! 356: { ! 357: write_log("[ND] Illegal bput at %08X\n",addr); ! 358: } ! 359: ! 360: ! 361: ! 362: /* NeXTdimension ROM access */ ! 363: static uae_u32 nd_rom_access_bget(uaecptr addr) ! 364: { ! 365: addr &= ND_EEPROM2_MASK; ! 366: addr |= (addr>>17)&3; ! 367: addr &= ~(3<<17); ! 368: return nd_rom_read(addr); ! 369: } ! 370: ! 371: static void nd_rom_access_bput(uaecptr addr, uae_u32 b) ! 372: { ! 373: addr &= ND_EEPROM2_MASK; ! 374: addr |= (addr>>17)&3; ! 375: addr &= ~(3<<17); ! 376: nd_rom_write(addr, b); ! 377: } ! 378: ! 379: /* NeXTdimension dither memory & datapath */ ! 380: ! 381: static uae_u32 nd_dmem_lget(uaecptr addr) ! 382: { ! 383: addr &= ND_DP_MASK; ! 384: return addr < ND_DMEM_SIZE ? do_get_mem_long(ND_dmem + addr) : nd_dp_lget(addr); ! 385: } ! 386: ! 387: static uae_u32 nd_dmem_wget(uaecptr addr) ! 388: { ! 389: addr &= ND_DP_MASK; ! 390: return addr < ND_DMEM_SIZE ? do_get_mem_word(ND_dmem + addr) : nd_dp_lget(addr); ! 391: } ! 392: ! 393: static uae_u32 nd_dmem_bget(uaecptr addr) ! 394: { ! 395: addr &= ND_DP_MASK; ! 396: return addr < ND_DMEM_SIZE ? do_get_mem_byte(ND_dmem + addr) : nd_dp_lget(addr); ! 397: } ! 398: ! 399: static void nd_dmem_lput(uaecptr addr, uae_u32 l) ! 400: { ! 401: addr &= ND_DP_MASK; ! 402: if(addr < ND_DMEM_SIZE) ! 403: do_put_mem_long(ND_dmem + addr, l); ! 404: else ! 405: nd_dp_lput(addr, l); ! 406: } ! 407: ! 408: static void nd_dmem_wput(uaecptr addr, uae_u32 w) ! 409: { ! 410: addr &= ND_DP_MASK; ! 411: if(addr < ND_DMEM_SIZE) ! 412: do_put_mem_word(ND_dmem + addr, w); ! 413: else ! 414: nd_dp_lput(addr, w); ! 415: } ! 416: ! 417: static void nd_dmem_bput(uaecptr addr, uae_u32 b) ! 418: { ! 419: addr &= ND_DP_MASK; ! 420: if(addr < ND_DMEM_SIZE) ! 421: do_put_mem_byte(ND_dmem + addr, b); ! 422: else ! 423: nd_dp_lput(addr, b); ! 424: } ! 425: ! 426: static nd_addrbank nd_ram_bank0 = ! 427: { ! 428: nd_ram_bank0_lget, nd_ram_bank0_wget, nd_ram_bank0_bget, ! 429: nd_ram_bank0_lput, nd_ram_bank0_wput, nd_ram_bank0_bput, ! 430: nd_ram_bank0_bget ! 431: }; ! 432: ! 433: static nd_addrbank nd_ram_bank1 = ! 434: { ! 435: nd_ram_bank1_lget, nd_ram_bank1_wget, nd_ram_bank1_bget, ! 436: nd_ram_bank1_lput, nd_ram_bank1_wput, nd_ram_bank1_bput, ! 437: nd_ram_bank1_bget ! 438: }; ! 439: ! 440: static nd_addrbank nd_ram_bank2 = ! 441: { ! 442: nd_ram_bank2_lget, nd_ram_bank2_wget, nd_ram_bank2_bget, ! 443: nd_ram_bank2_lput, nd_ram_bank2_wput, nd_ram_bank2_bput, ! 444: nd_ram_bank2_bget ! 445: }; ! 446: ! 447: static nd_addrbank nd_ram_bank3 = ! 448: { ! 449: nd_ram_bank3_lget, nd_ram_bank3_wget, nd_ram_bank3_bget, ! 450: nd_ram_bank3_lput, nd_ram_bank3_wput, nd_ram_bank3_bput, ! 451: nd_ram_bank3_bget ! 452: }; ! 453: ! 454: static nd_addrbank nd_ram_empty = ! 455: { ! 456: nd_ram_empty_lget, nd_ram_empty_wget, nd_ram_empty_bget, ! 457: nd_ram_empty_lput, nd_ram_empty_wput, nd_ram_empty_bput, ! 458: nd_ram_empty_bget ! 459: }; ! 460: ! 461: static nd_addrbank nd_vram_bank = ! 462: { ! 463: nd_vram_lget, nd_vram_wget, nd_vram_bget, ! 464: nd_vram_lput, nd_vram_wput, nd_vram_bput, ! 465: nd_vram_bget ! 466: }; ! 467: ! 468: static nd_addrbank nd_rom_bank = ! 469: { ! 470: nd_rom_lget, nd_rom_wget, nd_rom_bget, ! 471: nd_illegal_lput, nd_illegal_wput, nd_illegal_bput, ! 472: nd_rom_cs8get ! 473: ! 474: }; ! 475: ! 476: static nd_addrbank nd_rom_access_bank = ! 477: { ! 478: nd_illegal_lget, nd_illegal_wget, nd_rom_access_bget, ! 479: nd_illegal_lput, nd_illegal_wput, nd_rom_access_bput, ! 480: nd_illegal_bget ! 481: }; ! 482: ! 483: static nd_addrbank nd_dmem_bank = ! 484: { ! 485: nd_dmem_lget, nd_dmem_wget, nd_dmem_bget, ! 486: nd_dmem_lput, nd_dmem_wput, nd_dmem_bput, ! 487: nd_dmem_bget ! 488: }; ! 489: ! 490: static nd_addrbank nd_io_bank = ! 491: { ! 492: nd_io_lget, nd_io_wget, nd_io_bget, ! 493: nd_io_lput, nd_io_wput, nd_io_bput, ! 494: nd_io_bget ! 495: }; ! 496: ! 497: static nd_addrbank nd_ramdac_bank = ! 498: { ! 499: nd_ramdac_bget, nd_ramdac_bget, nd_ramdac_bget, ! 500: nd_ramdac_bput, nd_ramdac_bput, nd_ramdac_bput, ! 501: nd_ramdac_bget ! 502: }; ! 503: ! 504: static nd_addrbank nd_illegal_bank = ! 505: { ! 506: nd_illegal_lget, nd_illegal_wget, nd_illegal_bget, ! 507: nd_illegal_lput, nd_illegal_wput, nd_illegal_bput, ! 508: nd_illegal_bget ! 509: }; ! 510: ! 511: static void nd_init_mem_banks (void) ! 512: { ! 513: int i; ! 514: for (i = 0; i < 65536; i++) ! 515: nd_put_mem_bank (i<<16, &nd_illegal_bank); ! 516: } ! 517: ! 518: void nd_memory_init(void) { ! 519: ! 520: write_log("[ND] Memory init: Memory size: %iMB\n", ! 521: Configuration_CheckDimensionMemory(ConfigureParams.Dimension.nMemoryBankSize)); ! 522: ! 523: /* Initialize banks with error memory */ ! 524: nd_init_mem_banks(); ! 525: ! 526: /* Map main memory */ ! 527: if (ConfigureParams.Dimension.nMemoryBankSize[0]) { ! 528: ND_RAM_bankmask0 = ND_RAM_BANKMASK|((ConfigureParams.Dimension.nMemoryBankSize[0]<<20)-1); ! 529: nd_map_banks(&nd_ram_bank0, (ND_RAM_START+(0*ND_RAM_BANKSIZE))>>16, ND_RAM_BANKSIZE >> 16); ! 530: write_log("[ND] Mapping main memory bank0 at $%08x: %iMB\n", ! 531: (ND_RAM_START+(0*ND_RAM_BANKSIZE)), ConfigureParams.Dimension.nMemoryBankSize[0]); ! 532: } else { ! 533: ND_RAM_bankmask0 = 0; ! 534: nd_map_banks(&nd_ram_empty, (ND_RAM_START+(0*ND_RAM_BANKSIZE))>>16, ND_RAM_BANKSIZE >> 16); ! 535: write_log("[ND] Mapping main memory bank0 at $%08x: empty\n", (ND_RAM_START+(0*ND_RAM_BANKSIZE))); ! 536: } ! 537: if (ConfigureParams.Dimension.nMemoryBankSize[1]) { ! 538: ND_RAM_bankmask1 = ND_RAM_BANKMASK|((ConfigureParams.Dimension.nMemoryBankSize[1]<<20)-1); ! 539: nd_map_banks(&nd_ram_bank1, (ND_RAM_START+(1*ND_RAM_BANKSIZE))>>16, ND_RAM_BANKSIZE >> 16); ! 540: write_log("[ND] Mapping main memory bank1 at $%08x: %iMB\n", ! 541: (ND_RAM_START+(1*ND_RAM_BANKSIZE)), ConfigureParams.Dimension.nMemoryBankSize[1]); ! 542: } else { ! 543: ND_RAM_bankmask1 = 0; ! 544: nd_map_banks(&nd_ram_empty, (ND_RAM_START+(1*ND_RAM_BANKSIZE))>>16, ND_RAM_BANKSIZE >> 16); ! 545: write_log("[ND] Mapping main memory bank1 at $%08x: empty\n", (ND_RAM_START+(1*ND_RAM_BANKSIZE))); ! 546: } ! 547: if (ConfigureParams.Dimension.nMemoryBankSize[2]) { ! 548: ND_RAM_bankmask2 = ND_RAM_BANKMASK|((ConfigureParams.Dimension.nMemoryBankSize[2]<<20)-1); ! 549: nd_map_banks(&nd_ram_bank2, (ND_RAM_START+(2*ND_RAM_BANKSIZE))>>16, ND_RAM_BANKSIZE >> 16); ! 550: write_log("[ND] Mapping main memory bank2 at $%08x: %iMB\n", ! 551: (ND_RAM_START+(2*ND_RAM_BANKSIZE)), ConfigureParams.Dimension.nMemoryBankSize[2]); ! 552: } else { ! 553: ND_RAM_bankmask2 = 0; ! 554: nd_map_banks(&nd_ram_empty, (ND_RAM_START+(2*ND_RAM_BANKSIZE))>>16, ND_RAM_BANKSIZE >> 16); ! 555: write_log("[ND] Mapping main memory bank2 at $%08x: empty\n", (ND_RAM_START+(2*ND_RAM_BANKSIZE))); ! 556: } ! 557: if (ConfigureParams.Dimension.nMemoryBankSize[3]) { ! 558: ND_RAM_bankmask3 = ND_RAM_BANKMASK|((ConfigureParams.Dimension.nMemoryBankSize[3]<<20)-1); ! 559: nd_map_banks(&nd_ram_bank3, (ND_RAM_START+(3*ND_RAM_BANKSIZE))>>16, ND_RAM_BANKSIZE >> 16); ! 560: write_log("[ND] Mapping main memory bank3 at $%08x: %iMB\n", ! 561: (ND_RAM_START+(3*ND_RAM_BANKSIZE)), ConfigureParams.Dimension.nMemoryBankSize[3]); ! 562: } else { ! 563: ND_RAM_bankmask3 = 0; ! 564: nd_map_banks(&nd_ram_empty, (ND_RAM_START+(3*ND_RAM_BANKSIZE))>>16, ND_RAM_BANKSIZE >> 16); ! 565: write_log("[ND] Mapping main memory bank3 at $%08x: empty\n", (ND_RAM_START+(3*ND_RAM_BANKSIZE))); ! 566: } ! 567: ! 568: write_log("[ND] Mapping video memory at $%08x: %iMB\n", ND_VRAM_START, ND_VRAM_SIZE/(1024*1024)); ! 569: nd_map_banks(&nd_vram_bank, ND_VRAM_START>>16, (4*ND_VRAM_SIZE)>>16); ! 570: ND_vram_off = 0; ! 571: ! 572: write_log("[ND] Mapping ROM at $%08x: %ikB\n", ND_EEPROM_START, ND_EEPROM_SIZE/1024); ! 573: nd_map_banks(&nd_rom_bank, ND_EEPROM_START>>16, ND_EEPROM_SIZE>>16); ! 574: nd_map_banks(&nd_rom_access_bank, ND_EEPROM2_STRT>>16, ND_EEPROM2_SIZE>>16); ! 575: nd_rom_load(); ! 576: ! 577: write_log("[ND] Mapping dither memory and data path at $%08x: %ibyte\n", ND_DMEM_START, ND_DMEM_SIZE); ! 578: nd_map_banks(&nd_dmem_bank, ND_DMEM_START>>16, 1); ! 579: ! 580: write_log("[ND] Mapping IO memory at $%08x\n", ND_IO_START); ! 581: nd_map_banks(&nd_io_bank, ND_IO_START>>16, 1); ! 582: ! 583: write_log("[ND] Mapping RAMDAC registers at $%08x\n", ND_RAMDAC_START); ! 584: nd_map_banks(&nd_ramdac_bank, ND_RAMDAC_START>>16, 1); ! 585: } ! 586: ! 587: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.