News:

Printed Amstrad Addict magazine announced, check it out here!

Main Menu
avatar_dthrone

Index registers and the ASIC RAM

Started by dthrone, 09:30, 27 June 14

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

dthrone


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
SOH Digital Entertainments

arnoldemu

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 go to the docs and find "Extra CPC plus Hardware Information"

My games. My Games
My website with coding examples: Unofficial Amstrad WWW Resource

Powered by SMFPacks Menu Editor Mod