comparison segacd.c @ 2500:d44fe974fb85

Get blastem compiling with new 68K core
author Michael Pavone <pavone@retrodev.com>
date Tue, 30 Apr 2024 22:32:08 -0700
parents d74d3998482c
children 0775f5e0c468
comparison
equal deleted inserted replaced
2499:d74d3998482c 2500:d44fe974fb85
447 static uint16_t cart_area_read16(uint32_t address, void *vcontext) 447 static uint16_t cart_area_read16(uint32_t address, void *vcontext)
448 { 448 {
449 m68k_context *m68k = vcontext; 449 m68k_context *m68k = vcontext;
450 genesis_context *gen = m68k->system; 450 genesis_context *gen = m68k->system;
451 segacd_context *cd = gen->expansion; 451 segacd_context *cd = gen->expansion;
452 #ifdef NEW_CORE
453 uint16_t open_bus = m68k->prefetch;
454 #else
452 uint16_t open_bus = read_word(m68k->last_prefetch_address, (void **)m68k->mem_pointers, &m68k->opts->gen, m68k); 455 uint16_t open_bus = read_word(m68k->last_prefetch_address, (void **)m68k->mem_pointers, &m68k->opts->gen, m68k);
456 #endif
453 if (cd->bram_cart_id > 7) { 457 if (cd->bram_cart_id > 7) {
454 // No cart, just return open bus 458 // No cart, just return open bus
455 return open_bus; 459 return open_bus;
456 } 460 }
457 address &= 0x3FFFFF; 461 address &= 0x3FFFFF;
475 m68k_context *m68k = vcontext; 479 m68k_context *m68k = vcontext;
476 genesis_context *gen = m68k->system; 480 genesis_context *gen = m68k->system;
477 segacd_context *cd = gen->expansion; 481 segacd_context *cd = gen->expansion;
478 if (!(address & 1) || cd->bram_cart_id > 7) { 482 if (!(address & 1) || cd->bram_cart_id > 7) {
479 //open bus 483 //open bus
484 #ifdef NEW_CORE
485 return (address & 1) ? m68k->prefetch : m68k->prefetch >> 8;
486 #else
480 return read_byte(m68k->last_prefetch_address | (address & 1), (void **)m68k->mem_pointers, &m68k->opts->gen, m68k); 487 return read_byte(m68k->last_prefetch_address | (address & 1), (void **)m68k->mem_pointers, &m68k->opts->gen, m68k);
488 #endif
481 } 489 }
482 address &= 0x3FFFFF; 490 address &= 0x3FFFFF;
483 if (address < 0x200000) { 491 if (address < 0x200000) {
484 if (address < 0x100000) { 492 if (address < 0x100000) {
485 return cd->bram_cart_id; 493 return cd->bram_cart_id;
486 } 494 }
495 #ifdef NEW_CORE
496 return m68k->prefetch;
497 #else
487 return read_byte(m68k->last_prefetch_address | 1, (void **)m68k->mem_pointers, &m68k->opts->gen, m68k); 498 return read_byte(m68k->last_prefetch_address | 1, (void **)m68k->mem_pointers, &m68k->opts->gen, m68k);
499 #endif
488 } else { 500 } else {
489 address &= 0x1FFFFF; 501 address &= 0x1FFFFF;
490 uint32_t end = 0x2000 << (1 + cd->bram_cart_id); 502 uint32_t end = 0x2000 << (1 + cd->bram_cart_id);
491 if (address >= end) { 503 if (address >= end) {
504 #ifdef NEW_CORE
505 return m68k->prefetch;
506 #else
492 return read_byte(m68k->last_prefetch_address | 1, (void **)m68k->mem_pointers, &m68k->opts->gen, m68k); 507 return read_byte(m68k->last_prefetch_address | 1, (void **)m68k->mem_pointers, &m68k->opts->gen, m68k);
508 #endif
493 } 509 }
494 return cd->bram_cart[address >> 1]; 510 return cd->bram_cart[address >> 1];
495 } 511 }
496 } 512 }
497 513