I am trying to port an existing 68K program to Coldfire using CodeWarrior. The existing program was developed using a different tool years ago. (The tool is obsolete and will not run with Windows 7) The existing program used inline assembly to display the contents, and in some cases set the contents of the control registers. As an example,
asm(
movec VBR, D0
move D0,reg_value
);
where reg_value is a global C variable.
This works on the old tool but not with CodeWarrior and results in "illegal use of asm inline function" errors. How can I access the control registers within C/C++?
Thanks for any help you can provide.
Solved! Go to Solution.
Hello
I checked the ColdFire® Family Programmer’s Reference Manual.
Description of instruction MOVEC tells that it
"Moves the contents of the general-purpose register to the specified control
register."
So
asm{
move regValue, d0
movec d0, VBR
}
is valid code for Coldfire corem but
asm{
movec VBR, do
move d0, regValue
}
Is not valid code.
CrasyCat
Hello,
the error you see might have been a problem with the context you are in.
I just quickly tried
int reg_value;void foo(void) { asm( move D0,reg_value );}
and this works for me (MCU10.2, ColdFire V2 52259).
Of course if you are using the VBR, the compiler/assembler needs to have a declaration for it.
Hope this helps,
BK
Hello
I checked the ColdFire® Family Programmer’s Reference Manual.
Description of instruction MOVEC tells that it
"Moves the contents of the general-purpose register to the specified control
register."
So
asm{
move regValue, d0
movec d0, VBR
}
is valid code for Coldfire corem but
asm{
movec VBR, do
move d0, regValue
}
Is not valid code.
CrasyCat
Thanks. It appears Coldfire cannot report the current value in the control registers whereas the 68K can. The original application relied on that feature for error reporting. Looks like I'll have to set up a structure to keep the last written values to those registers and filter those through the error routines.
You saved me a lot of experimentation. I appreciate it.