Mercurial > repos > blastem
comparison segacd.c @ 2129:4c9e447aa25b
Pause word RAM DMA while word RAM is switched to main CPU
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 13 Mar 2022 11:49:07 -0700 |
parents | b0dcf5c9f353 |
children | d90d92ce5cab |
comparison
equal
deleted
inserted
replaced
2128:b0dcf5c9f353 | 2129:4c9e447aa25b |
---|---|
918 dma_addr &= (1 << 17) - 1; | 918 dma_addr &= (1 << 17) - 1; |
919 cd->m68k->mem_pointers[1][dma_addr >> 1] = cd->gate_array[GA_CDC_HOST_DATA]; | 919 cd->m68k->mem_pointers[1][dma_addr >> 1] = cd->gate_array[GA_CDC_HOST_DATA]; |
920 m68k_invalidate_code_range(cd->m68k, 0x0C0000 + dma_addr - 1, 0x0C0000 + dma_addr + 1); | 920 m68k_invalidate_code_range(cd->m68k, 0x0C0000 + dma_addr - 1, 0x0C0000 + dma_addr + 1); |
921 } else { | 921 } else { |
922 //2M mode, check if Sub CPU has access | 922 //2M mode, check if Sub CPU has access |
923 if (!(cd->gate_array[GA_MEM_MODE] & BIT_RET)) { | 923 if (cd->main_has_word2m) { |
924 return 0; | |
925 } else { | |
924 cd_graphics_run(cd, cd->cdc.cycle); | 926 cd_graphics_run(cd, cd->cdc.cycle); |
925 dma_addr &= (1 << 18) - 1; | 927 dma_addr &= (1 << 18) - 1; |
926 cd->word_ram[dma_addr >> 1] = cd->gate_array[GA_CDC_HOST_DATA]; | 928 cd->word_ram[dma_addr >> 1] = cd->gate_array[GA_CDC_HOST_DATA]; |
927 m68k_invalidate_code_range(cd->m68k, 0x080000 + dma_addr, 0x080000 + dma_addr + 1); | 929 m68k_invalidate_code_range(cd->m68k, 0x080000 + dma_addr, 0x080000 + dma_addr + 1); |
928 } | 930 } |
1193 m68k->mem_pointers[cd->memptr_start_index + 1] = NULL; | 1195 m68k->mem_pointers[cd->memptr_start_index + 1] = NULL; |
1194 m68k->mem_pointers[cd->memptr_start_index + 2] = NULL; | 1196 m68k->mem_pointers[cd->memptr_start_index + 2] = NULL; |
1195 cd->m68k->mem_pointers[0] = cd->word_ram; | 1197 cd->m68k->mem_pointers[0] = cd->word_ram; |
1196 cd->gate_array[reg] &= ~BIT_RET; | 1198 cd->gate_array[reg] &= ~BIT_RET; |
1197 cd->main_has_word2m = 0; | 1199 cd->main_has_word2m = 0; |
1200 | |
1201 uint16_t dst = cd->gate_array[GA_CDC_CTRL] >> 8 & 0x7; | |
1202 if (dst == DST_WORD_RAM) { | |
1203 lc8951_resume_transfer(&cd->cdc, cd->cdc.cycle); | |
1204 } | |
1198 | 1205 |
1199 m68k_invalidate_code_range(m68k, cd->base + 0x200000, cd->base + 0x240000); | 1206 m68k_invalidate_code_range(m68k, cd->base + 0x200000, cd->base + 0x240000); |
1200 m68k_invalidate_code_range(cd->m68k, 0x080000, 0x0C0000); | 1207 m68k_invalidate_code_range(cd->m68k, 0x080000, 0x0C0000); |
1201 } | 1208 } |
1202 } | 1209 } |