J
Johann Klammer
Guest
I have this need to remove some redundant PAGESELs(for reasons)
I want to check if the calls are in range, however.
There is a macro for that on PICList. But it doesn't seem to work in gputils.
maybe also broken on others.. unsure.
This is what I've tried:
;+++++
; PCALL page call, code for calling on same page
; outputs messages if LONG/SHORT call could/must be used
n0_call MACRO LABEL
LOCAL DEST_HIGH, SOURCE_HIGH, DIFF_HIGH
DEST_HIGH SET (HIGH(LABEL)&0x78) ; save bit's 4:5 of dest address
SOURCE_HIGH SET (HIGH($)&0x78) ; --- || --- source address
DIFF_HIGH SET DEST_HIGH ^ SOURCE_HIGH ; get difference ( XOR )
IF (DIFF_HIGH == 0) ; same page, call ok
CALL LABEL
ELSE
ERROR " Error ! Replace PCALL with LONG_CALL "
ENDIF
ENDM
But I can not get it to print that error message.
I believe it is because of the labels being
unresolved(it's relocatable mode). The assembler
might just put zeros in there.
Am I right, or is there a way to work around this.
I want to check if the calls are in range, however.
There is a macro for that on PICList. But it doesn't seem to work in gputils.
maybe also broken on others.. unsure.
This is what I've tried:
;+++++
; PCALL page call, code for calling on same page
; outputs messages if LONG/SHORT call could/must be used
n0_call MACRO LABEL
LOCAL DEST_HIGH, SOURCE_HIGH, DIFF_HIGH
DEST_HIGH SET (HIGH(LABEL)&0x78) ; save bit's 4:5 of dest address
SOURCE_HIGH SET (HIGH($)&0x78) ; --- || --- source address
DIFF_HIGH SET DEST_HIGH ^ SOURCE_HIGH ; get difference ( XOR )
IF (DIFF_HIGH == 0) ; same page, call ok
CALL LABEL
ELSE
ERROR " Error ! Replace PCALL with LONG_CALL "
ENDIF
ENDM
But I can not get it to print that error message.
I believe it is because of the labels being
unresolved(it's relocatable mode). The assembler
might just put zeros in there.
Am I right, or is there a way to work around this.