Imported Upstream version 2.9.0
[debian/cc1111] / device / lib / pic / libsdcc / macros.inc
1 ; -----------------------------------------------
2 ; --- extern declared SFRs
3 ; -----------------------------------------------
4         extern _STATUS
5         extern _FSR
6         extern _INDF
7         extern _PCLATH
8         extern _PCL
9
10 C       EQU     0
11 DC      EQU     1
12 Z       EQU     2
13 IRP     EQU     7
14         
15 ; -----------------------------------------------
16 ; --- generic pointer access helpers
17 ; -----------------------------------------------
18
19 GPTRTAG_DATA    EQU     0x00
20 GPTRTAG_CODE    EQU     0x80
21
22 ; setup FSR to point to (STK00:STK01)
23 setup_fsr       macro
24         movf    STK01, W
25         movwf   _FSR
26         ; select indirectly addressed bank
27         bcf     _STATUS, IRP
28         btfsc   STK00, 0
29         bsf     _STATUS, IRP
30         endm
31
32 ; increment FSR, update IRP on bank crossings
33 ; FIXME: update IRP if FSR is reset to 0...
34 inc_fsr         macro
35         incf    _FSR, F
36         endm
37
38 ; dispatch according to gptr type
39 select_routine  macro   dataptr, codeptr
40         ; __data pointer tag: 0x00
41         xorlw   GPTRTAG_DATA
42         btfsc   _STATUS, Z
43         goto    dataptr
44         ; __code pointer tag: 0x80
45         xorlw   (GPTRTAG_DATA ^ GPTRTAG_CODE)
46         btfsc   _STATUS, Z
47         goto    codeptr
48         endm
49
50 check_data      macro   dataptr
51         ; __data pointer tag: 0x00
52         xorlw   GPTRTAG_DATA
53         btfsc   _STATUS, Z
54         goto    dataptr
55         endm
56