; CC1B Ver 0.5A beta, Copyright (c) B Knudsen Data ; C compiler for the Ubicom SX family ; ************ 24. Jun 2002 11:40 ************* device SX28 FSR_7 EQU 7 INDF EQU $00 FSR EQU $04 Carry EQU 0 px EQU $1A p1 EQU $08 s EQU $09 e EQU $0A a EQU $0D px_2 EQU $0E i EQU $0F ax EQU $90 pxx EQU $9C lp EQU $1B dx EQU $30 C1tmp EQU $08 z EQU $50 ; FILE sx\demo-ptr.c ;// POINTERS AND INDEXED TABLES ; ;#pragma chip SX28 // select device ; ; ;bank0 char tab1[10]; ;bank1 char tab2[10]; ; ;bank2 uns24 tu2[4]; ;bank3 uns24 tu3[4]; ;uns24 *px; ; ; ;void pointers( void) ;{ pointers ; // p1 is 8 bit wide ; char *p1 = tab1; MOV W,#16 MOV p1,W ; char s = 0; CLR s ; do ; s += *p1 & 3; m001 MOV W,p1 MOV FSR,W MOV W,#3 AND W,INDF ADD s,W ; while (++p1 < &tab1[10]); INC p1 MOV W,#26 MOV W,p1-W SB 3.Carry JMP m001 ; ; px = tu2; MOV W,#82 MOV px,W ; px = &tu3[9]; MOV W,#139 MOV px,W ; uns24 e = *px; MOV FSR,W MOV W,INDF MOV e,W INC FSR MOV W,INDF MOV e+1,W INC FSR MOV W,INDF MOV e+2,W ; ; ; // low level pointer access ; FSR = &tab1[1]; MOV W,#17 MOV FSR,W ; char a = 10-1; MOV W,#9 MOV a,W ; do { ; INDF = 0; m002 CLR INDF ; } while (--a > 0); DECSZ a JMP m002 ; ; char *px, i; ; i = *px; MOV W,px_2 MOV FSR,W MOV W,INDF MOV i,W ; ;} RET ; ; ;typedef struct { ; uns16 ab; ; struct { ; uns8 l1; ; uns8 l2; ; } vx; ;} Txx; ; ;bank4 Txx ax, bx[2], *pxx; ; ;void sub( void) ;{ sub ; pxx = &ax; MOV W,#144 MOV pxx,W ; ax.ab = 1000; MOV W,#232 MOV ax,W MOV W,#3 MOV ax+1,W ; pxx->vx.l1 = 3; MOV W,#2 ADD W,pxx MOV FSR,W MOV W,#3 MOV INDF,W ; ; pxx = &bx[0]; MOV W,#148 MOV pxx,W ; pxx->ab = 0; MOV FSR,W CLR INDF INC FSR CLR INDF ; pxx ++; MOV W,#4 ADD pxx,W ; pxx->vx.l2 = 0; MOV W,#3 ADD W,pxx MOV FSR,W CLR INDF ;} RET ; ; ;bank0 uns16 *lp; ; ;uns16 sub2( void) ;{ sub2 ; bank1 uns16 dx; ; ; lp ++; MOV W,#2 ADD lp,W ; return dx; BANK 32 MOV W,dx RET ;} ; ;uns16 sub3( void) ;{ sub3 ; return *lp; MOV W,lp MOV FSR,W MOV W,INDF MOV C1tmp,W INC FSR MOV W,INDF MOV C1tmp+1,W MOV W,C1tmp RET ;} ; ; ; ;void main(void) ;{ main ; pointers(); CLR FSR CALL pointers ; sub(); BANK 128 CLRB 4.FSR_7 CALL sub ; ; bank2 uns16 z = sub2(); BANK 0 CALL sub2 BANK 64 MOV z,W BANK 32 MOV W,dx+1 BANK 64 MOV z+1,W ; z += sub3(); BANK 0 CALL sub3 MOV W,C1tmp+1 BANK 64 ADD z+1,W MOV W,C1tmp ADD z,W SNB 3.Carry INC z+1 ;} SLEEP ORG $07FF GOTO main END