Giter Site home page Giter Site logo

ultra-dma-queue's Introduction

flamewing's GitHub stats

Top Languages

ultra-dma-queue's People

Contributors

clownacy avatar flamewing avatar vladikcomper avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

ultra-dma-queue's Issues

Dropped DMAs, split DMAs

One issue with the DMA queue (which it shares with the original queues) is that it silently drops off DMAs if the queue is full. This leads to graphical corruptions due to misaligned art and sprite/plane maps.

Maybe I should add an option to generate hard errors (say, through a trap instruction) instead of dropping a DMA or DMA piece. This could be used in debug mode by hackers to see if they need to increase the size of the queue.

Something similar applies to split DMAs: there should be a flag for generating a hard-error when the need for splitting one DMA arises. This would allow hackers to easily find these cases, and align the problematic art appropriately.

Sonic3_Complete Queue

The DMA queue from the S&K disassembly has been improved by @Clownacy; as a result, it is a lot better than it was before. This causes the README.md file to present incorrect cycle counts and analysis of the function.

I need to cycle-count the new function and reanalyze the results.

A tiny speed&size optimization suggestion

I was reading through your source code, and the optimizations and tricks you used are beyond impressive.

However, this particular line in InitDMAQueue caught my attention:

move.b #$94,d0

Since it's used to fill in bytes in the loop below, as you know, this can be obviously optimized into:

	moveq	#$FFFFFF94,d0

Which saves 1 bus cycle and 2 bytes.

I know, this code is nothing critical and it's run only once, but seeing how tight your other optimizations are, I thought you might want to consider this one as well (because you actually unrolled the loop inside InitDMAQueue after all, even though wasting cycles here won't make any noticeable difference, since this is non-heavy initialization code, which is run once in a game's lifetime).

On the other hand, the optimization in question may slightly worsen the code readability. If this is the exact reason it wan't made, please ignore my suggestion.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.