trunk/src/mess/drivers/ng_aes.c
| r19373 | r19374 | |
| 54 | 54 | //UINT8* NeoTextROM; |
| 55 | 55 | UINT8* YM2610ADPCMAROM; |
| 56 | 56 | UINT8* NeoZ80ROMActive; |
| 57 | | UINT8 NeoSystem = 6; |
| 57 | |
| 58 | // was it actually released in eu / asia? |
| 59 | #define NEOCD_REGION_ASIA 3 // IronClad runs with a darkened screen (MVS has the same issue) |
| 60 | #define NEOCD_REGION_EUROPE 2 // ^ |
| 61 | #define NEOCD_REGION_US 1 |
| 62 | #define NEOCD_REGION_JAPAN 0 |
| 63 | |
| 64 | |
| 65 | UINT8 NeoSystem = NEOCD_REGION_JAPAN; |
| 58 | 66 | INT32 nNeoCDZ80ProgWriteWordCancelHack = 0; |
| 59 | 67 | |
| 60 | 68 | |
| r19373 | r19374 | |
| 63 | 71 | |
| 64 | 72 | |
| 65 | 73 | |
| 66 | | static void MapVectorTable(bool bMapBoardROM) |
| 67 | | { |
| 68 | | /* |
| 69 | | if (!bMapBoardROM && Neo68KROMActive) { |
| 70 | | SekMapMemory(Neo68KFix, 0x000000, 0x0003FF, SM_ROM); |
| 71 | | } else { |
| 72 | | SekMapMemory(NeoVectorActive, 0x000000, 0x0003FF, SM_ROM); |
| 73 | | } |
| 74 | | */ |
| 75 | | } |
| 76 | 74 | |
| 77 | 75 | |
| 78 | 76 | class ng_aes_state : public neogeo_state |
| r19373 | r19374 | |
| 99 | 97 | void set_DMA_regs(int offset, UINT16 wordValue); |
| 100 | 98 | |
| 101 | 99 | UINT8 *m_memcard_data; |
| 102 | | DECLARE_WRITE8_MEMBER(audio_cpu_clear_nmi_w); |
| 103 | | DECLARE_WRITE16_MEMBER(io_control_w); |
| 104 | 100 | DECLARE_WRITE16_MEMBER(save_ram_w); |
| 105 | 101 | DECLARE_READ16_MEMBER(memcard_r); |
| 106 | 102 | DECLARE_WRITE16_MEMBER(memcard_w); |
| 107 | 103 | DECLARE_READ16_MEMBER(neocd_memcard_r); |
| 108 | 104 | DECLARE_WRITE16_MEMBER(neocd_memcard_w); |
| 109 | | DECLARE_WRITE16_MEMBER(main_cpu_bank_select_w); |
| 110 | 105 | DECLARE_READ16_MEMBER(neocd_control_r); |
| 111 | 106 | DECLARE_WRITE16_MEMBER(neocd_control_w); |
| 112 | 107 | DECLARE_READ16_MEMBER(neocd_transfer_r); |
| r19373 | r19374 | |
| 124 | 119 | |
| 125 | 120 | // neoCD |
| 126 | 121 | |
| 127 | | UINT16 neogeoReadWordCDROM(UINT32 sekAddress); |
| 128 | | void neogeoWriteWordCDROM(UINT32 sekAddress, UINT16 wordValue); |
| 129 | 122 | UINT8 neogeoReadTransfer(UINT32 sekAddress, int is_byte_transfer); |
| 130 | 123 | void neogeoWriteTransfer(UINT32 sekAddress, UINT8 byteValue, int is_byte_transfer); |
| 131 | 124 | |
| r19373 | r19374 | |
| 197 | 190 | |
| 198 | 191 | |
| 199 | 192 | |
| 200 | | WRITE8_MEMBER(ng_aes_state::audio_cpu_clear_nmi_w) |
| 201 | | { |
| 202 | | m_audiocpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); |
| 203 | | } |
| 204 | 193 | |
| 205 | 194 | |
| 206 | 195 | |
| 207 | | /************************************* |
| 208 | | * |
| 209 | | * Input ports / Controllers |
| 210 | | * |
| 211 | | *************************************/ |
| 212 | 196 | |
| 213 | | static void select_controller( running_machine &machine, UINT8 data ) |
| 214 | | { |
| 215 | | neogeo_state *state = machine.driver_data<neogeo_state>(); |
| 216 | | state->m_controller_select = data; |
| 217 | | } |
| 218 | 197 | |
| 219 | 198 | |
| 220 | | WRITE16_MEMBER(ng_aes_state::io_control_w) |
| 221 | | { |
| 222 | | switch (offset) |
| 223 | | { |
| 224 | | case 0x00: select_controller(machine(), data & 0x00ff); break; |
| 225 | | // case 0x18: set_output_latch(machine(), data & 0x00ff); break; |
| 226 | | // case 0x20: set_output_data(machine(), data & 0x00ff); break; |
| 227 | | case 0x28: upd4990a_control_16_w(m_upd4990a, space, 0, data, mem_mask); break; |
| 228 | | // case 0x30: break; // coin counters |
| 229 | | // case 0x31: break; // coin counters |
| 230 | | // case 0x32: break; // coin lockout |
| 231 | | // case 0x33: break; // coui lockout |
| 232 | | |
| 233 | | default: |
| 234 | | logerror("PC: %x Unmapped I/O control write. Offset: %x Data: %x\n", space.device().safe_pc(), offset, data); |
| 235 | | break; |
| 236 | | } |
| 237 | | } |
| 238 | | |
| 239 | | |
| 240 | | static CUSTOM_INPUT( get_calendar_status ) |
| 241 | | { |
| 242 | | neogeo_state *state = field.machine().driver_data<neogeo_state>(); |
| 243 | | return (upd4990a_databit_r(state->m_upd4990a, state->generic_space(), 0) << 1) | upd4990a_testbit_r(state->m_upd4990a, state->generic_space(), 0); |
| 244 | | } |
| 245 | | |
| 246 | | |
| 247 | 199 | /************************************* |
| 248 | 200 | * |
| 249 | 201 | * Memory card |
| r19373 | r19374 | |
| 319 | 271 | } |
| 320 | 272 | } |
| 321 | 273 | |
| 322 | | /************************************* |
| 323 | | * |
| 324 | | * Main CPU banking |
| 325 | | * |
| 326 | | *************************************/ |
| 327 | 274 | |
| 328 | | WRITE16_MEMBER(ng_aes_state::main_cpu_bank_select_w) |
| 329 | | { |
| 330 | | UINT32 bank_address; |
| 331 | | UINT32 len = memregion("maincpu")->bytes(); |
| 332 | 275 | |
| 333 | | if ((len <= 0x100000) && (data & 0x07)) |
| 334 | | logerror("PC %06x: warning: bankswitch to %02x but no banks available\n", space.device().safe_pc(), data); |
| 335 | | else |
| 336 | | { |
| 337 | | bank_address = ((data & 0x07) + 1) * 0x100000; |
| 338 | 276 | |
| 339 | | if (bank_address >= len) |
| 340 | | { |
| 341 | | logerror("PC %06x: warning: bankswitch to empty bank %02x\n", space.device().safe_pc(), data); |
| 342 | | bank_address = 0x100000; |
| 343 | | } |
| 344 | 277 | |
| 345 | | neogeo_set_main_cpu_bank_address(space, bank_address); |
| 346 | | } |
| 347 | | } |
| 348 | 278 | |
| 349 | | |
| 350 | | static void main_cpu_banking_init( running_machine &machine ) |
| 351 | | { |
| 352 | | ng_aes_state *state = machine.driver_data<ng_aes_state>(); |
| 353 | | address_space &mainspace = machine.device("maincpu")->memory().space(AS_PROGRAM); |
| 354 | | |
| 355 | | /* create vector banks */ |
| 356 | | state->membank(NEOGEO_BANK_VECTORS)->configure_entry(0, machine.root_device().memregion("mainbios")->base()); |
| 357 | | state->membank(NEOGEO_BANK_VECTORS)->configure_entry(1, machine.root_device().memregion("maincpu")->base()); |
| 358 | | |
| 359 | | /* set initial main CPU bank */ |
| 360 | | if (machine.root_device().memregion("maincpu")->bytes() > 0x100000) |
| 361 | | neogeo_set_main_cpu_bank_address(mainspace, 0x100000); |
| 362 | | else |
| 363 | | neogeo_set_main_cpu_bank_address(mainspace, 0x000000); |
| 364 | | } |
| 365 | | |
| 366 | | |
| 367 | | |
| 368 | | |
| 369 | | |
| 370 | | |
| 371 | 279 | /************************************* |
| 372 | 280 | * |
| 373 | 281 | * System control register |
| r19373 | r19374 | |
| 450 | 358 | |
| 451 | 359 | |
| 452 | 360 | |
| 453 | | UINT16 ng_aes_state::neogeoReadWordCDROM(UINT32 sekAddress) |
| 454 | | { |
| 455 | | // bprintf(PRINT_NORMAL, _T(" - CDROM: 0x%06X read (word, PC: 0x%06X)\n"), sekAddress, SekGetPC(-1)); |
| 456 | 361 | |
| 457 | 362 | |
| 363 | |
| 364 | READ16_MEMBER(ng_aes_state::neocd_control_r) |
| 365 | { |
| 366 | UINT32 sekAddress = 0xff0000+ (offset*2); |
| 367 | |
| 458 | 368 | switch (sekAddress & 0xFFFF) { |
| 459 | 369 | |
| 460 | 370 | case 0x0016: |
| r19373 | r19374 | |
| 481 | 391 | } |
| 482 | 392 | |
| 483 | 393 | |
| 484 | | void ng_aes_state::neogeoWriteWordCDROM(UINT32 sekAddress, UINT16 wordValue) |
| 394 | WRITE16_MEMBER(ng_aes_state::neocd_control_w) |
| 485 | 395 | { |
| 396 | |
| 397 | UINT32 sekAddress = 0xff0000+ (offset*2); |
| 398 | UINT16 wordValue = data; |
| 399 | |
| 486 | 400 | // bprintf(PRINT_NORMAL, _T(" - NGCD port 0x%06X -> 0x%04X (PC: 0x%06X)\n"), sekAddress, wordValue, SekGetPC(-1)); |
| 487 | 401 | int byteValue = wordValue & 0xff; |
| 488 | 402 | |
| r19373 | r19374 | |
| 588 | 502 | |
| 589 | 503 | case 0x016c: |
| 590 | 504 | // bprintf(PRINT_ERROR, _T(" - NGCD port 0x%06X -> 0x%02X (PC: 0x%06X)\n"), sekAddress, byteValue, SekGetPC(-1)); |
| 505 | //MapVectorTable(!(byteValue == 0xFF)); |
| 506 | if (ACCESSING_BITS_0_7) |
| 507 | { |
| 508 | // even like this doubledr ends up mapping vectors in, then erasing them causing the loading to crash?? |
| 509 | // is there some way to enable write protection on the RAM vector area or is it some IRQ masking issue? |
| 510 | // the games still write to the normal address for this too? |
| 511 | // writes 00 / 01 / ff |
| 512 | printf("MapVectorTable? %04x %04x\n",data,mem_mask); |
| 591 | 513 | |
| 592 | | MapVectorTable(!(byteValue == 0xFF)); |
| 514 | if (!data) neogeo_set_main_cpu_vector_table_source(machine(), 0); // bios vectors |
| 515 | else neogeo_set_main_cpu_vector_table_source(machine(), 1); // ram (aka cart) vectors |
| 593 | 516 | |
| 517 | } |
| 518 | |
| 594 | 519 | //extern INT32 bRunPause; |
| 595 | 520 | //bRunPause = 1; |
| 596 | 521 | break; |
| r19373 | r19374 | |
| 634 | 559 | |
| 635 | 560 | |
| 636 | 561 | |
| 637 | | READ16_MEMBER(ng_aes_state::neocd_control_r) |
| 638 | | { |
| 639 | | return neogeoReadWordCDROM(0xff0000+ (offset*2)); |
| 640 | | } |
| 641 | 562 | |
| 642 | | |
| 643 | | WRITE16_MEMBER(ng_aes_state::neocd_control_w) |
| 644 | | { |
| 645 | | neogeoWriteWordCDROM(0xff0000+ (offset*2), data); |
| 646 | | } |
| 647 | | |
| 648 | | |
| 649 | | |
| 650 | | |
| 651 | 563 | /* |
| 652 | 564 | * Handling NeoCD banked RAM |
| 653 | 565 | * When the Z80 space is banked in to 0xe00000, only the low byte of each word is used |
| r19373 | r19374 | |
| 1160 | 1072 | state->membank(NEOGEO_BANK_BIOS)->set_base(state->memregion("mainbios")->base()); |
| 1161 | 1073 | |
| 1162 | 1074 | /* set the initial main CPU bank */ |
| 1163 | | main_cpu_banking_init(machine); |
| 1075 | neogeo_main_cpu_banking_init(machine); |
| 1164 | 1076 | |
| 1165 | 1077 | /* set the initial audio CPU ROM banks */ |
| 1166 | 1078 | neogeo_audio_cpu_banking_init(machine); |
| r19373 | r19374 | |
| 1215 | 1127 | |
| 1216 | 1128 | MACHINE_START_MEMBER(ng_aes_state,neocd) |
| 1217 | 1129 | { |
| 1218 | | UINT8* ROM = machine().root_device().memregion("mainbios")->base(); |
| 1219 | | UINT8* RAM = machine().root_device().memregion("maincpu")->base(); |
| 1130 | // UINT8* ROM = machine().root_device().memregion("mainbios")->base(); |
| 1131 | // UINT8* RAM = machine().root_device().memregion("maincpu")->base(); |
| 1220 | 1132 | // UINT8* Z80bios = machine().root_device().memregion("audiobios")->base(); |
| 1221 | 1133 | // int x; |
| 1222 | 1134 | m_has_audio_banking = false; |
| 1135 | m_is_cartsys = false; |
| 1223 | 1136 | |
| 1224 | 1137 | common_machine_start(machine()); |
| 1225 | 1138 | m_is_mvs = false; |
| r19373 | r19374 | |
| 1235 | 1148 | save_pointer(NAME(m_memcard_data), 0x2000); |
| 1236 | 1149 | |
| 1237 | 1150 | // copy initial 68k vectors into RAM |
| 1238 | | memcpy(RAM,ROM,0x80); |
| 1151 | // memcpy(RAM,ROM,0x80); |
| 1239 | 1152 | |
| 1240 | 1153 | |
| 1241 | 1154 | |
| r19373 | r19374 | |
| 1243 | 1156 | // for custom vectors |
| 1244 | 1157 | machine().device("maincpu")->execute().set_irq_acknowledge_callback(neocd_int_callback); |
| 1245 | 1158 | |
| 1159 | neogeo_set_main_cpu_vector_table_source(machine(), 0); // default to the BIOS vectors |
| 1160 | |
| 1246 | 1161 | m_tempcdc->reset_cd(); |
| 1247 | 1162 | |
| 1248 | 1163 | } |
| r19373 | r19374 | |
| 1339 | 1254 | |
| 1340 | 1255 | |
| 1341 | 1256 | |
| 1257 | |
| 1342 | 1258 | static ADDRESS_MAP_START( neocd_main_map, AS_PROGRAM, 16, ng_aes_state ) |
| 1343 | | AM_RANGE(0x000000, 0x00007f) AM_RAMBANK(NEOGEO_BANK_VECTORS) |
| 1344 | | AM_RANGE(0x000080, 0x1fffff) AM_RAM AM_SHARE("neocd_work_ram") |
| 1345 | | /* some games have protection devices in the 0x200000 region, it appears to map to cart space, not surprising, the ROM is read here too */ |
| 1346 | | AM_RANGE(0x200000, 0x2fffff) AM_ROMBANK(NEOGEO_BANK_CARTRIDGE) |
| 1347 | | AM_RANGE(0x2ffff0, 0x2fffff) AM_WRITE(main_cpu_bank_select_w) |
| 1259 | AM_RANGE(0x000000, 0x00007f) AM_READ_BANK(NEOGEO_BANK_VECTORS) // writes will fall through to area below |
| 1260 | AM_RANGE(0x000000, 0x1fffff) AM_RAM AM_REGION("maincpu", 0x00000) |
| 1261 | |
| 1348 | 1262 | AM_RANGE(0x300000, 0x300001) AM_MIRROR(0x01ff7e) AM_READ(aes_in0_r) |
| 1349 | 1263 | AM_RANGE(0x300080, 0x300081) AM_MIRROR(0x01ff7e) AM_READ_PORT("IN4") |
| 1350 | 1264 | AM_RANGE(0x300000, 0x300001) AM_MIRROR(0x01ffe0) AM_READ(neogeo_unmapped_r) AM_WRITENOP // AES has no watchdog |
| r19373 | r19374 | |
| 1424 | 1338 | AM_RANGE(0x0b, 0x0b) AM_MIRROR(0xfff0) AM_MASK(0xfff0) AM_READ(audio_cpu_bank_select_8000_bfff_r) |
| 1425 | 1339 | AM_RANGE(0x0c, 0x0c) AM_MIRROR(0xff00) AM_WRITE(audio_result_w) |
| 1426 | 1340 | AM_RANGE(0x18, 0x18) AM_MIRROR(0xff00) /* write - NMI disable? (the data written doesn't matter) */ |
| 1341 | |
| 1342 | // ?? |
| 1343 | AM_RANGE(0x80, 0x80) AM_MIRROR(0xff00) AM_WRITENOP |
| 1344 | AM_RANGE(0xc0, 0xc0) AM_MIRROR(0xff00) AM_WRITENOP |
| 1345 | AM_RANGE(0xc1, 0xc1) AM_MIRROR(0xff00) AM_WRITENOP |
| 1427 | 1346 | ADDRESS_MAP_END |
| 1428 | 1347 | |
| 1429 | 1348 | |
| r19373 | r19374 | |
| 1490 | 1409 | PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* having this ACTIVE_HIGH causes you to start with 2 credits using USA bios roms */ \ |
| 1491 | 1410 | PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* having this ACTIVE_HIGH causes you to start with 2 credits using USA bios roms */ \ |
| 1492 | 1411 | PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SPECIAL ) /* what is this? */ \ |
| 1493 | | PORT_BIT( 0x00c0, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(get_calendar_status, NULL) \ |
| 1412 | PORT_BIT( 0x00c0, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, neogeo_state,get_calendar_status, NULL) \ |
| 1494 | 1413 | PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, neogeo_state,get_audio_result, NULL) \ |
| 1495 | 1414 | |
| 1496 | 1415 | #define STANDARD_IN4 \ |
trunk/src/mame/drivers/neogeo.c
| r19373 | r19374 | |
| 420 | 420 | switch (offset) |
| 421 | 421 | { |
| 422 | 422 | case 0x00: select_controller(machine(), data & 0x00ff); break; |
| 423 | | case 0x18: set_output_latch(machine(), data & 0x00ff); break; |
| 424 | | case 0x20: set_output_data(machine(), data & 0x00ff); break; |
| 423 | case 0x18: if (m_is_mvs) set_output_latch(machine(), data & 0x00ff); break; |
| 424 | case 0x20: if (m_is_mvs) set_output_data(machine(), data & 0x00ff); break; |
| 425 | 425 | case 0x28: upd4990a_control_16_w(m_upd4990a, space, 0, data, mem_mask); break; |
| 426 | 426 | // case 0x30: break; // coin counters |
| 427 | 427 | // case 0x31: break; // coin counters |
| r19373 | r19374 | |
| 435 | 435 | } |
| 436 | 436 | |
| 437 | 437 | |
| 438 | | |
| 439 | 438 | /************************************* |
| 440 | 439 | * |
| 441 | 440 | * Unmapped memory access |
| r19373 | r19374 | |
| 477 | 476 | |
| 478 | 477 | |
| 479 | 478 | |
| 479 | |
| 480 | 480 | /************************************* |
| 481 | 481 | * |
| 482 | 482 | * NVRAM (Save RAM) |
| r19373 | r19374 | |
| 633 | 633 | |
| 634 | 634 | |
| 635 | 635 | |
| 636 | | static void set_main_cpu_vector_table_source( running_machine &machine, UINT8 data ) |
| 636 | void neogeo_set_main_cpu_vector_table_source( running_machine &machine, UINT8 data ) |
| 637 | 637 | { |
| 638 | 638 | neogeo_state *state = machine.driver_data<neogeo_state>(); |
| 639 | 639 | state->m_main_cpu_vector_table_source = data; |
| r19373 | r19374 | |
| 645 | 645 | static void _set_main_cpu_bank_address( running_machine &machine ) |
| 646 | 646 | { |
| 647 | 647 | neogeo_state *state = machine.driver_data<neogeo_state>(); |
| 648 | if (!state->m_is_cartsys) return; |
| 649 | |
| 648 | 650 | state->membank(NEOGEO_BANK_CARTRIDGE)->set_base(&state->memregion("maincpu")->base()[state->m_main_cpu_bank_address]); |
| 649 | 651 | } |
| 650 | 652 | |
| r19373 | r19374 | |
| 684 | 686 | } |
| 685 | 687 | |
| 686 | 688 | |
| 687 | | static void main_cpu_banking_init( running_machine &machine ) |
| 689 | |
| 690 | |
| 691 | void neogeo_main_cpu_banking_init( running_machine &machine ) |
| 688 | 692 | { |
| 693 | neogeo_state *state = machine.driver_data<neogeo_state>(); |
| 689 | 694 | address_space &mainspace = machine.device("maincpu")->memory().space(AS_PROGRAM); |
| 690 | 695 | |
| 691 | 696 | /* create vector banks */ |
| 692 | | machine.root_device().membank(NEOGEO_BANK_VECTORS)->configure_entry(0, machine.root_device().memregion("mainbios")->base()); |
| 693 | | machine.root_device().membank(NEOGEO_BANK_VECTORS)->configure_entry(1, machine.root_device().memregion("maincpu")->base()); |
| 697 | state->membank(NEOGEO_BANK_VECTORS)->configure_entry(0, machine.root_device().memregion("mainbios")->base()); |
| 698 | state->membank(NEOGEO_BANK_VECTORS)->configure_entry(1, machine.root_device().memregion("maincpu")->base()); |
| 699 | |
| 700 | if (state->m_is_cartsys) |
| 701 | { |
| 694 | 702 | |
| 695 | | /* set initial main CPU bank */ |
| 696 | | if (machine.root_device().memregion("maincpu")->bytes() > 0x100000) |
| 697 | | neogeo_set_main_cpu_bank_address(mainspace, 0x100000); |
| 698 | | else |
| 699 | | neogeo_set_main_cpu_bank_address(mainspace, 0x000000); |
| 703 | /* set initial main CPU bank */ |
| 704 | if (machine.root_device().memregion("maincpu")->bytes() > 0x100000) |
| 705 | neogeo_set_main_cpu_bank_address(mainspace, 0x100000); |
| 706 | else |
| 707 | neogeo_set_main_cpu_bank_address(mainspace, 0x000000); |
| 708 | } |
| 700 | 709 | } |
| 701 | 710 | |
| 702 | 711 | |
| 703 | | |
| 704 | 712 | /************************************* |
| 705 | 713 | * |
| 706 | 714 | * Audio CPU banking |
| r19373 | r19374 | |
| 865 | 873 | { |
| 866 | 874 | default: |
| 867 | 875 | case 0x00: neogeo_set_screen_dark(machine(), bit); break; |
| 868 | | case 0x01: set_main_cpu_vector_table_source(machine(), bit); |
| 869 | | set_audio_cpu_rom_source(space, bit); /* this is a guess */ |
| 870 | | break; |
| 876 | case 0x01: |
| 877 | if (m_is_cartsys) |
| 878 | { |
| 879 | neogeo_set_main_cpu_vector_table_source(machine(), bit); // NeoCD maps the vector swap elsewhere |
| 880 | } |
| 881 | else |
| 882 | { |
| 883 | #if 0 |
| 884 | if (bit) |
| 885 | { |
| 886 | if (m_main_cpu_vector_table_source) |
| 887 | neogeo_set_main_cpu_vector_table_source(machine(), 0); |
| 888 | else |
| 889 | neogeo_set_main_cpu_vector_table_source(machine(), 1); |
| 890 | } |
| 891 | #endif |
| 892 | printf("NeoCD: write to regular address? %d\n", bit); // what IS going on with "neocdz doubledr" and why do games write here if it's hooked up to nothing? |
| 893 | } |
| 894 | if (m_has_audio_banking) set_audio_cpu_rom_source(space, bit); /* this is a guess */ |
| 895 | break; |
| 871 | 896 | case 0x05: neogeo_set_fixed_layer_source(machine(), bit); break; |
| 872 | 897 | case 0x06: if (m_is_mvs) set_save_ram_unlock(machine(), bit); break; |
| 873 | 898 | case 0x07: neogeo_set_palette_bank(machine(), bit); break; |
| r19373 | r19374 | |
| 1020 | 1045 | membank(NEOGEO_BANK_BIOS)->set_base(memregion("mainbios")->base()); |
| 1021 | 1046 | |
| 1022 | 1047 | /* set the initial main CPU bank */ |
| 1023 | | main_cpu_banking_init(machine()); |
| 1048 | neogeo_main_cpu_banking_init(machine()); |
| 1024 | 1049 | |
| 1025 | 1050 | /* set the initial audio CPU ROM banks */ |
| 1026 | 1051 | neogeo_audio_cpu_banking_init(machine()); |