Jump to content
IGNORED

IRQ SIO trackloader by HARD


Heaven/TQA

Recommended Posts

http://atarionline.pl/v01/index.php?ct=demos&sub=ziny&tg=Energy#Energy

 

ah... and forgot the alltime classic... first trackmo style demo on A8:

 

 

You can ask Miker and Seban how a pain it was to link all the stuff nativly on A8 ;)

 

btw. at 3:00h Plasma it is loading fex. the next part. or look at 4:55... how seemless it goes into loading the next part...

Edited by Heaven/TQA
  • Like 1
Link to comment
Share on other sites

I'd recommend chaining the stage 2 VBI off of the end of the IRQ handler. Have all of the IRQ handlers jump to a common RTI instruction, and if stage 1 VBI sees that it has interrupted an IRQ handler (I flag set), patch the RTI instruction to JMP to the stage 2 VBI handler instead. This then allows RMT to run at a software interrupt level higher than the main loop but lower than hardware interrupts.

 

 

 

How can I check the I flag??? as when entering the NMI I can not do a

 

php

pla

and #4

beq

 

? as NMI already set the I flag, too?

Link to comment
Share on other sites

ok... I tried both variants:

 

the OS version and this version

 

php

pla

and #4

bne ;and beq ;)

 

etc

 

the IRQ loader writes status codes do DSTATS (0,$80) and even tried skip the player... to be honest RMT is really heavy on CPU load... I even replaced all pokey writes into the player just to see if it works... and my impression is that with writing to pokey registers it gets more unrelyable in Altirra...

 

just to give you an idea...

 

 

I have reduced the fx to be running in mainloop in 1 frame so music player is running in main loop, too. VBL somehow does not work good enough yet...

 

(yeah... 3d stars is reusing the Arsantica 3 intro code... so it has 16bit signed muls for each star... ;) which will be optimised a lot...)

Link to comment
Share on other sites

Did you do a CLI?

 

Alternatively, use some variation of what Avery suggested. A flag or code patch that alerts the IRQ routine to call RMT.

Within the IRQ you'd need to clear the IRQ status in Pokey then do a CLI before calling RMT.

 

The key to the entire thing is ensure there's never more than a couple of scanlines of continuous time where IRQs are being masked.

Edited by Rybags
Link to comment
Share on other sites

As I already said... i would check if RMT should be called often enough in FX loop and call it when needed, so everything is in main code. Only setting 2 POKEY channel registers in VBI and set flag for RMT payer call need. For example your wfole FX is done in 16 loops and it runs over 3 frames.. so check for RMT need after every 2 loops... adding something like:

lda loop_counter
and #1
bne no_rmt
lda rmt_flag
beq no_rmt
jsr rmt_is_needed
normt .... continue with your code
Edited by MaPa
Link to comment
Share on other sites

  • 4 weeks later...
  • 3 years later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...