Mercurial > repos > blastem
comparison upd78k2_util.c @ 2734:6fff3906385c default tip
Fix handling of wraparound for timer comparison interrupts
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 18 Jul 2025 23:36:18 -0700 |
parents | 91a5949787a8 |
children |
comparison
equal
deleted
inserted
replaced
2733:d823e02fdae5 | 2734:6fff3906385c |
---|---|
36 uint32_t diff = (upd->cycles - upd->tm0_cycle) / upd->opts->gen.clock_divider; | 36 uint32_t diff = (upd->cycles - upd->tm0_cycle) / upd->opts->gen.clock_divider; |
37 upd->tm0_cycle += (diff & ~7) * upd->opts->gen.clock_divider; | 37 upd->tm0_cycle += (diff & ~7) * upd->opts->gen.clock_divider; |
38 diff >>= 3; | 38 diff >>= 3; |
39 if (upd->tmc0 & CE0) { | 39 if (upd->tmc0 & CE0) { |
40 uint32_t tmp = upd->tm0 + diff; | 40 uint32_t tmp = upd->tm0 + diff; |
41 uint32_t cr00 = upd->cr00 | (tmp > 0xFFFF ? 0x10000 : 0); | |
42 uint32_t cr01 = upd->cr01 | (tmp > 0xFFFF ? 0x10000 : 0); | |
41 //TODO: the rest of the CR00/CR01 stuff | 43 //TODO: the rest of the CR00/CR01 stuff |
42 if (upd->tm0 < upd->cr00 && tmp >= upd->cr00) { | 44 if (upd->tm0 < cr00 && tmp >= cr00) { |
43 upd->if0 |= CIF00; | 45 upd->if0 |= CIF00; |
44 } | 46 } |
45 if (upd->tm0 < upd->cr01 && tmp >= upd->cr01) { | 47 if (upd->tm0 < cr01 && tmp >= cr01) { |
46 upd->if0 |= CIF01; | 48 upd->if0 |= CIF01; |
47 if (upd->crc0 & 8) { | 49 if (upd->crc0 & 8) { |
48 //CR01 clear is enabled | 50 //CR01 clear is enabled |
49 if (upd->cr01) { | 51 if (upd->cr01) { |
50 while (tmp >= upd->cr01) { | 52 while (tmp >= upd->cr01) { |