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 > SHX/SHY
2012-11-26 14:30
Oswald

Registered: Apr 2002
Posts: 5094
SHX/SHY

I cant seem to get them working. I'm not sure wether the value for the AND comes from the PC counter or from the destination address, anyway neither running code at $ff00 or storing to $ff00 does work. maybe vice does not support this illegal?

edit: vice 2.2 unstable, x64 on win7.
 
... 16 posts hidden. Click here to view all posts....
 
2017-11-17 17:41
Frantic

Registered: Mar 2003
Posts: 1648
Quote: Quoting Frantic
Whoever feels like it, please go ahead and write a few lines about SHX/SHY and put it in the following section of Codebase64
I felt like it the other day. :)

Btw, I also tried what happens with page crossing, and it turned out much weirder than expected, since it stores the value to a completely different page. Double confirmed on VICE and real hardware. Gotta do some more testing before I can figure out the logic behind which page it ends up on, since I can't find anything online. But since VICE emulates it, I guess the knowledge has to be out there somewhere. :)


Nice :)
2017-11-17 17:49
Krill

Registered: Apr 2002
Posts: 2980
Quoting Cruzer
Double confirmed on VICE and real hardware. Gotta do some more testing before I can figure out the logic behind which page it ends up on, since I can't find anything online. But since VICE emulates it, I guess the knowledge has to be out there somewhere. :)
So, why don't you simply take a look at the VICE source code? Avoiding confirmation bias and expecting to come up with different results? :)
2017-11-17 20:39
chatGPZ

Registered: Dec 2001
Posts: 11386
or why not just read No More Secrets v0.91 ? :)
2017-11-17 20:54
Cruzer

Registered: Dec 2001
Posts: 1048
Because experimenting is fun. :) And I guess I could have just read Groepaz' earlier comment saying that the page becomes the value stored. I.e. for SHX: Page = (H + 1) & X and for SHY: Page = (H + 1) & Y. Codebase article updated.
2017-11-17 22:26
Copyfault

Registered: Dec 2001
Posts: 478
Both the No more secrets-document and the codebase entry still have some vague phrasing so I dare to ask:

1. Does
Sometimes the AND "#<adr_hi>+1" drops off
actually mean
iff the write-cycle of the SH*-command is processed during an "X"-cycle (DMA-bus-overtake-cycle), the AND drops off?
Or are there more dependencies for the AND to drop off?


2. My understanding is that
The page where the value is stored may be equal to the value stored
actually means
iff there is a page break, the page where the value is stored is (<adr_hi> + 1) & y (ex. for SHY).
Or are there other occasions where the page is miscalculated?


3. Does the page miscalculation as described under 2. also happen on an "X"-cycle? My C64-intuition would say that also the page break fixup works normally on those "X"-cycles, but I did not test anything so far...


@Cruzer: Hurray for doing the tests and for feeding insights to codebase!!!
2017-11-17 22:31
chatGPZ

Registered: Dec 2001
Posts: 11386
1) yes. see the test programs
2) this seems to be unstable behaviour and it didnt happen at all on any of my C64s :) hence - please provide a proper testprogram for this behaviour, so it can be tested and verified further.

(i'll also have to update the ANE behaviour... found one CPU where it doesnt work as advertised. blarg)
2017-11-19 17:58
Bitbreaker

Registered: Oct 2002
Posts: 508
Seems like i also got this wrong with the page cross, thought it just drops off the +1 component on the highbyte. But then however this resolves to a pretty powerful opcode that might be misused in funny ways?

Means i could do stuff like sty yy00,x-1 by doing a shy $00ff,x with x being 1. I'm curious if this could be misused for something funky, usually you could only influence the highbyte easily when doing indirect adressing, what could be done faster that way when it is to set highbyte only (and it is okay to live with the given y-value)

As for normal Hi+1-behaviour, i had used shx + shy heavily in one of the carpet effects.
2017-11-19 18:58
Cruzer

Registered: Dec 2001
Posts: 1048
Quoting Bitbreaker
I'm curious if this could be misused for something funky
Yes, if you have a funky idea where you only need to store $00 in page $00, $01 in page $01 ... $ff in page $ff. Just can't think of a usecase right now.
2017-11-19 20:29
Copyfault

Registered: Dec 2001
Posts: 478
Maybe some funny way to initialize sprite pointers? Could even save some LDA's (depends on the no. of different spr-pointers used) ;)
2019-09-25 05:15
ChristopherJam

Registered: Aug 2004
Posts: 1409
Quoting Copyfault
Both the No more secrets-document and the codebase entry still have some vague phrasing so I dare to ask:

1. Does
Sometimes the AND "#<adr_hi>+1" drops off
actually mean
iff the write-cycle of the SH*-command is processed during an "X"-cycle (DMA-bus-overtake-cycle), the AND drops off?
Or are there more dependencies for the AND to drop off?


I think your timing's slightly off (the instruction needs to be paused after its 3rd cycle for the drop off to occur), but otherwise yes.


Quote:
2. ...
The page where the value is stored may be equal to the value stored


That "may be" is technically true; - read on :)

Quote:
iff there is a page break, the page where the value is stored is (<adr_hi> + 1) & y (ex. for SHY).


This is correct - hence the page is only equal to the value stored if the &(h+1) drop off you mentioned in (1) does not occur.


Quote:
3. Does the page miscalculation as described under 2. also happen on an "X"-cycle? My C64-intuition would say that also the page break fixup works normally on those "X"-cycles, but I did not test anything so far...


The page miscalculation occurs regardless of whether/when the instruction is interrupted by a DMA.

So, the good news is an unexpected DMA won't result in you trashing an unexpected address, it'll just change the value you write to it.

The above behavior has been implemented in VICE for quite some time now, and mostly covered by the test code in

https://svn.code.sf.net/p/vice-emu/code/testprogs/CPU

I added a couple of tests a few days ago to have a closer look at how the &(H+1) drop off compares to cycle stealing; check out *5.s in the shs and shxy subdirectories of the above.


tl;dr:


high byte of address written to, when:
 +--------+------------------+---------------+
 |        | no DMA on cycleN | DMA on cycleN |
 +--------+------------------+---------------+
 |page    |                  |               |
 |not     |        H         |       H       |
 |crossed |                  |               |
 +--------+------------------+---------------+
 |page    |                  |               |
 |crossed |     Y&(H+1)      |   Y&(H+1)     |
 |        |                  |               |
 +--------+------------------+---------------+

value written, when:
 +--------+------------------+---------------+
 |        | no DMA on cycleN | DMA on cycleN |
 +--------+------------------+---------------+
 |page    |                  |               |
 |not     |     Y&(H+1)      |       Y       |
 |crossed |                  |               |
 +--------+------------------+---------------+
 |page    |                  |               |
 |crossed |     Y&(H+1)      |       Y       |
 |        |                  |               |
 +--------+------------------+---------------+
Previous - 1 | 2 | 3 - Next
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
Alakran_64
Flashback
Broti/DT/KRN
rexbeng
Guests online: 113
Top Demos
1 Next Level  (9.7)
2 13:37  (9.7)
3 Mojo  (9.7)
4 Coma Light 13  (9.6)
5 Edge of Disgrace  (9.6)
6 What Is The Matrix 2  (9.6)
7 The Demo Coder  (9.6)
8 Uncensored  (9.6)
9 Comaland 100%  (9.6)
10 Wonderland XIV  (9.6)
Top onefile Demos
1 Layers  (9.6)
2 No Listen  (9.6)
3 Cubic Dream  (9.6)
4 Party Elk 2  (9.6)
5 Copper Booze  (9.6)
6 Rainbow Connection  (9.5)
7 Dawnfall V1.1  (9.5)
8 Onscreen 5k  (9.5)
9 Morph  (9.5)
10 Libertongo  (9.5)
Top Groups
1 Performers  (9.3)
2 Booze Design  (9.3)
3 Oxyron  (9.3)
4 Triad  (9.3)
5 Censor Design  (9.3)
Top Webmasters
1 Slaygon  (9.6)
2 Perff  (9.6)
3 Sabbi  (9.5)
4 Morpheus  (9.4)
5 CreaMD  (9.1)

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