Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
blog:commodore_c65_dtv_programming [2023/01/25 16:18] – john | blog:commodore_c65_dtv_programming [2023/01/25 17:21] (current) – [Extended DTV Functions] john | ||
---|---|---|---|
Line 479: | Line 479: | ||
I've seemingly found a bug which manifests when making sequential DMA calls in a tight loop and the transfer length is 182 bytes or greater. | I've seemingly found a bug which manifests when making sequential DMA calls in a tight loop and the transfer length is 182 bytes or greater. | ||
+ | |||
+ | You can successfully DMA copy quite a large region in a single operation and there are no side-effects, | ||
+ | |||
+ | {{: | ||
+ | |||
+ | The colour bars in the image should be continuous for the entire screen width, but they glitch at two points. | ||
+ | The above example was generated by the following pseudocode: | ||
+ | |||
+ | < | ||
+ | screen = FRAMEBUFFER_LOCATION; | ||
+ | for (line = 0; line < SCREEN_HEIGHT; | ||
+ | memset(line_buffer, | ||
+ | dtv_DMA(& | ||
+ | colour++; | ||
+ | screen += SCREEN_WIDTH; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | If you reduce the transfer size to 181 bytes you do not get the glitching, and if you have a // | ||
---- | ---- | ||
Line 577: | Line 596: | ||
{{: | {{: | ||
+ | |||
+ | Notice that the transparent (aka //black//) pixels in the source region are preserved when copying to the destination, | ||
== Bugs == | == Bugs == |