Quote from: dthrone on 09:30, 27 June 14
Running the below routine produces the sequence
6000 01
6001 02
6002 03
6003 04
6004 05
as I would expect. If however I run the same routine with the ASIC RAM enabled, it produces the sequence
6000 01
6001 02
6002 03
6003 00
6004 01
6005 02
6006 03
I am using Winape. What am I missing?? :(
ld ix,&6000
ld (ix),&01
ld (ix+&01),&02
ld (ix+&02),&03
ld (ix+&03),&04
ld (ix+&04),&05
ret
don't rely on winape.
When writing to the ASIC, what you read back is not the same as what you write.
For example, writing ff to 4000 will read back as 0f. ASIC forces upper 4 bits to 0.
6000/6001 is X for sprite 0, 6002/6003 is y for sprite 1, 6004 is magnification.
On a real Plus you can write to 4,5,6,7 to set the magnification. And on a real plus reading 4,5 gives the same as X, 6,7 gives the same as Y.
In this case, it's mirroring the X,Y position in 4,5,6,7. In addition, the asic will change the value written. You can write any value but it converts it into it's sprite coordinate range and this is what you are reading back.
Go to Unofficial Amstrad WWW Resource (http://www.cpctech.org.uk) go to the docs and find "Extra CPC plus Hardware Information"