Major WDC linker issues
Once again an other issue. This time it’s about the WDC linker that seems not to be able link against C library. I already have sent a few email and ticket support to the wdc team. Still no response since my first enquiry 2 months ago. It’s been a while now that the direct to the freesdk have been removed.
So here is the source code that is having the problem and need to be linked with c.lib or cs.lib (small model) :
main.c
typedef unsigned char byte; typedef unsigned short word; typedef struct padStatus{ byte right:1; byte left:1; byte down:1; byte up:1; byte start:1; // Enter byte select:1; // Space byte Y:1; // X byte B:1; // C //-------------------------------- byte Dummy:4; byte R:1; // Z byte L:1; // A byte X:1; // S byte A:1; // D } padStatus; padStatus readPad(byte padNumber) { word test; // TODO fix usage of padStatus structure padStatus *status; // TODO move ot dedicated function // enable pad ready *(byte*)0x4200 = 0x01; // check if pad is READY !!! padNumber = padNumber << 1; test = (word) *(byte*)0x4218+padNumber << 8; test |= (word) *(byte*)0x4219+padNumber; status = (padStatus *) &test; return *status; } void main(void) { padStatus pad1; // Infinite loop while(1) { pad1 = readPad((byte) 0); if(pad1.up == 1) { *(byte*) 0x2100 = 0x00; // disable background } else { *(byte*) 0x2100 = 0x0f; // enable background } } }
This can be compiled with this command line :
wdc816cc -wl -wp -MS -MO -SOP main.c
The -MS is for specifying the Small code layout. So it should be linked with the “cs.lib”. But the here is the output of the linker:
wdcln -V -W -LC:\65xx_FreeSDK\lib\cs main.obj -O test.smc WDC 65C816 Linker Version EVALCOPY Jan 18 2006 17:36:51 Copyright (C) 1992-2006 The Western Design Center, Inc. Undefined symbol: __~mov
The __~mov symbol cannot be resolved but it is in the cs.lib. So I think that the linked dont link correctly. If anyone got any any idea on why. Feel free to leave a comment.
++ Lint
PS : I’m still working on the two effect and debug text output, expact an update in a few days.
FIXED !!! Look at the comments !!!
May 8th, 2008 at 8:30 am
The freesdk is available here on WDC site : http://westerndesigncenter.com/wdc/Evaluation_Kit/freesdk.exe
May 8th, 2008 at 10:16 pm
I’ve never been able to use any of their “standard C” lib. I’m trying to make my own, but I’m trying to find an easier way than the ugly “lda 3+4+2, s” syntax” (and the documentation isn’t really helping).
May 9th, 2008 at 7:27 am
Some of the older and less intelligent linkers didn’t make multiple passes through libraries, they just linked in a single pass. The solution was to link against the problem library multiple times.
May 11th, 2008 at 9:49 pm
Thanks guys … i got the problem fixed … it was really stupid. Here is my new linker :
wdcln -HB -MN -V -T -P00 -C0000,8000 -vm -N main.obj -LC:\65xx_FreeSDK\lib\cs -O kungfu.smc
The problem was due to the fact that the lib include by the -L option need to be specified after all the objec that you are going to likn together. Thanks James d. you make me trying that.
May 13th, 2008 at 6:25 pm
Have you been able to add a library function in your code?
I tried a simple “memcpy”. I include and write memcpy(a,b,1);
It compiles without problem, but the function code is missing. It only jumps to an empty function.