Why, when I use the Simulator on this code, does A return as 0 when it should be 3?
MAIN: NOP MOV DPTR, #CommandTable MOVX A, @DPTR ; Get the offset MOV DPTR, #Subroutines JMP @A+DPTR CommandTable: DB Low(GetStatus - Subroutines) Subroutines: SetStatus: NOP NOP RET GetStatus: NOP NOP RET END
Thanks for your help.
Steve
What do you mean by that?
I think he wants to give you remote access to his simulator so that you can solve the problem for him :) easiler (maybe) than to google :)
Guess he wants to be able to access both CODE and XDATA via MOVX and/or MOVC
Sorry, I'm not that familiar with the simulator, maybe someone else can advise.
Guess he wants
I strongly suggest we don't waste our time guessing. Let's wait for a question that's asked in sufficient precision to be answerable.
There is no need for guessing. The question is in direct relation to this comment earlier in this thread:
Is CommandTable in CODE space (as I would suspect) or in XDATA space?
The MOVX is accessing XDATA space, not CODE. Have you configured simulator (or hardware) for common access? Probably not, at least for the simulator.
If you get that logic right, then I concur that the answer should be 3.
The MOVX is accessing XDATA space, not CODE.
E.g. the SILabs chips can be (via a SFR) be set to MOVX access code space, for flash writing purposes.
Also, I have, when it was advatageous to the application, on occasion 'rewired' the '51 to be a VonNeuman machine.
I doubt very much that this is what the OP is strugglinhg with, but the statement "MOVX is accessing XDATA space, not CODE" is not correct in SOME cases.
Erik
"The question is in direct relation to this comment earlier in this thread"
Ah yes - so it is!
So the real questions is what laarus rag meant by it?
The context does suggest that he's thinking of CODE and XDATA both mapped to the same physical memory addresses...
Having never done that, I don't know if it's possible or, if it is, how to do it. I guess the MAP Debug command would be the place to start...
The deductive powers of the professionals gives me that feeling of awe ;)
A.k.a. a von-Neumann memory architecture.
Having never done that, I don't know if it's possible or, if it is, how to do it.
It's easy with external memory (just combine the chip enable signals). For chips with internal flash and XRAM, this is a feature the chip designer would have to set up.
OTOH, there's really no point doing that for the OP's case. MOVC exists.
"It's easy with external memory"
Yes, but I meant I've never done it (nor tried to) in the simulator - which was the specific question.
in the simulator
That's even easier. In the menu find Debug->memory map, define the region as von-Neumann, done. For extra credit, find out how to do same in a debugger startup script (*.ini).
Thanks Mr Broeker, that's what I needed. And I appreciate all the helpful replies!