| |
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. |
|
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
2.2 o_O i wouldnt expect that to work quite right =P
that said, SHX/SHY are both unstable, and have funny side effects when used in a badline/during DMA. (the bank the value is stored can turn into the value stored). i wouldnt use it at all in code that i want to run reliably on real c64s =) |
| |
Endurion
Registered: Mar 2007 Posts: 73 |
Couldn't Vice emulate the instability of illegal opcodes as well, so coders aren't tempted in the first case? :) |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
it could (and should and will) once the behaviour is exactly known :) - and it DOES emulate at least some of it (some "emulamer" thingy required it - which doesnt run reliably on all real C64s, btw) |
| |
Fresh
Registered: Jan 2005 Posts: 101 |
Try using $fe00: SHX/Y => save [X/Y & (PCH+1)]
Some more info in this thread:
http://noname.c64.org/csdb/forums/index.php?roomid=11&topicid=3..
Edit:
:BasicUpstart2(start)
.pc=$0900
start:
shx $fe00,y
dex
iny
bne start
dex
jmp start
Execute and use vice monitor to look at the ram behind $fe00 (bank ram). |
| |
Oswald
Registered: Apr 2002 Posts: 5094 |
Thanks for the help. The mistake is on Graham's page: "{adr}:=X&H" which leaves me anding with #$00 when running the code :P |
| |
Cruzer
Registered: Dec 2001 Posts: 1048 |
As far as I know SHX/SHY have been emulated correctly in Vice for a long time, including the instabilities. And yes, it's hi-byte of the destination address + 1.
The instability is only that the and'ing sometimes is skipped, so e.g. if you have shy $7e00,x and expected it be anded by $7f, it sometimes isn't anded at all. But for $fe00 there's no problem, since anding with $ff is the same as not anding. And if your values don't mind whether they are anded, e.g. if they are all $00-$7f for shy $7e00,x, there is also no difference whether the and works or not. |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
"The instability is only that the and'ing sometimes is skipped"
there is another problem when indexing crosses a page boundary, then the page the value is stored might be the same as the value itself. |
| |
Cruzer
Registered: Dec 2001 Posts: 1048 |
Groepaz: Interesting, guess I haven't tried crossing page boundaries. |
| |
Oswald
Registered: Apr 2002 Posts: 5094 |
"it could (and should and will) once the behaviour is exactly known :)"
why isnt it known? every single transistor has been reverse engineered. visual6502 anyone ? |
| |
Ninja
Registered: Jan 2002 Posts: 411 |
It is known. I somewhere have a test-program which reliably does SHX/Y with no AND happening because it waits for the VIC to take over the bus. I intended to make that a bit more robust and write an VN article about it, but well, -EBUSY. I seem to recall that idea was later mentioned in this forum, too. |
... 16 posts hidden. Click here to view all posts.... |
Previous - 1 | 2 | 3 - Next |