Log inRegister an accountBrowse CSDbHelp & documentationFacts & StatisticsThe forumsAvailable RSS-feeds on CSDbSupport CSDb Commodore 64 Scene Database
You are not logged in - nap
CSDb User Forums


Forums > C64 Coding > D017 stretch
2017-01-31 09:47
Trash

Registered: Jan 2002
Posts: 122
D017 stretch

I have a little while trying out som d017-stretching-code-magic-stuff. It seems impossible to stretch sprite 00 when it is alone a raster row.
Can anyone confirm it is possible or tell med where I am going wrong? I just cant get the timings right and I've tried all combinations (I think?).

I've put 1 -> d017 on all cycles after dec $d016 and then 0 on all cycles after that but for me it seems impossible...

Any help at all would be greatly appriciated!

lda #1
ldy #8
-		dec $d016		;  6 Removes the border
		cmp #$c9
		sta $d017		; Has been moved around
		cmp #$c9
		bit $ea
		sty $d017		; Has been moved around
		cmp #$c9
		cmp #$c9
		cmp #$c9
		cmp #$c9
		cmp #$c9
		cmp #$c9
		cmp #$c9
		cmp #$c9
		cmp #$c9
		cmp #$c9
		cmp #$c9
		cmp #$c9
		cmp #$c9
		cmp #$c9
		sty $d016		; Makes sure the border is removable
		inx
		cpx #15
		bne -
2017-01-31 13:53
Oswald

Registered: Apr 2002
Posts: 5017
you sure d017 update happens on the same line ? according to my not exact trial and error knowledge d017 stretch always works until you do it within the same line.
2017-01-31 15:08
Trash

Registered: Jan 2002
Posts: 122
Quote: you sure d017 update happens on the same line ? according to my not exact trial and error knowledge d017 stretch always works until you do it within the same line.

you set d017 to expanded on line X and you clear it before cycle 16 on line x + 1, then you have a stretched row.


I might have figured out my problem however, with one sprite active (or possibly on some combination of sprites) you cant remove the sideborder while stretching since the first write must reside where we remove the border.
2017-01-31 15:19
Skate

Registered: Jul 2003
Posts: 490
@Trash: never use sprite #0 with side-border stuff. start using sprites in reverse order like #7, #6 etc.

However, if you disable the badlines, all 8 sprites + sprite stretching works fine together.
2017-01-31 15:25
Trash

Registered: Jan 2002
Posts: 122
Quote: @Trash: never use sprite #0 with side-border stuff. start using sprites in reverse order like #7, #6 etc.

However, if you disable the badlines, all 8 sprites + sprite stretching works fine together.


I need to be able to stretch a single sprite on a line, i dont want all eight sprites there...

But you are right I really shouldnt use sprite 0...
2017-01-31 16:12
The Phantom

Registered: Jan 2004
Posts: 360
Trash.

Obviously my last comment didn't go through..

You CAN remove the sideborder while stretching.

Censor design showed us that - NTSC II [ntsc]

I have some source code if interested. After seeing that demo, I had to do it, I had to. While my routine isn't as smooth, I was able to do it without much effort. If interested, PM me your email and I can send you the source.
2017-01-31 16:31
Trash

Registered: Jan 2002
Posts: 122
Quote: Trash.

Obviously my last comment didn't go through..

You CAN remove the sideborder while stretching.

Censor design showed us that - NTSC II [ntsc]

I have some source code if interested. After seeing that demo, I had to do it, I had to. While my routine isn't as smooth, I was able to do it without much effort. If interested, PM me your email and I can send you the source.


Ofcourse I can remove the sideborder while stretching as seen in Cocktail and various other demos but what I can't do is have a single sprite on a line and stretch it while still removing the sideborder.
2017-01-31 17:14
Hein

Registered: Apr 2004
Posts: 933
You don't remove the badline with some FLD, right? If you can do 8 on a badline and open borders, woohoo!
2017-01-31 18:32
Trash

Registered: Jan 2002
Posts: 122
Quote: You don't remove the badline with some FLD, right? If you can do 8 on a badline and open borders, woohoo!

I have no badlines to worry about, I have opened the border with bit 4 = 0 in d011, I don't want eight sprites on the row, I need to it be only 1.
2017-01-31 18:53
Hein

Registered: Apr 2004
Posts: 933
If you have a working stretcher with 8 sprites, you can disable 7 sprites and add 7 NOPs in your loop, 1 NOP for each disabled sprite. Should work fine.
2017-01-31 19:33
JackAsser

Registered: Jun 2002
Posts: 1989
Quote: I have no badlines to worry about, I have opened the border with bit 4 = 0 in d011, I don't want eight sprites on the row, I need to it be only 1.

Never use sprite #0 when fiddling with side border stuff as a rule of thumb.
2017-01-31 19:44
Hein

Registered: Apr 2004
Posts: 933
Sprite 0 trauma, worst trauma ever.
2017-01-31 19:44
chatGPZ

Registered: Dec 2001
Posts: 11108
never put your thumb into the sideborder, girlfriend said
2017-01-31 22:38
Smasher

Registered: Feb 2003
Posts: 512
let's make a demo about it.
2017-02-01 00:09
Trash

Registered: Jan 2002
Posts: 122
Sorry for my stupid question, of course it works to stretch a single sprite with d017 while removing the border (even S#00). You just have to stop being stupid and do it the right way :-(
2017-02-01 00:49
The Phantom

Registered: Jan 2004
Posts: 360
Meh. Whatever.

Good luck.
2017-02-01 07:42
Oswald

Registered: Apr 2002
Posts: 5017
NOS intro at DOTC 1 sided is having sideborder off + 8 sprites stretched differently ?

Defender of the Crown +9D
2017-02-01 08:32
HCL

Registered: Feb 2003
Posts: 716
..isn't that what i told you from the beginning Trash? Just do it the right way! :)
2017-02-01 08:44
Trash

Registered: Jan 2002
Posts: 122
Quote: ..isn't that what i told you from the beginning Trash? Just do it the right way! :)

According to you everything is easy, just some lda and sta's in the right place and the sky is the limit...
2017-02-01 10:05
Compyx

Registered: Jan 2005
Posts: 631
For some reason when doing an 8-sprite open border routine you have to use DEC $d016 + INC $d016.

This has something to do with sprite 0 DMA eating too many cycles from the CPU, so the $d016 writes don't happen at the right time, occupying the CPU with DEC/INC solves that.

I found this out the hard way, back when I still actively coded demos. The explanation might be a bit off, but I'm sure there's VIC-II guru's out here who can do a better job than I do.

But like others have mentioned, when you don't need all 8 sprites, avoid sprite 0.
2017-02-01 10:41
Graham
Account closed

Registered: Dec 2002
Posts: 990
Explanation is easy: DEC $D016 has 2 write cycles at the end of it's execution, while STA $D016 has only one. The 6510 cannot be stopped on write cycles, so with the right timing you can skip 2 of the 3 bus allocate cycles of the sprite #0 DMA which gets you right to the exact cycle where $D016 has to be changed to open the side border.
2017-02-01 11:42
Compyx

Registered: Jan 2005
Posts: 631
Thanks Graham,

That explains the sprite 0 nastiness a lot better than I did :)
RefreshSubscribe to this thread:

You need to be logged in to post in the forum.

Search the forum:
Search   for   in  
All times are CET.
Search CSDb
Advanced
Users Online
The Syndrom/TIA/Pret..
Alakran_64
TMA/Abyss-Connection
t0m3000/ibex-crew
psych
Guests online: 119
Top Demos
1 Next Level  (9.8)
2 Mojo  (9.7)
3 Coma Light 13  (9.7)
4 Edge of Disgrace  (9.6)
5 Comaland 100%  (9.6)
6 No Bounds  (9.6)
7 Uncensored  (9.6)
8 Wonderland XIV  (9.6)
9 Bromance  (9.6)
10 Memento Mori  (9.6)
Top onefile Demos
1 It's More Fun to Com..  (9.7)
2 Party Elk 2  (9.7)
3 Cubic Dream  (9.6)
4 Copper Booze  (9.5)
5 Rainbow Connection  (9.5)
6 TRSAC, Gabber & Pebe..  (9.5)
7 Onscreen 5k  (9.5)
8 Wafer Demo  (9.5)
9 Dawnfall V1.1  (9.5)
10 Quadrants  (9.5)
Top Groups
1 Oxyron  (9.3)
2 Nostalgia  (9.3)
3 Booze Design  (9.3)
4 Censor Design  (9.3)
5 Crest  (9.3)
Top NTSC-Fixers
1 Pudwerx  (10)
2 Booze  (9.7)
3 Stormbringer  (9.7)
4 Fungus  (9.6)
5 Grim Reaper  (9.3)

Home - Disclaimer
Copyright © No Name 2001-2024
Page generated in: 0.068 sec.