PICで関数ポインタもどき

をADDLW PCL,Fで書いてみたのですが,限界がありました.通常のRETLWを使ったテーブルでもこの問題は存在するでしょう.
適当なコードですがメモして置きます.

	CLRF	Cnt
Main_Loop
	NOP
	INCF	Cnt,F
	CALL	Function_Pointer	;関数ポインタの実験
	GOTO	Main_Loop	



	org	0x100			;この関数とテーブルであるGOTO文までは全て256バイト以内に収まっていなくてはならない.
					;実際のGOTO先は同一ページ内であれば問題ない.
Function_Pointer
	MOVLW	HIGH(Function_Pointer)
	MOVWF	PCLATH
	MOVF	Cnt,W
	ANDLW	ffh			;ffにすることで最大256−5(GOTOテーブルの直前の処理)個の関数へジャンプできるはず.
					;なぜならそれ以上の値はPCLで表現できる範囲を越えるので,正しくジャンプできなくなるため.
	ADDWF	PCL,F
	;ジャンプ先はRet_Valueに関数名の値をロードしている.実験的にジャンプ先は16個までとする
	GOTO	Load_0			
	GOTO	Load_1	
	GOTO	Load_2
	GOTO	Load_3
	GOTO	Load_4
	GOTO	Load_5
	GOTO	Load_6
	GOTO	Load_7
	GOTO	Load_8
	GOTO	Load_9
	GOTO	Load_10
	GOTO	Load_11
	GOTO	Load_12
	GOTO	Load_13
	GOTO	Load_14
	GOTO	Load_15

	org	0x200
Load_0
	MOVLW	d'0'	
	MOVWF	Ret_Value
	RETURN
Load_1
	MOVLW	d'1'	
	MOVWF	Ret_Value
	RETURN
Load_2
	MOVLW	d'2'	
	MOVWF	Ret_Value
	RETURN
Load_3
	MOVLW	d'3'	
	MOVWF	Ret_Value
	RETURN
Load_4
	MOVLW	d'4'	
	MOVWF	Ret_Value
	RETURN
Load_5
	MOVLW	d'5'	
	MOVWF	Ret_Value
	RETURN
Load_6
	MOVLW	d'6'	
	MOVWF	Ret_Value
	RETURN
Load_7
	MOVLW	d'7'	
	MOVWF	Ret_Value
	RETURN
Load_8
	MOVLW	d'8'	
	MOVWF	Ret_Value
	RETURN
Load_9
	MOVLW	d'9'	
	MOVWF	Ret_Value
	RETURN
Load_10
	MOVLW	d'10'
	MOVWF	Ret_Value
	RETURN
Load_11
	MOVLW	d'11'	
	MOVWF	Ret_Value
	RETURN
Load_12
	MOVLW	d'12'	
	MOVWF	Ret_Value
	RETURN
Load_13
	MOVLW	d'13'	
	MOVWF	Ret_Value
	RETURN
Load_14
	MOVLW	d'14'	
	MOVWF	Ret_Value
	RETURN
Load_15
	MOVLW	d'15'	
	MOVWF	Ret_Value
	RETURN

これ以上のテーブルを使う場合はDECFもしくはINCFとBTFSC STATSU,ZとかBTFSC STATUS,Cを使ったべたな分岐処理になると思います.
ん〜 エレガントへの道は遠いなぁ.