Mercurial > repos > blastem
comparison vdp.c @ 1001:1dc749c9c0d9
Fix bug in SAT cache address calculation that caused a crash in Strider II
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 30 Apr 2016 20:57:29 -0700 |
parents | 1a797fcbb35f |
children | e34334e6c682 |
comparison
equal
deleted
inserted
replaced
1000:1a797fcbb35f | 1001:1dc749c9c0d9 |
---|---|
516 if (!dma_len) { | 516 if (!dma_len) { |
517 context->flags &= ~FLAG_DMA_RUN; | 517 context->flags &= ~FLAG_DMA_RUN; |
518 context->cd &= 0xF; | 518 context->cd &= 0xF; |
519 } | 519 } |
520 } | 520 } |
521 | 521 #include <assert.h> |
522 void write_vram_byte(vdp_context *context, uint16_t address, uint8_t value) | 522 void write_vram_byte(vdp_context *context, uint16_t address, uint8_t value) |
523 { | 523 { |
524 if (!(address & 4)) { | 524 if (!(address & 4)) { |
525 uint16_t sat_address = (context->regs[REG_SAT] & 0x7F) << 9; | 525 uint16_t sat_address = (context->regs[REG_SAT] & 0x7F) << 9; |
526 if(address >= sat_address && address <= sat_address + SAT_CACHE_SIZE*2) { | 526 if(address >= sat_address && address < (sat_address + SAT_CACHE_SIZE*2)) { |
527 context->sat_cache[(address & 3) | (address >> 1 & 0x1FC)] = value; | 527 uint16_t cache_address = address - sat_address; |
528 cache_address = (cache_address & 3) | (cache_address >> 1 & 0x1FC); | |
529 context->sat_cache[cache_address] = value; | |
528 } | 530 } |
529 } | 531 } |
530 context->vdpmem[address] = value; | 532 context->vdpmem[address] = value; |
531 } | 533 } |
532 | 534 |