Overview Features Coding ApolloOS Performance Forum Downloads Products Order Contact

Welcome to the Apollo Forum

This forum is for people interested in the APOLLO CPU.
Please read the forum usage manual.
Please visit our Apollo-Discord Server for support.



All TopicsNewsPerformanceGamesDemosApolloVampireAROSWorkbenchATARIReleases
Running Games and Apps.

SAGA Coding Tricks 4

Gunnar von Boehn
(Apollo Team Member)
Posts 6197
01 May 2020 15:25


As we all know the Amiga Copper is excellent for maintaining the Chipregisters.

AMIGA chipset is designed in such way that all GFX pointer,
the 8 plane PTRs and the 8 Sprite PTRs need be repoked each frame.
The Copper is ideally suited for this.

The OCS Copper does this operation using 16bit MOVEs
This means for updating one 32bit Pointer Register the Copper needs 2 Copper Moves each 16bit.

To change Sprites or move/scroll planes the adress these Pointers point to also need be changed.
This means the Program will update the Copperlist.
As the 32bit address has to be split in the Copperlist into 2 Copperinstructions this code looks a little bit ackward.

Example


move.l #image,D0
move.w D0,CopperPtr+4
swap D0
move.w D0,CopperPtr

The SAGA chipset supports a new COPPER Operation MOVE.L
Using this makes the Copper 2 times faster and maybe more important allows very simple code like this


move.l #image,CopperPtr

Coding because simpler and easier to read.
And the Copper can not better switch for example planes


Samuel Crow

Posts 424
02 May 2020 16:02


Is all of this being maintained in the public wiki?  https://www.apollo-accelerators.com/wiki/doku.php/saga:registers:start


Stefano Briccolani

Posts 586
02 May 2020 16:39


A SAGA hardware reference manual.
This will surely draw the attentions of many ex-coders metal-bashers of the nineties, and maybe some new ones..
Don't underestimate the power of documentation..



Saladriel Amrael

Posts 166
02 May 2020 18:03


Stefano Briccolani wrote:

A SAGA hardware reference manual.
  This will surely draw the attentions of many ex-coders metal-bashers of the nineties, and maybe some new ones..
  Don't underestimate the power of documentation..
 

Exactly


Gunnar von Boehn
(Apollo Team Member)
Posts 6197
03 May 2020 09:10


The full register documentation is currently in writing
When its fully finished with it will be made public
A work in progress draft is here:
CLICK HERE


Ray Couzens

Posts 93
03 May 2020 09:55


I'm very impressed by the work that is going into the Vampire project.

Although currently not an ASM programmer, looking forward to the day I can buy the V4 SA and have a play with ASM, and hopefully get to try these coding snippets that Gunnar is showing here.

Will the be any demo programs showing off the V4's capabilities pre-installed on the V4 when it's shipped? Maybe with source code?  I know that is probably asking too much.



Olivier Landemarre

Posts 147
03 May 2020 10:07


Gunnar von Boehn wrote:

The full register documentation is currently in writing
  When its fully finished with it will be made public
  A work in progress draft is here:
  CLICK HERE 

Good start!

Thanks, I know it's a lot of work



Samuel Crow

Posts 424
03 May 2020 10:54


Excellent news about the docs.

Getting back to the Copper a little bit, how does the long write get encoded into the Copper list?

Also, how does the Copper address all of the new registers?  At one point you mentioned using the low bit of the Copper addresses as a high bit since the registers are all word addressable but the sprite15 pointer on that priliminary list looks out of range even for that!

If the Copper is usable on 1080p resolutions, how many CWAITs are needed at the end of an otherwise unpopulated Copper list?


Gunnar von Boehn
(Apollo Team Member)
Posts 6197
03 May 2020 11:10


Samuel Crow wrote:

Excellent news about the docs.
   
Getting back to the Copper a little bit, how does the long write get encoded into the Copper list?

 
   
Example:

OLD:  dc.w $0120,$1111,$0122,$2222
Old uses two 16bit MOVE
   
New:  dc.w $8120,$1111,$2222
New uses one 32bit MOVE

   
The idea behind many improvements of SAGA is making it cleaner, and simpler.
   

Samuel Crow wrote:

Also, how does the Copper address all of the new registers?

Actually the copper never had a problem accessing more registers.
The "used" register space in AGA is 10bit range but the Copper MOVE has reserved 16bit address. So there were always plenty bits for upgrades available. In fact 64 times more space as used in AGA.

We gate copper access to NEW_register until SAGA mode activated.
 


Paul H

Posts 13
03 May 2020 19:45


Gunnar von Boehn wrote:

The full register documentation is currently in writing
  When its fully finished with it will be made public
  A work in progress draft is here:
  CLICK HERE 

This is a good. If I wanted to add audio panning enhancements, for the Vampire, to the sound effects in our OCS compatible game, what is the best way to detect SAGA is available? The game runs under kickstart 1.3 and up.



Gunnar von Boehn
(Apollo Team Member)
Posts 6197
03 May 2020 19:51


Paul H wrote:

what is the best way to detect SAGA is available? T

SAGA AUDIO reports PAULA revision $1
(Old Amiga has $0)


Paul H

Posts 13
03 May 2020 20:18


Is that a library call to get the audio revision or can I read a register to get it?


Gunnar von Boehn
(Apollo Team Member)
Posts 6197
03 May 2020 20:31


Paul H wrote:

Is that a library call to get the audio revision or can I read a register to get it?

Yes you can read a Register.
bits(7..1) in REGISTER $DFF016 are the PAULA Chip Revision Id




Paul H

Posts 13
03 May 2020 21:00


Gunnar von Boehn wrote:

  Yes you can read a Register.
  bits(7..1) in REGISTER $DFF016 are the PAULA Chip Revision Id
 

Perfect, thanks!


posts 14