English Amiga Board


Go Back   English Amiga Board > Coders > Coders. Asm / Hardware

 
 
Thread Tools
Old 17 December 2019, 18:05   #1
Antiriad_UK
OCS forever!
 
Antiriad_UK's Avatar
 
Join Date: Mar 2019
Location: Birmingham, UK
Posts: 418
OCS + DDFSTRT=$30 - Losing spr6?

Hi,

Not used sprites that much before, so a sprite noob, but can someone verify this?

I've got an overscan screen with ddfstrt=$30 so I lose spr7 as expected. But I also seem to be getting corruption on spr6 as well. See screenshot.

If I change chipset to to ECS Agnus in WinUAE rather than OCS it works. I found this thread which seems to indicate it's a real bug with OCS http://eab.abime.net/showpost.php?p=995744&postcount=9

I'm using DMA to reuse all the sprites down the screen and from reading that thread I'm pretty much going to have to lose spr6 or change ddfstart if I want this to work on OCS. Do I have it right?

Edit: Just found this as well. http://eab.abime.net/showthread.php?t=89276 - I guess that's that!

Last edited by Antiriad_UK; 03 February 2020 at 15:29.
Antiriad_UK is offline  
Old 17 December 2019, 18:37   #2
ross
Defendit numerus
 
ross's Avatar
 
Join Date: Mar 2017
Location: Crossing the Rubicon
Age: 54
Posts: 4,491
Yep, is an OCS only bug.
You cannot have sprite DMA and Bpl DMA back to back, you lose latest DMA word for the sprite.
In you case DATB for SPR6 (but DATA works as expected).

But you can even use DDFSTRT=$34 (BPLCON1 work differently, try it) and SPR6 works normally.
I've written in a thread about this possibility.
ross is offline  
Old 17 December 2019, 19:28   #3
DanScott
Lemon. / Core Design
 
DanScott's Avatar
 
Join Date: Mar 2016
Location: Tier 5
Posts: 1,213
you could manually load SPR 6 and 7 with the copper on the right side of the screen
DanScott is offline  
Old 18 December 2019, 11:25   #4
Antiriad_UK
OCS forever!
 
Antiriad_UK's Avatar
 
Join Date: Mar 2019
Location: Birmingham, UK
Posts: 418
Hmm, I can't get this manual loading working. I've initialised spr6pt to a dummy sprite in the vblank. Then just into the display window I set spr6pos and spr6ctl. And on each line I set spr0datb and spr6data to a red/green pattern. It looks like it works fine until it reaches the vertical position where spr0-5 are in use and then it goes crazy.

Last edited by Antiriad_UK; 03 February 2020 at 15:29.
Antiriad_UK is offline  
Old 18 December 2019, 12:16   #5
ross
Defendit numerus
 
ross's Avatar
 
Join Date: Mar 2017
Location: Crossing the Rubicon
Age: 54
Posts: 4,491
Quote:
Originally Posted by Antiriad_UK View Post
Hmm, I can't get this manual loading working. I've initialised spr6pt to a dummy sprite in the vblank. Then just into the display window I set spr6pos and spr6ctl. And on each line I set spr0datb and spr6data to a red/green pattern. It looks like it works fine until it reaches the vertical position where spr0-5 are in use and then it goes crazy.
If you define a proper spr6pos and spr6ctl then the DMA fetch(es) are executed: DATA only on OCS and DATA/DATB on >=ECS.
If you write DATB with copper after the DATA fetch and before posx, then it works.
Of course in ECS there are two write in DATB (DMA+Copper).

EDIT: usually is better to use SPR6 as a monochrome sprite (clearing DATB once at the beginning of frame for OCS, and on sprite-list for ECS).

Last edited by ross; 18 December 2019 at 12:31.
ross is offline  
Old 18 December 2019, 14:43   #6
Antiriad_UK
OCS forever!
 
Antiriad_UK's Avatar
 
Join Date: Mar 2019
Location: Birmingham, UK
Posts: 418
Setting DATB at top once to 0 was the first thing I tried to just have a monochrome image but I still see every other line line skipped like in my first post so something else is up.

Edit: Ok I get it. My sprite list was:
SPR_Phys_6:
dc.w 0,0 ;control words
dcb.l SPR_HEIGHT,$fff00000

So $fff0 would be DATA(the red) and my assumption was that it would skip the DATB($0000) due to the dma issues and then start again on the next line. But what is actually happening is that it's using $fff0 for DATA on line x and then $0000 for DATA on line x+1. So the same sprite list is going to act differently on OCS and ECS. I think I'll go with the DDFSTRT=$34 approach
Antiriad_UK is offline  
 


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools

Similar Threads
Thread Thread Starter Forum Replies Last Post
diwstrt, ddfstrt and hires leonard Coders. Asm / Hardware 6 02 December 2019 00:38
7th sprite corrupt with DDFSTRT of 0x30 FSizzle Coders. Asm / Hardware 9 11 November 2017 17:36
1200 freezing + no losing video coope1999 support.Hardware 3 28 October 2015 01:24
Installing WB3.1 without losing files on the HD? clitosa New to Emulation or Amiga scene 56 30 December 2012 01:20
help me please...im losing sleep!!! cmarcel23 New to Emulation or Amiga scene 3 12 August 2002 20:52

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT +2. The time now is 19:42.

Top

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, vBulletin Solutions Inc.
Page generated in 0.07492 seconds with 13 queries