Mercurial > repos > blastem
comparison segacd.c @ 2426:cde4ea2b4929
Clear DSR in certain gate array writes. Fixes issue in Penn & Teller's Smoke and Mirrors
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Thu, 25 Jan 2024 21:54:04 -0800 |
parents | 03e6ac327ba0 |
children | 8b948cf23557 |
comparison
equal
deleted
inserted
replaced
2425:794ba17f0716 | 2426:cde4ea2b4929 |
---|---|
854 } | 854 } |
855 calculate_target_cycle(m68k); | 855 calculate_target_cycle(m68k); |
856 } | 856 } |
857 cd->gate_array[GA_CDC_DMA_ADDR] = 0; | 857 cd->gate_array[GA_CDC_DMA_ADDR] = 0; |
858 cd->cdc_dst_low = 0; | 858 cd->cdc_dst_low = 0; |
859 //TODO: Confirm if DSR is cleared here on hardware | |
860 cd->gate_array[GA_CDC_CTRL] &= ~BIT_DSR; | |
859 break; | 861 break; |
860 } | 862 } |
861 case GA_CDC_REG_DATA: | 863 case GA_CDC_REG_DATA: |
862 cdd_run(cd, m68k->current_cycle); | 864 cdd_run(cd, m68k->current_cycle); |
863 printf("CDC write %X: %X @ %u\n", cd->cdc.ar, value, m68k->current_cycle); | 865 printf("CDC write %X: %X @ %u\n", cd->cdc.ar, value, m68k->current_cycle); |
866 if (cd->cdc.ar == 6) { | |
867 cd->cdc_dst_low = 0; | |
868 //TODO: Confirm if DSR is cleared here on hardware | |
869 cd->gate_array[GA_CDC_CTRL] &= ~BIT_DSR; | |
870 } | |
864 lc8951_reg_write(&cd->cdc, value); | 871 lc8951_reg_write(&cd->cdc, value); |
865 calculate_target_cycle(m68k); | 872 calculate_target_cycle(m68k); |
866 break; | 873 break; |
867 case GA_CDC_HOST_DATA: | 874 case GA_CDC_HOST_DATA: |
868 //writes to this register have the same side effects as reads | 875 //writes to this register have the same side effects as reads |
870 break; | 877 break; |
871 case GA_CDC_DMA_ADDR: | 878 case GA_CDC_DMA_ADDR: |
872 cdd_run(cd, m68k->current_cycle); | 879 cdd_run(cd, m68k->current_cycle); |
873 cd->gate_array[reg] = value; | 880 cd->gate_array[reg] = value; |
874 cd->cdc_dst_low = 0; | 881 cd->cdc_dst_low = 0; |
882 //TODO: Confirm if DSR is cleared here on hardware | |
883 cd->gate_array[GA_CDC_CTRL] &= ~BIT_DSR; | |
875 break; | 884 break; |
876 case GA_STOP_WATCH: | 885 case GA_STOP_WATCH: |
877 //docs say you should only write zero to reset | 886 //docs say you should only write zero to reset |
878 //mcd-verificator comments suggest any value will reset | 887 //mcd-verificator comments suggest any value will reset |
879 timers_run(cd, m68k->current_cycle); | 888 timers_run(cd, m68k->current_cycle); |