Comments (8)
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.
Thank you.
I can agree your opinions.
from devkitsms.
Can you elaborate on this? What are the glitches you're getting?
from devkitsms.
(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.
It looks like we need an API like SMS_copySpritestoSAT() for all VDP instructions, just like sprite APIs.
from devkitsms.
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.
(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.
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)
- 32bits variables HOT 2
- Using PSGlib with banked code HOT 4
- Macros to save/restore the bank mapped to slot2? HOT 9
- Ability to install a vblank handler HOT 7
- Need clear vram on startup HOT 3
- SG-1000 ROMs on SC-3000 - Sega standard. HOT 59
- Adding examples to this repo HOT 6
- issue with compressed songs spawning multiple banks HOT 3
- New Unsafe and Vertical Orientation Functions HOT 17
- SG/SC -> SG_byte_brief_array_to_VDP_data HOT 1
- SMS_saveROMBank() implementation in SMSLib.h makes it only usable in the same scope as SMS_restoreBank() HOT 9
- PSGLib - Allow to set volume attenuation on SFX HOT 4
- crt0_sg.s incorrect initialization of I/O chip HOT 1
- SC-3000 Cassette Support HOT 6
- assets2banks with files > 16kb in size HOT 4
- SMS_setTileatXY HOT 2
- MetaSprite clipping? HOT 2
- Tile Id Offset Meta Sprite Feature Request HOT 2
- SMS_updateSpritePosition and SMS_updateSpriteImage HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from devkitsms.