Giter Club home page Giter Club logo

Comments (8)

sverx avatar sverx commented on September 2, 2024 1

I see your point. It's the way the SMS VDP works, unfortunately even setting a register (in your case, the horizontal scroll register) affects the destination address of VRAM operations (in your case, the address you write using the setTile call).
SMSlib doesn't address this problem at all, as any possible solution would be cumbersome so I suggest you some possible workaround scenarios:

  • make sure you do all your setTile calls before (or after) the horizontal interrupt happens
  • split the setTile calls in two parts so that you can perform the first part before the horizontal interrupt happens and the second part after that, making sure you set again the destination address before the second part of setTile calls
  • create your own atomic and uninterruptible setTile API that sets address and writes the data all before re-enabling interrupts (this is not the suggested way as it would slow down quite a bit and also keep your horizontal interrupt to be fired at the right line)

from devkitsms.

110-kenichi avatar 110-kenichi commented on September 2, 2024 1

Thank you.

I can agree your opinions.

from devkitsms.

sverx avatar sverx commented on September 2, 2024

Can you elaborate on this? What are the glitches you're getting?

from devkitsms.

110-kenichi avatar 110-kenichi commented on September 2, 2024

(1) main loop invokes setTile api repeatedly
(2) interrupt routine invokes SMS_setBGScrollX

→ setTile api failed. Because VRAM address is changed by SMS_setBGScrollX().

I could figure out the reason.

My application invoke DI before setTile to avoid interrupt.
But, the crt0 invokes EI instruction in the VDP APIs(see the below). So, I can't disable interrupt... ;-<

_SMS_crt0_RST08::
ld c, #0xBF ; set VDP Control Port
di ; make it interrupt SAFE
out (c),l
out (c),h
ei
ret

from devkitsms.

110-kenichi avatar 110-kenichi commented on September 2, 2024

It looks like we need an API like SMS_copySpritestoSAT() for all VDP instructions, just like sprite APIs.

from devkitsms.

110-kenichi avatar 110-kenichi commented on September 2, 2024

Strategy:

(1) VDP APIs just queue VDP Address and DATA.
(2) Commit all queue data in VBlanking by like CommitVDPData() API and so on.

from devkitsms.

110-kenichi avatar 110-kenichi commented on September 2, 2024

(2) Commit all queue data in VBlanking by like CommitVDPData() API and so on.

I've created "Queue" mechanism. It seems okay for my program. Thanks.

from devkitsms.

sverx avatar sverx commented on September 2, 2024

That's a good approach if you don't have to update too much data, as the vblank phase is anyway pretty short.
Good you found an appropriate workaround! 😄

from devkitsms.

Related Issues (20)

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.