Mercurial > repos > blastem
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 |