Привет всем опять. Задача такая - надо очень максимально быстро excl.gif читать из памяти программ данные.
На ассемблере так решал эту проблему:

movlw 0x08 ;старший байт адреса в памяти программ
movwf PCLATH
movlw 0x01 ;младший байт символа 0 в памяти программ
call PCL
movwf s0
movlw 0x09 ;младший байт символа 1 в памяти программ
call PCL
movwf s1
......
PCL: ;переходим на таблицу с адресом PCLATH:PCL
movwf PCL
......
ORG 0x800h
retlw 0x33
retlw 0x36
......

В результате один символ считывается за вроде 7 тактов.
НАДО СДЕЛАТЬ ТОЖЕ САМОЕ НА HITECH C!!! Никак не добиться результата.

Проблема №1:
- для таблицы в памяти программ не задать адрес размещения. Пишу
#pragma psect const=videorom
const unsigned char video [] = {
0b00111001,
..........
и ключ для линкера -L-Pvideorom=0x0800, т.е в целом -L-Pvideorom=0x0800 -PSECTMAP -M"$(TARGETBASE).map" -O"$(TARGETBASE).cof" -O"$(TARGETBASE).hex"
Компилятор ругается unknown psect: videorom
В чем тут проблема не пойму.

Проблема №2:
Функция вместо PCL такая
extern unsigned char video_call_pcl(unsigned char n) {
PCL = n;
return 0; //чтобы не ругался компиллер.
}
В ней добавляются лишние команды после компиляции:
CLRF 0x3 - очистка статуса
7C0 00A4 MOVWF 0x24 - сохранение передаваемого парамаметра
Как их убрать кроме как вручную?


Спасибо всем.